Spring Boot - Getting Started 01

2015. 6. 10. 17:38Java/Spring Boot



Spring boot 는 말그대로 최소 시간내에 별다른 설정 없이 순식간에 Spring 기반의 어플리케이션을 만들어 주는 것으로 이해 하면 됩니다.

http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/

사실 해당 가이드를 자세히 읽으면 정리가 잘되어 있을 뿐만 아니라, 차근차근 따라 할수 있겠지만,

영문인 관계로 해석을 하면서 읽으면 시간이 걸릴듯 싶어, 모두 다 읽지는 않고, 몇가지만 정리 하려고 합니다.
반말,존대말, 그리고 말도 안되는 해석등이 포함되어 있으니... 조심하세요


Part II. Getting started 를 읽었고, 간략하게 정리 했습니다.

(1) Spring Boot 소개

   stand-alone, production-grade Spring based Applications that you can "just run"  이게 핵심 입니다. 

  

(2) 시스템 요구 사항

 Spring Boot 1.3.0 BUILD-SNAPSHOT 에서는 JAVA 7 (물론 JAVA 6도 사용 할 수 있으나 몇 가지 설정이 필요하다고 함) 과 더불어  Spring Framework 4.1.5 또는 그 이상!!
  * JAVA 6,7을 사용하더라도 웬만하면 JAVA 8을 쓰라네요... 

 이하 버전 사용시 HOWTO :  
http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#howto-use-java-6

(3) 내장 서블릿 객체 제공

서블릿 컨테이너(Servlet version)는 Tomcat 8(3.1),7(3.0) / Jetty 9(3.1),8(3.0) / Undertow 1.1 제공함. 

(4) 인스톨

  COMMAND LINE TOOL 이나 기존 자바 개발 툴을 설치 해주세요.


11. Developing your first Spring Boot application 부분을 시작 해석하면서 테스트 코딩 시작

"hello World"를 만들어 보자고 합니다.
Maven (해당 메이븐 버전도 체크 해주세요, 3.2 혹은 above ) 을 사용 하도록 합니다. 

* (Spring.io 에서는 스프링 부트를 사용한 여러가지 버전의 가이드를 제공한답니다.)

(1) POM 생성 

  전 그냥 이클립스로 진행을 한터라, pom.xml 을 생성하라는 가이드 맞춰 진행하진 않았습니다. 
  가장 중요한 부분만 말하자면 , spring-boot-starter-parent이 Spring boot를 사용하는 great way 랍니다. 
  물론 모든 경우는 그런건 아니지만, 다른 parent POM으로 부터 상속이 필요하다고 합니다. 

    <parent>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-parent</artifactId>

        <version>1.3.0.BUILD-SNAPSHOT</version>

    </parent>


 이 넘이 기준이 된다는 것입니다.


(2) Classpath dependencies 추가

  

 Spring Boot는 나의 classpath에 jars들을 추가하기 쉽게 만드는 "Starter POMs"의 number를 제공합니다.

 spring-boot-starter-parent는 유익한 Maven defaults들을 제공하는 특별한 starter 랍니다.

 또한 "blessed" dependencies을 위한 version 태그들을 생략 하도록 dependency-management 섹션을 제공한다고 합니다.

 다른 "Starter POMs"는 적절한 dependencies들을 제공하는데, 여기서는 웹 어플리케이션 개발을 할 터이니,

“spring-boot-starter-web” dependency를 추가 해보도록 합시다.


    <parent>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-web</artifactId>

        <version>1.3.0.BUILD-SNAPSHOT</version>

    </parent>


(3) 코드 작성


Application을 완성하기 위해 , Single Java 파일을 생성해야 하고,

Maven은 src/main/java에 있는 소스들을 기본으로 컴파일 하기에 해당 폴더 생성 후 

Example.java 파일을 만들어 줍니다.

(이클립스에서 프로젝트 생성 할 때,  web 체크 하면 이런것들이 자동으로 쫘라락~)

자! 생성된 것 중에 어노테이션 부분을 설명 해 도록 합니다.


 (3-1) @RestController 와 @RequestMapping 

   Spring에게 @RestController 이라고 달려 있으면, 이넘은 WEB Controller 이구나 라고 이해하고,

   웹 요청이 올 경우에 해당 컨트롤러를 고려해서 핸들링 한다고 합니다.

   이 넘 안에 @RequestMapping  의 역활은 라우팅(Routing)입니다.

   "/" 경로와 함께 어떤 HTTP 요청이 오더라도 , 해당 메소드에 매핑이 됩니다.

  따라서, @RestController 는 요청한 곳에 바로 문자를 랜더링 할 것입니다.

  (알다시피, @RestController 와 @RequestMapping 는 Spring Boot에만 특정한 어노테이션이 아니옵니다.)


(3-2) @EnableAutoConfiguration 

   두번째 클래스 레벨인 이넘은 Spring에 대한 설정을 Spring Boot에게 요청하는 것이라 보면 된다.

   spring-boot-starter-web 은 Tomcat 과 SpringMVC를 추가하면, 

   auto-configuration은 웹 어플리케이션을 개발하고 있다고 가정합니다.


 (4) Main 메소드

  Spring Boot 의 SpringApplication class에 run을 호출 하고 있습니다.

  SpringAppication은 자동 설정 Tomcat Web Server를 가동하며, 스스로 동작을 시도하게 됩니다.

  Express.class를 인자로 run에 넘기는 것이 필요합니다. 


 (5) 예제 가동

   Spring-boot-starter-parent 이 사용되면서, 어플리케이션을 시작하기 위해 사용할 수 있는 유용한 run goal을 가지고 있습니다.

   mvn sprinng-boot:run 실행하면 서버가 가동되겠죠.. 웹브라우저에서 localhost:8080 으로 확인 하면 원하는 문자열이 나오게 됩니다.

  

 (6) executable jar 를 생성 

   Executable jars (때때로 fat jars 라고 )은  코드가 동작하는데 필요로 하는 모든 jar dependencues의 모든 것과 사이에 

  여러분의 컴파일된 클래스들을 포함하고 있는 아카이브(보관소)들 입니다.  

  executable jar를 생성하기 위해 spring-boot-maven-plugin을 pom.xml에 추가합니다. 


<build>

    <plugins>

        <plugin>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-maven-plugin</artifactId>

        </plugin>

    </plugins>

</build>


저장한뒤에 mvn package 라고 실행 하면, 되고 target 디렉토리에 myproject-0.0.1-SNAPSHOT.jar 파일을 볼수 있을 껍니다.

이 파일 사이즈는 10Mb 정도 될것입니다. 만약 jar안을 보고 싶으면, jar tvf 를 실행해서 보세요.

혹시, application에서 우아하게 탈출하고자 한다면 ctrl-c 를 치래요..



 *  Executable jars and java

  자바는 연관된 Jar 파일을 로드하는 어떤 표준 방법을 제공하지 않습니다.
  self-contained 어플리케이션을 배포하면 문제가 발생한 가능성이 높습니다.
  이 문제를 해결하기 위해서 많은 자바 개발자들은 shaded jars를 사용합니다.
  shaded jars 는 단순하게 사용하는 모든 클래스들을 패키지 합니다.
  모든 jar들을 single uber jar 안에 ... 하지만 이넘의 문제는 지금 까지 만들어온 어플리케이션 안에서 사용되는 라이브러리들을 보는 것이  어려워 진다는 것입니다.   또, 다중 jars 안에서 동일한 파일이름이 사용되지면 문제가 될수 있다는 점이랍니다. 
 Spring Boot 는 다른 접근을 취하고 여러분이 사실상 직접 jars에 접근하도록 합니다.



여기 까지는 그리 어렵지 않게 해석(?) 아님 마구잡이로 정리를 해봤다.

앞으로 jdbc , nosql , security 부분을 진행 할 예정인데...

잘 할수 있을지.. 


오늘은 여기 까지 !