- 아래 출처를 참고하여 작성하였습니다.
- 개인 공부 목적으로 작성하였습니다.
1. spring-boot-starter-web
- SpringBoot의 spring-boot-starter-web 모듈에는
embedded tomcat WAS
가 포함되어 있습니다. - 기본적으로 SpringBoot에서 사용하는 Apache Tomcat은
Apache Web Server
+
Tomcat Server
로 구성되어 있습니다.- SpringBoot에서는 Apache Web Server + Tomcat Server를 보통
Apache Tomcat
이라고 많이 부릅니다.
- SpringBoot에서는 Apache Web Server + Tomcat Server를 보통
2. Apache Web Server와 Tomact Server의 연동 Flow
- 그림 출처: https://m.blog.naver.com/tmondev/220731906490
- 위 그림은 Apache Web Server와 Tomcat Server의 연동을 나타냅니다.
- 클라이언트에서 서버의 80번 포트로 동적 자원(ex. 로그인) 요청을 보냅니다.
- Apache Web Server에서는 정적 자원 요청이 아니므로 Tomcat Server로 AJP Connector를 이용하여 요청을 전달합니다.
- 이 때 AJP(Apache JServ Protocol)을 이용하는데 이 프로토콜은 Web Server에서 받은 요청을 WAS로 전달해주는 프로토콜입니다.
- 해당 프로토콜은 Apache Web Server, Tomcat, JBOSS 등 다양한 WAS에서 지원합니다.
- Tomcat Server는 받은 요청을 요청에 맞는 서블릿을 생성하여 처리하고 Web Server에 결과를 돌려줍니다.
- 서블릿 생성은 SpringBoot의 경우입니다.
- Apache Web Server는 Tomcat으로부터 받은 데이터를 다시 클라이언트에게 전달합니다.
3. Web Server와 WAS
3-1. Web Server
- 클라이언트로부터 HTTP 요청을 받아 정적인 컨텐츠(
.html
,.jpg
,.css
등)를 제공하는 서버를 의미합니다. - 즉, Web Server는 서버가 가지고 있는 특정 자원만을 반환하는 역할을 합니다.
3-2. WAS
- WAS는 Web Server와 달리 클라이언트로부터
HTTP 요청
을 받아 동적인 콘텐츠를 반환하는 서버 역할을 합니다.- 여기서 동적인 컨텐츠란 특정 자원이 아닌 다양한 로직, DB 조회 등의 작업이 진행된 후 반환하는 콘텐츠를 의미합니다.
3-3. Web Server, WAS를 같이 사용하는 이유
- 가장 일반적인 이유로는 서버의 부하 방지가 있습니다.
- WAS는 사용자의 요청을 다양한 로직과 DB 조회를 처리해야 하기 때문에 상당한 컴퓨팅 자원을 소모하게 됩니다. 그렇기 때문에 단순 정적 자원 반환 같은 경우에는 Web Server가 처리하게 하여 부하를 분산시킬 수 있기 때문에 Web Server와 WAS를 같이 사용합니다.
- 그 외에도 Web Server를 Load balancer로 사용하고 여러 대의 WAS를 두어 부하를 분산하는 등의 이유가 있습니다.
출처
'SpringBoot > SpringBoot' 카테고리의 다른 글
spring-boot-starter, parent (0) | 2021.09.16 |
---|