spring boot 스프링 부트 개발 환경 설정 - setting
Github: https://github.com/syakuis/syaku-blog
모든글
오랜만에 포스팅을 시작한다. spring boot 를 이용하여 블로그를 만들어볼 생각이다. 천천히 따라 하면 쉽게 만들수 있을 것이다. 그리고 spring boot 를 사용해 백엔드 뿐만 아니라 리액트나 뷰를 사용하여 프론트엔드까지 포함할 생각이다.
개발스팩
spring-boot 2.0.5.RELEASE IntelliJ IEDA - 인텔리J Gradle 4.x git & gitlab & github & sourceTree
프로젝트 생성
나는 인텔리J 개발툴을 사용했지만 이클립스로 따라해도 상관없다. 둘다 차이는 크게 없다. 그리고 개발자라면 둘다 다룰줄알았으면 한다.
스프링 부트 2 를 사용하기 위해 기본적으로 준수해야할 개발 스펙은 다음과 같다.
java 8 이상
Spring Framework 5.0.9.RELEASE 이상
Maven 3.2 이상 혹은 Gradle 4 이상
Servlet 3.1 이상
인텔리J 에서 새로운 프로젝트를 생성한다.
editor 설정을 동일하게 설정하기 위해 .editorconfig
파일을 생성하고 아래와 같이 작성한다.
root = true
[*]
indent_style = space
indent_size = 2
tab_width = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
그리고 빌드툴을 그래들로 사용했다. build.gradle
파일을 열어서 스프링 부트를 의존성에 추가한다.
< / > build.gradle
buildscript {
ext {
springBootVersion = '2.0.5.RELEASE'
}
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
mavenCentral()
jcenter()
}
dependencies {
classpath "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}"
}
}
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
group 'org.syaku'
group 'org.syaku'
version '1.0.0.BUILD-SNAPSHOT'
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
jcenter()
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-web")
testImplementation("org.springframework.boot:spring-boot-starter-test")
testCompile "junit:junit:4.12"
testCompile "org.jmock:jmock-junit4:2.8.2"
testCompile "org.mockito:mockito-core:2.+"
}
이제 스프링 부트가 정상적으로 작동되는 지 소스를 작성한다.
< / > src/main/org/syaku/blog/Application.java
package org.syaku.blog;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@SpringBootApplication
는 스프링 부트에서 시작점을 의미한다. 해당 위치에서부터 이하 경로에 있는 스테레오 타입들을 모두 스캔하여 스프링 빈으로 생성한다. 또한 @EnableAutoConfiguration
이 활성화되면 스프링 부트 스타터 라이브러리를 모두 자동으로 설정하여 사용할 수 있도록 해준다.
그래서 우리는 build.gradle 에 스프링 부트 스타터 라이브러리 의존성을 추가만 하면 jpa 든 mybatis 든 아무런 설정없이 기본 설정으로 사용할 수 있게 된다. spring boot docs 에서 spring-boot-starter
검색해보면 사용할 수 있는 스타터들을 확인할 수 있다.
@SpringBootApplication
주석에는
excludeFilters = { (
(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
위와 같은 주석들을 포함하고 있다. 즉 @Component @Service @Repository
그리고 @Configuration
을 스캔한다.
< / > src/test/org/syaku/blog/ApplicationTest.java
package org.syaku.blog;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.junit4.SpringRunner;
SpringRunner.class) (
springframework.boot.test.context.SpringBootTest .
public class SpringBootTest {
public void test() {
System.out.println("Hello World!!!");
}
}
테스트를 실행한다.
IntelliJ IDEA 설정 추가
그래드과 인텔리J 호환성 문제로 빌드시 두개의 폴더가 생성된다. 이문제를 해결하기 위해 우선 Project Structure
에 들어가서 Project Settings > Project > Project Compiler output
에서 마지막 경로 out 를 build 로 변경한다.
그리고 build.gradle 에 아래와 같이 추가한다.
idea {
module {
inheritOutputDirs = true
outputDir = compileJava.destinationDir
testOutputDir = compileTestJava.destinationDir
}
}
이제 빌드시 build 폴더만 생성된다.
참고 : https://docs.gradle.org/current/dsl/org.gradle.plugins.ide.idea.model.IdeaModule.html
lombok 추가
롬복은 코드 작성을 줄여주는 유용한 라이브러리이다. 필요한 코드를 빌드시 자동으로 작성도도록 해준다. 라이브러리 의존성을 추가한다.
< / > build.gradle
compileOnly 'org.projectlombok:lombok:1.18.2'
annotationProcessor 'org.projectlombok:lombok:1.18.2'
testCompileOnly 'org.projectlombok:lombok:1.18.2'
testAnnotationProcessor 'org.projectlombok:lombok:1.18.2'
설치방법대로 되지 않아서 위와 같이 설정했다. 다른 방법이 있으면 그렇게 사용하면 된다.
그리고 인텔리에서 롬복을 사용하기 위해 플러그인 설치와 설정을 해줘야 한다.
플로그인 설치 : Setting > Plugins > Browse repositories... > Lombok Plugin
검색 후 설치
https://plugins.jetbrains.com/plugin/6317-lombok-plugin
롬복 사용 설정 : 이 설정은 새로운 프로젝트를 만들때마다 확인한다.
Setting > Build > Compiler > Annotation Processors > Enable annotation processing
체크
롬복이 안될 경우 인텔리를 종료하고 다시 실행한다.
Gradle build 문제 해결
Execution failed for task ':bootJar'.
> Main class name has not been configured and it could not be resolved
https://docs.spring.io/spring-boot/docs/current/gradle-plugin/reference/html/#packaging-executable
build.gradle 에 아래와 같이 추가하면 된다.
bootJar {
mainClassName = 'org.syaku.blog.Application'
}
실행할 메인 클래스가 없을때는 아래와 같이 한다.
bootJar.enabled = false
최종 소스
< / > build.gradle
buildscript {
ext {
springBootVersion = '2.0.5.RELEASE'
lombokVersion = '1.18.2'
}
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
mavenCentral()
jcenter()
}
dependencies {
classpath "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}"
}
}
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
group 'org.syaku'
version '1.0.0.BUILD-SNAPSHOT'
sourceCompatibility = 1.8
targetCompatibility = 1.8
idea {
module {
inheritOutputDirs = true
outputDir = compileJava.destinationDir
testOutputDir = compileTestJava.destinationDir
}
}
bootJar {
mainClassName = 'org.syaku.blog.Application'
}
repositories {
jcenter()
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-web")
testImplementation("org.springframework.boot:spring-boot-starter-test")
testCompile "junit:junit:4.12"
testCompile "org.jmock:jmock-junit4:2.8.2"
testCompile "org.mockito:mockito-core:2.+"
compileOnly "org.projectlombok:lombok:${lombokVersion}"
annotationProcessor "org.projectlombok:lombok:${lombokVersion}"
testCompileOnly "org.projectlombok:lombok:${lombokVersion}"
testAnnotationProcessor "org.projectlombok:lombok:${lombokVersion}"
}
< / > src/test/org/syaku/blog/ApplicationTest.java
package org.syaku.blog;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import lombok.extern.slf4j.Slf4j;
SpringRunner.class) (
public class ApplicationTest {
public void test() {
log.debug("Spring Boot Blog!!!");
}
}
Git 저장소에 소스 올리기
gitlab 서비스를 기본으로 사용하고 github 에도 배포한다. git 은 기본적은 명령어만 설명한다. 나는 주로 sourceTree 사용한다.
빌드된 폴더나 로컬 설정 파일은 올릴 필요가 없다. 제외할 수 있도록 파일을 생성해서 아래와 같이 작성한다.
< / > .gitignore
/build
/.gradle
/.idea
터미널을 열어 git 저장소를 생성한다.
인텔리J 에서 플러그인 Native Terminal Plugin 을 설치한다. 빌드 버튼 옆에 터미널 아이콘이 추가되고 내가 원하는 터미널을 설정해서 사용할 수 있다.
https://plugins.jetbrains.com/plugin/9966-native-terminal-plugin
프로젝트 최상위 경로에서 아래의 명령어를 실행한다.
$ git init
$ git add .
$ git commit -m "started :)"
이제 gitlab (https://gitlab.com/projects/new) 에 저장소를 생성하고
아래와 같이 명령어를 실행한다.
# config 는 처음인 경우에만 작성한다.
$ git config --global user.name "syaku"
$ git config --global user.email "syaku@naver.com"
$ git remote add origin https://gitlab.com/syakuis/syaku-blog.git
$ git push -u origin master
이제 gitlab 프로젝트에 올리왔는 지 확인한다.
앞으로 포스팅의 모든 소스는 https://gitlab.com/syakuis/syaku-blog 에서 확인할 수 있다.
https://github.com/syakuis/syaku-blog 에서도 확인할 수 있다.
'Back-end' 카테고리의 다른 글
spring boot jpa 스프링 부트 블로그 만들기 #2 - blog (0) | 2018.10.20 |
---|---|
spring boot docker jenkins nexus 스프링 부트 자동 테스트 및 배포 환경 구현 (0) | 2018.10.17 |
spring boot jpa 스프링 부트 블로그 만들기 #1 - blog (0) | 2018.10.15 |
Effective Java Exception : 9장 예외 (0) | 2018.02.20 |