본문 바로가기

Tech/Spring

[Spring Boot] 갓 초기화한 스프링 부트 프로젝트 살펴보기

프로젝트를 구성하는 주요 파일

- build.gradle : 그래들 빌드 명세

- gradlew : 그래들 래퍼

- Application.java : 애플리케이션의 부트스트랩 클래스이자 주 스프링 구성 클래스

- application.properties : 애플리케이션과 스프링 부트 프로퍼티를 구성하는 데 사용하는 파일

- ApplicationTests.java : 기본 통합 테스트 클래스

 

Application.java

Application.java는 스프링 부트 애플리케이션에서 구성과 부트스트래핑 두 가지 역할을 담당.

 

1. 스프링 구성 클래스

@SpringBootApplication : 스프링 컴포넌트 검색과 스프링 부트 자동 구성을 활성화한다. 이 애너테이션은 유용한 애너테이션 세 개를 묶은 것 (스프링 부트 v1.2.0부터)

 

- @Configuration : 이 애너테이션이 붙은 클래스를 스프링의 자바 기반 구성 클래스로 지정

- @ComponentScan : 컴포넌트 검색 기능을 활성화해서 웹 컨트롤러 클래스나 다른 컴포넌트 클래스들을 자동으로 검색하여 스프링 애플리케이션 컨텍스트에 빈으로 등록

- @EnableAutoConfiguration : 스프링부트의 meta 파일을 읽어서, 미리 정의되어 있는 자바 설정 파일(@Configuration)들을 빈으로 등록하는 역할을 수행

 

2. 부트스트래핑

Application.java는 부트 스트랩 클래스이기도 하다.

mian() 메서드가 명령줄에서 실행 가능한 JAR 파일로 애플리케이션을 실행할 수 있게 한다.

main() 메서드는 Application 클래스 참조와 명령줄 인자를 SpringApplication.run() 메서드에 전달하여 애플리케이션을 실행

Application.java는 변경할 일이 거의 없음

추가적인 스프링 구성이 필요하다면 별도의 @Configuration 애너테이션을 포함한 구성 클래스에서 작성하는 것이 좋음. 이 구성 클래스들은 컴포넌트 검색으로 자동으로 추가됨.

 

스프링 부트 애플리케이션 테스트

Spring Initializr는 애플리케이션을 테스트하는 데 사용할 수 있는 기본적인 테스트 클래스 구조를 제공함.

 

@ContextConfiguration vs @SpringApplicationConfiguration

 일반적인 스프링 통합 테스트에서는 스프링 애플리케이션 컨텍스트를 로드하는 방법을 지정하려고 테스트 클래스에 @ContextConfiguration 애너테이션을 붙임. 하지만 스프링 부트에서는 @SpringApplicationConfiguration 애너테이션을 사용한다.

 

 둘 다 애플리케이션 컨텍스트를 로드하는 방법을 지정하는 역할을 하지만 @SpringApplicationConfiguration은 더 나아가서 로깅을 활성화하거나 application.properties 에서 추가 속성을 로드하는 기능이 있다.

 

 한편, Spring boot 1.4부터는 @SpringApplicationConfiguration 대신에 @SpringBootTest라는 애너테이션을 사용한다. (이에 대해서는 기회가 된다면 다시 정리해볼 예정이다.)

 

애플리케이션 프로퍼티 구성

처음에 Spring Initializr가 제공하는 application.properties 파일은 완전히 비어 있음.

application.properties를 사용하면 스프링 부트가 자동으로 구성하는 내용을 간편하고 섬세하게 조정할 수 있음.

예로 내장 톰캣 서버에 8080으로 기본 설정되어 있는 포트 번호를 8000으로 바꾸고 싶다면 다음과 같은 프로퍼티만 추가하면 된다.

 

server.port=8000

 

application.properties는 애플리케이션 코드에서 사용하는 프로퍼티를 지정하는 데도 사용할 수 있다.

 

 

 

 

참고 자료

스프링 부트 코딩 공작소
https://cornswrold.tistory.com/314
https://javarevisited.blogspot.com/2019/02/difference-between-contextconfiguration-and-springapplicationConfiguration-annotations-in-spring-boot-testing.html
http://wonwoo.ml/index.php/post/1020

반응형