웹 애플리케이션 서버 (WAS) 개요

HUSII·2023년 1월 19일
0

스프링 MVC

목록 보기
1/5

Web Server
HTTP 기반으로 동작
정적 리소스 제공

WAS(Web Application Server)
HTTP 기반으로 동작
웹 서버 기능 포함 + (정적 리소스)
ex) 톰캣

Web Server vs WAS
웹 서버는 정적 리소스, WAS는 애플리케이션 로직
WAS는 애플리케이션 코드를 실행하는데 더 특화되어있다.

웹 시스템 구성 - WAS, DB
WAS가 너무 많은 역할을 담당한다.
-> 서버 과부하 우려
WAS 장애시 오류 화면도 노출 불가능

웹 시스템 구성 - WEB, WAS, DB
정적 리소스는 웹 서버가 처리
웹 서버는 애플리케이션 로직같은 동적 처리가 필요하면 WAS에 요청을 위임
WAS는 중요한 애플리케이션 로직 처리 전담
-> 효율적인 리소스 관리
-> WAS, DB 장애시 웹 서버가 오류 화면 제공 가능


서블릿

HTML FORM을 통해서 데이터를 전송하면
서버에서 요청을 받아서 처리하는데,
의미있는 비즈니스 로직을 제외하고 처리해줘야 할것이 너무 많았다.
-> 의미있는 비즈니스 로직을 제외하고 나머지 로직을 처리해주는 서블릿이 등장

서블릿의 특징
urlPatterns(/hello)의 URL이 호출되면 서블릿 코드가 실행
HTTP 요청 정보를 편리하게 사용할 수 있는 HttpServletRequest
HTTP 요청 정보를 편리하게 사용할 수 있는 HttpServletResponse
개발자는 HTTP 스펙을 매우 편리하게 사용

@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response){
      //애플리케이션 로직
}
}

HttpServletRequest의 부가 기능
임시 저장소 기능
해당 HTTP 요청이 시작부터 끝날 때 까지 유지되는 임시 저장소 기능

  • 저장: request.setAttribute(name, value)
  • 조회: request.getAttribute(name)

세션 관리 기능 request.getSession(create: true)


서블릿 HTTP 요청, 응답 흐름
HTTP 요청시
1. WAS는 Request, Response 객체를 새로 만들어서 서블릿 객체 호출
2. 개발자는 Request 객체에서 HTTP 요청 정보를 편리하게 꺼내서 사용
3. 개발자는 Response 객체에 HTTP 응답 정보를 편리하게 입력
4. WAS는 Response 객체에 담겨있는 내용으로 HTTP 응답 정보를 생성


서블릿을 통해 HTTP 요청, 응답을 편리하게 관리하게 됐지만, 응답을 작성할때 HTML FORM으로 작성했는데, 이를 작성하는 방식이 좀 귀찮았다.

PrintWriter w = response.getWriter();
w.write("<html>");
w.write("<head>");
w.write(" <meta charset=\"UTF-8\">");
w.write(" <title>Title</title>");

'''

위와 같이 String으로 HTML FORM을 작성하기 때문에 디버그하기도 힘들었다고 한다.
이를 해결하기 위해 나온 템플릿 엔진이 있다.


JSP

JSP 템플릿 엔진의 등장으로, 기존의 String 방식이 아닌 HTML 방식으로 작성할 수 있게 되면서, HTML FORM 작성이 조금더 편리해졌다.


서블릿으로 개발할 때는 뷰 화면을 위한 HTML을 만드는 작업이 자바 코드에 섞여서 지저분하고 복잡했다.
JSP를 사용한 덕분에 뷰를 생성하는 HTML 작업을 깔끔하게 가져가고, 중간중간 동적으로 변경이 필요한 부분에만 자바 코드를 적용했다.

서블릿과 JSP를 사용하면서 조금더 편리하게 관리할 수 있지만, 한가지 문제점이 있었다.
바로 JSP가 너무 많은 역할을 한다는 점이다.
자바 코드, 데이터를 조회하는 리포지토리 등등 다양한 코드가 모두 JSP에 노출되어 있다.

이를 해결하기 위해 MVC 패턴이 등장하였다.


MVC(Model View Controller)

MVC 패턴은 하나의 서블릿이나, JSP로 처리하던 것을 컨트롤러와 뷰라는 영역으로 서로 역할을 나눈 것을 말한다. 웹 애플리케이션은 보통 이 MVC 패턴을 사용한다.

컨트롤러: HTTP 요청을 받아서 파라미터를 검증하고, 비즈니스 로직을 실행한다. 그리고 뷰에 전달할 결과 데이터를 조회해서 모델에 담는다.
모델: 뷰에 출력할 데이터를 담아둔다. 뷰가 필요한 데이터를 모두 모델에 담아서 전달해주는 덕분에 뷰는 비즈니스 로직이나 데이터 접근을 몰라도 되고, 화면을 렌더링 하는 일에 집중할 수 있다.
뷰: 모델에 담겨있는 데이터를 사용해서 화면을 그리는 일에 집중한다.


그리고 요즘에는 JSP를 쓰지않고, 조금더 편리해진 Thymeleaf(타임리프) 템플릿 엔진을 쓴다고 한다.

이 뒤부터는 스프링 MVC에 대해 더 알아볼 예정이다.

profile
공부하다가 생긴 궁금한 것들을 정리하는 공간

0개의 댓글