스프링 웹 MVC에 대해서 알아보기 이전에 웹이 어떻게 돌아가는지, 어떤 구성으로 되어있는지 알고 넘어가야 한다.
웹은 HTTP 를 기반으로 구성되어 있다.
HTTP 메세지에 모든 데이터들을 담아서 전송한다.
HTML, TEXT, 이미지, 음성, 영상, 파일 등등 전부 다 이에 해당된다.
또한, 서버 간에 데이터를 주고 받을 때도 대부분 HTTP를 사용한다고 생각하면 된다.
즉, 웹의 기본은 HTTP에 대해서 알고 있어야 한다.
HTTP 에 대해서 자세히 알아보고 싶은 사람들은 위의 게시글과 관련 다른 게시글들을 봤으면 한다.
웹 서버(Web Server)
- HTTP 기반으로 동작
- 정적 리소스 제공, 기타 부가 기능
- 정적(파일) HTML, CSS, JS, 이미지, 영상
- ex) NGINX, APACHE
웹 어플리케이션 서버(Web Application Server)
- HTTP 기반으로 동작
- 웹 서버 기능 포함 + (정적 리소스 제공 가능)
- 프로그램 코드를 실행해서 어플리케이션 로직 실행
- 동적 HTML, HTTP API(JSON)
- 서블릿, JSP, 스프링 MVC
- ex) 톰캣(Tomcat), Jetty, Undertow
웹 서버, 웹 어플리케이션 서버의 차이점
→ 웹 서버는 정적 리소스(파일), WAS는 어플리케이션 로직을 실행
→ 사실은, 둘의 용어와 경계가 모두 모호함
( 웹 서버도 프로그램을 실행하는 기능을 포함하기도 함, WAS도 웹 서버 기능을 제공함 )
→ 자바는 서블릿 컨테이너 기능을 제공하면 WAS이다. ( WAS는 어플리케이션 코드를 실행하는데 더 특화되어 있음)
[ 서블릿과 서블릿 컨테이너에 관한 내용은 따로 게시글을 통해 자세히 설명하겠다. ]
웹 시스템 구성
- WAS, DB
- WEB, WAS, DB
WAS, DB 만으로 시스템 구성이 가능하다.
하지만, 보통은 WEB, WAS, DB로 시스템 구성을 하게 된다.
해당 구성들에 대해서 설명하면서 그 이유를 덧붙히겠다.
WAS, DB
WAS는 정적 리소스, 어플리케이션 로직 모두 제공이 가능하다.
때문에 이론상 WAS와 DB만으로 시스템 구성이 가능하게 되는데, 여기에는 문제점이 있다.
WAS가 너무 많은 역할을 담당하다 보니, 이로 인한 서버 과부하가 우려될 수 있다.
또한, 가장 비싼 어플리케이션 로직이 정적 리소스 때문에 수행이 어려울 수 있게 되어 낭비가 될 수 있다.
게다가, WAS가 장애 발생시 오류 화면 조차도 노출 불가능하게 된다.
WEB, WAS, DB
위의 문제들을 해결하는게 해당 웹 시스템 구성이다.
정적 리소스는 Web Server가 처리한다.
웹 서버는 어플리케이션 로직과 같은 동적인 처리가 필요하면 WAS에 요청을 위임한다.
이렇게 되면, WAS는 중요한 어플리케이션 로직 처리를 전담하게 된다.
→ 효율적인 리소스 관리가 가능하게 된다.
만약, 정적 리소스가 많이 사용되면 Web Server를 증설하면 되고,
어플리케이션 리소스가 많이 사용되면 WAS를 증설하면 된다.
정적 리소스만 제공하는 웹 서버는 잘 죽지 않는 반면에, 어플리케이션 로직을 동작하는 WAS는 잘 죽는다.
때문에, WAS나 DB가 다운되었을 때, Web Server가 사용자에게 오류 화면을 제공할 수 있게 된다.
정리
웹 시스템 구성은 Web Server, WAS, DB로 구성되며, 해당 구성을 통해서 얻는 이점들이 많다.
간단하게 보면, 웹 서버는 정적인 리소스 이용, 웹 어플리케이션 서버는 동적인 리소스 이용이라고 보면 될 것이다.
웹에 대해서 이해하기 위해선 HTTP에 대한 이해가 우선시 되어야 할 것을 명심하면 좋겠다.
다음 시간에는 서블릿과 서블릿 컨테이너에 대해서 설명하겠다.
'Web' 카테고리의 다른 글
CSR(Client Side Rendering), SSR(Server Side Rendering) (0) | 2023.08.04 |
---|---|
쓰레드(Threads), 멀티 쓰레드, 쓰레드 풀 (0) | 2023.08.04 |
서블릿(Servlet), 서블릿 컨테이너(Servlet Container) (0) | 2023.08.04 |
internet-network(IP, TCP, UDP, PORT, DNS) (0) | 2023.06.23 |