이전 포스팅에서 우리는 자바 JDK 설치, 환경 변수 설정, STS 설치 및 환경 설정, 스프링 부트 프로젝트 생성, 플러그인 설치 등의 작업을 진행하였습니다. 이번에는 생성한 프로젝트에서 중요한 역할을 하는 파일들과 기존 스프링 프로젝트와의 차이점 등에 대해 가볍게 알아보는 시간을 가져보도록 하겠습니다.
스프링 부트 프로젝트 구조
1. src/main/java
기존의 스프링과 마찬가지로 클래스, 인터페이스 등 자바 파일이 들어가는 디렉터리입니다. 이전 포스팅에서 생성한 com.board 패키지 안에 BoradApplication 클래스가 생성되어 있는 것을 볼 수 있는데요, 파일을 열어보면 클래스 선언부 위에 @SpringBootAplication이 선언되어 있습니다. 이 애너테이션은 다음의 세 가지 애너테이션으로 구성되어 있다고 합니다.
@EnableAutoConfiguration
스프링 부트는 "필수적인 설정 등의 처리가 되어있거나, 말도 안 되게 간편하게 설정이 가능하다."라는 이야기를 했었습니다. 해당 애너테이션을 사용하면 기존의 스프링에서 진행했었던 다양한 설정들의 일부가 자동으로 완료됩니다.
@ComponentScan
기존의 스프링에서 클래스를 생성하고 빈(Bean)으로 등록하기 위해서는 XML 파일에 각각의 빈(Bean)을 스캔하기 위해 수동으로 ComponentScan을 여러 개 선언하고는 했었습니다. 스프링 부트는 해당 애너테이션을 사용해서 자동으로 컴포넌트 클래스를 검색하고 스프링 애플리케이션 콘텍스트에 빈(Bean)으로 등록하는 역할을 합니다. 쉽게 이야기하면 @Autowired, @Inject, @Resource와 같은 애너테이션을 사용하여 의존성을 주입하는 과정이 훨씬 간편해졌다고 볼 수 있습니다.
@Configuration
해당 애너테이션이 붙은 클래스는 자바 기반의 설정 파일로 인식됩니다. 스프링 4 버전부터 자바 기반의 설정이 가능하게 되면서 XML 파일 설정에 어마 무시한 시간을 까먹게 될 일이 사라졌습니다. 물론 XML 기반의 설정을 아예 사용하지 않는 것은 아니지만요.
main 메서드
SpringApplication.run(PracticeApplication.class, args) 메서드를 호출해서 스프링 부트 웹 애플리케이션을 실행합니다.
2. src/main/resources
기존의 스프링 프로젝트를 생성하면 log4.xml 파일만 떡하니 존재했었습니다. 스프링 부트는 다음과 같이 templates, static, application.properties 파일이 기본적으로 생성이 되는데요, 각각의 역할에 대해 알아보도록 하겠습니다.
templates
기존의 스프링에서 화면의 처리는 JSP를 사용했었습니다. 디렉터리의 위치도 웹 디렉터리인 src/main/webapp 폴더 밑에 존재했었고요. 하지만 이런 경우에는 war 파일로 패키지화되었을 경우에만 정적 리소스를 정상적으로 사용할 수 있다고 합니다. 그런 이유에서 src/main/resources 디렉터리에서 뷰 관련 파일들을 관리하는 것으로 볼 수 있습니다. 스프링 부트는 타임리프(Thymeleaf) 템플릿 엔진을 사용하는 것을 권장한다고 합니다. 우리는 이전 포스팅에서 타임리프(Thymeleaf)를 사용하기로 했었고, 관련 플러그인도 설치했습니다. 타임리프(Thymeleaf)는 게시판을 만들면서 자세히 알아보도록 하겠습니다. 결론적으로 templates 폴더에는 JSP 파일이 아닌 HTML 파일이 들어갑니다.
static
해당 폴더에는 templates에서 설명한 내용과 같은 이유로 css, fonts, images, plugin, scripts와 같은 정적 리소스 파일들이 들어갑니다.
application.properties
기존의 스프링에서 사용했던 톰캣(Tomcat) 등 WAS에서 설정했던 포트 번호(Port Number), 콘텍스트 패스(Context-Path) 또는 contextApplication.xml에서 설정했던 데이터베이스 관련 정보 등 각각 분리된 XML 파일에서의 설정들을 해당 파일을 통해서 처리할 수 있습니다.
3. src/test/java
해당 디렉터리에 BoardApplicationTests 클래스가 생성되어 있습니다. 우리는 해당 클래스를 통해서 각각의 개발 단계에 알맞은 테스트를 진행할 수 있습니다. 물론 이전의 스프링과 달리 복잡한 설정을 하지 않아도 바로 테스트가 가능합니다.
4. build.gradle
이전 포스팅에서 우리는 메이븐(Maven)이 아닌 그레이들(Gradle)을 사용한다고 했었습니다. 기존 스프링에서는 pom.xml 파일에 dependency를 추가해서 메이븐(Maven)으로 라이브러리를 관리하는 방식을 사용했었는데요, 기존의 스프링을 사용하면서 라이브러리의 버전, 충돌, 종속적인 문제 때문에 골치 아픈 상황을 여러 번 겪어보았습니다. 이러한 이유들로 요즘엔 그레이들을 많이 사용하고 있는 추세라고 합니다. 보통 하나의 dependency를 추가하면 네 줄 이상의 코드를 작성해야 하는데 그레이들을 사용하면 단 한 줄의 코드로 처리가 가능합니다. 우리는 해당 파일에 필요한 라이브러리들을 추가하여 개발을 진행합니다. 해당 파일에서 추가한 라이브러리들은 Project and External Dependencies에서 확인할 수 있습니다. build.gralde 아래에 있는 파일들은 한 번도 건드려 본 적이 없기 때문에 넘어가도록 하겠습니다.
5. MVC 패턴
기존의 스프링과 마찬가지로 스프링 부트도 다른 개발 패턴을 사용하지 않고 MVC 패턴으로 개발을 진행합니다. MVC 패턴에 대해 간단하게 이야기해 보도록 하겠습니다.
M(Model)
데이터를 처리하는 영역으로 흔히, 비즈니스 로직을 처리하는 영역이라고 이야기합니다. 모델(Model) 영역은 데이터베이스와 통신하고 사용자가 원하는 데이터를 가공하는 역할을 합니다.
V(View)
사용자가 보는 화면입니다. HTML과 타임리프(Thymeleaf)를 사용하여 처리합니다. (뷰 = 화면 = 사용자)
C(Controller)
사용자가 웹에서 어떠한 요청을 하면 가장 먼저 컨트롤러(Controller)를 경유합니다. 컨트롤러는 사용자의 요청을 처리할 어떠한 로직을 호출하고, 그에 대한 결과를 사용자에게 전달하는 역할을 하는 것이 전부입니다.
출처
https://congsong.tistory.com/13?category=749196
'BackEnd > Java Spring' 카테고리의 다른 글
Spring annotation @Component, @Configuration (0) | 2020.05.23 |
---|---|
Spring IoC 컨테이너 , 빈 , 의존성 주입 개념정리 (2) | 2020.05.05 |
스프링 동작 정리-1 (0) | 2020.05.05 |
Spring Framework 의 IoC 컨테이너 / 빈(Bean) / 의존성 주입(DI)개념정리 (0) | 2020.04.14 |
Java Spring - @RequestBody, @ResponseBody 정리 (0) | 2020.04.14 |