본문 바로가기
🍃 𝗦𝗽𝗿𝗶𝗻𝗴 𝗕𝗼𝗼𝘁

Spring Boot🍃 스프링부트 프로젝트 생성, 스프링부트 프로젝트 구조

by 비타민찌 2021. 8. 4.
728x90

Spring Boot 🍃

스프링부트 프로젝트 생성하는 법과

스프링부트 프로젝트 구조

(src/main/java, src/main/resources, src/test/java, build.gradle)

에 대해 알아본다.

1.  스프링부트 프로젝트 생성

[New Project]

[ Spring initializr ]

위와같이 설정 하고 Next,

Next,

Next,

마지막으로 앞에 입력했던 프로젝트 이름을 입력하고 Finish를 클릭하면 스프링부트 프로젝트가 생성된다.

2. 스프링부트 프로젝트 구조

프로젝트를 생성했다면, 이제 스프링부트 프로젝트의 구조에 대해 알아보자.

다음 네 파트로 나누어 설명한다.

(1) src/main/java

(2) src/main/resources

(3) src/test/java

(4) build.gradle

 

1) src/main/java

: 클래스, 인터페이스 등 자바 파일이 저장되는 곳.

[1] SevletInitializer 클래스

스프링부트 war 프로젝트 생성시,

SpringBootServletInitializer를 상속받는 ServletInitializer 클래스 파일이 생성된다.

이 파일의 용도는 무엇일까?

스프링부트 웹 애플리케이션을 배포할 때 jar를 이용하기도 하지만, 전통적인 방식인 war 파일로 배포하는 경우가 있다. 이때 SpringBootServletInitializer를 상속받아 배포하게 된다.

지금(Servlet 3.0 이후)은 아니지만, Apache Tomcat이 구동될때 web.xml을 읽어 웹 애플리케이션을 구성하기 때문에- 원래 스프링 웹 애플리케이션이 Tomcat에서 동작되기 위해서는 아래와 같이 web.xml의 ApplicationContext 등록해줘야 했다. (사라진 web.xml :과거 web.xml 작업을 하셨던 분의 글)

<servlet> <servlet-name>example</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>example</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>

💡 web.xml 이란?

WebApplication의 Deployment Descriptor로서 XML형식의 파일

web.xml 파일은 웹 어플리케이션의 배포 설명자로, 각 어플리케이션의 환경을 설정하는 역할을 한다.

서버가 처음 로딩될 때 읽어들이고, 해당 환경설정에 대해 tomcat에 적용하여 서버를 시작한다.

모든 Web application은 반드시 하나의 web.xml파일을 가져야하고, WEB-INF폴더 아래에 위치해있다.

web.xml파일의 설정들은 Web Application 시작시 메모리에 로딩된다.

브라우저가 Java Servlet에 접근하기 위해 WAS(TOMCAT)에 필요한 정보를 알려줘야 해당하는 Servlet을 호출할수있으며, 이것을 정하는곳이 web.xml이다.

그런데 Servlet 3.0으로 스펙이 업데이트 되면서 이 web.xml설정을 WebApplicationInitializer 인터페이스를 구현하여 대신 할 수 있게 되었고, 이를 구현한 SpringBootServletInitializer를 상속받아 외부 Tomcat에서 스프링부트가 실행되도록 해준다.

SpringBootServletInitializer를 상속 받는 다는 것은 tomcat 같은 Servlet Container 환경에서 Spring Boot 애플리케이션 동작 가능 하도록 웹 애플리케이션 컨텍스트를 구성한다는 의미.

(즉, war 파일로 빌드하고 배포하지 않을 거라면 SpringBootServletInitializer를 상속할 필요가 없다는 의미다.)

[2] 프로젝트이름+Application 클래스

메인 클래스

프로젝트를 생성하면 @SpringBootApplciation 어노테이션을 사용하는 프로젝트명+Application의 이름의 자바 클래스 파일을 볼 수 있다. 프로젝트가 동작할 수 있게 해주는 메인 클래스 파일이다.

@SpringBootApplication 어노테이션은 @ComponentScan, @Configuration, @EnableAutoConfiguration을 함께 사용한것과 같다.

2) src/main/resources

: html, css, js, image, 설정파일 등이 저장되는 곳.

templates 폴더, static 폴더, application.properties 파일이 기본적으로 생성된다.

[1] static 폴더

css, fonts, images, plugin, scripts 등의 정적 리소스 파일이 위치한다.

[2] template 폴더

기존의 스프링은 HTML 내에 자바 코드를 삽입하는 방식의 JSP를 사용했다.

디렉터리의 위치도 웹 디렉터리에 해당하는 src/main/webapp 안에 존재했다.

그러나 이 방식은 war 파일로 패키지화되었을 경우에만 정적 리소스를 정상적으로 사용할 수 있다.

그래서 스프링 부트는 src/main/resources 디렉터리 내에서 화면과 관련된 파일을 관리한다.

타임리프(Thymeleaf) 템플릿 엔진의 사용을 권장하는데,

이 타임리프는 JSP와 마찬가지로 HTML 내에서 데이터를 처리하는 데 사용된다.

타임리프에 대한 것은 게시판을 구현하면서 차근차근 알아가 보도록 하자.

[3] application.properties 파일

웹 애플리케이션을 실행하면서 자동으로 로딩되는 파일.

application.properties 파일은 스프링 부트 전체 프로젝트의 설정을 저장하는 곳이다.

이 파일에 설정되어져 있는 정보를 최우선적으로 따른다. (자바 파일에 설정되어져 있어도 이 application.properties 파일에 다른 설정이 저장되어져 있으면 의미가 없다)

예를 들어 톰캣(Tomcat)과 같은 WAS(포트 번호, 콘텍스트 패스 등)의 설정이나, 데이터베이스 관련 정보 등 각각으로 분리되어 있는 XML 또는 자바 기반의 설정을 해당 파일에 Key-Value 형식으로 지정해서 처리할 수 있다.

마찬가지로 자세한 부분은 게시판을 구현하면서 알아가 보자.

3) src/test/java

: 테스트코드가 저장되는 곳.

복잡한 설정없이 바로 테스트가 가능하다.

[1] 프로젝트이름+ApplicationTests 클래스

4) build.gradle

: gradle 설정 파일

-> 프로젝트 '빌드'(프로젝트를 실행할 수 있는 형태로 만드는 것) 도구.

이전 글에서 프로젝트를 생성하면서 프로젝트의 Type을 그레이들(Gradle)로 선택했다.

(기존의 스프링은 pom.xml에 여러 개의 dependency를 추가해서 라이브러리를 관리하는 방식의 메이븐(Maven)을 사용하였는데, 라이브러리의 버전 문제, 충돌 문제, 종속적인 문제 등이 자주 발생하는 이유로 요즘엔 그레이들을 선호하는 추세.)

메이븐은 하나의 라이브러리를 추가하려면 평균적으로 네 줄 이상의 코드를 작성해야 하는데,

그레이들은 단 한 줄의 코드로 라이브러리를 추가할 수 있다.

우리는 해당 파일에 필요한 라이브러리들을 차근차근 추가해서 개발을 진행할 예정이며,

해당 파일에 추가한 라이브러리는 Project and External Dependencies에서 확인할 수 있다.

 

728x90

댓글