24DAY 백엔드 - 22DAY 웹 소켓
1. 웹 소켓
웹소켓은 HTTP의 문제를 해결해주는 약속입니다. HTTP에서 원리적으로 해결할 수 없었던 문제는 “클라이언트의 요청이 없음에도, 그 다음 서버로부터 응답을 받는 상황”이었는데요. 웹소켓은 HTTP가 해결할 수 없었던 이 문제를 해결하는 새로운 약속이었습니다. 즉, 브라우저가 서버에 데이터를 요청하고 서버가 브라우저에 데이터를 보내기 위해 별다른 제약이 없습니다.
웹소켓에서는 서버와 브라우저 사이에 양방향 소통이 가능합니다. 브라우저는 서버가 직접 보내는 데이터를 받아들일 수 있고, 사용자가 다른 웹사이트로 이동하지 않아도 최신 데이터가 적용된 웹을 볼 수 있게 해줍니다. 웹페이지를 ‘새로고침’하거나 다른 주소로 이동할 때 덧붙인 부가 정보를 통해서만 새로운 데이터를 제공하는 웹서비스 환경의 빗장을 본질적으로 풀어준 셈입니다.
웹소켓 약속 하에서는 실시간 소통이 편안해지게 됩니다. 웹에서도 채팅이나 게임, 실시간 주식 차트와 같은 실시간이 요구되는 응용프로그램의 개발을 한층 효과적으로 구현할 수 있게 되었습니다. 가상화폐의 분산화 기술의 핵심도 web socket으로 구현할 수 있다는 점 언급해두고 싶습니다.
2. Nginx
Nginx는 웹서버 입니다. 간단하게 웹서버는 클라이언트로 부터 요청이 발생했을 때 요청에 맞는 정적파일을 보내 주는 역할을 합니다. Nginx는 규모가 작은 서비스이면서 정적 데이터 처리가 많은 서비스에 적합합니다.
Nginx는 일반적인 HTTP의 웹서버의 역할 외에도 proxy, reverse proxy 서버의 역할 또한 가능합니다. 양대산맥인 Apache와 두드러지게 다른 특징을 가지고 있는데요. Apache는 MPM(multi Processing Module: 다중 처리 모듈) 방식을 사용하는 반면, Nginx는 Event driven 방식을 통해 구동 됩니다. Event driven은 Node.js에서도 사용하는 방식이죠? (자세한 내용이 궁금하다면 여기 를 방문해 주세요) 이러한 장점은 메모리를 좀 더 효율적으로 운용할 수 있는 결과를 가져옵니다.
3. apache
http 웹 서버는 http 요청을 처리할 수 있는 웹서버이고, 아파치 http 서버는 http 요청을 처리하는 웹 서버인 것입니다. 클라이언트가 GET,POST,DELETE등등의 메소드를 이용해 요청을 하면 이 프로그램이 어떤 결과를 돌려주는 기능을 합니다. 아파치는 웹서버입니다.
4. caddy
Caddy는 Go로 작성된 웹 서버입니다. Caddy가 아직까지도 다른 웹 서버와 가장 크게 차별화되는 점은 Automatic HTTPS 기능인데, 도메인 이름만 지정하면 HTTPS를 켜고, 모든 HTTP 요청을 HTTPS로 리디렉트하고, Let’s Encrypt로 인증서까지 발급해줍니다. 여기에 덧붙여 HTTP/2 지원, 정적 파일 서버, 리버스 프록시, 룰 기반 리디렉트 설정 등 웹 서버가 갖춰야 할 기능은 모두 갖추고 있지만, 라이브러리 의존성이 아예 없어 단일 바이너리로 실행이 됩니다. 심지어 libc 의존성도 없어 Alpine Linux와 같은 환경에서도 바로 돌릴 수 있습니다