본문 바로가기
공부/프로그래밍

[Spring Boot] 인텔리J 에서 Gradle 을 이용하여 Spring-boot 초기설정

by demonic_ 2018. 3. 11.
반응형

그렇게 될지 아닐지는 모르지만, Maven 에서 Gradle 로 넘어갈 가능성을 염두하여 미리 조금이나마 경험해보려 한다. 

Maven 은 여전히 많이쓰이지만 경직되어 있고, 지원하지 않는 빌드 과정을 추가할 경우 고생이 많아 여러가지 대안책이 나오는데, 그중 Gradle 이 눈에띈다. 다만 눈에다는 수준이지 아직 확정되는 것은 아니며, 여전히 현업에서는 Maven을 많이 사용한다.

최근 에디터도 IntelliJ(이하 인텔리)로 이동했는데 이놈이 유료버전이 아니면 이런것을 일일히 세팅해야 하는 번거로움이 있다. 편법으로는 이클립스로 먼저 초기베이스를 잡고 workspace를 import 하는 방법도 있겠지만, 이번에는 Gradle 을 알아보려 한 것이므로 처음부터 해본다.



1) 화면에서 Create New Projcet 를 누르면 다음의 화면이 뜬다. Gradle을 선택하고 JAVA를 선택한 후에 다음을 누른다.



여기서는 GroupId, ArtifactId, Version 을 입력하는데 임의로 입력해도 된다.



기본값에서 Use auto-import 부분만 체크를 추가했다.



최종적으로 저장될 로컬위치와 프로젝트 이름을 지정한다. 



모두 완료하면 다음의 화면이 뜬다. 여기서 build.gradle 파일을 연다.



설정 내용을 다음과 같이 변경한다.


// 외부 라이브러리를 참조해야 할 경우 사용.
buildscript{
    ext{
        springBootVersion = "1.5.9.RELEASE"
    }
    repositories {
        mavenCentral()
        maven { url "http://repo.spring.io/libs-snapshot" }
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'war'

war {
    baseName = 'myapp'
    version =  '0.0.1-SNAPSHOT'
}


// 자바버전과 동일하게 설정
sourceCompatibility = 1.8


// 레파지토리
repositories {
//    기본 Maven 레파지토리
    mavenCentral()

//    Bintray jCenter를 리포지토리로 추가
//    https://bintray.com/bintray/jcenter
    jcenter()

//    기타 MAVEN 레파지토리 URL 지정
    maven { url "http://repo.spring.io/libs-snapshot" }
}


dependencies {
//    컴파일 시 라이브러리를 참조한다는 의미
    compile("org.springframework.boot:spring-boot-starter-web")
//    providedRuntime 는 runtime시에만 필요하고 배포시에는 제외될 dependency를 설정한다
//    SpringBootServletInitializer 를 extends 받았을 경우 'providedRuntime' 를 사용하면 에러가 발생
//      : Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletContext
//    providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
    compile("org.springframework.boot:spring-boot-starter-tomcat")
    testCompile group: 'junit', name: 'junit', version: '4.12'
}


그리고 다음과 같이 패키지와 클래스를 각각 만든다.
- 패키지: test
- 클래스: Application.Java, TestController



Application.java 파일을 다음과 같이 작성한다. 아래 클래스가 Spring 의 설정을 읽을 수 있도록 설정된 클래스다.


@SpringBootApplication 선언된 클래스는 패키지 최상위에 위치한다.

'만약 그러지 않으면 @ComponentScan 에 스캔이 되지 않는 경우가 있다.

여기서 extends SpringBootServletInitializer 가 추가된 이유는 웹 애플리케이션을 WAR로 배포할 때 상속하도록 가이드하기 때문이다. 불필요하면 빼도 무방하다.


package com;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;

@SpringBootApplication
public class Application extends SpringBootServletInitializer{

    public static void main(String[] args){
        SpringApplication.run(Application.class, args);
    }
}


이제 URL 을 파싱할 클래스를 생성


package com.test;

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

@RestController
public class TestController {

    @RequestMapping("/")
    public String index(){
        System.out.println("TTTT");
        return "테스트 입니다.";
    }
}


이제 실행을 해보면 된다. 실행은 아래 그림처럼 마우스 오른쪽 버튼을 누른 후, Run 'Application.main()' 을 클릭한다.



아무 설정도 하지 않으면 포트가 8080으로 된다. 아래 주소로 접속해보자

localhost:8080






스트링부트는 부팅이 매우 빠르고 설정이 간단하여 매우 매력적으로 보인다. 앞으로 새로 프로젝트를 만들 때에는 이걸로 해도 좋겠다.


반응형

댓글