개발

[React.js, 스프링부트, AWS로 배우는 웹 개발] 2장 - 스프링부트 설정

jih0ssang 2024. 7. 19. 16:43

자바 서블릿(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 파일에 내장 톰캣이 있어 애플리케이션 실행 시 함께 실행 및 설정해 주어서 따로 톰캣을 설치할 필요가 없다.