우리는 앱에 필요한 정보를 하나씩 등록해주기도 합니다. 하지만 대부분 데이터 파일을 따로 구성하여 앱 내부에 둡니다. 그런데 이럴 경우 잦은 앱 업데이트가 필요하게 되서 서버에 데이터 파일을 보관하고 필요할 때마다 가져가는 식의 통신을 많이 사용합니다.
그리고 아래와 같이 네트워크 통신의 종류는 다양합니다.
앱과 서버 간 네트워크 통신이 이루어지는 방식은 크게 두 가지로 구분해 볼 수 있습니다. 하나는 TCP/UDP를 사용하는 소켓 방식의 연결성 통신, 또 다른 하나는 HTTP, HTTPS, SMTP 등의 프로토콜을 이용한 비연결성 통신입니다.
전구가 결합하는 소켓의 개념을 따온 소켓 방식의 연결은 일단 앱과 서버가 연결되면 한쪽에서 명시적으로 끊을 때까지 게속해서 연결을 유지하는 방식입니다.
그래서 연결이 이루어진 단계, 연결이 유지되고 있는 단계, 연결이 종료된 단계 등으로 연결 상태를 각각 구분할 수 있어서 각 단계에 따라 적절하게 대응하는 방식으로 프로그래밍 할 수 있습니다.
**장점 ** : 연결을 종료하기 전까지는 한번 연결된 통신을 계속 유지하므로 재연결할 필요 없이 원하는 만크 빠르게 메시지를 주고받을 수 있다.
단점 : 연결 정보를 유지하기 위해 네트워크 대역을 많이 소모하고, 서버 부하도 크다는 단점 때문에 네트워크 환경이 고르지 않은 모바일 서비스에서는 메신저나 화상 통화, RPG 게임 등에서만 제한적으로 사용하기도 한다.
소켓 방식의 두가지 종류 : 1) TCP 연결 2) UDP 연결
비연결 지향 통신은 TCP나 UDP를 이용한 소켓방식과는 달리, HTTP 등의 프로토콜을 사용하여 메시지를 주고받는 방식을 가리킵니다. HTTP/HTTPS 프로토콜이 있는데, 웹 서비스에서 주로 사용된다.
비연결이여서 아예 연결을 하지 않는다는 것이 아니라, 연결을 유지하지 않는 다는 것 뿐이다.
단점 : 매번 요청할 때마다 연결해야 하므로 소켓 방식에 비해 상대적으로 데이터를 주고받는 속도에 제약이 있다.
장점 : 필요할 때만 연결하여 요청을 처리한 후 연결을 종료하므로 필요 없는 네트워크 대역 소모를 줄일 수 있고, 서버 부하도 낮출 수 있어서 모바일 서비스에서도 많이 사용된다.
동일한 HTTP/HTTPS 프로토콜을 사용하지만 일반 웹 페이지와 달리, 데이터만을 주고받을 수 있도록 설계된 모듈을 웹 서비스(Web Service)라고 부른다.
웹서비스의 종류
일반적으로 널리 알려진 HTTP, HTTPS SMTP 등의 프로토콜을 통해 양쪽에서 XML 형태의 메시지를 주고받도록 구현된 프로토콜이다. SOAP는 웹 서비스에서 메시지를 전달할 때 몇 가지 형태의 메시지 패턴 중에서 원격 프로시저 호출이라고 불리는 클라이언트-서버 구조의 메시지 패턴을 많이 사용하며, 이때 통신 구조는 Envelope/Header/Body의 세 가지 영역으로 구분할 수 있습니다.
간단하게 SOAP 방식의 네트워크 통신이 가지는 장점은 아래와 같다.
반면에 SOAP는 XML 포맷을 사용하므로 CORBA 같은 미들웨어 기술과 비교해볼 때 상대적으로 느립니다. 물론 전송할 메시지가 비교적 큰 양일때만 이슈가 되므로 일반적으로 데이터 교환에는 크게 문제가 되지 않는다.
RESTful의 근간이 되는 REST(Representational State Transfer)는 (World Wide Web, WWW)과 같은 분산 하이퍼 미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식입니다. 엄격한 기준에서 봤을 때 REST는 실질적인 네트워크 프로토콜은 아니다. 웹 형식을 빌어 데이터를 전송하되, SOAP나 쿠키 등 별도의 전송 프로토콜 없이 전송하기 위해 만들어진 간단한 형식의 인터페이스를 말한다.
정말로 간단해서 Envelpe/Header/Body 메시지 구조를 구현해야 하는 SOAP와 달리 REST는 HTTP 프로토콜을 바탕으로 필요한 데이터를 별도의 규약 없이 주고받기만 하면 됩니다. 이런 REST 원리를 따라 구현된 시스템을 RESTful 이라는 용어로 지칭합니다.
RESTful 시스템은 서버에게 요청하려는 정보를 URL를 통해서 타나탭니다. 요청 정보는 URL 단위마다 슬래시(/)로 구분되는데, 예를 들어 127.0.0.1 아이피에 해당하는 서버에서 영화 정보를 얻고자 할때는 다음과 같은 형식으로 URI를 구성하면 됩니다.
http://127.0.0.1/movie
물론 서버측에서 제공하는 웹 서비스나 콘텐츠의 성격에 따라 URI 구성은 모두 달라질 수 있습니다. 주고받는 데이터의 형식도 달리집니다. 그래서 먼저 서버에서 요구하는 형식에 따라 요청 규격을 정확하게 맞춰야 합니다.
위 테이블은 서울시 열린 데이터광장에서 제공하는 RESTful API 명세이다.