[Spring Boot] 프로젝트 구조 살펴보기
by coco3o
스프링 부트를 공부하기에 앞서 스프링 부트의 전체적인 프로젝트 구조에 대해 알아보도록 하겠습니다.
먼저, demo 프로젝트를 생성했습니다. demo 프로젝트의 구조는 아래와 같습니다.
1. src/main/java 디렉토리
클래스, 인터페이스 등 자바 파일이 위치하는 디렉토리입니다.
2. DemoApplication 클래스
DemoApplication 파일을 열어보면, main 메소드가 선언되어 있는 것을 확인할 수 있습니다.
main 메소드는 웹 어플리케이션을 실행하는 역할을 해줍니다.
@SpringBootApplication 어노테이션은 main 클래스에 있는 어노테이션이고,
해당 어노테이션은 다음의 세 가지 어노테이션으로 구성되어 있습니다.
어노테이션 | 설명 |
@EnableAutoConfiguration | 스프링 부트는 개발에 필요한 몇 가지 필수적인 설정들의 처리가 되어 있는데, 해당 어노테이션에 의해 다양한 설정들의 일부가 자동으로 완성됩니다. |
@ComponentScan | 기존의 XML 설정 방식의 스프링은 빈(Bean)의 등록 및 스캔을 위해 수동으로 ComponentScan을 여러 개 선언하는 방식을 사용 했었는데, 스프링 부트는 해당 어노테이션에 의해 자동으로 컴포넌트 클래스를 검색하고, 스프링 어플리케이션 콘텍스트( IoC 컨테이너 )에 빈(Bean)으로 등록합니다. 간단하게 의존성 주입 과정이 더욱 간편해졌다고 생각할 수 있겠습니다. |
@Configuration | 해당 어노테이션이 선언된 클래스는 자바 기반의 설정 파일로 인식됩니다. XML 설정에 어마무시한 시간을 소모하지 않아도 됩니다. 물론, XML 기반의 설정을 전혀 사용하지 않는 것은 아닙니다. |
3. src/main/resources 디렉토리
templates :
기존의 스프링은 HTML 내에 자바 코드를 삽입하는 JSP의 방식을 사용하였습니다.
디렉토리의 위치도 웹 디렉토리에 해당하는 src/main/webapp 안에 존재하였습니다.
하지만, 이러한 방식은 war 파일로 패키지화 되었을 경우에만 정적 리소스를 정상적으로 사용할 수 있다고 합니다.
그러한 이유로 스프링 부트는 src/main/resources 디렉토리 내에서 화면과 관련된 파일을 관리하는 것으로 생각할 수 있습니다.
스프링 부트는 타임리프(Thymeleaf) 템플릿 엔진의 사용을 권장하는데, 타임리프는 JSP와 마찬가지로 HTML 내에서 데이터를
처리하는 데 사용됩니다.
즉, 타임리프(Thymeleaf)의 파일들(HTML파일이 동적일 때, 서버에서 데이터를 다룰 때)
templates 폴더에서 사용합니다.
static :
정적 컨텐츠는 서버에서 뭐 하는거 없이 파일을 웹브라우저에 그대로 내려주는 것이고,
해당 폴더에는 css, fonts, images, plugin, scripts 등의 정적 리소스 파일이 위치합니다.
스프링 부트는 기본 설정으로 정적 컨텐츠를 /static에서 찾아서 제공을 합니다.
application.properties :
해당 파일은 웹 어플리케이션을 실행하면서 자동으로 로딩되는 파일입니다.
예를 들어 톰캣(Tomcat)과 같은 WAS(포트 번호, 콘텍스트 패스 등)의 설정이나, 데이터베이스 관련 정보 등 각각으로
분리되어 있는 XML 또는 자바 기반의 설정을 해당 파일에 Key - Value 형식으로 지정하여 처리할 수 있습니다.
4. src/test/java 디렉토리
해당 디렉토리에는 DemoApplicationTests 클래스가 생성되어 있는데,
해당 클래스를 이용해서 각각의 개발 단계에 알맞은 테스트를 진행할 수 있습니다.
기존의 스프링과 다르게 복잡한 설정 없이 테스트가 가능합니다.
build.gradle
해당 프로젝트의 Type을 그래들(Gradle)로 선택
메이븐(Maven)은 pom.xml
메이븐(Maven)과 그래들(Gradle)의 개념 및 비교
'🌈Programming > Spring Boot' 카테고리의 다른 글
[Spring Boot] @Scheduled을 이용해 일정 시간 마다 코드 실행하기 (1) | 2022.06.26 |
---|---|
[Spring Boot] Validation 적용, @Valid로 유효성 검사하기 (1) | 2021.12.17 |
[Spring Boot] MySQL & JPA 연동 및 테스트 (Gradle 프로젝트) (7) | 2021.07.23 |
[Spring Boot] Gradle jar 빌드 및 배포하기 (2) | 2021.06.28 |
[Spring Boot] intelliJ로 Spring Boot 프로젝트 생성 및 실행하기 (0) | 2021.06.28 |
블로그의 정보
슬기로운 개발생활
coco3o