IntelliJ IDEA에서 Spring Boot 웹 프로젝트 생성하기

개요

Spring Boot는 최근 Java 진영에서 각광 받고 있는 간결하고 강력한 웹 프레임워크이다. 이름에서 드러나듯이 국내에서 가장 사랑 받는 Spring 프레임워크를 기반으로 한다. 경쟁자로 역시 뒤지지 않는 막강한 기능의 Dropwizard가 존재하지만 그리 친숙하지 않은 JAX-RS를 기반으로 하여 앞으로도 국내에서 많이 쓰이지는 않을 것으로 생각된다.(나는 작년 국내 모 영화 포탈 서비스의 일부를 JAX-RS 기반의 Jersey로 개발하며 상당한 생산성 향상을 경험한 적이 있다. 문제는 후에 담당한 운영 인력이 익숙치 않은 문법에 어려움을 겪었다고 한다.) 최근에는 소속한 회사의 REST API 백엔드 서비스를 Spring Boot로 개발하고 있는데 매번 그 편리함에 감탄하고 있다. 한편, IntelliJ IDEAEclipse를 압도하는 Java 진영 최강의 IDE로 군림하고 있다. IntelliJSpring Boot의 조합은 신세계라고 생각되어 본 글에서 간단히 프로젝트 생성 방법을 소개하고자 한다.

Spring Boot 프로젝트 생성

먼저 Spring Boot 프로젝트를 생성한다. JDK 8, IntelliJ IDEA 15가 이미 설치된 상태라고 가정하고 진행한다.

  • IntelliJ IDEA 실행 → Create New Project 클릭
  • 좌측 메뉴에서 Gradle 클릭 → Project SDK: 1.8 → Additional Libraries and Frameworks: Java 체크 → Next 클릭
  • GroupId: com.jsonobject 입력 → ArtifactId: spring-boot-example 입력 → Version: 0.0.1 입력 → Next 클릭
  • Use auto-import 체크 → Create directories for empty content roots automatically 체크 → Use default gradle wrapper (recommended) 선택 → Gradle JVM: 1.8 선택→ Next 클릭
  • Project name: spring-boot-example 입력 → Project location: D:\Projects\spring-boot-example 입력 → Finish 클릭

build.gradle 작성

프로젝트 생성을 완료하면 /build.gradle 파일이 생성되어 있다. 아래 내용으로 교체하자. 프로젝트 생성을 위한 최소한의 구성으로 실제 엔터프라이즈 급의 프로젝트를 생성하려면 테스트, 배포 태스크 등 훨씬 복잡한 내용이 추가되어야 한다.

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath group: 'org.springframework.boot', name: 'spring-boot-gradle-plugin', version: '1.4.0.RELEASE'
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot'

jar {
    baseName = 'spring-boot-example'
    version = '0.0.1'
}

repositories {
    mavenCentral()
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-web'
}

task wrapper(type: Wrapper) {
    gradleVersion = '2.5'
}
  • Spring Boot(1.3.5)는 기본적으로 Embedded Tomcat(8.0.33)을 컨테이너로 사용한다. 전통적으로 컨테이너 위에서 배포되어 작동하는 방식이 아니라 빌드된 .JAR를 실행하면 내장된 컨테이너를 실행하여 애플리케이션을 작동시킨다. 이런 특징은 번거로운 배포 절차와 컨테이너에 대한 애플리케이션의 종속성을 최소화 시켜준다.

.gitignore 작성

Git으로 소스 코드를 관리할 경우 IntelliJ IDEAGradle이 생성하는 파일까지 관리 대상이 되는 것은 불필요한 일이다. /.gitignore 파일을 아래와 같이 작성하여 필요한 파일만 관리되도록 설정한다.

.gradle
.idea
build
*.iml

Application.java 작성

@SpringBootApplication 어노테이션이 붙는 클래스는 Spring Boot 프로젝트 실행의 시작점이다. /src/main/java/com.jsonobject.example/Application.java 파일을 아래와 같이 작성한다.

package com.jsonobject.example;

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

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        ApplicationContext ctx = SpringApplication.run(Application.class, args);
    }
}
  • Spring Boot 기반의 웹 애플리케이션은 ApplicationContext 오브젝트를 어디에 저장될까? 바로 ServletContext의 애트리뷰트(Key: org.springframework.web.context.WebApplicationContext.ROOT, Value: AnnotationConfigEmbeddedWebApplicationContext 오브젝트)에 저장한다. 따라서 ServeltContext와 같은 생명주기를 가질 수 있다.

HelloController.java 작성

Spring Boot 프로젝트 개발을 위한 최소한의 준비가 끝났다. @Controller 클래스를 작성해보자. /src/main/java/com.jsonobject.example/HelloController.java 파일을 아래와 같이 작성한다.

package com.jsonobject.example;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @RequestMapping("/")
    public String hello() {

        return "Hello, Spring Boot!";
    }
}

테스트

/(루트) 경로의 HTTP 요청에 대응하는 컨트롤러 작성까지 끝났다. 이제 테스트를 해보자. 브라우저를 열고 http://localhost:8080/에 접속한다. 화면에 Hello, Spring Boot! 문자열이 출력되었다면 정상적으로 실행된 것이다.

빌드

Spring Boot로 제작한 애플리케이션을 빌드하면 1개의 .jar 파일이 생성된다.

  • Shift 키 2번 연타 -> Gradle 입력 후 Tool Windows: Gradle 선택 -> Tasks -> build -> build 실행
  • /{project_location}/build/libs/{project_name}-{version}.jar 경로에서 빌드되어 생성된 .jar 파일을 확인할 수 있다.

실행

빌드된 .jar 파일은 일반적인 Java 애플리케이션과 완전히 동일한 방법으로 구동된다.

# 일반적인 Java 애플리케이션으로 실행한다.
$ java -jar {project_name}-{version}.jar

# 리눅스 운영체제에서 24시간 백그라운드로 동작하는 데몬으로 실행한다.
$ nohup java -server -jar {project_name}-{version}.jar &

결론

앞으로 Spring Boot 기반의 프로덕션 서비스를 구축하면서 경험하고 깨달은 것을 차근차근 글로 작성해보고자 한다. 작은 첫 시작으로 기본적인 프로젝트 생성 글을 작성하였고 앞으로 계속 새로운 글을 작성할 예정이다.

참고 글

다음 단계로 읽을만한 글

저작자 표시 비영리 동일 조건 변경 허락
신고