본문 바로가기
[SpringBoot]

SpringBoot 프로젝트 생성하기

by Hevton 2022. 12. 3.
반응형

 

스프링 부트를 정석으로 공부해보려고, 학습 방법을 고민했었다.

 

이미 잘 인정받은 2019년도의 책 vs 새로 나온 책들

 

나는 그래도 신뢰가 중요하다고 생각해서 전자를 택했는데, 공부를 하면서 그래도 후자가 낫다고 깨달았다.

 

옛날 책으로 하다 보니, 최신이랑 initializer 하는 방법이 달라서

버전문제로 시작부터 시간을 많이 소모했다.

 

물론 책에 나온대로 예전버전으로 진행해도 되지만, 그러면 너무 레거시 같으니까..

 

확실히 오래된 좋은 책 보다.. 신형 버전의 책이 더 좋은 것 같다..

불필요하게 두 번이나 배우고 찾아봐야 한다.. 시간을 두 배 쓴다는 말이다.

 

 

프로젝트를 생성한다.

그래도 자바 버전은 1.8로 선택했다. 이것도 올려도 상관 없을 것 같다.

 

 

intelliJ에서 생성한 Gradle 프로젝트를 스프링 부트 프로젝트로 변환하기 위해서는 크게 두 가지 방법이 있다.

 

 

  1. 직접 작성
  2. https://start.spring.io/ 사용

 

나는 2번을 참고하여 1번을 하도록 했다. 2번으로만 사용할 경우 내부 구조를 이해할 수 있는 기회가 없기 때문이다.

Initializer를 이용해서 프로젝트를 생성하면 내부 구조가 어떻게 되는지 모르고 사용할 수 있으므로,

Initializer를 사용하되, 코드를 보고 직접 하나하나 작성해보는 과정을 선택했다.

 

 

 

프로젝트를 생성하고, build.gradle 에 가면 코드들이 이럴 것이다.

plugins {
    id 'java'
}

group 'org.example'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    // testCompile group: 'junit', name: 'junit', version: '4.12'
}

몇 줄을 추가해줌으로, 아래와 같게 만들어준다.

plugins {
    id 'java'
    id 'org.springframework.boot' version '2.7.6'
    id 'io.spring.dependency-management' version '1.0.15.RELEASE'

}

group 'org.example'
version '1.0-SNAPSHOT'
sourceCompatibility = '1.8'

// 빌드 설정일 뿐 이 configurations 부분은 없애도 된다.
configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation group: 'com.google.code.gson', name: 'gson', version: '2.7' // gson은 선택이다. json을 다루는 라이브러리.
    compileOnly 'org.projectlombok:lombok' // lombok은 선택이다.
    annotationProcessor 'org.projectlombok:lombok' // lombok은 선택이다.
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
// 이 부분 추가를 잊지 않는다.
tasks.named('test') {
    useJUnitPlatform()
}

plugins를 통해 springboot framework 버전 2.7.6을 넣었고, dependency 매니저까지 추가했다.

추가로 Getter, Setter 자동완성 기능 등 편리한 기능을 제공해주는 lombok도 추가했다.

여기서의 버전들은 위 링크인 springboot initializer를 참고했다.

 

그리고 dependencies에서 springboot starter와 test starter를 implement 해준다.

스프링부트에서 많은 dependency를 수작업으로 해줄 필요 없이 이 starter가 대신 작업해준다.

 

 

그리고 나서 이 버튼을 눌러서, 작업을 반영해주면 된다.

 

만약 아래와 같은 오류가 뜬다면

An exception occurred applying plugin request [id: 'org.springframework.boot', version: '2.7.6']
> Failed to apply plugin [id 'org.springframework.boot']
   > Spring Boot plugin requires Gradle 6.8.x, 6.9.x, or 7.x. The current version is Gradle 6.1.1

gradle -> wrapper -> gradle-wrapper.properties에서 버전을 6.9로 수정해주면 된다.

Gradle 버전이 매우 낮다는 소리이다.

 

 

 

그리고 잘 작동하는지 간단히 테스트해보자

com.test.admin 패키지 아래에, controller 패키지와 service 패키지를 추가했고 (나중을 위해서)

com.test.admin 패키지 내부에 Application class를 생성했다.

 

이 Application이 스프링 부트 프로젝트 구동 역할을 해줄 것이며, 그렇기 때문에 보통

controller, service 이런 패키지들을 포함하는 패키지의 최상단 (지금과 같은 위치)에 넣어주어야 한다.

 

com.test.admin 을 루트로 잡아준 거고, 그 루트에 Application을 생성한 것이다.

 

Application 코드는 간단하다

package com.test.admin;

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

@SpringBootApplication
public class Application {

    public static void main(String args[]) {

        SpringApplication.run(Application.class, args);
    }
}

@SpringBootApplication은, 

@Configuration + @EnableAutoConfiguration + @ComponentScan 이 포함된 어노테이션이다.

따라서 컴포넌트 스캔이 여기서부터 실행되므로, 패키지들의 루트 패키지에 있어야 하는게 권고된다는 것이다!

 

 

 

이러고 실행해주면

 

요런게 뜨면서.. 여러 줄이 좌르륵 뜰 것이다. 그 중에

2022-12-03 15:29:58.120  INFO 89730 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''

부분을 보면, 톰캣 서버가 기본적으로 8080 포트에 열린 것을 볼 수 있다.

 

주소창에 localhost:8080을 쳐보면

이런 화면이 뜨면, 정상적으로 서버가 구동된 것을 확인하게 된 것이다.

반응형