클라이언트와 서버의 통신 방식은 크게 HTTP 통신과 Socket 통신으로 나눌 수 있음
이 둘의 가장 큰 차이점은 접속을 유지하는지의 여부
📂 HTTP
- 비연결 지향통신: 클라이언트의 요청이 있으면 서버가 해당 페이지에 대한 자료를 전송하고 곧바로 연결을 끊음(ex. 사이트에 접속하면 처음에 로딩될때만 서버와 연결이 돼있고 그 후에 별다른 요청을 하지 않는 이상 서버와의 연결이 끊긴 상태로 유지)
- 서버의 부하를 줄여서 다른 접속을 원활하게 처리하기 위해서!
- 단방향 통신: 클라이언트의 요청이 반드시 선행되어야함, 서버가 먼저 정보를 전송할 수 없음.
- 한 번 정보를 주고 받으면 연결을 끊음 따라서 사용자가 누군지 인식할 수 없음 → 쿠키, 토큰 등을 사용하는 이유
- 앱에서는 HTTP를 훨씬 많이 사용함
📂 Socket
- 연결 지향통신: 클라이언트와 서버가 연결이 되면 둘 중 하나가 강제로 접속을 해제하기 전까지는 접속이 유지됨. 그렇기 때문에 동시에 접속할 수 있는 클라이언트의 수가 제한될 수 밖에 없음.
- 양방향 통신: 양방향으로 연결이 되기 때문에 서버가 클라이언트에게 먼저 정보를 줄 수 있음(ex. 메신저)
- 주로 채팅, 온라인 게임, 실시간 동영상 강좌 등에 사용됨. 이런 경우가 아니라면 HTTP를 활용하는 것이 더 효율적임
- Request와 Response가 많아지는 경우, 채팅을 많이 하면 과도하게 요청이 많아질 수 있고 이에 따라 속도가 느려질 수 있음 → 이런 경우 소켓으로 네트워크 작업을 하게 됨
- 뒤로가기를 누르지 않는 이상(채팅방에서 나가지 않는 이상) 네트워크와 클라이언트의 연결이 끊어지지 않음
- 계속 연결이 되어있기 때문에 HTTP보다 리소스 부하가 상대적으로 높음
cf. HTTPS
- Hypertext Transfer Protocol Secure
- 일반 HTTP 프로토콜의 문제점은 서버에서부터 클라이언트로 전송되는 정보가 암호화되지 않는다는 점
- 이에 SSL을 이용하여 문제를 해결함 ➡️ 서버와 브라우저 사이에 안전하게 암호화된 연결을 만들 수 있게 해주고 민감한 정보가 도난당하는 것을 방지해줌
- TCP와 http 사이에서 작용, 데이터를 암호화 한 후 전송함
- QueryString, HTTP Body등을 암호화함