Spring boot 시작하기

2017.02.06 11:53

졸리운_곰 조회 수:247

Spring boot 시작하기

Spring boot 를 이용한 빠른 개발환경 구축

 


 

스프링 부트 개발환경 구축 정보

 

기존의 스프링 프레임워크(Spring framework)를 이용한 개발환경 구축은 제법 많은 XML 설정파일등의 작성량을 요구했다. 그래서 잘 만들어놓은 설정파일을 복사해서 사용하거나 검색을 통해 얻은 정보를 그대로 복사해서 사용하는 경우가 다반사였는데, 실상 특별한 경우의 설정을 제외하고는 거의 항상 동일한 옵션을 가져가게 되는 것이 사실일 것이다.

 

그러한 부분에서 스프링 부트는 반복되는 개발환경 구축을 위한 코드작성등의 작업을 확연히 줄여주고 빠르고 쉽게 프로젝트를 작성할 수 있도록 도와준다고 할 수 있다.

 

공식 스프링 부트 문서를 참고해서 스프링 부트의 빠르게 와닿는 특징을 정리하고 `Hello World !!`를 출력하기 까지의 방법을 기록하려고 한다.

 

 

1. Spring boot 는 무엇인가?

 


 

스프링 부트는 스프링을 기반으로 하는, 바로 출시할 수 있는 수준의 '실행가능한', 단독실행형 애플리케이션을 만들기 위해 사용한다. 스프링 부트는 스프링 플랫폼과 3rd 라이브러리들에 대한 선택을 최소한의 논의로 결정할 수 있도록 해준다.

 

스프링 부트를 이용하면 `java -jar` 로 시작할 수 있는 단독실행형 자바 애플리케이션, 혹은 더 나아가 전통적인 war 배포물을 만들어낼 수도 있다. 이에 추가로 스프링 부트는 `spring scripts`를 이용한 실행 환경도 지원한다.

 

 

1.1 Spring boot 의 목표

스프링 부트의 목표는 다음과 같다.

 

 

Spring boot 의 목표 :

  1. 매우 빠르게 모든 스프링 개발에 관한 경험에 광범위한 접근을 제공한다.
  2. 차이가 있겠지만, 기본값으로 부터 요구사항들에 따라 분기하며 빠르게 진행할 수 있다.
  3. 프로젝트 환경 구축에서 큰 영역을 차지하는 비기능적인 기능들을 기본적으로 제공한다. (내장형 서버, 시큐리티, 측정, 상태 점검, 외부 설정)
  4. 절대적으로 XML 기반 설정을 요구하거나 그 이상의 코드 작성을 하지 않는다.
 
 
 
2. 설치

 


 

스프링부트 설치 방법을 소개한다. maven 빌드 도구를 통해 설치가 가능하며 gradle을 통한 설치 또한 가능하다. (CLI 도 지원함)

 

 

2.1 System Requirements

  • Java 7 +
  • maven 3+ or gradle 1.12+
 
 
2.2 Supported servlet containers

 

Name

Servlet Version 

Java Version 

Tomcat 8

3.1 

Java 7+ 

Tomcat 7

3.0

Java 6+ 

Jetty 9

3.1

Java 7+ 

Jetty 8

3.0

Java 6+ 

Undertow 1.1

3.1

Java 7+ 

 

 

 

 

2.3 Installation :: maven

단지 `pom.xml` 에 maven 의존성을 추가하는 것으로 끝난다.

 

 

2.3.1 pom.xml

 

  <!-- Ingerit defaults from Spring boot -->
  <parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>1.2.4.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>
view raw pom.xml hosted with ❤ by GitHub

`spring-boot-starter-parent` 아티팩트를 추가하는 것으로 스프링 부트의 준비된 의존성 라이브러리들이 자동으로 추가된다.

 

위 예제에서는 `spring-boot-starter-web` 아티팩트를 추가했는데, 이는 스프링 부트 기반의 웹 프로젝트를 사용하기 위한 것이다.

 

설치가 끝났다.

 

 

2.3.2 Configuration

스프링 부트를 설치했으니, 스프링 환경 설정을 해야한다.

그런데 이미 모든 준비가 끝났다.

 

이미 우리가 스프링 부트를 선택한 순간에.

 
 
 
3. Hello World !

`HelloWorld !` 를 출력하기 위한 예제 코드를 작성해보자.

 
아주 간단한 코드 작성으로 `Hello World !`를 출력한다.
 
 
3.1 Directory프로젝트 생성 후 기본 디렉토리 구조는 다음과 같다.
 
-demo
--src
---main
----java
-----demo
------DemoApplication.java
----resources
-----application.properties
--pom.xml
 
프로젝트 이름이 `demo`인 프로젝트의 디렉토리 구조의 예이다.
특이한 점은 `DemoApplication.java` 클래스 파일인데 스프링 부트의 환경에서 반드시 존재해야 하는 클래스 이다.
 
 
3.1.1 {Name}Application.java
`DemoApplication.java` 는 다음과 같이 아주 간단한 구성을 가지고 있다.
 

 

<DemoApplication.java>

  import org.springframework.boot.SpringApplication;
  import org.springframework.boot.autoconfigure.SpringBootApplication;
   
  @SpringBootApplication
  public class DemoApplication {
   
  public static void main(String[] args) {
  SpringApplication.run(DemoApplication.class, args);
  }
  }
단독실행 및 스크립트를 통한 실행을 지원하기위해 기본적으로 작성되는 포맷이므로 스프링 부트를 이용한 개발환경에서 반드시 작성되어야 하는 애플리케이션 클래스이다.
 
코드를 보면 직관적으로 어떻게 사용될지는 짐작이 될 것이고, 눈 여겨 볼 점은 `@SpringBootApplication` 어노테이션이다.
 
 
3.1.2 @SpringBootApplication`
@SpringBootApplication` 어노테이션은 프로젝트 개발환경에서 많이 사용하는 어노테이션들을 쉽고 빠르게 사용할 수 있도록 다음과 같은 기본속성들을 포함하고 있는 어노테이션이다.
  • @Configuration
  • @EnableConfiguration
  • @ComponentScan
 
간단히 `@SpringBootApplication` 어노테이션은 빠르고 쉽게 스프링 부트 실행환경 구축을 위해 제공되는 기본 어노테이션이라고 할 수 있다.
 
 
3.2 SampleController
이제 본격적으로 예제 컨트롤러를 작성 할 차례이다.
 

<SampleController.java> (참고, http://projects.spring.io/spring-boot/)

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

  package demo.web;
  import org.springframework.boot.*;
  import org.springframework.boot.autoconfigure.*;
  import org.springframework.stereotype.*;
  import org.springframework.web.bind.annotation.*;
   
  @Controller
  @EnableAutoConfiguration
  public class SampleController {
   
  @RequestMapping("/")
  @ResponseBody
  String home() {
  return "Hello World!";
  }
  }

 

스프링 부트 프로젝트 홈페이지에서 안내하고 있는 예제코드를 인용했다.

 

위처럼 작성 후 내장된 톰캣 서버를 이용해 실행하면 해당 요청 경로를 통해 `Hello World!` 메시지가 반환 될 것이다.

 

 

3.3 Run

이제 작성된 프로그램을 실행 할 차례다.

 

실행방법 :

  • Java Runtime Application
  • Maven build script

 

war 로 배포하거나 하는 방법도 있지만, 본 문서에서는 위에 나열된 두 가지 실행방법을 설명한다.

 

 

3.3.1 Java Runtime Application

본 문서를 읽는 대부분 사람들이 Eclipse IDE 를 사용중일 것이므로 Eclipse 를 기반으로 설명한다. (커맨드를 쓰고 계신다면 할 줄 아시겠죠…)

 

  1. 프로젝트 우클릭
  2. Run As
  3. Java Application

 

단순히 자바 커맨드를 이용한 실행과 다를 바 없다. 기본적으로 내장된 톰캣을 기반으로 실행되며 초기 기본 포트는 8080 이다.

 

 

3.3.2 maven script

maven 을 이용한 실행방법이다. 크게 다를 것은 없으며 goal 정보만 입력해주면 된다.

먼저 Eclipse 기반이다.

 

  1. 프로젝트 우클릭
  2. Run As
  3. Maven build
  4. Goals: spring-boot:run

 

 

마찬가지로 기본 내장 톰캣으로 8080 포트로 실행된다.

 

커맨드 라인으로 실행하는 방법 > mvn -f {path} spring-boot:run

 

 

 

4. Properties


기본적으로 준비된 프로퍼티 활용

 

스프링부트는 별다른 설정없이 즉시 시작할 수 있는 프로퍼티 환경을 제공한다.

디렉토리내 `resource` 하위에 `application.properties` 라는 프로퍼티를 생성해 두면 기본적으로 해당 위치의 프로퍼티를 스프링 부트가 참조한다.

 

 

4.1 Features

  • 프로퍼티 생성위치는 바꿀 수 있다.
  • 다른 프로퍼티를 여러개 생성해서 쓸 수 있다.
  • 스프링 부트의 프로퍼티는 우선순위로 오버라이드 된다.

 

 

4.2 Usage프로퍼티 사용법을 알아보자.

 

  1. 작성한다.
  2. 사용한다.

 

  @Value(“${demo.app.name}”)
  private String demoAppName;
view raw *.java hosted with ❤ by GitHub
  demo.app.name=HelloWorld

 

4.3 Priority

스프링 부트의 프로퍼티 참조정보는 우선순위를 갖는다.

중복된 이름의 프로퍼티 정보가 있는경우 우선순위를 통해 결정된 정보를 참조한다.

 

가령 프로젝트 소스 내에 DB 접속 주소를 그대로 둔채, 테스트 배포시에 커맨드라인으로 다른 주소를 입력해 오버라이드 시킬 수도 있다. (물론 프로퍼티를 통해 값을 참조하도록 설계해 놨을 때 가능하다.)

 
  1. 커맨드라인 인자
  2. java:comp/env 의 JNDI 속성
  3. 시스템 프로퍼티
  4. OS 환경 변수
  5. RandomValuePropertySource 의 random.* properties
  6. 포장된 jar 외부의 애플리케이션 프로퍼티즈
  7. @Configuration 클래스들의 @PropertySource 애노테이션
  8. 기본속성 SpringApplication.setDefaultProperties 를 사용하여 정의

 

우선수위가 높은 순으로 나열했다. 다시말해 커맨드라인 인자를 통해 입력된 프로퍼티 값이 최상위 우선순위를 가지고 있기 때문에 결과적으로 커맨드라인 인자를 통해 입력된 값이 최종 적용된다는 것이다.

 

예를 들어보면,

 

<application.properties>

  @Value(“${demo.app.name}”)
  private String demoAppName;
view raw *.java hosted with ❤ by GitHub
  demo.app.name=HelloWorld

위 처럼 작성 하여 사용된 프로젝트를 실행할 때 커맨드라인에 다음과 같은 인자를 값으로 추가하면,

 

<cmd>

 

--demo.app.name="GoodBye" 

 

 

최종적으로 `demo.app.name` 의 값은 `GoodBye` 가 된다.

 

 

 

5. Reference

참고 정보

  1. 스프링 부트 공식 홈페이지
  2. 스프링 부트 국내 SK planet 적용 사례
  3. 블로그-이제는 Spring Boot를 써야할 때다(이동련)

 



출처: http://hyunc.tistory.com/9 [HYUNC]

 

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
46 전자정부 표준프레임워크 - CKEditor 적용하기 file 졸리운_곰 2018.01.11 568
45 IntelliJ에서 SpringBoot 웹 프로젝트 생성하기 file 졸리운_곰 2017.11.14 222
44 파라미터 전송 - GET, POST 방식 file 졸리운_곰 2017.09.26 123
43 Velocity Template Engine 시작하기 file 졸리운_곰 2017.09.26 91
42 Migrating a Spring Web MVC application from JSP to AngularJS file 졸리운_곰 2017.09.26 68
41 [톰캣] server.xml 설정 file 졸리운_곰 2017.09.24 352
40 톰캣의 컨텍스트 외부로 경로 매핑하는 방법 졸리운_곰 2017.09.24 171
39 프레임 나뉜 페이지에서 새로고침시 페이지 유지하기 졸리운_곰 2017.09.17 77
38 [Spring] 한국거래소의 주가 정보 가져오기 졸리운_곰 2017.08.10 416
37 [Ibatis] 부등호 <, > 의 표시 졸리운_곰 2017.07.06 193
36 동적 SQL mybatis 가을의곰 2017.06.10 116
35 [mybatis] foreach를 이용한 다중 insert 가을의곰 2017.06.10 413
34 mybatis (foreach문, in절) 가을의곰 2017.06.10 407
33 SW 릴리스를 간편하게 - Maven plugin + Jenkins file 졸리운_곰 2017.03.20 103
32 Migrating Spring Web MVC from JSP to AngularJS file 졸리운_곰 2017.02.07 207
31 Migrating a Spring Web MVC application from JSP to AngularJS file 졸리운_곰 2017.02.07 1513
30 Spring and Angular JS: A Secure Single Page Application 졸리운_곰 2017.02.06 426
29 스프링부트 소개 졸리운_곰 2017.02.06 190
» Spring boot 시작하기 졸리운_곰 2017.02.06 247
27 [Java]Spring Boot를 사용한 web어플리케이션 만들기 file 졸리운_곰 2017.02.06 171
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED