O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

Spring Boot 소개

Spring Boot 소개 자료.

  • Seja o primeiro a comentar

Spring Boot 소개

  1. 1. Spring Boot 소개 최범균, 2014-12-22
  2. 2. 웹 어플 만들때 필요한 것들 예시 •  Maven •  Spring MVC •  JPA + Spring Data •  JSP •  MySQL •  Tomcat이나 Jetty로 테스트 •  SLF4J + Logback •  JUnit, Spring Test 2  
  3. 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. 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. 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. 6. 프로젝트 설정 작업 •  따분하고 지루하고 실수하기 딱 좋은 과정 – 의존 모듈 간 버전 맞추기 – (다른 소스에서) 설정 C&P하고 수정 – 잘 되나 테스트 – 빌드와 실행 6  
  7. 7. Boot •  최소한의 노력으로 스프링 기반 프로젝트를 시작할 수 있도록 도와줌 – 스프링 및 연동 기술의 표준화된 버전 설정 – 설정 최소화 : 기술별 표준화된 설정 모음 제공 – 임베디드 서버, 보안, 모니터링 구현 지원 7  
  8. 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  
  9. 9. 이전과 이후 비교 9  
  10. 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  
  11. 11. 모듈 구성 11  
  12. 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. 13. @EnableAutoConfiguration @EnableAutoConfigura:on   @JpaRepositoriesAutoConfigura:on   @HibernateJpaAutoConfigura:on   @EmbeddedServletContainerAutoConfigura:on   @WebMvcAutoConfigura:on   @DataSourceAutoConfigura:on   @OOOOAutoConfigura:on  들   각 AutoConfigura:on은 조건에 따라 기본 설정 생성   13  
  14. 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. 15. Boot가 해 준 것 4, 실행 가능 war 생성 •  패키징한 war를 java 명령어로 실행 가능 – mvn package – java -jar target/myapp.war •  임베디드 톰캣으로 실행 •  생성된 war를 일반 WAS에 배포해도 됨 •  war가 아닌 jar 타입으로도 가능 15  
  16. 16. 다양한 기능에 대한 자동 설정 지원 16  
  17. 17. 운영지원 기능 : Actuator •  서비스 상태(Health), 계측(Metric) 등 서비스 운영 지원을 위한 정보 제공 기능 •  다음 의존 추가로 자동 활성화 •  예, /health <dependency>          <groupId>org.springframework.boot</groupId>          <ar:factId>spring-­‐boot-­‐starter-­‐actuator</ar:factId>   </dependency>   17  
  18. 18. Actuator가 제공하는 정보 •  env : 스프링 Environment의 프로퍼티 목록 •  health : 어플리케이션 Health 상태 정보 •  metrics : 계측 정보 •  mappings : 웹 경로 매핑 정보 •  dump : 쓰레드 덤프 •  beans : 빈 목록 정보 •  trace : 최근 HTTP 요청 목록 표시(100개) 18  
  19. 19. 기타 •  Remote Shell 기능 (Telnet로 연결해서 관리) •  기본 로깅 설정 제공 •  NoSQL 지원 (Redis, MongoDB, Solr 등) •  WebSocket 설정 지원 •  JTA 설정 지원 (Atomikos, Bitronix) •  Maven과 Gradle 지원 19  
  20. 20. 참고자료 •  Spring Boot 프로젝트 – http://projects.spring.io/spring-boot/ •  레퍼런스 문서가 좋음 •  도서: Learning Spring Boot – http://goo.gl/Awzzoz •  Gradle 기반 •  현재 버전에 맞게 코드를 수정해야 할 부분이 간혹 있 지만 감을 잡기에 충분한 지식 제공 20  

×