일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- spring
- Spring Security
- 스프링 시큐리티
- spring security oauth2
- 레디스
- 앵귤러JS
- 스프링 시큐리티와 앵귤러 js
- rest api
- spring session
- spring boot
- angularjs
- spring framwork
- Authentication
- oauth2
- AUthorization
- 스프링 부트
- controlleradvice
- 스프링
- api documentation
- 스프링부트
- 예외처리
- angular
- Exception Handling
- spring security and angularjs
- swagger-ui
- api 문서화
- 스프링 세션
- 스웨거
- 앵귤러
- Spring Framework
- Today
- Total
스프링부트는 사랑입니다
첫번째 스프링 부트 어플리케이션 개발하기 (레퍼런스 11장) 본문
11. 첫번째 스프링 부트 어플리케이션 개발하기
스프링 부트의 핵심기능 일부를 사용해서 자바로 간단한 "Hello World!” 웹 어플리케이션을 개발해보자. 여기선 대부분의 IDE가 지원하는 메이븐을 사용할 것이다.
시작에 앞서 터미널을 열고 설치된 자바와 메이븐 버전을 확인해보자
$ java -version java version "1.7.0_51" Java(TM) SE Runtime Environment (build 1.7.0_51-b13) Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
$ mvn -v Apache Maven 3.2.3 (33f8c3e1027c3ddde99d3cdebad2656a31e8fdf4; 2014-08-11T13:58:10-07:00) Maven home: /Users/user/tools/apache-maven-3.1.1 Java version: 1.7.0_51, vendor: Oracle Corporation
이 예제는 자신의 폴더를 만들어서 진행해야하며 부가적 구성은 해당 폴더 안에서 진행한다고 가정함. |
11.1 POM 생성하기
메이븐 pom.xml
파일을 먼저 만들어야한다. 이 pom.xml
파일은 당신의 프로젝트안에서 사용될 레시피다. 선호하는 에디터를 열고 다음을 추가하라:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>myproject</artifactId> <version>0.0.1-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.2.5.RELEASE</version> </parent> <!-- Additional lines to be added here... --> </project>
이것으로 빌드는 정상 동작한다. mvn package
를 치고 확인할 수 있다. ( “jar will be empty - no content was marked for inclusion!'” 라는 경고메시지는 일단 무시).
이 단계에서 IDE로 import할 수 있다. (대부분의 자바 IDE는 메이븐을 내장하고 있다) 그냥 간단히 아무 에디터를 써서 이 예제를 계속 해도 상관없음 |
11.2 classpath 의존성(dependencies) 추가
스프링 부트는 당신의 classpath에 jar파일들을 쉽게 추가하게 해서는 몇몇의 “Starter POM”들을 제공해주고 있다. 현 예제 어플리케이션은 POM의 parent
센션에서 이미 spring-boot-starter-parent
를 사용하고 있다.
이 spring-boot-starter-parent
는 유용한 메이븐의 기본사항들을 제공해주는 특별한 시작키트이며 또한 dependency-management
섹션을 제공하여 선별된 dependency들을 version
태그없이 쓸 수 있다.
다른 “Starter POM”들은 특별한 타입의 어플리케이션을 개발할때 필요로 하는 dependency들을 맞춤제공해준다. 현재 우리는 웹 어플리케이션을 개발중이므로 spring-boot-starter-web
dependency를 추가할 것이지만, 그전에 우리가 현재 가지고 있는 dependency들을 살펴보도록 하자
$ mvn dependency:tree [INFO] com.example:myproject:jar:0.0.1-SNAPSHOT
이 mvn dependency:tree
명령어는 당신의 프로젝 dependency를 트리구조로 보여준다. 보면 알수있듯이 spring-boot-starter-parent
는 그 자체에 의존성을 가지고 있지않다. pom.xml
를 편집해서 spring-boot-starter-web
의존성을 parent
센션 밑에 아래와 같이 추가 해보자:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
mvn dependency:tree
를 다시 실행해보면 톰캣웹서버나 스프링 부트 자체를 포함하여 부수적인 dependency들이 추가된것을 볼 수 있다.
11.3 코드작성하기
예제 어플리케이션을 완성하려면, 자바파일을 하나 만들어야 한다. 메이븐은 기본적으로 src/main/java
위치에 있는 소스를 컴파일하므로 해당 경로의 폴더를 만들고 다음의 파일을 추가 한다. src/main/java/Example.java
:
import org.springframework.boot.*; import org.springframework.boot.autoconfigure.*; import org.springframework.stereotype.*; import org.springframework.web.bind.annotation.*; @RestController @EnableAutoConfiguration public class Example { @RequestMapping("/") String home() { return "Hello World!"; } public static void main(String[] args) throws Exception { SpringApplication.run(Example.class, args); } }
코드의 양은 보잘것없지만 많은 일이 진행되었다. 이 중요한 파트를 살펴보자.
11.3.1 @RestController 그리고 @RequestMapping annotations
Example
클래스의 첫번째 어노테이션은 @RestController
. stereotype annotation으로 잘알려진 이것은 코드를 읽을 사람들 또는 특별한 역할을 실행하는 클래스를 가진 스프링에 힌트를 제공한다. 우리의 경우 웹 @Controller
이므로, 스프링은 들어오는 Web request들을 처리할거라고 이해한다.
@RequestMapping
어노테이션은 "라우팅"정보를 제공하며 스프링에게 경로 "/"를 통해 들어오는 HTTP 요청이 home
메소드와 매칭되야한다고 알려준다.
@RestController
어노테이션은 스프링에게 호출자에게 되돌아가는 문자열을 랜더하라고 알려준다.
|
11.3.2 The @EnableAutoConfiguration annotation
두번째 클래스 레벨 어노테이션은 @EnableAutoConfiguration
. 이 어노테이션은 스프링 부트에게 당신이 추가한 jar dependency들을 기준으로 어떻게 스프링을 설정하길 원하는지 "추측"하라고 알려준다.
spring-boot-starter-web
를 통해 추가된 톰캣과 스프링 MVC가 추가되었으므로, 자동설정 기능은 당신이 웹어플리케이션을 개발하고 있다고 가정하고 그에 따라 스프링을 설정한다.
11.3.3 The “main” method
우리의 어플리케이션의 마지막 파트는 main
메소드이다. 이것은 어플리케이션의 시작점을 위한 자바 명명법을 따르는 표준 메소드이다. 우리의 main 메소드는 run
에 의해 호출되는 스프링 부트의 SpringApplication
클래스를 실행한다. SpringApplication
는 당신의 어플리케이션을 시동걸어, 스프링을 시작하고 이어 자동설정된 톰캣 웹서버를 동작시킨다. 우리는 기본 스프링 컴포넌트인 SpringApplication
에 알리기 위해 Example.class
를 하나의 인자값으로 run
메소드에 넘겨야한다. args
배열값 또한 command-line 인자값으로 외부적으로 넘길 수 있다.
11.4 예제 실행하기 Running the example
현재 단계에서 spring-boot-starter-parent
POM을 사용한 이상 어플리케이션은 실행이 잘된다. 프로젝트의 메인 디렉토리에서 mvn spring-boot:run
를 치면 어플리케이션이 시작한다.
$ mvn spring-boot:run . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.2.5.RELEASE) ....... . . . ....... . . . (log output here) ....... . . . ........ Started Example in 2.222 seconds (JVM running for 6.514)
브라우저를 열고 localhost:8080 를 치면 다음의 결과가 보인다:
Hello World!
ctrl-c
를 쳐서 프로그램을 우아하게 종료시키자
11.5 실행가능한 jar 만들기 Creating an executable jar
독립실행 가능한 jar파일을 만듦으로서 예제를 완성시켜보자. 실행가능한 jar (때로는 “fat jars”로 부르기도 함)는 당신의 컴파일된 클래스 뿐만 아니라 코드 실행에 관련된 모든 jar dependency들을 포함하여 압축한다.
실행가능한 jar를 만드려면 spring-boot-maven-plugin
를 pom.xml
에 추가해야 한다. 다음의 라인을 dependencies
섹션 다음에 추가하자
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
|
pom.xml
를 저장하고 콘솔에서 mvn package
를 친다.
$ mvn package [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building myproject 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] .... .. [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ myproject --- [INFO] Building jar: /Users/developer/example/spring-boot-example/target/myproject-0.0.1-SNAPSHOT.jar [INFO] [INFO] --- spring-boot-maven-plugin:1.2.5.RELEASE:repackage (default) @ myproject --- [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------
target
디렉토리에 myproject-0.0.1-SNAPSHOT.jar
파일이 만들어졌다. 대략 10 Mb 정도의 사이즈이며 jar tvf
명령어로 내부를 둘려볼 수 있다.
$ jar tvf target/myproject-0.0.1-SNAPSHOT.jar
target
디렉토리에는 myproject-0.0.1-SNAPSHOT.jar.original
라는 이름의 작은 파일도 있는데 이것은 스프링 부트에 의해 재패키지되기전의 메이븐 원본 jar파일이다.
이 어플리케이션을 실행하려면 java -jar
명령어를 쓰자:
$ java -jar target/myproject-0.0.1-SNAPSHOT.jar . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.2.5.RELEASE) ....... . . . ....... . . . (log output here) ....... . . . ........ Started Example in 2.536 seconds (JVM running for 2.864)
ctrl-c
로 우아하게 종료할 수 있다.
'Tutorials' 카테고리의 다른 글
스프링부트와 OAuth2 - (2/4) (1) | 2016.03.19 |
---|---|
스프링부트와 OAuth2 - (1/4) (0) | 2016.03.19 |
Spring Security and AngularJS Part VI (0) | 2015.12.03 |
Spring Security and AngularJS Part V (0) | 2015.12.03 |
Spring Security and AngularJS Part IV (0) | 2015.12.02 |