본문 바로가기
Spring

[Spring 공식문서] Spring Boot. Using Spring Boot

by 매트(Mat) 2024. 5. 14.

공식문서 사이트: https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using

이미 스프링과 스프링 부트의 개념은 강의를 통해 학습한 상태이다. 그런데도 공식문서를 훓어보는 이유는 그래도 내가 해당 기술을 사용하고 있다면 공식문서 정도는 볼 줄 알아야 하지 않을까 하는 마음에 보기 시작한다.

하지만 내용이 진짜 너무나도 많기 때문에 다 볼 순 없을 것 같고.. 필요한 부분만 정리해서 블로그에 포스팅하려고 한다.

Using Spring Boot

Build Systems

빌드 시스템은 의존성 관리(Dependency Management)를 지원하고 Maven Central 저장소에 있는 라이브러리를 사용할 수 있는 것이 가장 좋다. 대표적으로 2가지가 있다.

  • Maven
  • Gradle

Maven Central이란 오픈 소스 라이브러리를 호스팅하는 저장소라 할 수 있다.

Dependency Management

스프링 부트는 빌드 설정에서 의존성에 대한 버전을 명시하지 않아도 알아서 관리해준다. 즉, 스프링 부트를 버전업하면 나머지 의존성도 스프링 부트의 버전에 맞게 같이 버전업된다.

  • 물론 직접 버전을 명시할 수도 있지만 버전을 명시하지 않는 것이 권장이다.
  • 또한 의존성 관리를 해주지 않는 라이브러리가 있는데 이 떄는 버전을 명시해야 한다.

Starters

Starters는 애플리케이션에 포함할 수 있는 편리한 의존성들의 세트이다.

예를 들어 spring-boot-starter-web 을 의존성 관리에 포함시키면 웹에 필요한 모든 관련된 의존성들을 자동으로 포함시킨다.

  • spring-boot-starter-json
  • spring-boot-starter-tomcat
  • spring-boot-starter-webmvc

이름에서 보았듯이 spring-boot-starter-* 패턴은 의존성과 설정을 자동화해준다.

스프링 부트를 사용하기 이전에는 하나의 기능을 구현하기 위해 필요한 의존성들을 버전에 맞게 포함시켜야 했는데 starter 가 생기면서 관련된 의존성과 설정을 자동화해준다.

Structuring Your Code

스프링 부트를 실행하기 위해 특정 코드 레이아웃을 필요하지 않는다. 다만 best practices가 있다.

Using the “default” Package

클래스가 패키지에 포함되어 있지 않으면 이를 default package 라고 하는데 스프링 부트에서는 default package 사용을 권장하지 않는다. 그 이유는 나중에 살펴볼 @ComponentScan 때문이다.

보통 도메인 이름을 거꾸로 한 패키지 네이밍 컨벤션을 권장한다. ex, com.azurealstn.project

Locating the Main Application Class

스프링 부트 프로젝트를 생성한 후 Main Application Class는 Root 패키지 그대로 두는 것을 권장한다. 그 이유는 나중에 살펴볼 @SpringBootApplication 때문이다.

항상 기본(Default)을 따르는 것이 좋은 것 같다!

Configuration Classes

이전에는 XML 방식의 설정 파일을 관리하였지만 스프링 부트에서는 @Configuration 을 사용한 자바 기반의 설정 클래스를 더 선호한다.

Auto-configuration

스프링 부트의 auto-configuration은 jar 의존성을 기반으로 Spring Application을 자동으로 구성하려고 시도한다. 예를 들어 H2 Database 의존성을 추가하면 DB Connection을 위한 Bean 등록을 따로 안해도 된다. 스프링 부트가 in-memory database로 자동 구성하게 된다.

Gradually Replacing Auto-configuration

Auto-configuration은 비침투적이다. 즉, 자동 구성을 사용하지 않고, 직접 DataSource 를 빈으로 등록해 사용할 수도 있다.

비침투적: 애플리케이션 로직에 영향을 주지않고, 기술에 종속적이지 않게 해준다.

Auto-configuration Packages

Auto-configuration packages는 기본적으로 다양한 자동 구성 기능이 검색되는 패키지이다.

@EnableAutoConfiguration 애노테이션이 기본 auto-configuration package를 결정한다.

@AutoConfigurationPackage 애노테이션을 사용하여 추가 패키지를 구성할 수 있다.

Spring Beans and Dependency Injection

일반적으로 생성자 주입을 사용하고, @ComponentScan을 사용하여 빈을 찾는 것이 좋다. 생성자 주입을 사용하는 이유는 final 키워드를 통한 불변과 단위테스트를 작성하기 위함이다.

스프링 부트를 사용하면 기본적으로 Main Application Class 하위에 패키지나 클래스를 구성하게 되고 모두 @ComponentScan 의 대상이 된다.

Using the @SpringBootApplication Annotation

  • @EnableAutoConfiguration : 스프링 부트의 auto-configuration 메커니즘을 가능하게 해준다.
  • @ComponentScan : @Component 가 붙은 클래스들을 스캔한다.
  • @SpringBootConfiguration : 스프링 컨텍스트에 빈을 등록하거나 @Configuration 클래스를 import 할 수 있다.

댓글