1. 웹, 웹서버, 와스
웹 : World Wide Web, 줄여서 www 또는 web 이라고도 하며, 많은 사람들이 인터넷과 웹을 동일한 것으로 착각하는데, 웹은 네트워크의 애플리케이션 계층에서 동작하는 하나의 애플리케이션이며 인터넷 위에서 동작한다. 웹은 주소에 해당하는 URI, 통신규칙에 해당하는 HTTP, HTML을 비롯한 콘텐츠들인 Resource로 구성된, 인터넷 상에서 정보를 검색할 수 있는 시스템이며 브라우저라고 하는 클라이언트를 통해 웹사이트를 조회할 수 있다.
서버: 클라이언트로부터 요청을 받아 그에 따른 적절한 응답을 해주는 소프트웨어 (또는 컴퓨터).
그러면 위의 내용을 조합하면,
Web Server : 웹브라우저와 같은 클라이언트로부터, HTTP 요청을 받아 HTML, CSS, JS, 이미지(JPEG, PNG) 등의 정적 리소스를 제공하는 소프트웨어라고 할 수 있다.
유명한 웹서버로는 Apache http server, Nginx, IIS 등이 있으며, 웹서버는 미리 특정 폴더(디렉토리)에 브라우저가 요청할 것 같은 HTML, css, js 및 각종 이미지 등의 파일들을 구비해두고 요청이 오면 그에 해당하는 파일을 바로 꺼내어 준다는 점에서, 이미 완성된 제품들을 진열대에 늘여놓고 고객이 원할 때마다 바로 내어놓는 편의점에 비유할 수 있다.
하지만, 이는 DB 조회나 각 사용자만의 개별적인 콘텐츠는 제공할 수 없다는 문제가 있다. 이를 해결하기 위해 Web Application Server, WAS가 나왔다.
WAS는 웹서버가 하지못했던, DB조회나 다양한 로직 처리, 동적인 컨텐츠를 제공할 수 있는 소프트웨어로, 톰캣, JBoss 등이 유명하다. 웹서버가 편의점이라고 앞서 예를 들었는데, WAS는 손님의 주문에 맞게 즉각 요리를 내어오는 식당이라고 할 수 있다.
2. 둘을 구분짓는 이유
대부분의 WAS는 웹서버를 포함하고 있어서, 클라이언트로부터 HTTP 요청을 받고 동적 컨텐츠 뿐만 아니라 정적 컨텐츠도 제공할 수 있다. 하지만 다음과 같은 이유로 WAS만 쓰지 않고 웹서버도 함께 쓴다.
1. 기능 분할 : 클라이언트 - 웹서버 - WAS 로 두어 정적 컨텐츠는 웹서버가, 동적 컨텐츠가 필요하면 뒤로 넘겨 WAS가 담당하게 하여 책임을 구분하고 성능을 높인다. 하지만 최신 WAS (ex, 톰캣 5.5 이후부터는) 크게 성능 차이가 없다고 한다
2. 로드 밸런싱 : 여러 WAS를 두어 부하를 분산시키고, 한 WAS에서 발생한 장애를 극복하거나 새로운 버전을 차례대로 빌드하여 무중단 서비스도 가능하며, 각각의 WAS를 다른 언어로 된 애플리케이션을 구동시킬 수도 있다.
3. 보안(reverse proxy) : 프록시는 대신하다라는 뜻으로, 실제 DB접근이나 비즈니스 로직을 처리하는 WAS를 대신하여 웹서버를 앞에 둠으로써 WAS를 외부에 노출시키지 않아 보안을 높일 수 있다. forward proxy는 서버에 방문하는 클라이언트가 자기 주소를 감추는 것이고, reverse proxy는 반대로 클라이언트에게 WAS 주소를 감추는 것이다.
4. 캐싱 : 파일 전송은 처리량이 크므로, 웹서버의 디스크나 메모리에 한번 WAS에서 처리한 컨텐츠를 저장해두어 똑같은 요청이 왔을 때 WAS를 거치지 않게 되므로 WAS의 메모리를 다른 동적인 처리에 쓰여 성능을 높일 수 있다.
3. 두 웹서버의 특징
- Apache HTTP server : 다중 프로세스(쓰레드) 방식으로, 클라이언트가 요청할 때마다 프로세스나 쓰레드가 생성되어 커넥션을 형성하며 커넥션을 돌면서 처리를 하게 된다. 하지만 이는 컨텍스트 스위칭이 일어나 CPU와 메모리의 자원소모가 크며, 모바일 기기의 증가로 커넥션이 10,000개 이상일 때 뻗어버리는 현상(C10K)으로 Nginx에게 점유율 1위를 내어주게 되었다. 하지만 다양하고 검증된 기능이 필요하다면 아파치를 쓴다.
- Nginx: 엔진엑스 라고 읽으며, C10K문제를 해결하기 위해, 이벤트기반 방식으로 클라이언트를 한줄에 세워서 한명씩 처리하는 경량화된 방식이다. (물론 무거운 작업은 따로 두어 처리한다.) CPU의 코어수만큼 처리하여 자원 부담이 아파치만큼 큰 편은 아니다.
참고자료
'지식 한 조각 🍰 > 10분 테코톡 정리' 카테고리의 다른 글
Redis (0) | 2023.03.19 |
---|---|
Git 브랜칭 전략 (0) | 2023.02.10 |
CSR vs SSR vs SSG (0) | 2023.01.29 |