![Thumbnail image](/images/spring-basic.png)
Table of Contents
[스프링인액션] 스프링 초기 설정
개요
스프링인액션 1장을 읽고 스프링 부트 어플리케이션을 구축하기 위한 초기 설정 등을 기록하였다.
이 문서를 통해
- 초기의 gradle 빌드 명세 설명
- 부트스트랩(구동) 클래스 설명
- 스프링부트 DevTools
에 대해 알 수 있다.
초기의 gradle 빌드 명세
Spring Initalizr를 이용하여 초기 스프링 프로젝트를 생성하면 (gradle으로 빌드)
해당 build.gradle 파일이 생긴다.Spring Initalizr에서 Spring Web, Thymeleaf, Spring Boot DevTools, Lombok을 선택.
1plugins {
2 id 'org.springframework.boot' version '2.7.0'
3 id 'io.spring.dependency-management' version '1.0.11.RELEASE'
4 id 'java'
5}
6
7group = 'tacos'
8version = '0.0.1-SNAPSHOT'
9sourceCompatibility = '1.8'
10
11configurations {
12 compileOnly {
13 extendsFrom annotationProcessor
14 }
15}
16
17repositories {
18 mavenCentral()
19}
20
21dependencies {
22 implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
23 implementation 'org.springframework.boot:spring-boot-starter-web'
24 compileOnly 'org.projectlombok:lombok'
25 developmentOnly 'org.springframework.boot:spring-boot-devtools'
26 annotationProcessor 'org.projectlombok:lombok'
27 testImplementation 'org.springframework.boot:spring-boot-starter-test'
28}
29tasks.named('test') {
30 useJUnitPlatform()
31}
플러그인
1plugins {
2 id 'org.springframework.boot' version '2.7.0'
3 id 'io.spring.dependency-management' version '1.0.11.RELEASE'
4 id 'java'
5}
plugins 영역의 3개 플러그인 → 자바와 스프링 부트를 사용하기 위한 필수 플러그인
id ‘org.springframework.boot’ : 스프링 부트 프로젝트를 실행할 수 있게 만들어주는 스프링 부트 관련 플러그인
id ‘io.spring.dependency-management’ : 스프링 부트의 의존성들을 관리해 주는 플러그인
id ‘java’ : Java 프로그램을 위한 기능을 제공하는 플러그인 - compileJava, classes, test 등의 task 제공
저장소
1repositories {
2 mavenCentral()
3}
온라인으로 접속하여 사용할 수 있는 저장소로 Gradle은 대체로 다음 2개의 저장소 서비스를 이용한다.
- 메이븐 중앙 저장소 추가를 위한
mavenCentral()
메소드 - Bintray의 jCenter 저장소 추가를 위한
jcenter()
메소드를 제공
의존 라이브러리
1dependencies {
2 implementation fileTree(dir: 'libs', include: ['*.jar']) // 1
3 implementation 'org.springframework.boot:spring-boot-starter' // 2
4}
의존관계를 설정하는 부분이다. 빌드 스크립트에서 직접 의존성을 지정한다.
1️⃣ 패키지화되어 있는 라이브러리 모듈의 의존을 정의하는 방법이다. [프로젝트]/libs/" 폴더 내의 JAR 파일들과의 의존성을 선언하였다.
2️⃣ 라이브러리가 Local에 존재하지 않는다면 정의된 원격 저장소(ex: Maven repository, Nexus 등)에서 라이브러리를 다운받아 빌드할 수 있는 환경을 제공한다.
스프링 부트 스타터 의존성
1dependencies {
2 implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
3 implementation 'org.springframework.boot:spring-boot-starter-web'
4 testImplementation 'org.springframework.boot:spring-boot-starter-test'
5}
Spring Web, Thymeleaf, Test 의존성 항목은 starter 단어를 포함하고 있는데, 이는 스프링 부트 스타터 의존성을 나타낸다.
스타터 의존성의 장점은,
- 필요한 모든 라이브러리의 의존성을 선언하지 않아도 되어 빌드 파일이 더 작아지고 관리의 이점.
- 기능의 관점 : 웹 어플리케이션을 개발한다면 일일이 라이브러리를 지정하는 대신 웹 스타터 의존성만 추가하면 된다.
- 라이브러리의 버전 호환성 보장
어플리케이션 구동
어플리케이션의 구동을 위해서는 부트스트랩(구동) 클래스가 있어야 한다.
또한 최소한의 스프링 구성도 있어야 한다.
1@SpringBootApplication
2public class TacoCloudApplication {
3
4 public static void main(String[] args) {
5 SpringApplication.run(TacoCloudApplication.class, args);
6 }
7}
@SpringBootApplication 이란?
@SpringBootApplication은 다음 세 개의 어노테이션이 결합한 것.
- @SpringBootConfiguration : 현재 클래스를 구성 클래스로 지정.
- @EnableAutoConfiguration : 스프링 자동-구성 활성화. - 필요로 하는 컴포넌트를 자동으로 구성하도록 스프링부트에게 알려준다.
- @ComponentScan : 컴포넌트 검색 활성화. - @Component, @Controller, @Service 등의 어노테이션과 함께 클래스를 선언할 수 있도록 도와줌.
main()
실제로 어플리케이션을 시작시키고 스프링 어플리케이션 컨텍스트를 생성하는 SpringApplication 클래스의 run() 메서드 호출.
run() 메서드의 두 개의 매개변수는 구성 클래스와 명령행 인자.
스프링부트 DevTools
스프링 부트 DevTools는 개발 시점의 편리한 도구를 제공한다.
- 코드가 변경될 때, 자동으로 어플리케이션을 재시작시킨다.
- 리소스(템플릿, 자바스크립트, 스타일시트)가 변경될 때 자동으로 브라우저를 새로고침한다.
- 탬플릿 캐시를 자동으로 비활성화한다.
- H2 콘솔을 활성화시킨다.
어플리케이션 재시작
자바 코드, 속성 파일, 프로젝트의 src/main/ 경로에 있는 모든 것들은 DevTools가 다시 재시작시킨다.
다만, 의존성 라이브러리를 포함하는 클래스 로더는 자동으로 다시 로드되지 않는다.
→ 빌드 명세(gradle 등)에 의존성을 추가, 변경, 삭제할 때는 어플리케이션을 재시작해야만 적용된다.
템플릿 캐시 비활성화
Thymeleaf나 freeMarker 같은 템플릿은 모든 웹 요청마다 매번 파싱하지 않기 위해 파싱 결과를 캐시에 저장한다. (성능의 이점)
하지만 템플릿 캐싱은 브라우저를 새로고침하더라도 이전의 캐시를 사용하기 때문에 변경된 효과를 볼 수 없다.
DevTools는 템플릿 캐싱을 비활성화하여 브라우저를 새로고침하면 변경된 템플릿이 적용된다.
Intellij 적용 방법
준비 사항 : build.gradle에 org.springframework.boot:spring-boot-devtools 라이브러리 추가 필수!
-
application.properties 파일에 spring.thymeleaf.cache = false 추가
-
[Edit Configurations] 구성 편집 창에서 [Modify options] 설정 변경
-
상단 구성을 클릭하여 [Edit Configurations] 클릭
-
구성 편집 창에서 [Modify options] 클릭
-
On ‘Update’ action 에서 Update classess and resources 선택 (On frame deactivation도 동일 선택)
이러한 설정을 통해 DevTools를 적용시킬 수 있다.
-
Posts in this Series
- [스프링인액션] JMX로 스프링 모니터링
- [스프링인액션] 스프링 관리
- [스프링인액션] 스프링 액추에이터 사용
- [스프링인액션] 실패와 지연 처리
- [스프링인액션] 클라우드 구성 관리
- [스프링인액션] 마이크로서비스 이해
- [스프링인액션] 리액티브 데이터 퍼시스턴스
- [스프링인액션] 리액티브 API 개발
- [스프링인액션] 리액터 개요
- [스프링인액션] 스프링 통합 플로우 사용
- [스프링인액션] 비동기 메시지 전송하기 - Kafka
- [스프링인액션] 비동기 메시지 전송하기 - RabbitMQ
- [스프링인액션] 비동기 메시지 전송하기 - JMS
- [스프링인액션] REST API 사용하기
- [스프링인액션] REST API 생성하기
- [스프링인액션] 구성 속성 사용
- [스프링인액션] 스프링 시큐리티
- [스프링인액션] 데이터로 작업하기
- [스프링인액션] 스프링 초기 설정