본문 바로가기

Backend/spring

WEB/WAS, Servlet

WEB/WAS

Web Server

웹에서 대부분의 데이터는 HTTP 기반으로 동작한다.

정적HTML, CSS, JS, Image, Video 등등을 전송한다.

NGINX, APACHE로 대표된다.

WAS

HTTP 기반 동작

웹서버 + a

웹 서버는 정적 리소스만 제공하지만, WAS는 동적으로 어플리케이션 로직을 수행할 수 있다.

동적 HTML, HTTP API(JSON)제공 가능

서블릿, JSP, Spring MVC전달 가능

Tomcat등

차이는?

웹서버는 정적 리소스, WAS는 어플리케이션 로직이다.

차이가 다소 모호한 점도 있다.

보통 자바에서 서블릿 컨테이너 기능을 제공하면 WAS라고 한다.

WAS는 어플리케이션 코드를 실행하는데 더욱 특화되어 있다.

웹 시스템의 기본 구성 - WAS, DB

was는 static resource, application logic 둘 다 제공이 가능하다.

was 하나로 운영하는 경우, 너무 부하가 크다.

비싼 어플리케이션 로직이 정적 리소스 떄문에 수행이 어렵다.

정적 파일을 보내는 업무는 단순하다.

WAS는 잘 죽는다. 사람이 개발하니까.

만약 was가 죽으면 오류화면 조차도 제공이 안된다. -> 위험하다

개선이 필요!

웹 시스템의 기본 구성2 - WEB, WAS, DB

단순 정적 처리는 Web server에서 처리한다. WAS는 주요 로직을 처리하는데 집중할 수 있다.

정적 리소스가 많이 사용되면 Web 서버 증설

동적 리소스가 많이 사용되면 WAS 서버 증설

web server는 잘 죽지 않기 때문에 오류에도 유연하게 대처할 수 있다.

 

CDN: 정적리소스 캐시

B2B데이터 전달 서비스는 WAS만으로 구성하기도 한다.

Servlet

서버에서 처리하는 업무

HTML Form 데이터 전송을 했을 때 어떤 상황이 일어나는가?

만약 다른 도움을 받지 않고 처음부터 처리 서비스를 만들려면?

HTTP는 기본적으로 TCP/IP 연결을 한다.. http 메시지도 그냥 string이기 때문에 잘라서 parsing해야한다.

이러한 많은 전처리 처리 후 비즈니스 로직을 실행할 수 있다. 그 이후 응답 메시지도 직접 만들어야 한다.

servlet

너무 길고 복잡하다. 어떡하면 개발자가 비즈니스 로직 설계에 집중할 수 있을까?

=>서블릿이 등장했다. 나머지 작업들을 자동화 한다.

url이 호출되면 servlet code가 실행된다. 

HTTP Req를 편리하게 사용할 수 있는 HttpServletRequest

HTTP Res를 편리하게 사용할 수 있는 HttpServletResponse

덕분에 개발자는 HTTP 스펙을 편리하게 사용할 수 있다. (기본적인 부분은 알아야한다.)

HTTP 요청시

WAS는 Req, Res 객체를 새로 만들어서 서블릿 객체를 호출한다.

개발자는 Req 객체에서 HTTP 요청 정보를 편리하게 꺼내 사용

개발자는 Res 객체에서 HTTP 응답 정보를 편리하게 입력

WAS는 Res객체에 담긴 내용을 바탕으로 HTTP 응답 정보를 생성

servlet container

톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 한다.

서블릿 객체의 생성, 호출, 소멸을 관리한다.

서블릿 객체는 싱글톤으로 관리한다.

req, res객체는 각 요청마다 새로 생성하지만, 서블릿 객체는 매 요청마다 생성할 필요가 없다.

=> 하나만 생성해서 재사용 한다. 따라서 공유 변수(멤버 변수)를 사용할 때 조심해야 한다.

JSP도 서블릿으로 변환되어 사용된다.

동시 요청을 위한 멀티 쓰레드 처리 지원

 

 

 

'Backend > spring' 카테고리의 다른 글

멀티쓰레드, HTTP API/CSR/SSR  (0) 2022.02.17
빈 라이프사이클, AOP  (0) 2022.01.13
의존 자동 주입과 컴포넌트 스캔  (0) 2022.01.08
Spring DI  (0) 2022.01.08
Spring ApplicationContext, IoC, Singleton  (0) 2022.01.08