웹은 기본적으로 HTTP 프로토콜을 기반으로 한다.
HTTP 프로토콜을 통해 모든것을 담아서 전송한다.
-> HTML, TEXT, IMAGE, 음성, 영상, 파일,
-> JSON, XML (As A API, 서버 간 데이터 송수신 관련)
거의 모든 형태의 데이터의 전송이 가능하다고 보면 된다!
웹서버
HTTP를 기반으로 동작하고
정적 리소스를 제공하는 주기능에 더해 일부 부가기능을 제공한다
정적 파일 HTML, CSS, JS, 이미지, 영상을 있는 그대로 띄운다!
예) NGINX, APACHE
웹 애플리케이션 서버(WAS-Web Application Server)
동일하게 HTTP를 기반으로 동작하고 웹서버 기능(정적 리소스 제공)에 더해 프로그램 코드를 실행해서 애플리케이션 로직을 수행한다
- 동적 HTML(HTML을 렌더링하여 특정 정보를 포함시켜서 동적으로 띄우는 역할 - 로그인시 로그아웃 포함 페이지 아닌경우 다른 요소)
- HTTP API(JSON) -> 즉 데이터를 가공해서 출력함
- 서블릿, JSP, 스프링 MVC
예) 톰캣, Jetty, Undertow
웹 서버와 웹 애플리케이션 서버의 차이?
- 웹 서버는 정적 리소스(파일)을 그대로 띄우는 역할 담당
- WAS의 경우 애플리케이션 로직을 녹여서 띄우는 역할
사실은 둘 간의 경계가 모호한 점이 있음
언어 별로 차이가 있다, 자바의 경우 서블릿 컨테이너 기능을 제공하면 WAS로 취급
- 서블릿 없이 자바 코드를 실행하는 서버 프레임워크 O
WAS는 애플리케이션 코드를 실행하는데 더 특화되어있음
웹 시스템 구성 - WAS, DB
WAS, DB만으로 시스템의 구성이 가능하다.
WAS는 정적 리소스 + 애플리케이션 로직 모두 제공이 가능하기 때문이다
그러나, WAS가 너무 많은 역할을 담당하게 되고 서버의 과부하 우려가 존재
-> 가장 비용이 많이 들어가는 애플리케이션 로직 처리가 정적 리소스 때문에 처리가 어려울 수 있음
-> WAS 장애시 서버가 아예 죽어버리기 때문에 오류 화면도 노출이 불가능해짐.
-> WAS는 애플리케이션 로직 오류를 포함해 여러가지 이유때문에 생각보다 잘 죽는다.
HTML, CSS, JS, 이미지 등을 처리하는 비용은 얼마 되지 않음.
다시 말하지만 애플리케이션 로직 처리하는데 들어가는 비용이 가장 비쌈.
그래서 다음과 같은 구성을 주로 사용함.
웹 시스템 구성 - WEB, WAS, DB
- 정적 리소스 : 웹서버에 의해 처리
- 웹 서버는 애플리케이션 로직 같은 동적인 처리가 필요하면 WAS에 요청을 위임
- WAS는 중요한 애플리케이션 로직 처리 전담
- 이 구성이 가장 일반적인 구성
- WAS가 죽어도 Web Server에서 충분히 에러메시지만 띄울 수 있음
- 정적 리소스만 제공하는 웹 서버는 잘 죽지 않음 -> WAS 는 잘 죽음 그래서 문제생기면 Web Server가 오류화면 띄움
효율적인 리소스 관리
- 정적 리소스가 많이 사용되면 Web 서버 증설
- 애플리케이션 리소스가 많이 사용되면 WAS 증설
물론 실제는 이것보다는 더 복잡함
'스프링 공부 (인프런 김영한 선생님) > 스프링 MVC 1편' 카테고리의 다른 글
[스프링 웹 MVC 1편] 6. HTTP 요청 데이터 (0) | 2023.05.20 |
---|---|
[스프링 웹 MVC 1편] 5. HttpServletRequest - 개요/기본사용법 (0) | 2023.05.19 |
[스프링 웹 MVC 1편] 4. Hello 서블릿 (0) | 2023.05.17 |
[스프링 웹 MVC 1편] 3. 동시요청 - 멀티스레드 (0) | 2023.05.17 |
[스프링 웹 MVC 1편] 2. 서블릿 / 서블릿 컨테이너 (0) | 2023.05.16 |