Spring boot

[2-1장] 갓 초기화한 스프링 부트 프로젝트 살펴보기

슈뢰딩거의 고등어 2021. 12. 30. 15:55

gradle 초기화 프로젝트 생성

 

메인 애플리케이션 코드는 src/main/java 에

리소스는 src/main/resourcse 

테스트 코드는 src/test/java

아직은 테스트용 리소스는 없지만, 테스트에 필요한 리소스가 있다면 src/test/resources 에 두면 된다.

 

- build.gradle : 그레이들 빌드 명세

- gradlew : 그레이들 래퍼

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

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

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

 


스프링 부트스트래핑

 

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

첫째, 가장 중요한 스프링 구성 클래스다. 스프링 부트의 자동구성이 수많은 스프링 구성을 제거하지만, 자동 구성을 활성화하는 최소한의 구성은 해야한다.

@SpirngBootApplication 애너테이션은 스프링 컴포넌트 검색과 스프링 부트 자동구성을 활성화한다.

사실 @SpringBootApplication 애너테이션은 유용한 애너테이션 세개를 묶은 것이다.

 

  1. 스프링의 @Configuration : 이 애너테이션이 붙은 클래스를 스프링의 자바 기반 구성 클래스로 지정한다.
  2. 스프링의 @ComponentScan : 컴포넌트 검색 기능을 활성화해서 웹 컨트롤러 클래스나 다른 컴포넌트 클래스들을 자동으로 검색하여 스프링 애플리케이션 컨텍스트에 빈으로 등록시킨다.
  3. 스프링 부트의 @EnableAutoConfiguration : 이 작은 애너테이션은 @Abracadabra 라고 해도 무방하다. 이 구성 한 줄로 스프링 부트의 자동 구성 마법이 일어나기 때문이다. 이것으로 수많은 구성 코드를 대체할 수 있다.

스프링 부트의 이전 버전에서는 ReadingListApplication 클래스에 이 애너테이션 세개를 모두 붙여야 했다. 하지만 스프링 부트 1.2.0 부터는 애너테이션 하나면 충분하다.

 

앞에서 언급했듯이 ReadingListApplication 은 부트스트랩 클래스이기도 하다. 전통적인 WAR 파일 배포를 포함하여 스프링 부트 애플리케이션을 실행하는 방법은 여러가지다.

하지만, 여기서는 main()가 명령줄에서 실행 가능한 JAR 파일로 애플리케이션을 실행할 수 있게 한다.

main() 은 ReadingListApplication 클래스 참조와 명령줄 인자를 SpringApplication.run() 에 전달하여 애플리케이션을 실행한다.

main() ----JAR---> SpringApplication.run()

 

아직 애플리케이션 코드를 한 줄도 작성하지 않았지만 애플리케이션을 빌드하고 실행할 수 있다.

그레이들의 bootRun 태스크를 이용하면 손쉽게 애플리케이션을 빌드하고 실행할수있다.

 

 

명령을 실행하면 애플리케이션이 정상적으로 작동하고 8080 포트에서 수신하는 톰캣 서버가 작동해야한다.

원한다면 웹 브라우저로 http://localhost:8080 로 접속해도 된다. 하지만 아직 컨트롤러 클래스를 작성하지 않았기 때문에 HTTP 404 (Not Found) 와 오류 페이지가 나타날 것이다.

http://localhost:8080

ReadingListApplication.java 는 변경할 일이 거의 없다. 스프링 부트 자동구성이 제공하는 것 이상으로 추가적인 스프링 구성이 필요하다면, 별도의 @Configuration 애너테이션을 포함한 클래스에서 작성하는 것이 가장 좋다. 이 구성 클래스들은 컴포넌트 검색으로 자동으로 추가한다. 하지만 매우 간단한 추가 구성은 ReadingListApplication.java 에 추가하는 것이다.


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

 


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

처음에 Spring Initializr 가 제공하는 application.properties 파일은 완전히 비어있다. 이 파일은 선택적이므로 애플리케이션에 전혀 영향을 주지 않은 채 완전히 제거할 수 있다. 하지만 그대로 둬도 애플리케이션에 해를 끼치지 않는다.

 

잠깐 application.properites 를 살짝 건드려 보고 싶다면 다음 프로퍼티를 추가하자.

server.port =8080

이 프로퍼티는 내장 톰캣 서버가 기본 포트인 8080 대신 8000 포트로 수신대기하게 한다. 애플리케이션을 다시 실행해 보면 변경사항을 확인할 수 있다.

여기서 application.properties 를 로드하라고 스프링 부트에 명시적으로 요청한 적이 없다는 점을 기억하자!

application.properties 가 있으면 스프링 부트가 자동으로 이 파일을 로드하고 그 안에 든 프로퍼티를 스프링과 애플리케이션 코드를 구성하는데 사용할 수 있게 한다.