스프링 부트를 공부하면서 어디서 많이 들어본듯하면서 스쳐간 단어들이 많이 있다.
그 중 많이 언급된 단어로 '톰캣', '아파치' 등이 있다.
이것들이 뭔가 찾아보니 웹 서버니, 웹 애플리케이션 서버니 뭐니 비슷해보이는 용어들이 튀어나와서 이것들을 정리하는 글을 써보고자 한다.
1. Client VS Server
위 그림이 클라이언트-서버 모델의 구조이다.
그림처럼 클라이언트단에서 서버에게 자원(text, image, file, html 등)을 요청하면, 서버는 그에 대한 응답을 해주는 단순한 구조이다.
여기서 클라이언트-서버 간의 데이터의 전송을 웹(Web) 을 통하는 방식의 서버를 웹서버(Web Server) 라고 부른다.
2. Web Server
웹 서버의 개념은 다음과 같다.
🎈 웹 서버(Web Server)
웹 브라우저와 같은 클라이언트로부터 HTTP 요청을 받아들이고, HTML 문서와 같은 웹 페이지를 반환하는 컴퓨터 프로그램 [출처]
이처럼 웹서버는 http 포로토콜을 사용하여 요청된 자원을 반환하는 서버 프로그램을 말한다.
흔히 인터넷 브라우저를 통해 웹 페이지를 탐색하는 경우를 생각하면 편하다.
그런데 이러한 웹서버의 동작 방식에는 치명적인 한계가 있는데, 그것은 바로 웹서버는 정적 웹 페이지의 경우에서만 사용될 수 있다는 점이다.
🎈 정적 웹 페이지(Static Web Page)
서버에 저장된 그대로 웹 브라우저에 전달되는 웹 페이지 [출처]🎈 동적 웹 페이지(Dinamic Web Page)
정적 웹 페이지와 반대로, 실행시에 웹 페이지가 변환되어 전달되는 웹 페이지 [출처]
✨ 정적 웹 페이지
정적 웹의 예시로 회사 상품 소개 페이지 등을 들 수 있다.
만약 로그인 등의 기능을 포함하지 않으면서 상품을 설명하는 내용만 포함하는 단순한 페이지의 경우, 언제 누가 들어가든 미리 서버에 저장된 정보 그대로 클라이언트에게 전달할 것이다.
이처럼 저장된 정보 그대로 전달되는 웹 페이지를 정적 웹 페이지라 부른다.
정적 웹 페이지 예시
✨ 동적 웹 페이지
반대로 동적 웹의 예로 네이버 카페 페이지를 생각해보자.
로그인한 사용자에 따라서 공개되는 글의 목록이 달라질 것이고, 다른 사용자가 글을 올리는대로 실시간으로 페이지가 변환될 것이다.
웹 서버 소프트웨어는 이런 실시간으로 변화시키는 과정을 처리하지 못한다.
웹 서버의 대표적인 예로 아파치(Apache) 등이 있다.
3. 웹 컨테이너
웹 컨테이너는 위에서 설명한 동적 웹 페이지의 변환 과정을 처리해주는 소프트웨어다.
웹 서버가 클라이언트로 부터 동적 웹 페이지에 대한 요청을 받으면, 이를 웹 컨테이너에 전달하여 처리한다. 이후 변환 결과를 다시 받아오고 클라이언트에게 전달하는 방식으로 작동한다.
여기서 웹 컨테이너는 자바 서블릿, JSP에 대한 처리를 다룬다.
🎈 자바 서블릿(Java Servlet)
자바를 사용하여 웹 페이지를 동적으로 생성하는 기술 [출처]
🎈 JSP(Java Server Pages)
html 내부에 자바 코드를 삽입하여 동적 웹 페이지를 생성하는 스크립트 언어 [출처]
🎈 서블릿 VS JSP
서블릿: 자바 코드 안에서 html을 기술
JSP: HTML 문서 안에 자바 코드를 포함
4. WAS(Web Application Server)
웹 애플리케이션 서버는 웹 서버와 웹 컨테이너를 포함하는 개념이라고 볼 수 있다.
웹 서버와는 다르게 동적 웹 페이지를 처리할 수 있다는 장점을 가진다.
아래 이미지에서 웹 애플리케이션 서버의 구조를 보여준다. [이미지 출처]
WAS의 대표적인 예시로 톰캣(Tomcat) 등이 있다.
5. 웹 서버 VS WAS
위에서 살펴본 내용에 따르면 웹 애플리케이션 서버만으로도 정적 웹과 동적 웹 모두 처리할 수 있다.
그러나 WAS로 모든 웹 페이지를 처리하지 않고, 웹 서버와 WAS를 구별하고 함께 사용하는 모습을 많이 볼수 있다.
✨ 웹 서버와 WAS의 장단점
웹 서버 | WAS | |
---|---|---|
장점 | 트래픽이 적고 처리 속도가 빠름 | 동적 웹 페이지와 정적 웹 페이지 모두 처리 가능 |
단점 | 동적 웹 페이지를 처리하지 못함 | 높은 트래픽 발생, 부하가 많이 걸림 |
위의 장단점 덕분에, 일반석으로 웹 서버와 WAS를 분리하여 클라이언트의 요청을 효율적으로 처리한다.
'Back End > Spring && Spring Boot' 카테고리의 다른 글
[인프런 강의] 스프링 빈 설정하기 (0) | 2024.06.01 |
---|---|
[인프런강의] 스프링 웹 개발 기초(정적 컨텐츠, MVC, API) (0) | 2024.06.01 |
[인프런 강의] 3. 스프링 부트 프로젝트를 jar 파일로 빌드하고 실행하기 (0) | 2024.06.01 |
[인프런 강의] 2. View 설정하기 - Welcome Page With index.html, Templated View With Thymeleaf (0) | 2024.06.01 |
[인프런 강의] 1. 스프링 부트 시작하기 (0) | 2024.06.01 |