백 엔드는 모든 클라이언트, 즉 사용자들의 컴퓨터에 전달 되어야 할 정보를 총괄하는 역할을 하며, 프론트 엔드의 코드는 각 클라이언트들에게 보여지는 서비스의 표면적인 구동을 담당한다.
HTTP 통신이란, 브라우저와 웹 서버가 통신할 수 있도록 통신 규칙과 절차를 규정한 통신 프로토콜이다. HTTP 규칙을 따르겠다고 합의된 이상, 적절한 순서와 절차를 통해 원하는 파일과 데이터를 송수신 할 수 있도록 마련된 것이다.
HTTP 요청은 기본적으로 요청과 응답(Request&Response)로 이뤄진다. 하나의 컴퓨터에서 다른 쪽으로 특정한 정보 혹은 파일을 요청하고, 그 신호를 인식한 상대 쪽 컴퓨터에서는 그에 대응하는 응답을 돌려주는 방식이다.
많은 경우에 있어 합리적인 통신 수단이지만, 그만큼 한계도 명확하 방식이 된다.
왜냐?
두 컴퓨터간의 연결을 지속하는 방식 대신 단발적으로 요청이 수신 되었을 때만 연결을 허가하고 응답까지 마무리 된 후에는 연결을 해제하는 방식인 만큼, 소규모 정보 전달이 다수 발생할 경우 계속해서 연결을 생성하고 해제하는 과정을 거쳐야하기 때문에 굉장한 리소스 낭비가 발생한다.
여기서 데이터 베이스 Pooling 방식을 떠올릴 수 있다.
데이터베이스 커넥션 풀링은 데이터 베이스와의 연결을 여러 개 생성해두고, 필요할 때마다 이를 재사용하는 방식이므로 연결 생성과 해제에 소요되는 리소스와 시간을 줄일 수 있다.
이러한 HTTP 단점을 보완하기 위해 소켓 통신이 사용된다. 소켓 통신은 간단하게 클라이언트와 서버, 두 컴퓨터가 특정한 Port를 통해 실시간으로, 양방향 통신을** 가능하게 만든 통신이다.
정확히는 두 컴퓨터가 서로에게 단방향 통신을 주고 받음으로써 양방향 통신과 동일하게 구동하는 것이지만, 기능적으로 두 컴퓨터는 동등한 위치에서 통신을 주고받게 된다.
즉, 웹 서버 ↔ 웹 브라우저 간의 서로 실시간 메시지를 교환하는데에 사용한다.
HTTP 요청에서 연결을 Socket으로 업그레이드 하고자 한다는 요청을 주고 받음으로써 시작된다. 두 컴퓨터간의 상호 동의가 있다는 가정 하에 진행되는 연결로써, 소켓을 여는 작업과 그 열린 소켓에 연결을 하는 작업을 동반하게 된다. 즉, 최초의 Handshake 방식의 요청과 응답이 한 차례 오가면, 자유로운 WebSocket 통신이 열리게 되는 것이다. 매번 메시지 전송 시에 새롭게 연결을 맺을 필요가 없어 빠르고 효율적이다.
HTTP 통신 만으로는 불가능했던 것을 가능하게 만드는 것에 있다.