안녕하세요, 반갑습니다!
모바일 앱은 캘린더, 알람, 메모 등의 오프라인(Off-Line) 에서도 사용가능한 용도의 앱을 제외하면 서버와 통신 하는 앱을 만들게 됩니다.
또 요즘 같이 네트워크가 중요한 시대에는 거의 필수지요.
그래서 OKHttp, Retrofit, HttpUrlConnection 등의 라이브러리를 이용해서 통신을 합니다.
하지만 네트워크가 작동하는 방식 및 개념을 알아두면 더 좋겠지요?
네트워크 통신을 위한 모바일 앱을 만들기 전에, HTTP 등 네트워크의 개념에 대해 정리해봤습니다.
HTTP
개념 정리
1. HTTP란?
1989년 영국의 과학기술자인 팀 버너스 리(Tim Berners Lee),
우리가 너무도 잘 알고있는 월드 와이드 웹(Would Wide Web) 창립자입니다.
그리고 인터넷에서 웹 페이지를 서로 잘 주고받을 수 있도록 하나의 통신 규약을 설계합니다.
그것이 바로 HTTP, HyperText Transfer Protocol 입니다.
HTTP는 웹 페이지 즉, HyperText인 문서를 교환하기 위해 만들어진 통신 규약입니다.
그래서 웹 서버와 브라우저는 이 규약에 따라 데이터를 주고 받습니다.
(HyperText 는 HTML등으로 작성된 웹 문서 형식을 생각하시면 됩니다.)
일례로 이 규약은 인터넷 주소를 보면 바로 확인 할 수 있습니다.
이렇게 URI(Uniform Resource Identifier) 의 가장 앞에 있는 https://... 가 바로 이 규약입니다.
지금은 's' 가 가 끝에 붙어, 보안이 강화된 http 프로토콜이 많이 사용됩니다.
2. 프로토콜
인터넷을 사용하는 프로토콜에는 크게 TCP/IP 와 UDP 방식이 있습니다.
어떤 차이가 있는지 간단하게 핵심을 정리했습니다.
TCP/IP (Transmission Control Protocol / Internet Protocol)
아마 대부분의 웹 서비스에서는 TCP/IP 를 사용하지 않을까 싶습니다.
이 프로토콜은 전송할 때 오류가 나지 않도록 데이터를 분할해서 전송합니다.
그리고 상대방이 잘 받았는지 응답까지 받지요.
만약 응답이 없다면, 몇 차례의 확인도 합니다.
결국 응답을 받은 후에야 다음 데이터를 전송하는 방식입니다.
즉, TCP/IP는 안정성을 최우선으로 생각한 프로토콜입니다.
UDP (User Datagram Protocol)
UDP 는 TCP/IP 와는 다르게 정보를 받는 수신자를 절대 생각하지 않는 프로토콜입니다.
데이터즐 잘 받았는지, 오류는 없었는지 생각하지 않지요.
오직 일방적으로만 데이터를 전달하는 프로토콜입니다.
좀 이기적이죠?
그런데, 이 UDP 방식도 장점이 있습니다.
상대방으로부터 응답을 받지 않기 때문에, 속도는 TCP/IP 보다 훨씬 빠릅니다.
그래서 보통 유튜브등 스트리밍 서비스에서 많이 사용되는 프로토콜입니다.
3. 패킷
간단히 말해 패킷이란, 데이터가 전송되는 '실제 단위'입니다.
그래서 데이터를 전송하는 송신측과 데이터를 받는 수신측은 이 패킷을 '하나의 단위'로 취급, 처리합니다.
패킷은 하나의 데이터가 분할된 것이기 때문에 데이터 뿐만이 아니라 다양한 정보들이 꼬리표처럼 붙습니다.
그것들을 헤더 영역, 데이터 영역, 테일러 영역이라 합니다.
헤더 영역에는 수신측의 정보와 순서가,
데이터 영역에는 말 그대로 데이터가,
테일러 영역에는 오류 정보들이 기록되어 있습니다.
위와 같은 정보를 가지고 인터넷을 누빈 패킷은 수신측에서 다시 분해, 재조립되어 원래의 데이터 형태를 가지게 됩니다.
4. HTTP 요청방식
통신을 하기 위해서는 그 방법을 정확히 해야 합니다.
이를 HTTP 메소드라고 하는데요.
GET 과 POST 방식이 있습니다.
HTTP 메소드 | 내용 |
GET | 대개 정보를 조회하는 용도로 사용합니다. 헤더 영역에 데이터를 담아서 전송하며 URI 에 데이터를 포함해서 요청합니다. 그래서 데이터가 공개되며, 브라우저 주소창에 아래와 같이 모든 정보들이 노출됩니다. Ex) https://www.myblog.com/test/test.php?email=testemail@server.com |
POST | GET 과 반대로 URI 에 포함되지 않습니다. 데이터를 저장하거나 수정하기 위한 용도로 사용되기 때문에 드러나지 않습니다. 이때 데이터는 헤더 영역이 아닌 데이터 영역에 담겨 요청합니다. |
위와 같이 GET 또는 POST 로 데이터를 요청했다면,
서버는 다음과 같은 응답 코드를 전송합니다.
응답 코드 | 내용 |
1xx | 조건부 응답 코드 |
2xx | 성공 |
3xx | 리다이렉션 완료 |
4xx | 클라이언트의 요청 오류 |
5xx | 서버의 오류 |
모바일 앱을 만들면서 이정도 개념만 확실히 해도 특별한 어려움 없이 개발할 수 있는데요.
모바일 앱 개발역시 IT의 한 분야이기 때문에 네트워크에 대한 지식은 더 깊에 알수록 좋다고 생각해요.
그러니 같이 열심히 공부합시다!
감사합니다.