일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Spring
- 웹 서버
- 가상화
- spring boot
- ORM
- 스프링
- 컨테이너
- 영속성 컨텍스트
- Java
- 백엔드
- 스프링 배치
- CS
- 도커
- 자바
- HTTP
- 스프링 부트
- 스프링 시큐리티
- Container
- vm
- CI/CD
- virtualization
- web server
- mysql
- computer science
- 배포
- spring cloud
- Spring Security
- JPA
- 데이터베이스
- spring batch
- Today
- Total
개발 일기
[WEB] 웹 어플리케이션 서버(WAS)와 웹 서버 비교 본문
스프링 생태계를 공부하다가 스프링 부트의 기능 중에 내장 서버라는 것이 있었는데 웹 애플리케이션을 실행하기 위해 필요한 Tomcat, Jetty등과 같은 웹 어플리케이션 서버 (WAS - Web Application Server)를 애플리케이션 내부에 포함하는 기능이다. 스프링 부트는 이러한 내장 서버를 통해 별도로 서버를 설치하고 구성하는 과정 없이, 애플리케이션 빌드 파일(.jar) 실행 만으로 웹 서비스를 배포할 수 있는 환경을 제공하게 된다고 했다. 이때 웹 어플리케이션 서버에 대해 잘 알지 못해서 웹 서버와 다른 것인지 정리해보고자 한다.
또한 공부를 하면서 내가 이전에 창업 팀에서 활동하면서 배포했던 방식이 얼마나 단순하고 일차원적인 배포였는지를 알 수 있었다.
나의 첫 배포는?
전체적인 그림을 그리기 위해 우아한테크 [10분 테코톡] 알리의 Web Server vs WAS 유투브 강의를 봤다. 여기 나온 발표자 분께서 WAS와 Web Server를 공부하게 된 계기가 나와 아주 유사했다.
정적 페이지(Static Pages)와 동적 페이지(Dynamic Pages)
웹 서버와 WAS를 비교하기전에 정적 페이지와 동적 페이지에 대해 알고가자. 아래 사진이 잘 설명해줄 수 있을 것 같다.
정적 페이지(Static Pages)
정의
웹 서버에 이미 저장된 정적 파일(.html, .jpeg, .css 등)을 클라이언트에게 전송하는 웹 페이지다.
설명
- 사용자는 서버에 저장된 데이터가 변경되지 않는 한 고정된 웹 페이지를 보게 된다.
- 따라서 모든 사용자는 같은/동일한 결과의 웹 페이지를 서버에 요청하고 응답 받게 된다.
- 예) 주로 변하지 않는 정보를 제공하는 웹사이트, 문서나 마케팅 웹사이트, 포트폴리오 사이트 등
동적 페이지(Dynamic Pages)
정의
서버에 저장된 HTML 파일이 그대로 브라우저에 나오는 것이 아닌, 사용자의 요청(인자)에 따라 데이터를 가공하여 동적으로 HTML을 생성하고 클라이언트에게 전달하는 웹 페이지이다.
설명
- 사용자의 요청에 맞춰 데이터베이스(DB)에서 정보를 가져와 가공하여 페이지를 완성한다.
- WAS로 전달하여 WAS가 처리한 결과를 다시 클라이언트에 전달한다.
- 사용자는 상황, 시간, 요청 등에 따라 달라지는 웹 페이지를 보게 된다.
- 예) 온라인 쇼핑몰, 사용자 상호작용이 많은 포럼, 실시간 정보가 필요한 관리 대시보드 등
이제 웹 서버와 WAS에 대해서 알아볼 수 있다.
웹 서버 (Web Server) 란?
HTTP 또는 HTTPS를 통해 웹 브라우저에서 요청하는 HTML 문서나 오브젝트(이미지 파일 등)을 전송해주는 서비스 프로그램이다.
클라이언트(사용자)가 웹 브라우저에서 어떠한 페이지 요청을 하면 웹 서버에서 그 요청을 받아 정적 컨텐츠를 제공하는 서버이다.
대표적인 예로 Nginx, Apache, IIS 등이 있다.
이제 이런 생각이 들 것 같다. 정적 페이지를 요청이 들어오면 웹 서버가 처리하는 것은 알겠다. 그러면 만약 동적 페이지를 반환해야하는 경우는 웹 서버가 처리안하면 누가 처리하지? 라는 생각이다. 그것이 바로 웹 어플리케이션 서버(WAS)이다.
동적인 요청(DB 조회)이 들어오면 정적인 요청만 처리하는 웹 서버에서는 처리가 불가능하므로 컨테이너(Container)에 보내주는 역할을 한다. 이때 WAS는 Servlet, JSB 구동환경을 제공해주기 때문에 웹 컨테이너 혹은 서블릿 컨테이너라고도 불리는데 나온김에 웹 컨테이너에 대해 간단히 알아보자.
웹 컨테이너 (Web Container)란?
- JSP와 서블릿을 이용하는 웹 응용 프로그램은 자바 언어를 이용해서 작성할 수 있는데,
이때 JSP와 서블릿을 실행시킬 수 있는 소프트웨어를 웹 컨테이너(Web Container) 혹은 서블릿 컨테이너(Servlet Container)라고 한다. - 웹 서버에서 JSP를 요청(보내면)하면 톰캣에서는 JSP 엔진을 통해 JSP 파일을 서블릿으로 변환하여 컴파일을 수행하고, 서블릿의 수행결과를 웹 서버에서 전달하게 된다.
- 서블릿의 생명 주기를 관리하고, 서블릿 객체의 생성 및 관리, 요청 및 응답을 처리하는 것과 같은 여러 기능을 수행
여기서 나오는 Servlet과 JSP에 대해서는 따로 정리를 해보아야할 것 같다.
웹 어플리케이션 서버 (Web Application Server - WAS) 란?
웹 어플리케이션 서버는 웹 서버에서 요청을 받고, 이를 웹 컨테이너로 보내 로직(알고리즘, DB 연결 등)을 수행하고 그 결과를 다시 웹 서버로 보내 최종적으로 클라이언트에게 보내주는 것
WAS는 웹 서버와 웹 컨테이너가 합쳐진 형태로서, 웹 서버 단독으로는 처리할 수 없는 데이터베이스 조회나 다양한 로직 처리가 필요한 동적 컨텐츠를 제공한다. 덕분에 사용자의 다양한 요구에 맞춰 웹 서비스를 제공할 수 있다.
웹 서버에서 정적 컨텐츠를 처리하기 때문에 WAS 단에서는 복잡하고 다양한 로직 처리에 집중할 수 있게 됐다.
대표적인 예로 Apache Tomcat, WebSphere, Jetty, Web Logi, Jeus 등이 있다.
대부분의 사람들이 WAS = Web Server + Web Container라고 한다.
왜 굳이 분리한걸까? 웹 서버와 WAS를 동시에 사용했을 때 장점
이제 드는 의문은 내가 배포했을때처럼 WAS 그자체로도 정적 컨테츠를 제공할 수 있는데 왜 굳이 웹 서버와 WAS를 분리하여 정적 컨텐츠와 동적 컨텐츠를 따로 처리하도록 해야하는 것인지에 대해 의문이 들었다.
- 서버 부하 방지(자원 이용 효율성)
: 웹 애플리케이션 서버(WAS)는 주로 DB 조회나 복잡한 로직 처리 같은 동적 컨텐츠를 처리하는 데 집중하는 반면, 웹 서버는 정적 컨텐츠를 처리하는 역할을 한다. 이렇게 웹 컨테이너는 자신의 주요 로직에 집중할 수 있게 되고, 역할을 분리함으로써 서버의 부하를 효과적으로 관리할 수 있습니다. WAS가 정적 컨텐츠까지 처리하게 되면, 과부하로 인해 동적 컨텐츠 처리 속도가 느려지고, 이는 페이지의 노출 시간 증가로 이어질 수 있다. - 로드 밸런싱 및 장애 극복(유지 보수성)
: 여러 대의 웹 컨테이너를 연결해 로드 밸런싱 용도로 사용할 수 있다. Fail over, Fail back 처리에 유리하다. 대용량 웹 어플리케이션의 경우, Web Server와 WAS를 분리하여 웹 서버는 여러대의 WAS의 Health-Check하고 장애가 발생한 WAS를 감지하면 요청을 다른 정상적으로 작동 중인 WAS로 전달 다른 WAS를 사용하게 만듦으로써 무중단 운영이 가능하다. - 보안 강화
: 리버스 프록시를 통해 실제 서버를 외부에 노출하지 않을 수 있다.
즉, 요청을 보내면 웹 서버를 거쳐서 오고 직접적으로 클라이언트가 WAS와 연결되지 않기 때문에 보안이 강화될 수 있다.
등등의 이유가 존재한다.
WAS만으로도 서비스가 불가능한 것은 아니다. 서비스의 확장성, 안정성을 고려한다면 앞단에 웹 서버를 두는게 유리할 것이다.
이렇게 내가 배포를 하는 과정에 있어서 정말 아무것도 모르고 했구나 싶고 서비스의 규모가 큰 플젝에 참여해 앞에 웹 서버를 두고 그 뒤에 WAS를 두는 식으로 한번 아키텍처를 구성해보고 싶다.
또한 Servlet과 JSP에 대한 추가적인 공부를 해보고싶다.
'Computer Science' 카테고리의 다른 글
[Computer Science] 라이브러리와 프레임워크 차이 (0) | 2024.09.05 |
---|