시작하며 HTTP(HyperText Transfer Protocol) 통신은 클라이언트와 서버 간 데이터를 주고 받기 위한 프로토콜이다. 다시 말하면, HTTP 통신 자체는 어떤 형식의 데이터를 보낼지 미리 정의해 놓는 방식일 뿐이다. 따라서 클라이언트와 서버간 HTTP 통신이 일어나기 위해서는 데이터를 주고 받기 위한 여러 기술이 필요하다. 이번 글에서는 HTTP 통신이 일어나기 위해 내부적으로 어떤 일이 일어나는지를 정리해본다. IP 레이어 IP 레이어란 무엇인가? 먼저 클라이언트와 서버를 생각해보자. 클라이언트와 서버는 컴퓨터일 뿐이며, 데이터를 요청하는 쪽이 클라이언트 데이터를 보내는 쪽이 서버가 된다. 따라서 이 둘간의 통신을 위해서는, 두 컴퓨터가 연결되기 위한 주소값이 필요하다. 이러한 역할..
Network
HTTP 응답 메세지의 구성 HTTP 응답 메세지는 다음과 같은 형태로 구성된다. [HTTP 버전] [응답 상태 코드] [상태 메세지] [헤더] [빈 줄] [메세지 바디] 각 항목에 대한 설명은 다음과 같다. HTTP 버전: HTTP의 버전을 나타낸다. HTTP/0.9, HTTP/1.0, HTTP/1.1, HTTP/2.0 등이 될 수 있다. 응답 상태 코드: 100번대부터 500번대의 응답 코드를 나타낸다. 예를 들어 200이라면, 요청이 성공했다는 것을 뜻한다. 상태 메세지: 상태 메세지를 나타낸다. 예를 들어 상태 코드가 200번이라면 OK 같은 메세지를 전송할 수 있다. 상태 메세지는 없을 수도 있다. 헤더: 헤더에는 메세지 바디를 통해 전달할 콘텐츠의 MIME 타입(Content-Type), 콘텐..
UUID란 무엇인가? UUID(Universally Unique IDentifier)란 네트워크 상에서 중복되지 않는 ID를 만들기 위한 표준 규약이다. 로컬에서 ID를 관리한다면 어떤 아이디들이 생성되었는지 확인한 후 중복을 체크하는 것이 가능하지만, 네트워크 상에서는 이야기가 다르다. 네트워크는 ID를 관리하는 중앙 관리자가 없기 때문에 중복 확인이 불가능하다. 따라서 네트워크 상에서 중복되지 않는 ID를 만들려면 중복되는 확률이 0에 가까운, 매우 낮은 확률을 가지는 ID를 만드는 방법을 사용해야 한다. "중복되는 확률이 0에 가까운, 매우 낮은 확률을 가지는 ID를 만드는" 방법을 표준화 한 것이 바로 UUID이다. UUID는 계속해서 생성해도 중복이 생길 가능성이 0에 가깝다. UUID의 구성 ..
환경 세팅 Apollo GraphQL을 사용하기 위해서는 gradle에 설정과 GraphQL에서 사용할 수 있는 schema를 Apollo GraphQL을 사용해 받아올 수 있도록 하는 작업을 해야 한다. Gradle 파일 세팅 1. 모듈 수준의 Gradle에 plugin을 적용한다. plugins { .. id("com.apollographql.apollo3").version("3.1.0") } 2. 모듈 수준의 Gradle의 android 블록에 패키지 이름을 세팅한다. android { .. apollo { packageName.set("com.simpli.graphql") } } 3. 모듈 수준의 main 디렉토리에 graphql 디렉토리를 만든 후 2에서 설정한 패키지명의 폴더들을 만든다. 4...
GraphQL Client Library가 필요한 이유 클라이언트에서 GraphQL을 사용하면 서버에서 원하는 데이터를 원하는 필드들만 가져올 수 있다는 장점이 있다. 하지만 클라이언트에서 GraphQL을 사용하기 위해서는 JSON 형태의 데이터를 다시 클라이언트에서 사용할 수 있는 객체로 바꾸기 위해 추가적인 작업을 해주어야 한다. 또한 클라이언트에서 GraphQL 쿼리를 작성하기 위해서 쿼리가 자동완성이 되지 않는다면 모든 필드를 일일히 찾아보고 작성해야 한다. 이러한 한계를 극복하기 위해 나온 것이 바로 GraphQL Client Library이다. GraphQL Client Library는 다양한 종류가 있으며 Kotlin 에서 사용 가능한 GraphQL Client Library의 목록은 아래 ..