* 예를 들어, 6장의 Thymeleaf를 사용하기 위해, ThymeleafViewResolver, SpringTemplateEngine, TemplateResolver가 필요했다면, 스프링 부트의 자동설정에서는, 단순히 Thymeleaf를 프로젝트 클래스패스에 넣어주기만 하면 된다
=> 클래스패스에서 발견할 때, 위의 세개의 빈을 자동으로 설정
* 스프링 MVC를 사용하기 위해, 웹 스타터를 추가하면 되며 마찬가지로 자동으로 필요한 빈을 생성해준다 => 남은 것은 요청을 처리하는 컨트롤러 클래스 작성 뿐
1.3 스프링 부트 CLI
스프링 부트 CLI는 그루비를 사용한다. 이 기능으로 개발 프로세스가 간결해 진다
@RestController
class Hi {
@RequestMapping("/")
String hi() {
"Hi!"
}
}
* 해당 그루비 스크립트를, CLI가 깔려있다면 [$ spring run.Hi.groovy ] 라는 명령어로, 실행할 수 있다.
1.4 액추에이터
간편하고 유용한 기능들을 제공한다
앤드포인트 관리
실용적인 오류 처리, /error 엔드포인트 기본 세팅
어플리케이션의 정보를 전달하는 /info 엔드포인트
스프링 시큐리티가 동작할 때 검증 이벤트 프레임워크
2. 스프링 부트로 애플리케이션 만들기
* 간단한 연락처 어플리케이션 제작
* build.gradle
buildscript {
repositories {
mavenLocal()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:
1.1.4.RELEASE")
}
}
apply plugin: 'java'
apply plugin: 'spring-boot'
jar { // JAR파일로 빌드
baseName = 'contacts'
version = '0.1.0'
}
repositories {
mavenCentral()
}
dependencies {
// 의존성은 이 곳에 추가
}
task wrapper(type: Wrapper) {
gradleVersion = '1.8'
}
@Repository
public class ContactRepository {
private JdbcTemplate jdbc;
@Autowired
public ContactRepository(JdbcTemplate jdbc) {
this.jdbc = jdbc;
}
public List<Contact> findAll() {
return jdbc.query(
"select id, firstName, lastName, phoneNumber, emailAddress " +
"from contacts order by lastName",
new RowMapper<Contact>() {
public Contact mapRow(ResultSet rs, int rowNum) throws SQLException {
Contact contact = new Contact();
contact.setId(rs.getLong(1));
contact.setFirstName(rs.getString(2));
contact.setLastName(rs.getString(3));
contact.setPhoneNumber(rs.getString(4));
contact.setEmailAddress(rs.getString(5));
return contact;
}
}
);
}
public void save(Contact contact) {
jdbc.update(
"insert into contacts " +
"(firstName, lastName, phoneNumber, emailAddress) " +
"values (?, ?, ?, ?)",
contact.getFirstName(), contact.getLastName(),
contact.getPhoneNumber(), contact.getEmailAddress());
}
}
* 스프링 부트에서, JDBC 모듈과 H2를 발견하면, JdbcTemplate 빈과, H2 Datasource 빈을 자동으로 설정
* 당연하게도, 데이터베이스 테이블의 스키마는 직접 정의해주어야 함
create table contacts (
id identity,
firstName varchar(30) not null,
lastName varchar(50) not null,
phoneNumber varchar(13),
emailAddress varchar(30)
);
2.5 실행하기
스프링에서 설정해준 , web.xml이나 DispatcherServlet 없이도, 실행 가능
* 어떠한 설정도 필요 없으며, 단지 특별한 클래스 중 하나인, 스프링 부트의 '부트스트랩'만이 필요하다
@ComponentScan
@EnableAutoConfiguration // 자동 설정 활성화
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args); // 어플리케이션 실행
}
}
* 자동설정 활성화 및 실행 줄 만으로, 실행 가능
* 남은 것은 빌드 뿐 => [$ gradle build] or [$ mvn package] ==> [$ java -jar build/libs/contacts-0.1.0.jar]
=> 이 경우 'jar'로 배포 되지만, war 배포도 충분히 가능하다
apply plugin: 'war'
war { // WAR파일로 빌드
baseName = 'contacts'
version = '0.1.0'
}
* 메이븐도 마찬가지로, jar를 단순히 war로만 바꾸어 주면 된다
3. 그루비 사용
=> 그루비는 쓸 때, 찾아보아도 될 것 같아 생략
4. 액추에이터로 애플리케이션 파악하기
액추에이터의 역할은, 스프링 부트 기반의 애플리케이션에 유용한 앤드포인트 관리 기능 추가
GET /autoconfig - 자동설정 적용 시, 스프링 부트에 의한 결정
GET /beans 어플리케이션 실행을 위해 설정되는 빈의 카탈로그
GET /configprops - 현재 값으로 빈을 설정하기 위한 모든 프로퍼티 목록
GET /dump - 각 스레드의 스택 추적을 포함한 스레드 목록
GET /env - 어플리케이션 컨텍스트에서 사용 가능한 모든 환경 변수와 시스템 프로퍼티 값의 목록