Spring Boot를 이용한 REST API 서버를 만들기위해 의존성을 추가하고 그게 맞는 환경설정을 방법을 알아보겠습니다. Spring Boot Reference Guide를 참고하여 Spring Boot에서 제공하는 starter들과 Gradle을 사용하는 법을 정리하겠습니다.

Spring Boot Gradle 사용법

Spring Boot에서 Gradle 사용법은 13.3에 정의 되어 있습니다.

문서에서 설명하듯 Maven에서는 부모 의존성를 받아 spring boot에서 사용하는 추가적인 의존성의 버전을 신경쓰지 않고 개발할 수 있습니다.

1
2
3
4
5
6
<!-- Inherit defaults from Spring Boot -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
</parent>

Gradle에서는 dependencies섹션 에서 ‘starter’을 직접 가져올 수 있습니다 . Maven과는 달리 Gradle에서는 일부 구성을 공유하기 위해 가져올 수퍼 부모는 없습니다.

1
2
3
4
5
6
7
repositories {
jcenter()
}

dependencies {
compile("org.springframework.boot:spring-boot-starter-web:1.5.4.RELEASE")
}

spring-boot-gradle-plugin도 사용할 수 있으며 실행 가능한 jar를 만들고 소스에서 프로젝트를 실행하는 작업을 제공합니다. 또한 다른 기능들 중에서도 스프링 부트에 의해 관리되는 모든 종속성의 버전 번호를 생략 할 수있는 종속성 관리를 제공합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
plugins {
id 'org.springframework.boot' version '1.5.4.RELEASE'
id 'java'
}


repositories {
jcenter()
}

dependencies {
compile("org.springframework.boot:spring-boot-starter-web")
testCompile("org.springframework.boot:spring-boot-starter-test")
}

Spring Boot application starters

Spring Boot에는 다양한 starter들이 존재 합니다. 예를 들어 Spring Boot의 코어 기능을 가지는 spring-boot-starter가 있습니다. 또한 JPA를 사용하기 위한 spring-boot-starter-data-jpa또는 Spring Security 의존성을 가지는 spring-boot-starter-security 등등 다양한 starter들을 확인할 수 있습니다.

Name Description Pom
spring-boot-starter Core starter, including auto-configuration support, logging and YAML Pom
spring-boot-starter-data-jpa Starter for using Spring Data JPA with Hibernate Pom
spring-boot-starter-security Starter for using Spring Security Pom
spring-boot-starter-social-facebook Starter for using Spring Social Facebook Pom
spring-boot-starter-test Starter for testing Spring Boot applications with libraries including JUnit, Hamcrest and Mockito Pom
spring-boot-starter-thymeleaf Starter for building MVC web applications using Thymeleaf views Pom
spring-boot-starter-validation Starter for using Java Bean Validation with Hibernate Validator Pom
spring-boot-starter-web Starter for building web, including RESTful, applications using Spring MVC. Uses Tomcat as the default embedded container Pom
spring-boot-starter-websocket Starter for building WebSocket applications using Spring Framework’s WebSocket support Pom

모든 공식 starter는 spring-boot-starter- , 라는 비슷한 명명 패턴을 따릅니다. 이 명명 규칙은 starter를 찾아야 할 때 도움을 주기위한 것입니다. 많은 IDE의 Maven 통합을 통해 의존성을 이름으로 검색 할 수 있습니다. 개인적인 프로젝트에서는 spring-boot-starter- , 로 시작해서는 안됩니다.

Gradle Practice

Spring boot를 이용한 REST API 개발(01)에서 프로젝트를 생성했습니다. Intellij에서는 프로젝트를 생성하면 다음과 같이 기본적인 구조가 생성되며 API테스트를 위해 compile('org.springframework.boot:spring-boot-starter-web')를 추가 했습니다.

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
29
30
31
32
buildscript {
ext {
springBootVersion = '1.5.15.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'

group = 'com.ex'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
mavenCentral()
}


dependencies {
compile('org.springframework.boot:spring-boot-starter')
compile('org.springframework.boot:spring-boot-starter-web')

testCompile('org.springframework.boot:spring-boot-starter-test')
}

이번에는 기본적으로 사용할 starter및 의존성을 추가해 보겠습니다. 추가할 의존성은 spring-boot-starter-security org.projectlombok:lombok입니다.

1
2
3
4
5
6
7
8
9
dependencies {
compile('org.springframework.boot:spring-boot-starter-security')
compile('org.springframework.boot:spring-boot-starter-web')

compileOnly('org.projectlombok:lombok')

testCompile('org.springframework.boot:spring-boot-starter-test')
testCompile('org.springframework.security:spring-security-test')
}

다음 Gradle이 빌드가 끝나면 의존성이 정상적으로 추가된것을 확인할 수 있습니다.

springboot01

다음 Intellij에서 lombok을 사용하기 위해서는 Build, Execution, Deployment -> Annotation Processors -> Enable annotation processing을 체크해 줍니다.

그럼 lombok을 테스트 하기위해 간단한 클래스를 만들고 ForBlogController에서 사용해 보겠습니다.

1
2
3
4
5
6
7
8
package com.ex.forblog;

import lombok.Data;

@Data
public class TestLombok {
private String str;
}
1
2
3
4
5
6
7
8
9
10
@RestController
public class ForBlogController {

@GetMapping(value = "/")
String hello(){
TestLombok testLombok = new TestLombok();
testLombok.setStr("Hello World!");
return testLombok.getStr();
}
}

여기까지 진행한 후 Run하면 정상적으로 실행이 되지만 spring-boot-starter-security에 대한 설정이 없어 다음과 같은 에러 페이지가 나옵니다.

1
2
3
4
5
6
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Thu Oct 18 01:16:16 KST 2018
There was an unexpected error (type=Unauthorized, status=401).
Bad credentials

현재는 보안은 그냥 넘어가도록 설정할 예정이며 추후에 OAuth2.0을 이용해 보겠습니다. spring-boot-starter-security에 대한 설정은 JAVA Config를 통해 진행 합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
package com.ex.forblog.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(final HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("*").permitAll();
}
}

마지막으로 Spring Boot를 실행하면 기본 포트는 8080으로 설정되어 있습니다. 기본 포트를 변경하는 방법은 application.properties 혹은 application.yml에서 설정할 수 있고 지금 예제에서는 application.yml를 사용하여 9090 포트를 이용하겠습니다. 경로는 src/main/resources에 생성합니다.

1
2
server:
port: 9090

이상으로 Gradle 사용 및 환경설정에 대해 알아봤습니다.

감사합니다.

Contributors