Spring

QuickStart 스프링부트_Chapter01_스프링 부트 시작하기

강용민 2022. 12. 1. 14:48

1.1 스프링 프레임워크

프레임워크란??

프레임워크는 소프트웨어 관점에서 해석해보면 애플리케이션의 아키텍처에 해당하는 골격 코드라고 할 수 있다. 애플리케이션을 개발할 때 가장 중요한 것이 애플리케이션 전체 구조를 결정하는 아키텍처다. 그런데 이를 프레임워크로부터 빌려쓰면, 개발자는 비즌니스 로직 개발에만 집중할 수 있게된다.

 

1.2 스프링 부트의 등장

스프링 부트의 등장 배경

스프링 프레임워크가 처음 등장했을 때와는 달리 현재의 스프링은 엔터프라이즈 시스템 개발에 필요한 모든 분야를 지원하는 하나의 플랫폼으로 자리잡았다.

하지만 이렇게 다양한 프레임워크와 기술들을 지원하면서 동시에 개발자가 처리해야하는 설정도 많아지고 복잡해졌고, 이를 설정하는 데 많은 시간과 노력을 들일 수 밖에 없다. 이런 문제들을 해결하기 위해 스프링 부트라는 서브 프로젝트가 진행되었다.

스프링 부트는 커맨드 도구를 제공하고 톰캣이나 제티 같은 내장 서버를 통해 복잡한 설정과 실행을 간소화했다.

 

스프링 부트의 장점

  • 라이브러리 관리 자동화
    • 기존에 메이븐이나 그레들을 이용해서 라이브러리 의존성을 관리해왔다. 하지만 스프링 부트에서는 스타터라는 것을 이용해 특정 기능에 필요한 라이브러리 의존성을 더욱 간단히 처리할 수 있다.
  • 설정의 자동화
    • 프로젝트에 추가된 라이브러리를 기반으로 실행에 필요한 환경을 자동으로 설정해준다. 예를 들어, 타임리프를 이용하기 위해서 라이브러리들을 추가하면 스프링 부트가 이 라이브러리들을 인지해서 관련된 스프링 설정을 자동으로 처리해준다.
  • 라이브러리 버전 자동 관리
    • 스프링 부트 버전에 해당하는 스프링 라이브러리뿐만 아니라 서드파티 라이브러리들도 호환되는 버전으로 다운로드 해준다.
  • 테스트 환경과 내장 톰캣
    • JUnit을 비롯한 테스트 관련 라이브러리들이 기본적으로 포함되어 있다. 또한 톰캣 서버를 내장하고 있어 추가적인 서버를 설정하지 않아도 된다.
  • 독립적으로 실행 가능한 JAR
    • 애플리케이션을 실제 운영 서버에 배포하기 위해서는 패키징을 해야 한다. 이때 웹 프로젝트라면 WAR파일로 패키징해야 하지만 스프링 부트는 독립적으로 실행 가능한 애플리케이션을 빠르게 개발하는 것을 목표로 하기 때문에 웹 애플리케이션도 WAR가 아닌 JAR 파일로 패키징하여 사용할 수 있다.

 

3.2 스프링 부트 프로젝트 구조 및 실행

스프링 부트 프로젝트 구조

스프링 부트로 프로젝트를 생성하면 기본적으로 제공되는 디렉터리나 파일들이 있는데, 이 디렉터리와 파일들은 정해진 컨벤션을 따르고 있기 때문에 마음대로 변경할 수 없다. 따라서 프로젝트를 시작하기 전에 각 디렉터리와 파일의 위치와 의미를 이해하는 것은 매우 중요하다.

기존 Spring프로젝트와 차이점중에 하나는 resources부분이다.각 폴더와 파일은 다음과 같이 의미된다.

  • static 폴더 : HTML 같은 정적인 웹리소스 저장
  • templates 폴더 : 타입리프 같은 템플릿 기반의 웹리소스 저장
  • application.properties : 프로젝트 전체에서 사용할 프로퍼티 정보들을 저장

 

스프링 부트 애플리케이션 실행

SpringApplication의 WebApplicationType은 총 3가지로 나뉜다.

  • NONE : 일반 자바 애플리케이션
  • SERVLET : 기존 스프링 MVC를 기반으로한 웹 애플리케이션
  • REACTIVE : 비동기 처리와 논블로킹 입출력을 지원하는 웹플럭스(WebFlux)를 지원

이는 main()에서 자바 소스로 처리할 수 도있고, application.properties에서 "spring.main.web-application-type=none"으로 설정해 처리할 수 있다. 이때 자바 소스보다는 application.properties설정이 우선순위가 높다.

 

톰캣 서버 포트 변경하기

스프링 부트가 제공하는 내장 톰캣 서버의 포트를 변경하고 싶으면 application.properties 파일에 서버 포트 관련 프로퍼티를 추가하면 된다.  설정은 다음과 같이 한다.

 

application.properties

##webApplication Type Setting
spring.main.web-application-type=servlet

##server setting
server.port = 8000

application.properties에 설정한 프로퍼티 정보들은 실제 해당 Properties 객체의 Setter 메소드가 호출되어 의존성 주입된다.

 

3.4 웹 애플리케이션 작성하기

컨트롤러 빈 등록

 

BoardController.java

package com.rubypaper.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class BoardController {
    public BoardController(){
        System.out.println("===> BoardController 생성");
    }

    @GetMapping("/hello")
    public String hello(String name){
        return "Hello :" + name;
    }
}

@RestContoller는 REST 방식의 응답을 처리하는 컨트롤러를 구현할 수 있다.