프로젝트 기간 중에 가장 궁금했던 부분이 서버와 통신이다. 개발을 시작한 지 얼마되지 않아, CS에 대한 지식도 많이 부족했기에 서버 통신이 신기하고 꼭 따로 공부해보고 싶었다. 기간이 정해진 프로젝트 안에서 아쉽게도 그 기회가 없었지만 아티클을 통해 한 번 공부해보고자 한다.
HTTP통신이란 클라이언트에서 서버로 요청을 보내고 서버가 응답하는 방식(
Request Response 구조)의 단방향 통신이다. 서버의 응답에 응답코드가 같이 전송되고 클라이언트는 응답 코드와 메세지 응답으로부터 오는 메세지 바디를 통해 요청 값을 전달 받는다.
그리고 무상태 프로토콜(Stateless)을 지향한다. 이말은 즉 서버가 클라이 언트의 연결/상태 정보를 보존하지 않는다는 것이다. 클라이언트가 이전 요청과 같은 데이터를 원해도 다시 서버에 동일한 요청을 보내야한다.
또 비연결성이라는 특징도 갖고 있다. 클라이언티가 서버에 요청을 하고 응답을 받으면 TCP/IP연결을 끊어 연결을 유지하지않느다. 이는 서버의 자원을 효율적으로 관리하고 많은 클라이언트의 요청을 빠르게 대응할 수 있다는 장점이 있다.
초기에는 HTML 파일 전송을 목적으로 만들어졌으나 지금은 JSON과 Image파일 등도 전송할 수 있다.
HTTP 통신은 클라이언트의 요청이 있을 때만 응답하여 처리한 후 연결을 끊어버리는 비연결성의 특징이 있다고 했는데 Socket 통신은 이를 보완하기 위해 생겨난 양방향 통신이다.
클라이언트와 서버가 실시간으로 데이터를 주고 받기 때문에 실시간 동영상 스트리밍, 라이브 방송, 주식, 온라인 게임과 같은 경우에 자주 사용된다.
Socket 통신은 HTTP 통신 처럼 무상태 프로토콜이 아닌 Stateful한 연결 상태를 유지시켜야한다. 따라서 HTTP보다 더 많은 리소스와 유지 보수, 비용이 든다. 하지만 실시간 정보의 빠른 업데이트와 기업 어플리케이ㅅㄴ 사용 시 방화벽을 재설정하지 않아도 되는 장점에 많이 사용한다.