본문 바로가기
  • 주니어 개발자의
    RESTful 성장기
Web/Spring Boot

Spring Boot 프로젝트 구조

by 돌건 2021. 8. 7.

지난 게시글에서는 스프링 부트 프로젝트를 생성하는 방법에 대해 알아봤다. 오늘은 생성된 스프링 부트 프로젝트의 구조에 대해서 알아보는 시간을 가져보자!

 

• 구조

1. src/main/java

일반적인 .java 소스들이 위치한다.

 

2. src/main/resources

자바 소스를 제외한 XML, properties 파일들이 등록된다.

src/main/resources 하위에는 static, templates라는 폴더 2개와 application.properties라는 프로퍼티 파일이 하나 존재한다.

1. src/main/resources/static
HTML과 같은 정적 웹 리소스가 등록되는 폴더이다.

2. src/main/resources/templates
Thymeleaf와 같은 템플릿 기반 웹 리소스가 등록되는 폴더이다.

3. src/main/resources/application.properties
프로젝트 전체에서 사용되는 프로퍼티 정보를 저장하는 설정 파일이다.

 

3. src/test/java

JUnit 기반 테스트를 등록하는 곳이다.

 

4. pom.xml

프로젝트 전반의 환경을 설정하는 파일이다. 메이븐을 기반으로 생성한 스프링 부트 프로젝트에 기본적으로 제공된다.
[사진 1. pom.xml에 기본적으로 등록되는 dependency]

사진 1에서 볼 수 있듯이 스프링 부트 프로젝트를 생성하면 기본적으로 spring-boot-starter-web과 spring-boot-starter-test가 추가되어 있다. 각각은 Web, Test와 관련된 라이브러리이다.

spring-boot-starter-web : 웹 애플리케이션 개발에 필요한 Spring MVC 관련 라이브러리
spring-boot-starter-test : JUnit을 비롯한 테스트 관련 라이브러리

[사진 2. <parent> 태그를 이용한 POM 설정 상속]

pom.xml 파일에서는 사진 2처럼 <parent> 태그를 활용해 다른 POM 설정을 상속 받을 수 있다. 따라서 눈에 보이지는 않지만 부모 설정 파일로부터 많은 <dependency> 설정을 상속 받아 가지게 된다.

 

 프로젝트 실행

src/main/java 에 보면 [프로젝트명 + Application.java] 형태로 메인 클래스가 생성되어 있다. 이 프로그램을 실행하면 프로젝트를 실행할 수 있다. 

Spring Boot로 생성한 프로젝트는 Java Application이나 Spring Boot App과 같은 Web Application 형태로 실행이 가능하다. 
[사진 3. Web Application으로 프로젝트 실행]

먼저, @SpringBootApplication 어노테이션은 이 클래스가 스프링 부트로 만든 애플리케이션의 시작 클래스라는 것을 의미한다. 메인 클래스는 기본으로 사진 3과 같이 코드가 짜여있다. SpringApplication의 run() 메소드를 static하게 호출하고 있다. 

[사진 4. Java Application으로 프로젝트 실행]
만약 Java Application으로 구동하고 싶다면, 사진 4에서 처럼 SpringApplication을 일반적인 객체 생성 방법으로 생성한 뒤, setWebApplicationType() 메소드를 통해 웹 어플리케이션의 타입을 지정해준다. NONE으로 설정하면 Java Application으로 실행되고, SERVLET으로 설정하면 다시 Web Application으로 실행된다. 

이렇게 자바 소스에서 설정을 진행하는 것은 상당히 번거로운 일이다. 따라서 앞서 봤던 application.properties를 이용해 프로젝트에 적용되는 프로퍼티를 등록하면 간단하게 어플리케이션의 동작 방식을 제어할 수 있다.
[사진 5. application.properties에서 어플리케이션 동작 방식 설정]

참고로, 자바 소스보다 application.properites의 설정 우선순위가 높기 때문에 외부 프로퍼티를 사용하는 경우에는 자바 소스에서 설정을 해봤자 소용이 없다.

'Web > Spring Boot' 카테고리의 다른 글

Spring Boot 자동 설정  (0) 2021.08.18
의존성 관리  (0) 2021.08.09
Spring Boot 프로젝트 만들기  (0) 2021.08.05

댓글