2. (스프링) 프로젝트 셋업 힘들죠?
• 문제: 번잡스러운 사전 설치 작업들
• 목표: Spring 기반의 stand-alone, production-
grade 앱 개발을 쉽게 시작할 수 있게 만들자
• 방법: (의도적으로) 편향된 관점으로 Spring 및
3rd 파티 모듈들을 구성 —> Spring Boot
3. Build artifacts (산출물)
• java -jar 로 바로 실행 가능한 jar
• Tomcat에 바로 배포 가능한 war
• Spring Boot CLI를 이용한 실행도 가능
4. Spring Boot의 목표
• 스프링 기반 개발을 쉽게 시작
• 처음에 쉽게 시작할 수 있는 구성 / 이후 쉬운
tailoring
• 비기능성 feature 포함
• embedded servers, security, metrics, health
checks, externalized configuration
• No No No - Code 생성, XML 설정
5. System Requirements
• Java 7 and 8 (6도 가능 — 설정필요)
• Maven (3.2+), Gradle (1.12 or 2.x), Gradle 3은 미지원
• Spring Framework 4.3.3.RELEASE 이상
• ‘건전지 포함’ (Servlet containers, embedded DBs, …)
• (Optional) Spring Boot CLI - groovy DSL
• 명령창에서 javac, java를 직접 사용하는 대신에
• $ spring run app.groovy 처럼 사용할 수 있어
• Gradle과 중복되는 부분이 있지만… rails 같은 모습을 추구하는 듯
6. 설치
buildscript {
repositories { mavenCentral() }
dependencies { classpath(“org.springframework.boot:spring-boot-gradle-plugin:1.4.1.RELEASE") }
}
apply plugin: 'java'
apply plugin: 'spring-boot'
jar { baseName = ‘myproject’; version = ‘0.0.1-SNAPSHOT' }
repositories { mavenCentral() }
dependencies {
compile("org.springframework.boot:spring-boot-starter-web")
testCompile("org.springframework.boot:spring-boot-starter-test")
}
• Maven이나 Gradle 이용해서 의존성 관리로 설치할 것 권장 (이하 Gradle)
• Spring Boot 의존성들은 org.springframework.boot 그룹에 속한다.
• spring-boot-gradle-plugin은 spring boot를 쉽게 쓸 수 있게 하는 Gradle
plugin
• 처음에는 몇 개의 “starter”들을 사용하게 됨 (spring-boot-starter-*)
13. main() Class의 위치
• @SpringBootApplication으로 명시적으로 main() Class지정할 수 있
지만
• app의 root package에 위치 시키면 편함 (아래 예에서는
Application.java)
• @EnableAutoConfiguration이나 @ComponentScan에 base
search package 지정을하지 않아도 main() Class 위치를 기본으
로 택하기 때문
com
+- example
+- myproject
+- Application.java
|
+- domain
| +- Customer.java
| +- CustomerRepository.java
|
+- service
| +- CustomerService.java
|
+- web
+- CustomerController.java
14. 차츰 Auto-configuration 대체 (해치지 않
아요)
• (예) 직접 ‘DataSource’ 빈을 추가하면 기본 제공되던 것은 더 이상 사용되
지 않음
• 앱 시작시 —debug 옵션 지정하여 auto-configuration 관련 로그에서 확인
가능
• @EnableAutoConfiguration(exclude={}) 이용
• 혹은 spring.autoconfigure.exclude 프로퍼티 이용
import org.springframework.boot.autoconfigure.*;
import org.springframework.boot.autoconfigure.jdbc.*;
import org.springframework.context.annotation.*;
@Configuration
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class MyConfiguration {
}
15. 이제 관심있는 주제별로 하나씩
• Part IV. Spring Boot features
• SpringApplication / Externalized Configuration / Profiles / Logging / Test
• Spring Web MVC framework
• Working with SQL databases (JPA)
• Distributed Transactions with JTA
• …
• Part V. Spring Boot Actuator: Product-ready features
• Part VI. Deploying Spring Boot applications
• Part VII. Spring Boot CLI
• Part VIII. Build tool plugins
• Part IX. ‘How-to’ guides (세부 타스크별 handbook성 정보)
• Part X. Appendix (application property 항목 정리, 각종 정보 포맷등 테이블성 정보)