Spring boot 시작하기

Category   JAVA
Author  현c   2015. 9. 13. 16:08

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

`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>

단독실행 및 스크립트를 통한 실행을 지원하기위해 기본적으로 작성되는 포맷이므로 스프링 부트를 이용한 개발환경에서 반드시 작성되어야 하는 애플리케이션 클래스이다.

코드를 보면 직관적으로 어떻게 사용될지는 짐작이 될 것이고, 눈 여겨 볼 점은 `@SpringBootApplication` 어노테이션이다.


3.1.2 @SpringBootApplication`
@SpringBootApplication` 어노테이션은 프로젝트 개발환경에서 많이 사용하는 어노테이션들을 쉽고 빠르게 사용할 수 있도록 다음과 같은 기본속성들을 포함하고 있는 어노테이션이다.
  • @Configuration
  • @EnableConfiguration
  • @ComponentScan

간단히 `@SpringBootApplication` 어노테이션은 빠르고 쉽게 스프링 부트 실행환경 구축을 위해 제공되는 기본 어노테이션이라고 할 수 있다.


3.2 SampleController
이제 본격적으로 예제 컨트롤러를 작성 할 차례이다.

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

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


위처럼 작성 후 내장된 톰캣 서버를 이용해 실행하면 해당 요청 경로를 통해 `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. 사용한다.


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>

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


<cmd>

--demo.app.name="GoodBye" 

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




5. Reference

참고 정보

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



U can search

아래 검색어를 입력하고 Search 버튼을 누르세요.