자바 서블릿(Java Servlet) >> DispatcherServlet 대체
[Spring Boot 사용 전]
자바 서블릿(Java Servlet)
- 대표 서블릿 컨테이너 ( Apache Tomcat, Jetty, JBoss 등)
- 클라이언트의 요청을 처리하고 서버 측에서 동적인 콘텐츠를 생성
- 웹 요청을 기반으로 각 알맞은 비즈니스 로직을 호출하는 역할
서블릿 기반의 서버를 사용하려면 개발자는 javax.servlet.http.HttpServlet을 상속받는 서브 클래스를 작성해야 한다.
그러면 서블릿 컨테이너가 서블릿 서브 클래스를 실행시킨다.
http 요청이 서버로 전달되면 웹 서버는 받은 요청을 해석해 해당되는 서블릿 클래스를 실행한다.
package com.example.Demo;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Hello extends HttpServlet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
// parameter 해석
String name = request.getParameter("name");
// business logic 실행
process(name);
// response 구축
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.print("<html>");
}
private void process(String name) {
// business logic
}
}
1. HttpServlet을 상속받는 서브 클래스 Hello를 만들고 doGet() 메서드를 구현해야 한다.
2. 매개변수로 넘어오는 HttpServletRequest에서 우리가 원하는 정보(name)를 추출한다.
3. 비즈니스 로직에 파라미터(name)로 넘겨주고 실행한다.
4. HttpServletResponse에는 우리가 반환할 정보를 담는다.
[Spring Boot 사용 후]
DispatcherServlet
서블릿 서브 클래스를 이미 구현하여 따로 작성하지 않아도 된다.
대신 스프링 부트가 제공하는 어노테이션과 인터페이스를 이용해 스프링이 비즈니스 로직을 이해할 수 있도록 내부 기능을 구현하면 된다.
[스프링 부트를 이용한 비즈니스 로직 클래스]
@RestController
@RequestMapping("/api/v1")
public class HelloController {
@GetMapping(value = "healthcheck") // path 설정, GET 메서드 사용
public String process(@RequestParam String name) {
// 비즈니스 로직
return "test" + name;
}
}
@RestController
- HttpServlet 상속 받는 것을 대신해 사용한 어노테이션
- 웹에서 들어온 HTTP 요청을 어떤 비즈니스 로직으로 보낼 지 결정
- @Controller + @ResponseBody 합친 것
@RequestMapping
- ex_ @RequestMapping("/api/v1")
- /api/v1으로 들어오는 요청만 받는 클래스로 경로를 한정할 수 있음
@GetMapping
- ex_ @GetMapping(value = "healthcheck")
@PostMapping , @PutMapping, @DeleteMapping, @PatchMapping
- 각 메서드에 대한 요청을 작성할 때 사용하는 어노테이션
스프링 프레임워크 설정
Project
- 프로젝트의 빌드 자동화 툴 선택
- 빌드 툴에는 Maven, Gradle이 있음
SpringBoot
- 프로젝트의 스프링 부트 버전
- SNAPSHOT은 정식 릴리즈되지 않은 개발 버전. 지속적으로 업데이트 됨
- 2.5.1 (2: 주 버전, 5: 부 버전, 1: 패치 버전)
Project Metadata
- Group과 Artifact는 이후 프로젝트 배포할 떄 무슨 프로젝트인지 설명할 때 쓰임
Packaging
- Jar와 War가 있음
- Jar는 내장 tomcat이 있고 War는 없어 외장으로 설치 필요
Dependencies
- 추가된 Dependencies는 build.gradle 파일에 포함됨.
- Spring Web, Spring Data JPA, H2 Database, Lombok 라이브러리를 추가함
스프링 부트 특성
스프링 부트를 이용하면 스탠드얼론 프로덕션 급의 스프링 기반 애플리케이션을 쉽게 구동할 수 있다.
스탠드얼론이란, 애플리케이션 실행 시 다른 애플리케이션이 필요하지 않다는 뜻이다.
스탠드얼론이 아닌 애플리케이션의 예는 대표적으로 아파치 톰캣과 같이 웹 서버/서블릿 컨테이너가 필요한 경우다.
이런 경우 자바 애플리케이션을 컴파일해서 톰캣이 이해할 수 있는 구조의 WAR 파일로 압축하고
이 WAR파일을 톰캣에 배포해야 한다.
스프링 부트는 JAR 파일에 내장 톰캣이 있어 애플리케이션 실행 시 함께 실행 및 설정해 주어서 따로 톰캣을 설치할 필요가 없다.
'개발' 카테고리의 다른 글
[React.js, 스프링부트, AWS로 배우는 웹 개발] 2장 - 레이어드 아키텍처 패턴, REST API 스타일 (0) | 2024.07.20 |
---|---|
[React.js, 스프링부트, AWS로 배우는 웹 개발] 2장 - 스프링부트 실행 (0) | 2024.07.20 |
[React.js, 스프링부트, AWS로 배우는 웹 개발] 2장 - 의존성 주입 (0) | 2024.07.18 |
[React.js, 스프링부트, AWS로 배우는 웹 개발] 1장 - HTTP 메서드 (0) | 2024.07.16 |
[React.js, 스프링부트, AWS로 배우는 웹 개발] 1장 - 어노테이션 (0) | 2024.07.16 |