본문 바로가기
개념/etc

Servlet & Spring MVC

by Hwanii_ 2023. 10. 27.
728x90

1. Servlet 탄생

 

초기의 웹 서비스는 정적 페이지만 제공 했다.

(클라이언트 >>> 요청 >>> Web Server (정적 컨텐츠) >>> 응답 >>> 클라이언트)

 

그런데 사용자들마다 각 요청에 대해 다른 응답을 해줘야 하는 상황이 발생 했다.

 

그래서, WAS (Web Application Server) 의 개념이 추가 되었다.

WAS 로직을 수행 해서 동적 컨텐츠를 생성 할 수 있게 되었다.

(클라이언트 >>> 요청 >>> Web Server >>> WAS (동적 컨텐츠) >>> Web Server >>> 응답 >>> 클라이언트)

 

 

 

2. Servlet 이란 ?

 

동적 컨텐츠를 만드는 데에 사용 되는 자바 기반의 웹 어플리케이션 프로그래밍 기술

혹은

그러한 기술에서 사용 되는 객체

 

즉, WAS 내에서 동적 컨텐츠를 만드는데 사용 되는 기술 또는 객체 이름 이다.

 

 

 

3. Servlet이 동적 컨텐츠를 만드는 방법 ?

 

 

 

 

service() 메서드로 ServletRequest를 비즈니스 로직으로 처리후 ServletResponse 로 응답 한다.

 

이전의 웹 요청은 통신 규약 (프로토콜) 이 다양 했었지만, 현재는 표준 웹 프로토콜이 HTTP 이기 때문에,

 

서블릿 파일 내부에 HTTP를 사용한 요청과 응답을 다루는 HTTPServlet이 구현 되어 있다.

 

 

Servlet 인터페이스를 구현받은 추상 클래스인 GenericServlet 이 존재 하고,

 

다시 이 추상 클래스를 상속받은 HttpServlet 이다.

 

 

그래서 서블릿 클래스를 생성 하면 이 HttpServlet 추상 클래스를 상속받아 사용 되고 있는 것을 알 수 있었다.

 

 

@WebServlet() 이라는 어노테이션으로 web.xml 파일에 등록한 서블릿 파일의 이름을 간단히 등록 하여 설정 할 수 있다.

 

get / post / put 요청이 들어오면 해당 메서드 내부의 로직을 수행 해서 response 해주도록 할 수 있다.

 

그런데 이렇게 Servlet을 통해서 웹 어플리케이션을 구현 하는것은,

많은 수동 설정과 복잡 할 수도 있는 코드 및 복잡 할 수도 있는 작업을 요구 했다.

 

 

 

4. Spring MVC

 

Spring 프레임워크는 자체적으로 서블릿이 내장 되어 있다.

서블릿 기반의 웹 애플리케이션을 구축 하기 위해 여러 기능을 제공 하고,

가장 인기 있는 방식이 Spring MVC 이다.

 

기존에 힘들게 HTTP 요청을 받는 설정을 했던 것과 달리,

간단하게 어노테이션을 사용해서 URL 매핑이 가능한것이 많은 장점들 중에 하나 이다.

 

코드의 가독성이 증가하고, 유지 보수가 향상된 개발을 할 수 있게 된다.

 

더보기

 

 

요청을 처리 하기 위해 request로 부터 get 메서드를 사용 하고 substring 메서드를 사용 했다.

 

 

Action 인터페이스를 생성 해서 execute() 라는 메서드를 정의 했다.

 

해당 메서드는 HTTP 요청을 받기 위한 메서드 이고,

반환 타입으로 ActionForward 라는 클래스를 만들어 사용 했다.

 

 

실제로 어떤 특정 요청이 들어왔을 때, View 페이지를 반환해주기 위한 기능을 하는 클래스 이다.

 

 

ActionForward 클래스는 redirect 유무와 실제 경로 (View 페이지) 를 설정 하기 위한 클래스 이다.

 

위와 같이 복잡한 설정과 코드를, 아래와 같이 간단하게 처리 할 수 있다.

 

 

반응형

'개념 > etc' 카테고리의 다른 글

Quartz / Crontab / Cron 표현식  (1) 2024.01.24
SOA / ESB / OSGI  (0) 2024.01.24
WebService / SOAP / WSDL / EAI  (0) 2024.01.24
Ajax  (1) 2023.10.25
RESTful API  (0) 2023.10.25