SlideShare a Scribd company logo
1 of 20
Download to read offline
Spring Boot 소개
최범균, 2014-12-22
웹 어플 만들때 필요한 것들 예시
•  Maven
•  Spring MVC
•  JPA + Spring Data
•  JSP
•  MySQL
•  Tomcat이나 Jetty로 테스트
•  SLF4J + Logback
•  JUnit, Spring Test
2	
  
Boot 이전의 설정: 메이븐
<dependencies>	
  
	
  	
  	
  <dependency>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <groupId>javax.servlet.jsp</groupId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <ar:factId>jsp-­‐api</ar:factId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <version>2.2</version>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <scope>provided</scope>	
  
	
  	
  	
  	
  </dependency>	
  
	
  	
  	
  	
  <dependency>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <groupId>javax.servlet</groupId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <ar:factId>javax.servlet-­‐api</ar:factId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <version>3.0.1</version>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <scope>provided</scope>	
  
	
  	
  	
  	
  </dependency>	
  
	
  	
  	
  	
  <dependency>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <groupId>javax.servlet</groupId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <ar:factId>jstl</ar:factId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <version>1.2</version>	
  
	
  	
  	
  	
  </dependency>	
  
	
  	
  	
  	
  <dependency>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <groupId>org.springframework</groupId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <ar:factId>spring-­‐webmvc</ar:factId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <version>${spring.version}</version>	
  
	
  	
  	
  	
  </dependency>	
  
	
  	
  	
  	
  <dependency>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <groupId>org.springframework</groupId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <ar:factId>spring-­‐orm</ar:factId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <version>${spring.version}</version>	
  
	
  	
  	
  	
  </dependency>	
  
	
  	
  	
  	
  <dependency>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <groupId>org.hibernate</groupId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <ar:factId>hibernate-­‐en:tymanager</ar:factId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <version>4.3.7.Final</version>	
  
	
  	
  	
  	
  </dependency>	
  
	
  	
  	
  	
  <dependency>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <groupId>org.springframework.data</groupId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <ar:factId>spring-­‐data-­‐jpa</ar:factId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <version>1.7.0.RELEASE</version>	
  
	
  	
  	
  	
  </dependency>	
  
	
  <dependency>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <groupId>com.mchange</groupId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <ar:factId>c3p0</ar:factId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <version>0.9.2.1</version>	
  
	
  	
  	
  	
  </dependency>	
  
	
  	
  	
  	
  <dependency>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <groupId>mysql</groupId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <ar:factId>mysql-­‐connector-­‐java</ar:factId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <version>5.1.30</version>	
  
	
  	
  	
  	
  </dependency>	
  
	
  	
  	
  	
  <dependency>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <groupId>org.springframework</groupId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <ar:factId>spring-­‐core</ar:factId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <version>${spring.version}</version>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <exclusions>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <exclusion>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <groupId>commons-­‐logging</groupId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <ar:factId>commons-­‐logging</ar:factId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </exclusion>	
  
	
  	
  	
  	
  	
  	
  	
  	
  </exclusions>	
  
	
  	
  	
  	
  </dependency>	
  
	
  	
  	
  	
  <dependency>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <groupId>org.slf4j</groupId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <ar:factId>jcl-­‐over-­‐slf4j</ar:factId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <version>1.7.7</version>	
  
	
  	
  	
  	
  </dependency>	
  
	
  	
  	
  	
  <dependency>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <groupId>ch.qos.logback</groupId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <ar:factId>logback-­‐classic</ar:factId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <version>1.1.2</version>	
  
	
  	
  	
  	
  </dependency>	
  
	
  	
  	
  	
  <dependency>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <groupId>junit</groupId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <ar:factId>junit</ar:factId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <version>4.12</version>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <scope>test</scope>	
  
	
  	
  	
  	
  </dependency>	
  
	
  	
  	
  	
  <dependency>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <groupId>org.springframework</groupId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <ar:factId>spring-­‐test</ar:factId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <version>${spring.version}</version>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <scope>test</scope>	
  
	
  	
  	
  	
  </dependency>	
  
</dependencies>	
  
<build>	
  
	
  	
  	
  	
  <plugins>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <plugin>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <ar:factId>maven-­‐compiler-­‐plugin</ar:factId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <version>3.1</version>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <configura:on>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <source>1.8</source>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <target>1.8</target>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <encoding>uU-­‐8</encoding>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </configura:on>	
  
	
  	
  	
  	
  	
  	
  	
  	
  </plugin>	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  <plugin>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <groupId>org.eclipse.jeVy</groupId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <ar:factId>jeVy-­‐maven-­‐plugin</ar:factId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <version>9.2.6.v20141205</version>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <configura:on>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <webApp>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <contextPath>/</contextPath>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </webApp>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <scanIntervalSeconds>3</scanIntervalSeconds>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </configura:on>	
  
	
  	
  	
  	
  	
  	
  	
  	
  </plugin>	
  
	
  
	
  	
  	
  	
  </plugins>	
  
</build>	
  
3	
  
Boot 이전의 설정: 스프링
@EnableJpaRepositories(basePackages	
  =	
  "domain")	
  
@EnableWebMvc	
  
@EnableTransac:onManagement	
  
@ComponentScan(basePackages	
  =	
  "controller")	
  
public	
  class	
  Config	
  extends	
  WebMvcConfigurerAdapter	
  {	
  
	
  	
  	
  	
  @Override	
  
	
  	
  	
  	
  public	
  void	
  configureDefaultServletHandling(DefaultServletHandlerConfigurer	
  configurer)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  configurer.enable();	
  
	
  	
  	
  	
  }	
  
	
  	
  	
  	
  @Override	
  
	
  	
  	
  	
  public	
  void	
  configureViewResolvers(ViewResolverRegistry	
  registry)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  registry.jsp().prefix("/WEB-­‐INF/view/");	
  
	
  	
  	
  	
  }	
  
	
  	
  	
  	
  @Bean	
  
	
  	
  	
  	
  public	
  LocalContainerEn:tyManagerFactoryBean	
  en:tyManagerFactory()	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  LocalContainerEn:tyManagerFactoryBean	
  emf	
  =	
  new	
  LocalContainerEn:tyManagerFactoryBean();	
  
	
  	
  	
  	
  	
  	
  	
  	
  emf.setPackagesToScan("domain");	
  
	
  	
  	
  	
  	
  	
  	
  	
  emf.setDataSource(dataSource());	
  
	
  	
  	
  	
  	
  	
  	
  	
  HibernateJpaVendorAdapter	
  adapter	
  =	
  new	
  HibernateJpaVendorAdapter();	
  
	
  	
  	
  	
  	
  	
  	
  	
  adapter.setDatabase(Database.MYSQL);	
  
	
  	
  	
  	
  	
  	
  	
  	
  adapter.setShowSql(true);	
  
	
  	
  	
  	
  	
  	
  	
  	
  emf.setJpaVendorAdapter(adapter);	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  emf;	
  
	
  	
  	
  	
  }	
  
	
  	
  	
  	
  @Bean	
  
	
  	
  	
  	
  public	
  DataSource	
  dataSource()	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  ComboPooledDataSource	
  ds	
  =	
  new	
  ComboPooledDataSource();	
  
	
  	
  	
  	
  	
  	
  	
  	
  try	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ds.setDriverClass("com.mysql.jdbc.Driver");	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  catch	
  (PropertyVetoExcep:on	
  e)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  throw	
  new	
  Run:meExcep:on(e);	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  ds.setJdbcUrl("jdbc:mysql://localhost/test?characterEncoding=uU8");	
  
	
  	
  	
  	
  	
  	
  	
  	
  ds.setUser("root");	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  ds;	
  
	
  	
  	
  	
  }	
  
	
  	
  	
  	
  @Bean	
  
	
  	
  	
  	
  public	
  PlaUormTransac:onManager	
  transac:onManager(En:tyManagerFactory	
  emf)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  JpaTransac:onManager	
  tm	
  =	
  new	
  JpaTransac:onManager();	
  
	
  	
  	
  	
  	
  	
  	
  	
  tm.setEn:tyManagerFactory(emf);	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  tm;	
  
	
  	
  	
  	
  }	
  
}	
  
4	
  
Boot 이전의 설정: web.xml
<?xml	
  version="1.0"	
  encoding="UTF-­‐8"?>	
  
<web-­‐app	
  xmlns:xsi="hVp://www.w3.org/2001/XMLSchema-­‐instance"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  xmlns="hVp://java.sun.com/xml/ns/javaee"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  xsi:schemaLoca:on="hVp://java.sun.com/xml/ns/javaee	
  
	
  	
  	
  	
  	
  	
  hVp://java.sun.com/xml/ns/javaee/web-­‐app_3_0.xsd"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  version="3.0">	
  
	
  
	
  	
  	
  	
  <servlet>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <servlet-­‐name>dispatcher</servlet-­‐name>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <servlet-­‐class>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  org.springframework.web.servlet.DispatcherServlet	
  
	
  	
  	
  	
  	
  	
  	
  	
  </servlet-­‐class>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <init-­‐param>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <param-­‐name>contextClass</param-­‐name>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <param-­‐value>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  org.springframework.web.context.support.Annota:onConfigWebApplica:onContext	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </param-­‐value>	
  
	
  	
  	
  	
  	
  	
  	
  	
  </init-­‐param>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <init-­‐param>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <param-­‐name>contextConfigLoca:on</param-­‐name>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <param-­‐value>config.Config</param-­‐value>	
  
	
  	
  	
  	
  	
  	
  	
  	
  </init-­‐param>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <load-­‐on-­‐startup>1</load-­‐on-­‐startup>	
  
	
  	
  	
  	
  </servlet>	
  
	
  
	
  	
  	
  	
  <servlet-­‐mapping>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <servlet-­‐name>dispatcher</servlet-­‐name>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <url-­‐paVern>/</url-­‐paVern>	
  
	
  	
  	
  	
  </servlet-­‐mapping>	
  
	
  
	
  	
  	
  	
  <filter>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <filter-­‐name>encodingFilter</filter-­‐name>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <filter-­‐class>org.springframework.web.filter.CharacterEncodingFilter</filter-­‐class>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <init-­‐param>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <param-­‐name>encoding</param-­‐name>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <param-­‐value>UTF-­‐8</param-­‐value>	
  
	
  	
  	
  	
  	
  	
  	
  	
  </init-­‐param>	
  
	
  	
  	
  	
  </filter>	
  
	
  	
  	
  	
  <filter-­‐mapping>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <filter-­‐name>encodingFilter</filter-­‐name>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <url-­‐paVern>/*</url-­‐paVern>	
  
	
  	
  	
  	
  </filter-­‐mapping>	
  
	
  
</web-­‐app>	
   5	
  
프로젝트 설정 작업
•  따분하고 지루하고 실수하기 딱 좋은 과정
– 의존 모듈 간 버전 맞추기
– (다른 소스에서) 설정 C&P하고 수정
– 잘 되나 테스트
– 빌드와 실행
6	
  
Boot
•  최소한의 노력으로 스프링 기반 프로젝트를
시작할 수 있도록 도와줌
– 스프링 및 연동 기술의 표준화된 버전 설정
– 설정 최소화 : 기술별 표준화된 설정 모음 제공
– 임베디드 서버, 보안, 모니터링 구현 지원
7	
  
Boot 이후: 설정
<parent>	
  
	
  	
  	
  	
  <groupId>org.springframework.boot</groupId>	
  
	
  	
  	
  	
  <ar:factId>spring-­‐boot-­‐starter-­‐parent</ar:factId>	
  
	
  	
  	
  	
  <version>1.2.0.RELEASE</version>	
  
</parent>	
  
<dependencies>	
  
	
  	
  	
  	
  <dependency>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <groupId>org.springframework.boot</groupId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <ar:factId>spring-­‐boot-­‐starter-­‐web</ar:factId>	
  
	
  	
  	
  	
  </dependency>	
  
	
  	
  	
  	
  <dependency>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <groupId>org.springframework.boot</groupId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <ar:factId>spring-­‐boot-­‐starter-­‐data-­‐jpa</ar:factId>	
  
	
  	
  	
  	
  </dependency>	
  
	
  	
  	
  	
  <dependency>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <groupId>org.springframework.boot</groupId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <ar:factId>spring-­‐boot-­‐starter-­‐test</ar:factId>	
  
	
  	
  	
  	
  </dependency>	
  
	
  	
  	
  	
  <dependency>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <groupId>mysql</groupId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <ar:factId>mysql-­‐connector-­‐java</ar:factId>	
  
	
  	
  	
  	
  </dependency>	
  
	
  	
  	
  	
  <dependency>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <groupId>javax.servlet</groupId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <ar:factId>jstl</ar:factId>	
  
	
  	
  	
  	
  </dependency>	
  
	
  	
  	
  	
  <dependency>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <groupId>org.springframework.boot</groupId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <ar:factId>spring-­‐boot-­‐starter-­‐tomcat</ar:factId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <scope>provided</scope>	
  
	
  	
  	
  	
  </dependency>	
  
	
  	
  	
  	
  <dependency>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <groupId>org.apache.tomcat.embed</groupId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <ar:factId>tomcat-­‐embed-­‐jasper</ar:factId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <scope>provided</scope>	
  
	
  	
  	
  	
  </dependency>	
  
</dependencies>	
  
<build>	
  
	
  	
  	
  	
  <plugins>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <plugin>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <groupId>org.springframework.boot</groupId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <ar:factId>spring-­‐boot-­‐maven-­‐plugin</ar:factId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  </plugin>	
  
	
  	
  	
  	
  </plugins>	
  
</build>	
  
@SpringBootApplica:on	
  
public	
  class	
  Applica:on	
  {	
  
	
  
	
  	
  	
  	
  public	
  sta:c	
  void	
  main(String[]	
  args)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  SpringApplica:on.run(Applica:on.class,	
  args);	
  
	
  	
  	
  	
  }	
  
	
  
}	
  
spring.view.prefix:	
  /WEB-­‐INF/view/	
  
spring.view.suffix:	
  .jsp	
  
	
  
spring.datasource.url=jdbc:mysql://localhost/test?characterEncoding=uU8	
  
spring.datasource.username=root	
  
spring.datasource.password=	
  
spring.datasource.driver=com.mysql.jdbc.Driver	
  
	
  
spring.jpa.database=MYSQL	
  
8	
  
이전과 이후 비교
9	
  
Boot가 해 준 것 1, 모듈 설정
<parent>	
  
	
  	
  	
  	
  <groupId>org.springframework.boot</groupId>	
  
	
  	
  	
  	
  <ar:factId>spring-­‐boot-­‐starter-­‐parent</ar:factId>	
  
	
  	
  	
  	
  <version>1.2.0.RELEASE</version>	
  
</parent>	
  
	
  
<dependencies>	
  
	
  	
  	
  	
  <dependency>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <groupId>org.springframework.boot</groupId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <ar:factId>spring-­‐boot-­‐starter-­‐web</ar:factId>	
  
	
  	
  	
  	
  </dependency>	
  
	
  	
  	
  	
  <dependency>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <groupId>org.springframework.boot</groupId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <ar:factId>spring-­‐boot-­‐starter-­‐data-­‐jpa</ar:factId>	
  
	
  	
  	
  	
  </dependency>	
  
	
  	
  	
  	
  <dependency>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <groupId>org.springframework.boot</groupId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <ar:factId>spring-­‐boot-­‐starter-­‐test</ar:factId>	
  
	
  	
  	
  	
  </dependency>	
  
	
  	
  	
  <dependency>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <groupId>org.springframework.boot</groupId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <ar:factId>spring-­‐boot-­‐starter-­‐tomcat</ar:factId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <scope>provided</scope>	
  
	
  	
  	
  	
  </dependency>	
  
	
  	
  	
  	
  <dependency>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <groupId>org.apache.tomcat.embed</groupId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <ar:factId>tomcat-­‐embed-­‐jasper</ar:factId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <scope>provided</scope>	
  
	
  	
  	
  	
  </dependency>	
  
</dependencies>	
  
표준 버전 모음	
  
spring-­‐mvc 등 웹 관련 모듈 자동 설정	
  
spring-­‐data-­‐jpa,	
  JPA,	
  Hibernate 관련 모듈 설정	
  
연관된 spring-­‐orm,	
  커넥션 풀 등 모듈 설정	
  
spring-­‐test,	
  JUnit	
  등 관련 모듈 설정	
  
임베디드 톰캣 관련 모듈 설정	
  
10	
  
모듈 구성
11	
  
Boot가 해 준 것 2, 스프링 설정
@SpringBootApplica7on	
  
public	
  class	
  Applica:on	
  {	
  
	
  
	
  	
  	
  	
  public	
  sta:c	
  void	
  main(String[]	
  args)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  SpringApplica7on.run(Applica:on.class,	
  args);	
  
	
  	
  	
  	
  }	
  
	
  
}	
  
	
  
//	
  @SpringBootApplica:on은 다음과 동일	
  
//	
  @Configura:on	
  
//	
  @EnableAutoConfigura7on	
  
//	
  @ComponentScan	
  
모든 설정 자동 생성!	
  
- 스프링 MVC	
  
-­‐	
  DataSource	
  
-­‐	
  JPA,	
  JPA	
  TX,	
  Spring	
  Data	
  JPA	
  
-­‐	
  DispatcherServlet,	
  CharacterEncodingFilter	
  
spring.view.prefix:	
  /WEB-­‐INF/view/	
  
spring.view.suffix:	
  .jsp	
  
	
  
spring.datasource.url=jdbc:mysql://localhost/test?...	
  
spring.datasource.username=root	
  
spring.datasource.password=	
  
spring.datasource.driver=com.mysql.jdbc.Driver	
  
	
  
spring.jpa.database=MYSQL	
  
JSP용 ViewResolver 설정	
  
DataSource	
  설정	
  
JPA 설정	
  
12	
  
@EnableAutoConfiguration
@EnableAutoConfigura:on	
   @JpaRepositoriesAutoConfigura:on	
  
@HibernateJpaAutoConfigura:on	
  
@EmbeddedServletContainerAutoConfigura:on	
  
@WebMvcAutoConfigura:on	
  
@DataSourceAutoConfigura:on	
  
@OOOOAutoConfigura:on	
  들	
  
각 AutoConfigura:on은 조건에 따라 기본 설정 생성	
  
13	
  
Boot가 해 준 것 3, 서버 실행
•  임베디드 톰캣으로 실행
– mvn spring-boot:run
...	
  
[INFO]	
  -­‐-­‐-­‐	
  spring-­‐boot-­‐maven-­‐plugin:1.2.0.RELEASE:run	
  (default-­‐cli)	
  @	
  bootVersion	
  -­‐-­‐-­‐	
  
...	
  
10:11:57.394	
  [app.Applica:on.main()]	
  INFO	
  	
  app.Applica:on	
  -­‐	
  Star:ng	
  Applica:on	
  on	
  MADVIRUSui-­‐MacBook-­‐Air.local	
  with	
  PID	
  15134	
  (...)	
  
...	
  
...	
  
10:11:59.947	
  [app.Applica:on.main()]	
  INFO	
  	
  o.s.b.c.e.t.TomcatEmbeddedServletContainer	
  -­‐	
  Tomcat	
  ini:alized	
  with	
  port(s):	
  8080/hVp	
  
10:12:00.219	
  [app.Applica:on.main()]	
  INFO	
  	
  o.a.catalina.core.StandardService	
  -­‐	
  Star7ng	
  service	
  Tomcat	
  
10:12:00.221	
  [app.Applica:on.main()]	
  INFO	
  	
  o.a.catalina.core.StandardEngine	
  -­‐	
  Star7ng	
  Servlet	
  Engine:	
  Apache	
  Tomcat/8.0.15	
  
...	
  
...	
  
10:12:05.708	
  [app.Applica:on.main()]	
  INFO	
  	
  o.s.b.c.e.t.TomcatEmbeddedServletContainer	
  -­‐	
  Tomcat	
  started	
  on	
  port(s):	
  8080/hIp	
  
10:12:05.712	
  [app.Applica:on.main()]	
  INFO	
  	
  app.Applica:on	
  -­‐	
  Started	
  Applica:on	
  in	
  8.702	
  seconds	
  (JVM	
  running	
  for	
  12.428)	
  
14	
  
Boot가 해 준 것 4, 실행 가능 war 생성
•  패키징한 war를 java 명령어로 실행 가능
– mvn package
– java -jar target/myapp.war
•  임베디드 톰캣으로 실행
•  생성된 war를 일반 WAS에 배포해도 됨
•  war가 아닌 jar 타입으로도 가능
15	
  
다양한 기능에 대한 자동 설정 지원
16	
  
운영지원 기능 : Actuator
•  서비스 상태(Health), 계측(Metric) 등 서비스
운영 지원을 위한 정보 제공 기능
•  다음 의존 추가로 자동 활성화
•  예, /health
<dependency>	
  
	
  	
  	
  	
  <groupId>org.springframework.boot</groupId>	
  
	
  	
  	
  	
  <ar:factId>spring-­‐boot-­‐starter-­‐actuator</ar:factId>	
  
</dependency>	
  
17	
  
Actuator가 제공하는 정보
•  env : 스프링 Environment의 프로퍼티 목록
•  health : 어플리케이션 Health 상태 정보
•  metrics : 계측 정보
•  mappings : 웹 경로 매핑 정보
•  dump : 쓰레드 덤프
•  beans : 빈 목록 정보
•  trace : 최근 HTTP 요청 목록 표시(100개)
18	
  
기타
•  Remote Shell 기능 (Telnet로 연결해서 관리)
•  기본 로깅 설정 제공
•  NoSQL 지원 (Redis, MongoDB, Solr 등)
•  WebSocket 설정 지원
•  JTA 설정 지원 (Atomikos, Bitronix)
•  Maven과 Gradle 지원
19	
  
참고자료
•  Spring Boot 프로젝트
– http://projects.spring.io/spring-boot/
•  레퍼런스 문서가 좋음
•  도서: Learning Spring Boot
– http://goo.gl/Awzzoz
•  Gradle 기반
•  현재 버전에 맞게 코드를 수정해야 할 부분이 간혹 있
지만 감을 잡기에 충분한 지식 제공
20	
  

More Related Content

What's hot

Spring Framework - AOP
Spring Framework - AOPSpring Framework - AOP
Spring Framework - AOPDzmitry Naskou
 
Java Spring framework, Dependency Injection, DI, IoC, Inversion of Control
Java Spring framework, Dependency Injection, DI, IoC, Inversion of ControlJava Spring framework, Dependency Injection, DI, IoC, Inversion of Control
Java Spring framework, Dependency Injection, DI, IoC, Inversion of ControlArjun Thakur
 
introduction to Vue.js 3
introduction to Vue.js 3 introduction to Vue.js 3
introduction to Vue.js 3 ArezooKmn
 
Spring boot - an introduction
Spring boot - an introductionSpring boot - an introduction
Spring boot - an introductionJonathan Holloway
 
Spring framework in depth
Spring framework in depthSpring framework in depth
Spring framework in depthVinay Kumar
 
Spring Framework Tutorial | Spring Tutorial For Beginners With Examples | Jav...
Spring Framework Tutorial | Spring Tutorial For Beginners With Examples | Jav...Spring Framework Tutorial | Spring Tutorial For Beginners With Examples | Jav...
Spring Framework Tutorial | Spring Tutorial For Beginners With Examples | Jav...Edureka!
 
ASP.NET Web API
ASP.NET Web APIASP.NET Web API
ASP.NET Web APIhabib_786
 
JDBC - JPA - Spring Data
JDBC - JPA - Spring DataJDBC - JPA - Spring Data
JDBC - JPA - Spring DataArturs Drozdovs
 
ASP.NET MVC Presentation
ASP.NET MVC PresentationASP.NET MVC Presentation
ASP.NET MVC Presentationivpol
 

What's hot (20)

Spring Framework - AOP
Spring Framework - AOPSpring Framework - AOP
Spring Framework - AOP
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
Java Spring framework, Dependency Injection, DI, IoC, Inversion of Control
Java Spring framework, Dependency Injection, DI, IoC, Inversion of ControlJava Spring framework, Dependency Injection, DI, IoC, Inversion of Control
Java Spring framework, Dependency Injection, DI, IoC, Inversion of Control
 
introduction to Vue.js 3
introduction to Vue.js 3 introduction to Vue.js 3
introduction to Vue.js 3
 
Spring boot
Spring bootSpring boot
Spring boot
 
Introduction to Spring Boot
Introduction to Spring BootIntroduction to Spring Boot
Introduction to Spring Boot
 
Spring data jpa
Spring data jpaSpring data jpa
Spring data jpa
 
Spring Data JPA
Spring Data JPASpring Data JPA
Spring Data JPA
 
Spring Security 5
Spring Security 5Spring Security 5
Spring Security 5
 
Angular
AngularAngular
Angular
 
Spring boot - an introduction
Spring boot - an introductionSpring boot - an introduction
Spring boot - an introduction
 
Spring framework in depth
Spring framework in depthSpring framework in depth
Spring framework in depth
 
Spring AOP
Spring AOPSpring AOP
Spring AOP
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
 
Spring Framework Tutorial | Spring Tutorial For Beginners With Examples | Jav...
Spring Framework Tutorial | Spring Tutorial For Beginners With Examples | Jav...Spring Framework Tutorial | Spring Tutorial For Beginners With Examples | Jav...
Spring Framework Tutorial | Spring Tutorial For Beginners With Examples | Jav...
 
ASP.NET Web API
ASP.NET Web APIASP.NET Web API
ASP.NET Web API
 
JDBC - JPA - Spring Data
JDBC - JPA - Spring DataJDBC - JPA - Spring Data
JDBC - JPA - Spring Data
 
ASP.NET MVC Presentation
ASP.NET MVC PresentationASP.NET MVC Presentation
ASP.NET MVC Presentation
 
Spring annotation
Spring annotationSpring annotation
Spring annotation
 

Viewers also liked

스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해beom kyun choi
 
Spring boot-summary(part2-part3)
Spring boot-summary(part2-part3)Spring boot-summary(part2-part3)
Spring boot-summary(part2-part3)Jaesup Kwak
 
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration수홍 이
 
Springcamp spring boot intro
Springcamp spring boot introSpringcamp spring boot intro
Springcamp spring boot introJae-il Lee
 
TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기Wonchang Song
 
소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵중선 곽
 
Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)sung yong jung
 
자동화된 Test Case의 효과
자동화된 Test Case의 효과자동화된 Test Case의 효과
자동화된 Test Case의 효과도형 임
 
목 오브젝트(Mock Object)의 이해
목 오브젝트(Mock Object)의 이해목 오브젝트(Mock Object)의 이해
목 오브젝트(Mock Object)의 이해Yong Hoon Kim
 
간단 Ip 필터 구현 이야기
간단 Ip 필터 구현 이야기간단 Ip 필터 구현 이야기
간단 Ip 필터 구현 이야기beom kyun choi
 
자바8 람다식 소개
자바8 람다식 소개자바8 람다식 소개
자바8 람다식 소개beom kyun choi
 
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개beom kyun choi
 
스프링 부트와 로깅
스프링 부트와 로깅스프링 부트와 로깅
스프링 부트와 로깅Keesun Baik
 
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례Jemin Huh
 
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 TestOkjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 Testbeom kyun choi
 

Viewers also liked (18)

스프링컨트롤러예외처리,@ExceptionHandler, @ControllerAdvice
스프링컨트롤러예외처리,@ExceptionHandler, @ControllerAdvice스프링컨트롤러예외처리,@ExceptionHandler, @ControllerAdvice
스프링컨트롤러예외처리,@ExceptionHandler, @ControllerAdvice
 
스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해
 
Spring boot-summary(part2-part3)
Spring boot-summary(part2-part3)Spring boot-summary(part2-part3)
Spring boot-summary(part2-part3)
 
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
 
Springcamp spring boot intro
Springcamp spring boot introSpringcamp spring boot intro
Springcamp spring boot intro
 
TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기
 
TEST?
TEST?TEST?
TEST?
 
소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵
 
Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)
 
자동화된 Test Case의 효과
자동화된 Test Case의 효과자동화된 Test Case의 효과
자동화된 Test Case의 효과
 
목 오브젝트(Mock Object)의 이해
목 오브젝트(Mock Object)의 이해목 오브젝트(Mock Object)의 이해
목 오브젝트(Mock Object)의 이해
 
Maven의 이해
Maven의 이해Maven의 이해
Maven의 이해
 
간단 Ip 필터 구현 이야기
간단 Ip 필터 구현 이야기간단 Ip 필터 구현 이야기
간단 Ip 필터 구현 이야기
 
자바8 람다식 소개
자바8 람다식 소개자바8 람다식 소개
자바8 람다식 소개
 
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개
 
스프링 부트와 로깅
스프링 부트와 로깅스프링 부트와 로깅
스프링 부트와 로깅
 
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
 
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 TestOkjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
 

More from beom kyun choi

옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개beom kyun choi
 
DDD로 복잡함 다루기
DDD로 복잡함 다루기DDD로 복잡함 다루기
DDD로 복잡함 다루기beom kyun choi
 
TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나beom kyun choi
 
keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)beom kyun choi
 
Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀beom kyun choi
 
Ddd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksugDdd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksugbeom kyun choi
 
파이썬 언어 기초
파이썬 언어 기초파이썬 언어 기초
파이썬 언어 기초beom kyun choi
 
도메인구현 KSUG 20151128
도메인구현 KSUG 20151128도메인구현 KSUG 20151128
도메인구현 KSUG 20151128beom kyun choi
 
Event source 학습 내용 공유
Event source 학습 내용 공유Event source 학습 내용 공유
Event source 학습 내용 공유beom kyun choi
 
모델링 연습 리뷰
모델링 연습 리뷰모델링 연습 리뷰
모델링 연습 리뷰beom kyun choi
 
ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료beom kyun choi
 
Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)beom kyun choi
 
리뷰의 기술 소개
리뷰의 기술 소개리뷰의 기술 소개
리뷰의 기술 소개beom kyun choi
 
하둡2 YARN 짧게 보기
하둡2 YARN 짧게 보기하둡2 YARN 짧게 보기
하둡2 YARN 짧게 보기beom kyun choi
 
차원축소 훑어보기 (PCA, SVD, NMF)
차원축소 훑어보기 (PCA, SVD, NMF)차원축소 훑어보기 (PCA, SVD, NMF)
차원축소 훑어보기 (PCA, SVD, NMF)beom kyun choi
 
객체 지향 발담그기 JCO 컨퍼런스 14회
객체 지향 발담그기 JCO 컨퍼런스 14회객체 지향 발담그기 JCO 컨퍼런스 14회
객체 지향 발담그기 JCO 컨퍼런스 14회beom kyun choi
 

More from beom kyun choi (20)

옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
 
DDD로 복잡함 다루기
DDD로 복잡함 다루기DDD로 복잡함 다루기
DDD로 복잡함 다루기
 
TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나
 
keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)
 
DDD 준비 서문래
DDD 준비 서문래DDD 준비 서문래
DDD 준비 서문래
 
Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀
 
Ddd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksugDdd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksug
 
MVP 패턴 소개
MVP 패턴 소개MVP 패턴 소개
MVP 패턴 소개
 
파이썬 언어 기초
파이썬 언어 기초파이썬 언어 기초
파이썬 언어 기초
 
도메인구현 KSUG 20151128
도메인구현 KSUG 20151128도메인구현 KSUG 20151128
도메인구현 KSUG 20151128
 
Event source 학습 내용 공유
Event source 학습 내용 공유Event source 학습 내용 공유
Event source 학습 내용 공유
 
모델링 연습 리뷰
모델링 연습 리뷰모델링 연습 리뷰
모델링 연습 리뷰
 
ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료
 
Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)
 
리뷰의 기술 소개
리뷰의 기술 소개리뷰의 기술 소개
리뷰의 기술 소개
 
Zookeeper 소개
Zookeeper 소개Zookeeper 소개
Zookeeper 소개
 
하둡2 YARN 짧게 보기
하둡2 YARN 짧게 보기하둡2 YARN 짧게 보기
하둡2 YARN 짧게 보기
 
차원축소 훑어보기 (PCA, SVD, NMF)
차원축소 훑어보기 (PCA, SVD, NMF)차원축소 훑어보기 (PCA, SVD, NMF)
차원축소 훑어보기 (PCA, SVD, NMF)
 
객체 지향 발담그기 JCO 컨퍼런스 14회
객체 지향 발담그기 JCO 컨퍼런스 14회객체 지향 발담그기 JCO 컨퍼런스 14회
객체 지향 발담그기 JCO 컨퍼런스 14회
 
Storm 훑어보기
Storm 훑어보기Storm 훑어보기
Storm 훑어보기
 

Spring Boot 소개

  • 2. 웹 어플 만들때 필요한 것들 예시 •  Maven •  Spring MVC •  JPA + Spring Data •  JSP •  MySQL •  Tomcat이나 Jetty로 테스트 •  SLF4J + Logback •  JUnit, Spring Test 2  
  • 3. Boot 이전의 설정: 메이븐 <dependencies>        <dependency>                  <groupId>javax.servlet.jsp</groupId>                  <ar:factId>jsp-­‐api</ar:factId>                  <version>2.2</version>                  <scope>provided</scope>          </dependency>          <dependency>                  <groupId>javax.servlet</groupId>                  <ar:factId>javax.servlet-­‐api</ar:factId>                  <version>3.0.1</version>                  <scope>provided</scope>          </dependency>          <dependency>                  <groupId>javax.servlet</groupId>                  <ar:factId>jstl</ar:factId>                  <version>1.2</version>          </dependency>          <dependency>                  <groupId>org.springframework</groupId>                  <ar:factId>spring-­‐webmvc</ar:factId>                  <version>${spring.version}</version>          </dependency>          <dependency>                  <groupId>org.springframework</groupId>                  <ar:factId>spring-­‐orm</ar:factId>                  <version>${spring.version}</version>          </dependency>          <dependency>                  <groupId>org.hibernate</groupId>                  <ar:factId>hibernate-­‐en:tymanager</ar:factId>                  <version>4.3.7.Final</version>          </dependency>          <dependency>                  <groupId>org.springframework.data</groupId>                  <ar:factId>spring-­‐data-­‐jpa</ar:factId>                  <version>1.7.0.RELEASE</version>          </dependency>    <dependency>                  <groupId>com.mchange</groupId>                  <ar:factId>c3p0</ar:factId>                  <version>0.9.2.1</version>          </dependency>          <dependency>                  <groupId>mysql</groupId>                  <ar:factId>mysql-­‐connector-­‐java</ar:factId>                  <version>5.1.30</version>          </dependency>          <dependency>                  <groupId>org.springframework</groupId>                  <ar:factId>spring-­‐core</ar:factId>                  <version>${spring.version}</version>                  <exclusions>                          <exclusion>                                  <groupId>commons-­‐logging</groupId>                                  <ar:factId>commons-­‐logging</ar:factId>                          </exclusion>                  </exclusions>          </dependency>          <dependency>                  <groupId>org.slf4j</groupId>                  <ar:factId>jcl-­‐over-­‐slf4j</ar:factId>                  <version>1.7.7</version>          </dependency>          <dependency>                  <groupId>ch.qos.logback</groupId>                  <ar:factId>logback-­‐classic</ar:factId>                  <version>1.1.2</version>          </dependency>          <dependency>                  <groupId>junit</groupId>                  <ar:factId>junit</ar:factId>                  <version>4.12</version>                  <scope>test</scope>          </dependency>          <dependency>                  <groupId>org.springframework</groupId>                  <ar:factId>spring-­‐test</ar:factId>                  <version>${spring.version}</version>                  <scope>test</scope>          </dependency>   </dependencies>   <build>          <plugins>                  <plugin>                          <ar:factId>maven-­‐compiler-­‐plugin</ar:factId>                          <version>3.1</version>                          <configura:on>                                  <source>1.8</source>                                  <target>1.8</target>                                  <encoding>uU-­‐8</encoding>                          </configura:on>                  </plugin>                    <plugin>                          <groupId>org.eclipse.jeVy</groupId>                          <ar:factId>jeVy-­‐maven-­‐plugin</ar:factId>                          <version>9.2.6.v20141205</version>                          <configura:on>                                  <webApp>                                          <contextPath>/</contextPath>                                  </webApp>                                  <scanIntervalSeconds>3</scanIntervalSeconds>                          </configura:on>                  </plugin>            </plugins>   </build>   3  
  • 4. Boot 이전의 설정: 스프링 @EnableJpaRepositories(basePackages  =  "domain")   @EnableWebMvc   @EnableTransac:onManagement   @ComponentScan(basePackages  =  "controller")   public  class  Config  extends  WebMvcConfigurerAdapter  {          @Override          public  void  configureDefaultServletHandling(DefaultServletHandlerConfigurer  configurer)  {                  configurer.enable();          }          @Override          public  void  configureViewResolvers(ViewResolverRegistry  registry)  {                  registry.jsp().prefix("/WEB-­‐INF/view/");          }          @Bean          public  LocalContainerEn:tyManagerFactoryBean  en:tyManagerFactory()  {                  LocalContainerEn:tyManagerFactoryBean  emf  =  new  LocalContainerEn:tyManagerFactoryBean();                  emf.setPackagesToScan("domain");                  emf.setDataSource(dataSource());                  HibernateJpaVendorAdapter  adapter  =  new  HibernateJpaVendorAdapter();                  adapter.setDatabase(Database.MYSQL);                  adapter.setShowSql(true);                  emf.setJpaVendorAdapter(adapter);                  return  emf;          }          @Bean          public  DataSource  dataSource()  {                  ComboPooledDataSource  ds  =  new  ComboPooledDataSource();                  try  {                          ds.setDriverClass("com.mysql.jdbc.Driver");                  }  catch  (PropertyVetoExcep:on  e)  {                          throw  new  Run:meExcep:on(e);                  }                  ds.setJdbcUrl("jdbc:mysql://localhost/test?characterEncoding=uU8");                  ds.setUser("root");                  return  ds;          }          @Bean          public  PlaUormTransac:onManager  transac:onManager(En:tyManagerFactory  emf)  {                  JpaTransac:onManager  tm  =  new  JpaTransac:onManager();                  tm.setEn:tyManagerFactory(emf);                  return  tm;          }   }   4  
  • 5. Boot 이전의 설정: web.xml <?xml  version="1.0"  encoding="UTF-­‐8"?>   <web-­‐app  xmlns:xsi="hVp://www.w3.org/2001/XMLSchema-­‐instance"                    xmlns="hVp://java.sun.com/xml/ns/javaee"                    xsi:schemaLoca:on="hVp://java.sun.com/xml/ns/javaee              hVp://java.sun.com/xml/ns/javaee/web-­‐app_3_0.xsd"                    version="3.0">            <servlet>                  <servlet-­‐name>dispatcher</servlet-­‐name>                  <servlet-­‐class>                          org.springframework.web.servlet.DispatcherServlet                  </servlet-­‐class>                  <init-­‐param>                          <param-­‐name>contextClass</param-­‐name>                          <param-­‐value>                                  org.springframework.web.context.support.Annota:onConfigWebApplica:onContext                          </param-­‐value>                  </init-­‐param>                  <init-­‐param>                          <param-­‐name>contextConfigLoca:on</param-­‐name>                          <param-­‐value>config.Config</param-­‐value>                  </init-­‐param>                  <load-­‐on-­‐startup>1</load-­‐on-­‐startup>          </servlet>            <servlet-­‐mapping>                  <servlet-­‐name>dispatcher</servlet-­‐name>                  <url-­‐paVern>/</url-­‐paVern>          </servlet-­‐mapping>            <filter>                  <filter-­‐name>encodingFilter</filter-­‐name>                  <filter-­‐class>org.springframework.web.filter.CharacterEncodingFilter</filter-­‐class>                  <init-­‐param>                          <param-­‐name>encoding</param-­‐name>                          <param-­‐value>UTF-­‐8</param-­‐value>                  </init-­‐param>          </filter>          <filter-­‐mapping>                  <filter-­‐name>encodingFilter</filter-­‐name>                  <url-­‐paVern>/*</url-­‐paVern>          </filter-­‐mapping>     </web-­‐app>   5  
  • 6. 프로젝트 설정 작업 •  따분하고 지루하고 실수하기 딱 좋은 과정 – 의존 모듈 간 버전 맞추기 – (다른 소스에서) 설정 C&P하고 수정 – 잘 되나 테스트 – 빌드와 실행 6  
  • 7. Boot •  최소한의 노력으로 스프링 기반 프로젝트를 시작할 수 있도록 도와줌 – 스프링 및 연동 기술의 표준화된 버전 설정 – 설정 최소화 : 기술별 표준화된 설정 모음 제공 – 임베디드 서버, 보안, 모니터링 구현 지원 7  
  • 8. Boot 이후: 설정 <parent>          <groupId>org.springframework.boot</groupId>          <ar:factId>spring-­‐boot-­‐starter-­‐parent</ar:factId>          <version>1.2.0.RELEASE</version>   </parent>   <dependencies>          <dependency>                  <groupId>org.springframework.boot</groupId>                  <ar:factId>spring-­‐boot-­‐starter-­‐web</ar:factId>          </dependency>          <dependency>                  <groupId>org.springframework.boot</groupId>                  <ar:factId>spring-­‐boot-­‐starter-­‐data-­‐jpa</ar:factId>          </dependency>          <dependency>                  <groupId>org.springframework.boot</groupId>                  <ar:factId>spring-­‐boot-­‐starter-­‐test</ar:factId>          </dependency>          <dependency>                  <groupId>mysql</groupId>                  <ar:factId>mysql-­‐connector-­‐java</ar:factId>          </dependency>          <dependency>                  <groupId>javax.servlet</groupId>                  <ar:factId>jstl</ar:factId>          </dependency>          <dependency>                  <groupId>org.springframework.boot</groupId>                  <ar:factId>spring-­‐boot-­‐starter-­‐tomcat</ar:factId>                  <scope>provided</scope>          </dependency>          <dependency>                  <groupId>org.apache.tomcat.embed</groupId>                  <ar:factId>tomcat-­‐embed-­‐jasper</ar:factId>                  <scope>provided</scope>          </dependency>   </dependencies>   <build>          <plugins>                  <plugin>                          <groupId>org.springframework.boot</groupId>                          <ar:factId>spring-­‐boot-­‐maven-­‐plugin</ar:factId>                  </plugin>          </plugins>   </build>   @SpringBootApplica:on   public  class  Applica:on  {            public  sta:c  void  main(String[]  args)  {                  SpringApplica:on.run(Applica:on.class,  args);          }     }   spring.view.prefix:  /WEB-­‐INF/view/   spring.view.suffix:  .jsp     spring.datasource.url=jdbc:mysql://localhost/test?characterEncoding=uU8   spring.datasource.username=root   spring.datasource.password=   spring.datasource.driver=com.mysql.jdbc.Driver     spring.jpa.database=MYSQL   8  
  • 10. Boot가 해 준 것 1, 모듈 설정 <parent>          <groupId>org.springframework.boot</groupId>          <ar:factId>spring-­‐boot-­‐starter-­‐parent</ar:factId>          <version>1.2.0.RELEASE</version>   </parent>     <dependencies>          <dependency>                  <groupId>org.springframework.boot</groupId>                  <ar:factId>spring-­‐boot-­‐starter-­‐web</ar:factId>          </dependency>          <dependency>                  <groupId>org.springframework.boot</groupId>                  <ar:factId>spring-­‐boot-­‐starter-­‐data-­‐jpa</ar:factId>          </dependency>          <dependency>                  <groupId>org.springframework.boot</groupId>                  <ar:factId>spring-­‐boot-­‐starter-­‐test</ar:factId>          </dependency>        <dependency>                  <groupId>org.springframework.boot</groupId>                  <ar:factId>spring-­‐boot-­‐starter-­‐tomcat</ar:factId>                  <scope>provided</scope>          </dependency>          <dependency>                  <groupId>org.apache.tomcat.embed</groupId>                  <ar:factId>tomcat-­‐embed-­‐jasper</ar:factId>                  <scope>provided</scope>          </dependency>   </dependencies>   표준 버전 모음   spring-­‐mvc 등 웹 관련 모듈 자동 설정   spring-­‐data-­‐jpa,  JPA,  Hibernate 관련 모듈 설정   연관된 spring-­‐orm,  커넥션 풀 등 모듈 설정   spring-­‐test,  JUnit  등 관련 모듈 설정   임베디드 톰캣 관련 모듈 설정   10  
  • 12. Boot가 해 준 것 2, 스프링 설정 @SpringBootApplica7on   public  class  Applica:on  {            public  sta:c  void  main(String[]  args)  {                  SpringApplica7on.run(Applica:on.class,  args);          }     }     //  @SpringBootApplica:on은 다음과 동일   //  @Configura:on   //  @EnableAutoConfigura7on   //  @ComponentScan   모든 설정 자동 생성!   - 스프링 MVC   -­‐  DataSource   -­‐  JPA,  JPA  TX,  Spring  Data  JPA   -­‐  DispatcherServlet,  CharacterEncodingFilter   spring.view.prefix:  /WEB-­‐INF/view/   spring.view.suffix:  .jsp     spring.datasource.url=jdbc:mysql://localhost/test?...   spring.datasource.username=root   spring.datasource.password=   spring.datasource.driver=com.mysql.jdbc.Driver     spring.jpa.database=MYSQL   JSP용 ViewResolver 설정   DataSource  설정   JPA 설정   12  
  • 13. @EnableAutoConfiguration @EnableAutoConfigura:on   @JpaRepositoriesAutoConfigura:on   @HibernateJpaAutoConfigura:on   @EmbeddedServletContainerAutoConfigura:on   @WebMvcAutoConfigura:on   @DataSourceAutoConfigura:on   @OOOOAutoConfigura:on  들   각 AutoConfigura:on은 조건에 따라 기본 설정 생성   13  
  • 14. Boot가 해 준 것 3, 서버 실행 •  임베디드 톰캣으로 실행 – mvn spring-boot:run ...   [INFO]  -­‐-­‐-­‐  spring-­‐boot-­‐maven-­‐plugin:1.2.0.RELEASE:run  (default-­‐cli)  @  bootVersion  -­‐-­‐-­‐   ...   10:11:57.394  [app.Applica:on.main()]  INFO    app.Applica:on  -­‐  Star:ng  Applica:on  on  MADVIRUSui-­‐MacBook-­‐Air.local  with  PID  15134  (...)   ...   ...   10:11:59.947  [app.Applica:on.main()]  INFO    o.s.b.c.e.t.TomcatEmbeddedServletContainer  -­‐  Tomcat  ini:alized  with  port(s):  8080/hVp   10:12:00.219  [app.Applica:on.main()]  INFO    o.a.catalina.core.StandardService  -­‐  Star7ng  service  Tomcat   10:12:00.221  [app.Applica:on.main()]  INFO    o.a.catalina.core.StandardEngine  -­‐  Star7ng  Servlet  Engine:  Apache  Tomcat/8.0.15   ...   ...   10:12:05.708  [app.Applica:on.main()]  INFO    o.s.b.c.e.t.TomcatEmbeddedServletContainer  -­‐  Tomcat  started  on  port(s):  8080/hIp   10:12:05.712  [app.Applica:on.main()]  INFO    app.Applica:on  -­‐  Started  Applica:on  in  8.702  seconds  (JVM  running  for  12.428)   14  
  • 15. Boot가 해 준 것 4, 실행 가능 war 생성 •  패키징한 war를 java 명령어로 실행 가능 – mvn package – java -jar target/myapp.war •  임베디드 톰캣으로 실행 •  생성된 war를 일반 WAS에 배포해도 됨 •  war가 아닌 jar 타입으로도 가능 15  
  • 16. 다양한 기능에 대한 자동 설정 지원 16  
  • 17. 운영지원 기능 : Actuator •  서비스 상태(Health), 계측(Metric) 등 서비스 운영 지원을 위한 정보 제공 기능 •  다음 의존 추가로 자동 활성화 •  예, /health <dependency>          <groupId>org.springframework.boot</groupId>          <ar:factId>spring-­‐boot-­‐starter-­‐actuator</ar:factId>   </dependency>   17  
  • 18. Actuator가 제공하는 정보 •  env : 스프링 Environment의 프로퍼티 목록 •  health : 어플리케이션 Health 상태 정보 •  metrics : 계측 정보 •  mappings : 웹 경로 매핑 정보 •  dump : 쓰레드 덤프 •  beans : 빈 목록 정보 •  trace : 최근 HTTP 요청 목록 표시(100개) 18  
  • 19. 기타 •  Remote Shell 기능 (Telnet로 연결해서 관리) •  기본 로깅 설정 제공 •  NoSQL 지원 (Redis, MongoDB, Solr 등) •  WebSocket 설정 지원 •  JTA 설정 지원 (Atomikos, Bitronix) •  Maven과 Gradle 지원 19  
  • 20. 참고자료 •  Spring Boot 프로젝트 – http://projects.spring.io/spring-boot/ •  레퍼런스 문서가 좋음 •  도서: Learning Spring Boot – http://goo.gl/Awzzoz •  Gradle 기반 •  현재 버전에 맞게 코드를 수정해야 할 부분이 간혹 있 지만 감을 잡기에 충분한 지식 제공 20