> Hello World !!!

     

@syaku

spring boot 스프링 부트 개발 환경 설정 - setting

스프링 부트 개발 환경 설정

Github: https://github.com/syakuis/syaku-blog

모든글


오랜만에 포스팅을 시작한다. spring boot 를 이용하여 블로그를 만들어볼 생각이다. 천천히 따라 하면 쉽게 만들수 있을 것이다. 그리고 spring boot 를 사용해 백엔드 뿐만 아니라 리액트나 뷰를 사용하여 프론트엔드까지 포함할 생각이다.

개발스팩

java 8 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 이상

https://docs.spring.io/spring-boot/docs/2.0.5.RELEASE/reference/htmlsingle/#getting-started-system-requirements

인텔리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.+"
}

https://docs.spring.io/spring-boot/docs/2.0.5.RELEASE/reference/htmlsingle/#getting-started-gradle-installation

이제 스프링 부트가 정상적으로 작동되는 지 소스를 작성한다.

< / > src/main/org/syaku/blog/Application.java

package org.syaku.blog;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@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 주석에는

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(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;

@RunWith(SpringRunner.class)
@org.springframework.boot.test.context.SpringBootTest
public class SpringBootTest {

 @Test
 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 추가

https://projectlombok.org

롬복은 코드 작성을 줄여주는 유용한 라이브러리이다. 필요한 코드를 빌드시 자동으로 작성도도록 해준다. 라이브러리 의존성을 추가한다.

< / > 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;

@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTest {
 @Test
 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 에서도 확인할 수 있다.