스프링부트 (Spring Boot) 1. 스프링부트 (Spring Boot)... 2 1-1. Spring Boot 소개... 2 1-2. Spring Boot & Maven... 2 1-3. Spring Boot & Gradle... 3 1-4. Writing the code(spring Boot main)... 4 1-5. Writing the code(commandlinerunner)... 5 1-6. Spring Boot 에서 property 파일읽기... 6 오라클자바커뮤니티 (ojcedu.com, ojc.asia) 오라클자바커뮤니티 (ojcedu.com, ojc.asia) 1
1. 스프링부트 (Spring Boot) 1-1. Spring Boot 소개 스프링응용프로그램을독립적으로작성, 빌드, 실행할수있으며 Embedded Tomcat, Jetty 사용이가능하므로 WAR 파일로묶어서배포할필요가없다. Tomcat이나 Jetty가내장되어웹프로젝트띄우는시간이독립적인 Tomcat을이용하는경우에비해훨씬줄어든다. 이렇게서블릿컨테이너가내장되어있으므로프로젝트를.jar 파일형태로간단히만들어배포할수있다. 스프링부트를사용하면메이븐의 pom.xml에서의존하는라이브러리의버전을일일이지정하지않아도된다. 즉스프링부트가적절한버전을알아서관리한다. 스프링에서는 XML 파일또는 JavaConfig 등을이용하여설정을하는데스프링부트에서는자동으로해준다. 모든설정을다자동화하지는않지만스프링프레임워크를시작할수있을정도는가능하다.(Application.java) Spring Tool Suit(STS) 를사용하지않고도간단히스프링프로젝트를만들수있다. 파이썬 (python) 의 flask, 장고 (django) 나 ruby on rails 처럼빠르게웹프로젝트를만들수있는도구이다. 1-2. Spring Boot & Maven 메이븐설정을위해 starter POMS를제공한다. (Spring Boot에서미리정의된 MAVEN Dependency) 메이븐에서사용하려면 <parent> 태그로 spring-boot-starter-parent를상속받아야하며기본자바컴파일러가버전은아래처럼설정할수있다. <properties> <java.version>1.8</java.version> </properties> spring-boot-gradle-plugin은실행가능한 jar파일을만들고프로젝트를실행할수있게하는 task를제공한다. spring-boot-starter-web을추가하면 Tomcat 및 Spring MVC 가자동추가된다. <!-- Inherit defaults from Spring Boot --> <parent> 오라클자바커뮤니티 (ojcedu.com, ojc.asia) 2
<groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-parent</artifactid> <version>1.3.1.release</version> </parent> <!-- Add typical dependencies for a web application --> <dependencies> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> </dependency> </dependencies> <!-- Package as an executable jar --> <build> <plugins> <plugin> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-maven-plugin</artifactid> </plugin> </plugins> </build> 1-3. Spring Boot & Gradle 메이븐 Gradle 에서사용하려면 stater POMs 를직접 import 하면된다.. buildscript { repositories { jcenter() dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.1.release") apply plugin: 'java' 오라클자바커뮤니티 (ojcedu.com, ojc.asia) 3
apply plugin: 'spring-boot' repositories { jcenter() dependencies { compile("org.springframework.boot:spring-boot-starter-web") testcompile("org.springframework.boot:spring-boot-starter-test") 1-4. Writing the code(spring Boot main) 아래와같이 main 함수를만들면된다. // 스프링부트 1.2 이상에서 @SringBootApplication 어노테이션은아래모든어노테이션을포함한다. //Spring Boot에게클래스패스세팅, 다른빈, 다양한설정들에의해 Bean을추가하도록지시하는데, 묵시적으로패키지탐색의베이스를지정하여, JPA 어플리케이션을작성했다면현재패키지가 @Entity 아이템을찾기위한디폴트패키지가된다. 일반적으로기존 Spring MVC에서는 @EnableWebMvc 태그를사용했지만 Spring Boot는클래스패스에서 spring-webmvc를발견할경우자동으로추가한다. @EnableAutoConfiguration @ComponentScan // 현재패키지의빈, 설정, 서비스자동스캔 @Configuration // 현재파일이컨텍스트의설정파일임을의미 public class DemoApplication{ // Spring Boot의 SpringApplication.run() 메소드를실행, 시작점 // 웹응용프로그램이면자동설정된 Tomcat 웹서버를 // 기동하면서응용프로그램을시작한다. public static void main(string[] args) throws Exception { SpringApplication.run(DemoApplication.class, args); [ 실행방법 ] 1. (DOS 에서 ) 프로젝트루트에서 spring-boot-starter-parent 의 run 을이용하여 Maven 으로실행한다. D:\..>mvn spring-boot:run 2. 이클립스 (STS) 프로젝트루트 -> Run as -> Maven Build 또는 Java Application(main 이있는 Application 클래스지정 ) 오라클자바커뮤니티 (ojcedu.com, ojc.asia) 4
2. 이클립스 (STS) main 이있는 Application 클래스에서 Run As -> Spring Boot Application 또는 Java Application 으로실행가능하다. 1-5. Writing the code(commandlinerunner) 스프링부트를시작할때 Command Line arguments를주거나, 어떤코드를실행하려면 CommandLineRunner 인터페이스의 run(string args) 를구현하면된다. 만약 CommandLineRunner 인터페이스구현이여러개있는경우순서를부여하기위해서는 @Order 어노테이션을사용하면된다. @SpringBootApplication public class CommandLineRunnerExam { //Spring Boot 메인 public static void main(string... args) { SpringApplication.run(CommandLineRunner.class, args); class DefaultRunner implements CommandLineRunner { //CommandLineRunner의 run 메소드구현 //args는메인메소드의아규먼트를받아들인다. public void run(string... args) throws Exception { // joining(delimiter, prefix, suffix) System.out.println(Arrays.asList(args).stream().collect(Collectors.joining(",", getclass().getsimplename() + "[", "]"))); @Named @Order(2) class Runner1 extends DefaultRunner { @Named @Order(1) class Runner2 extends DefaultRunner { 오라클자바커뮤니티 (ojcedu.com, ojc.asia) 5
@Named @Order(3) class Runner3 extends DefaultRunner { [ 실행 ] $ java -jar build/libs/commandlinerunner-exam-1.0.0.jar 이순신안중근유관순 Runner2[ 이순신안중근유관순 ] Runner1[ 이순신안중근유관순 ] Runner3[ 이순신안중근유관순 ] LAB. Spring Boot HelloWorld 1. Spring Boot, Maven 을이용한 HelloWorld http://ojc.asia/bbs/board.php?bo_table=lecspring&wr_id=479 2. Spring Boot, Gradle 을이용한 Spring WEB MVC HelloWorld http://ojc.asia/bbs/board.php?bo_table=lecspring&wr_id=514 1-6. Spring Boot 에서 property 파일읽기 [src/main/resources/ojc.properties] url=ojc.asia [Application.java] @SpringBootApplication @PropertySource("ojc.properties") public class Application { public static main(string[] args) { SpringApplication.run(Application.class, args); [OjcController.java] 오라클자바커뮤니티 (ojcedu.com, ojc.asia) 6
@Controller public class OjcController { @Value("${url") //ojc.properties 파일의 url을값을주입 String url; @RequestMapping("/ojc") public void home() { System.out.println(url); //ojc.asia 출력 오라클자바커뮤니티 (ojcedu.com, ojc.asia) 7