-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Chore] 프로젝트 초기 설정 #2
Conversation
- gitignore 파일 추가 - 멀티 모듈 설정 추가
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Gradle 관련 설명 추가
plugins { | ||
id 'java' | ||
id 'org.springframework.boot' version '3.3.5' | ||
id 'io.spring.dependency-management' version '1.1.6' | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
✔️ 플러그인 적용
- java 플러그인
: 코어 플러그인(Gradle 개발자가 관리하는 플러그인) 중 하나로 자바 라이브러리를 정의하고 빌드하는 데 사용되는 플러그인입니다. java 플러그인이 제공해 주는 테스크에는compileJava
,javadoc
,jar
가 있습니다. - org.springframework.boot, io.spring.dependency-management 플러그인
: Community 플러그인(Gradle 커뮤니티에서 공유되는 플러그인)입니다. 두 플러그인 모두 Spring Boot 프로젝트에서 필수적으로 사용되는 플러그인입니다.
: org.springframework.boot 플러그인은bootJar
,bootRun
테스크를 제공하며, Spring Boot 애플리케이션을 쉽게 실행하거나 배포할 수 있도록 도와줍니다.
: io.spring.dependency-management 플러그인은 Spring 애플리케이션의 의존성 관리를 도와줍니다.
repositories { | ||
mavenCentral() | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
✔️ 외부 의존성을 가져오기 위한 위치(Repository) 설정
java { | ||
toolchain { | ||
languageVersion = JavaLanguageVersion.of(17) | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
✔️ java 플러그인을 위한 속성 설정 추가
- 자바 버전은 17을 사용
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- 자바 버전을 명시적으로 지정
- 만약 지정된 Java 버전이 로컬에 설치되어 있지 않으면, Gradle이 자동으로 해당 버전을 다운로드
dependencies { | ||
implementation 'org.springframework.boot:spring-boot-starter' | ||
testImplementation 'org.springframework.boot:spring-boot-starter-test' | ||
testRuntimeOnly 'org.junit.platform:junit-platform-launcher' | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
✔️ 해당 프로젝트(nowait-api)에서 의존하는 외부 리소스 정의
- implementation: 프로덕션 코드를 컴파일 + 실행하기 위한 의존성
- testImplementation: 테스트 코드를 컴파일 + 실행하기 위한 의존성
- testRuntimeOnly : 테스트 코드를 실행하기 위한 의존성
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이러한 의존성에 버전을 명시하지 않아도 되는 이유는 'io.spring.dependency-management' 플러그인 덕분!
플러그인을 통해 Gradle이 알아서 스프링 부트 버전에 맞춰 적합한 버전의 의존성을 주입한다. (링크)
@@ -0,0 +1,3 @@ | |||
rootProject.name = 'nowait' | |||
|
|||
include 'nowait-api' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
✔️ 루트 프로젝트 네임 설정 (없으면, 루트 디렉토리명으로 설정)
✔️ 서브 프로젝트 설정 (루트 프로젝트에 'nowait-api' 프로젝트를 추가하는 Settings 메서드 실행)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
필요한 내용만 남기고 정리하시면 좋을 것 같습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@@ -0,0 +1,3 @@ | |||
rootProject.name = 'nowait' | |||
|
|||
include 'nowait-api' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
include 'nowait-api' | |
include ':nowait-api' |
하위 디렉토리가 어디까지를 의미하는 것인지 확인해보면 좋을 것 같네요.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- 루트 디렉토리의 바로 아래만 인식합니다! 그래서 멀티 레벨에서는 ":nowait:api"와 같이 명시적으로 지정해야 합니다!
:
은 경로 구분자로/
와 비슷
@@ -0,0 +1,28 @@ | |||
plugins { | |||
id 'java' | |||
id 'org.springframework.boot' version '3.3.5' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
루트와 모듈의 버전이 다른 경우에는 어떻게 될까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
서브 모듈 버전이 우선시 됩니다.
Gradle은 각 프로젝트의 plugins 블록에서 명시한 플러그인 버전을 개별적으로 로드하고, 이때 루트 프로젝트에서 명시한 플러그인 버전이 기본 값이 됩니다. 그리고 하위 프로젝트에서 버전을 다시 지정하면 하위 프로젝트 버전이 적용됩니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
네, 그렇게 만들어야 하위 프로젝트에서 다른 버전을 쓸 수 있게되겠죠. :-)
plugins { | ||
id 'java' | ||
id 'org.springframework.boot' version '3.3.5' | ||
id 'io.spring.dependency-management' version '1.1.6' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
} | ||
|
||
tasks.named('test') { | ||
useJUnitPlatform() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이건 왜 필요한가요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Gradle의 기본 테스트 실행 환경이 JUnit 4이기 때문에, JUnit 5로 테스트를 실행하려면 명시적으로 useJUnitPlatform()
를 설정해야 합니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
수고하셨습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
코멘트 답변 완료 🤓
<!--이슈 태스크를 모두 완료하고 닫는다면 Resolves #번호--> | ||
<!--이슈 태스크를 모두 완료하지는 못 했지만 닫는다면 Closes #번호--> | ||
<!--이슈 태스크를 일부 완료하고 열어둔다면 Fixes #번호--> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@@ -0,0 +1,7 @@ | |||
distributionBase=GRADLE_USER_HOME | |||
distributionPath=wrapper/dists | |||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Gradle 배포 파일을 다운로드할 URL 지정
@@ -0,0 +1,28 @@ | |||
plugins { | |||
id 'java' | |||
id 'org.springframework.boot' version '3.3.5' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
서브 모듈 버전이 우선시 됩니다.
Gradle은 각 프로젝트의 plugins 블록에서 명시한 플러그인 버전을 개별적으로 로드하고, 이때 루트 프로젝트에서 명시한 플러그인 버전이 기본 값이 됩니다. 그리고 하위 프로젝트에서 버전을 다시 지정하면 하위 프로젝트 버전이 적용됩니다!
dependencies { | ||
implementation 'org.springframework.boot:spring-boot-starter' | ||
testImplementation 'org.springframework.boot:spring-boot-starter-test' | ||
testRuntimeOnly 'org.junit.platform:junit-platform-launcher' | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이러한 의존성에 버전을 명시하지 않아도 되는 이유는 'io.spring.dependency-management' 플러그인 덕분!
플러그인을 통해 Gradle이 알아서 스프링 부트 버전에 맞춰 적합한 버전의 의존성을 주입한다. (링크)
java { | ||
toolchain { | ||
languageVersion = JavaLanguageVersion.of(17) | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- 자바 버전을 명시적으로 지정
- 만약 지정된 Java 버전이 로컬에 설치되어 있지 않으면, Gradle이 자동으로 해당 버전을 다운로드
} | ||
|
||
tasks.named('test') { | ||
useJUnitPlatform() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Gradle의 기본 테스트 실행 환경이 JUnit 4이기 때문에, JUnit 5로 테스트를 실행하려면 명시적으로 useJUnitPlatform()
를 설정해야 합니다!
@@ -0,0 +1,3 @@ | |||
rootProject.name = 'nowait' | |||
|
|||
include 'nowait-api' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- 루트 디렉토리의 바로 아래만 인식합니다! 그래서 멀티 레벨에서는 ":nowait:api"와 같이 명시적으로 지정해야 합니다!
:
은 경로 구분자로/
와 비슷
🔗 관련 이슈
#1
👩🏻💻 구현 내용
1️⃣ 예약 기능을 위한 API 스펙 작성
2️⃣ 프로젝트 초기 설정 진행
.gitignore
버전 관리에서 제외할 파일을 설정하기 위한 파일
macOS, IntelliJ, Gradle, Java 등에 의존적인 파일은 제외 (참고. https://www.toptal.com/developers/gitignore)
gradle/wrapper/gradle-wrapper.jar
Gradle Wrapper 코드를 포함하는 jar 파일
gradle/wrapper/gradle-wrapper.properties
Gradle Wrapper의 속성 설정 파일
🐘 Gradle?
Gradle은 프로젝트에 필요한 외부 리소스를 선언하고 해결하기 위한 자동화된 기술(의존성 관리)를 제공해 주며, 플러그인을 통해 다양한 빌드 작업(테스크)를 수행하면서 빌드를 진행합니다.
gradlew
Gradle을 호출할 수 있는 Wrapper 스크립트
gradlew.bat
Gradle을 호출할 수 있는 Wrapper 스크립트
nowait-api/build.gradle
빌드 설정, Task(테스크), 플러그인들을 자세하게 설명하는 빌드 스크립트
✔️ 자세한 내용은 Comment 참고!
settings.gradle
Gradle 프로젝트의 entry point이며, 주로 서브 프로젝트를 추가하기 위해 사용
💡 settings.gradle에 있는 모든 항목은 Gradle API의 Settings 객체에서 메서드를 호출하는 것
💬 PR 포인트 & 궁금한 점