💻본 포스팅은 '스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 김영한'님의 강의를 듣고 작성되었습니다.
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard
[웹 - HTTP 기반]
- 클라이언트가 서버에 요청
- 서버가 클라이언트의 요청에 응답
- 이 모든 것들이 HTTP 프로토콜 기반 운영 된다.
- 즉 모든 것이 HTTP라는 뜻이고 HTTP 메시지에 모든 것을 전송한다는 의미다.
- HTML, TEXT
- IMAGE, 음성, 영상, 파일
- JSON, XML 등의 데이터 API
- HTTP로 거의 모든 형태의 데이터 전송이 가능하다.
- 서버간의 데이터를 주고 받을 때도 HTTP를 대부분 사용한다.
[웹 서버(Web Server)]
- 웹 서버 역시 HTTP 기반으로 동작한다.
- 정적 리소스를 제공하고 기타 부가 기능을 제공한다.
- 정적 파일 HTML, CSS, JS, 이미지, 영상 등...
- 예) NGINX, APACHE 등이 웹서버의 대표 예시다.
[웹 애플리케이션 서버(WAS - Web Application Server)]
- HTTP 기반으로 동작한다.
- 웹 서버 기능을 포함 한다.(정적 리소스를 제공해주는 기능을 웹 애플리케이션 서버도 제공 가능하다.)
- 프로그램 코드를 실행해서 애플리케이션 로직을 수행해준다.
- 동적 HTML, HTTP API(JSON, XML 등)
- 서블릿, JSP, 스프링MVC
- 예) 톰캣(Tomcat) Jetty, Undertow가 웹 애플리케이션 서버의 예시이다.
[웹 서버, 웹 애플리케이션 서버(WAS)의 차이]
웹 서버(Web Server) | 웹 애플리케이션 서버(WAS) |
정적 리소스(파일) | - 애플리케이션 로직 - 자바는 서브릿 컨테이너 기능을 제공하면 WAS라고 본다. - 애플리케이션 코드를 생행하는 것에 더 특화되어 있다. |
- 이때 사실 둘의 용어도 경계도 모호하다.
- 웹 서버도 프로그램을 실행하는 기능을 포함할 때도 있다.
- 웹 애플리케이션 서버도 웹 서버의 기능을 제공할 수 있다..
- 이러한 이유들로 경계가 모호하다고 한다.
[웹 시스템 구성]
[WAS + DB]
- WAS와 DB 만으로도 시스템 구성이 가능하다.
- WAS는 정적 리소스, 애플리케이션 로직을 모두 제공하기 때문에 WAS와 DB만으로도 시스템을 구성가능한 것이다.
- 그러나 WAS가 너무 많은 역할을 하게 되면 과부하가 일어나게 된다.
- 작은 규모에서만 사용할 것을 권장한다.
- 가장 비싼 애플리케이션 로직이 정적 리소스 때문에 수행이 어려워질 수 있다.
- WAS 장애가 일어나면 오류 화면도 노출이 불가능하다. (= HTML로 오류 화면을 띄우는 등의 대처가 불가하다는 말이다.)
[WebServer + WAS + DB]
- 정적 리소스
- 웹 서버가 처리
- 웹 서버는 애플리케이션 로직같이 동적인 처리가 필요하면?
- WAS에 요청을 위임한다.
- WAS
- 중요 애플리케이션 로직 처리를 전담한다.
[웹 시스템 구성 - Web Server + WAS + DB의 이점]
- 효율적으로 리소스 관리가 된다.
- 정적 리소스를 많이 사용한다면 Web Server만 증설해주면 된다.
- 애플리케이션 리소스가 많이 사용되면 WAS만 증설해주면 된다.
- 정적 리소스만 제공하는 웹 서버는 잘 죽지 않는다. 반면에 애플리케이션 로직이 동작하는 WAS는 잘 죽는다.
- WAS, DB의 장애가 일어날 때 웹 서버가 오류 화면을 제공 가능 하다.
- 오류화면 HTML을 설정해놓은 뒤 WAS, DB 오류 발생 시 이를 띄운다.
- 이때 화면 없이 데이터 API만 주고 받는 상황이라면 Web 서버가 따로 필요하지 않다.
[웹 서버란?]
https://developer.mozilla.org/ko/docs/Learn/Common_questions/What_is_a_web_server
'Back-End > Spring' 카테고리의 다른 글
[Spring MVC][웹 애플리케이션 이해] - 3. 동시 요청 - 멀티 쓰레드 (0) | 2022.03.01 |
---|---|
[Spring MVC][웹 애플리케이션 이해] - 2. 서블릿 (0) | 2022.02.28 |
[Spring MVC] - 들어가기에 앞서서... (0) | 2022.02.28 |
[Spring][스프링 기본편] - 27. 웹 스코프 (0) | 2022.02.07 |
[Spring][스프링 기본편] - 26. 빈 스코프 (0) | 2022.02.04 |