Spring/스프링 부트와 AWS로 혼자 구현하는 웹 서비스

CHAPTER 01 인텔리제이로 스프링 부트 시작하기

melitina 2023. 11. 25. 15:27

build.gradle

// 자바 개발에 가장 기초적인 설정
// 플러그인 의존성 관리를 위한 설정
// 4개의 플러그인은 자바와 스프링 부트를 사용하기 위해서는 필수 플러그인들이니 항상 추가하면 됩니다.
plugins {
	id 'java'
	// springBootVersion 전역변수를 생성하고 그 값을 '2.1.7.RELEASE'로 하겠다는 의미
	// 즉, spring-boot-gradle-plugin라는 스프링 부트 그레이들 플러그인의 2.1.7.RELEASE를 의존성으로 받겠다는 의미
	id 'org.springframework.boot' version '2.7.17'
	// io.spring.dependency-management 플러그인은 스프링 부트의 의존성들을 관리해 주는 플러그인이라 꼭 추가해야만 합니다.
	id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}

group = 'com.jojoldu.book'
version = '0.0.1-SNAPSHOT'

java {
	sourceCompatibility = '17'
}

// repositories는 각종 의존성 (라이브러리)들을 어떤 원격 저장소에서 받을지를 정합니다
repositories {
	// 기본적으로 mavenCentral을 많이 사용하지만,
	// 최근에는 라이브러리 업로드 난이도 때문에 jcenter도 많이 사용합니다.
	// mavenCentral은 이전부터 많이 사용하는 저장소지만,
	// 본인이 만든 라이브러리를 업로드하기 위해서는 정말 많은 과정과 설정이 필요합니다.
	// 그러다 보니 개발자들이 직접 만든 라이브러리를 업로드하는 것이 힘들어 점점 공유가 안 되는 상황이 발생했습니다.
	mavenCentral()
	// 최근에 나온 jcenter는 이런 문제점을 개선하여 라이브러리 업로드를 간단하게 하였습니다.
	// 또한, 여기서 한 걸음 더 나아가 jcenter에 라이브러리를 업로드하면 mavenCentral에도 업로드될 수 있도록 자동화를 할 수 있습니다.
	// 그러다 보니 개발자들의 라이브러리가 점점 jcenter로 이동하고 있습니다.
	// 여기서는 mavenCentral, jcenter 둘 다 등록해서 사용하겠습니다.
}

// dependencies는 프로젝트 개발에 필요한 의존성들을 선언하는 곳입니다.
// 여기서는 org.springframework.boot:spring-boot-starter-web와 org.springframework.boot:spring-boot-starter-test를 받도록 선언되어 있습니다.
// 재미있는 것은 인텔리제이는 메이븐 저장소의 데이터를 인덱싱해서 관리하기 때문에 커뮤니티 버전을 사용해도 의존성 자동완성이 가능합니다.
// 의존성 코드는 직접 작성해도 되고, 자동완성으로 만들어도 됩니다.
// 단, 특정 버전을 명시하면 안 됩니다.
// 버전을 명시하지 않아야만 맨 위에 작성한 'org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}'의 버전을 따라가게 됩니다.
// 이렇게 관리할 경우 각 라이브러리들의 버전 관리가 한 곳에 집중되고, 버전 충돌 문제도 해결되어 편하게 개발을 진행할 수 있습니다.
dependencies {
	// implementation 메소드 안에 라이브러리의 이름의 앞부분만 추가한 뒤 자동완성(Ctrl + Space)을 사용하면 해당 라이브러리들의 목록을 볼 수 있습니다.
	implementation 'org.springframework.boot:spring-boot-starter-web'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

tasks.named('bootBuildImage') {
	builder = 'paketobuildpacks/builder-jammy-base:latest'
}

tasks.named('test') {
	useJUnitPlatform()
}

// 코드 작성이 다 되었다면 'build.gradle에 변경이 있으니 반영하라'는 인텔리제이의 알람이 오른쪽 아래에 나옵니다.
// 알람 오른쪽의 [Enable Auto-import]를 클릭하면 build.gradle 변경이 있을 때마다 자동으로 반영이 되며,
// 왼쪽 [Import Changes] 버튼을 클릭하면 1번만 반영됩니다.
// 변경이 있을 때마다 클릭하기는 번거로우니 [Enable Auto-import] 버튼을 클릭합니다.
// 클릭하게 되면 그레이들이 변경된 내용을 반영하기 시작합니다.
// 추가한 두 개의 라이브러리인 spring-boot-start-web과 spring-boot-starter-test와 관련된 라이브러리들을 바독 있는 것을 확인할 수 있습니다.
// 오른쪽 위의 [Gradle] 탭에서 의존성들이 잘 받아졌는지 확인해 봅니다.
// main에서는 spring-boot-start-web이, test에서는 spring-boot-start-web, spring-boot-start-test 의존성이 잘 받아졌던 것을 확인할 수 있습니다.



// 윈도우에서 [Ctrl + Shift + A]를 사용해 Action 검색창을 열어 share project on github을 검색합니다.

 

 

 

 

build.gradle

// 33p
// 플러그인 의존성 관리를 위한 설정
buildscript{
    // ext 키워드 : build.gradle에서 사용하는 전역변수를 설정하겠다는 의미
    ext{
        // springBootVersion 전역변수를 생성하고 그 값을 '2.1.7.RELEASE'로 하겠다는 의미
        // 즉, spring-boot-gradle-plugin라는 스프링 부트 그레이들 플러그인의 2.1.7.RELEASE를 의존성으로 받겠다는 의미
        springBootVersion = '2.1.7.RELEASE'
    }
    // repositories는 각종 의존성 (라이브러리)들을 어떤 ㅜ언격 저장소에서 받을지를 정합니다
    repositories{
        // 기본적으로 mavenCentral을 많이 사용하지만,
        // 최근에는 라이브러리 업로드 난이도 때문에 jcenter도 많이 사용합니다.
        // mavenCentral은 이전부터 많이 사용하는 저장소지만,
        // 본인이 만든 라이브러리를 업로드하기 위해서는 정말 많은 과정과 설정이 필요합니다.
        // 그러다 보니 개발자들이 직접 만든 라이브러리를 업로드하는 것이 힘들어 점점 공유가 안 되는 상황이 발생했습니다.
        mavenCentral()
        // 최근에 나온 jcenter는 이런 문제점을 개선하여 라이브러리 업로드를 간단하게 하였습니다.
        // 또한, 여기서 한 걸음 더 나아가 jcenter에 라이브러리를 업로드하면 mavenCentral에도 업로드될 수 있도록 자동화를 할 수 있습니다.
        // 그러다 보니 개발자들의 라이브러리가 점점 jcenter로 이동하고 있습니다.
        jcenter()
        // 여기서는 mavenCentral, jcenter 둘 다 등록해서 사용하겠습니다.
    }
    dependencies{
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}



// 4개의 플러그인은 자바와 스프링 부트를 사용하기 위해서는 필수 플러그인들이니 항상 추가하면 됩니다.
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
// io.spring.dependency-management 플러그인은 스프링 부트의 의존성들을 관리해 주는 플러그인이라 꼭 추가해야만 합니다.
apply plugin: 'io.spring.dependency-management'



// 자바 개발에 가장 기초적인 설정
/*
plugins {
    id 'java'
}
 */

group = 'com.jojoldu.book'
version = '1.0-SNAPSHOT'
//sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

// dependencies는 프로젝트 개발에 필요한 의존성들을 선언하는 곳입니다.
// 여기서는 org.springframework.boot:spring-boot-starter-web와 org.springframework.boot:spring-boot-starter-test를 받도록 선언되어 있습니다.
// 재미있는 것은 인텔리제이는 메이븐 저장소의 데이터를 인덱싱해서 관리하기 때문에 커뮤니티 버전을 사용해도 의존성 자동완성이 가능합니다.
// 의존성 코드는 직접 작성해도 되고, 자동완성으로 만들어도 됩니다.
// 단, 특정 버전을 명시하면 안 됩니다.
// 버전을 명시하지 않아야만 맨 위에 작성한 'org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}'의 버전을 따라가게 됩니다.
// 이렇게 관리할 경우 각 라이브러리들의 버전 관리가 한 곳에 집중되고, 버전 충돌 문제도 해결되어 편하게 개발을 진행할 수 있습니다.
dependencies {
    /*
    testImplementation platform('org.junit:junit-bom:5.9.1')
    testImplementation 'org.junit.jupiter:junit-jupiter'
    */

    // Spring Boot가 2.1 -> 2.4로 변경되면서 build.gradle dependencies compile 메소드 이름이 변경되었습니다.
    // 교재의 compile은 `implementation`로, testCompile은 `testImplementation`로 바꿔주세요.
    // compile 메소드 안에 라이브러리의 이름의 앞부분만 추가한 뒤 자동완성(Ctrl + Space)을 사용하면 해당 라이브러리들의 목록을 볼 수 있습니다.
    //compile("org.springframework.boot:spring-boot-starter-web")
    implementation("org.springframework.boot:spring-boot-starter-web")
    //testCompile("org.springframework.boot:spring-boot-starter-test")
    testImplementation("org.springframework.boot:spring-boot-starter-test")
}

/*
test {
    useJUnitPlatform()
}
 */

// 코드 작성이 다 되었다면 'build.gradle에 변경이 있으니 반영하라'는 인텔리제이의 알람이 오른쪽 아래에 나옵니다.
// 알람 오른쪽의 [Enable Auto-import]를 클릭하면 build.gradle 변경이 있을 때마다 자동으로 반영이 되며,
// 왼쪽 [Import Changes] 버튼을 클릭하면 1번만 반영됩니다.
// 변경이 있을 때마다 클릭하기는 번거로우니 [Enable Auto-import] 버튼을 클릭합니다.
// 클릭하게 되면 그레이들이 변경된 내용을 반영하기 시작합니다.
// 추가한 두 개의 라이브러리인 spring-boot-start-web과 spring-boot-starter-test와 관련된 라이브러리들을 바독 있는 것을 확인할 수 있습니다.
// 오른쪽 위의 [Gradle] 탭에서 의존성들이 잘 받아졌는지 확인해 봅니다.
// main에서는 spring-boot-start-web이, test에서는 spring-boot-start-web, spring-boot-start-test 의존성이 잘 받아졌던 것을 확인할 수 있습니다.