
들어가며
아래내용은 영어로 작성된 Spring Boot 오픈소스의 Contribution.adoc을 읽으며 정리한 것 입니다. 모르는 용어 또한 추가적으로 작성하며 정리했습니다.
https://github.com/spring-projects/spring-boot/blob/main/CONTRIBUTING.adoc
spring-boot/CONTRIBUTING.adoc at main · spring-projects/spring-boot
Spring Boot helps you to create Spring-powered, production-grade applications and services with absolute minimum fuss. - spring-projects/spring-boot
github.com
행동 강령
이 프로젝트는 Contributor Convenat 행동 강령을 준수함
참여하려면 규정을 준수해야함
깃허브 이슈를 사용하라
bugs나 enhancement를 추적할 때 사용함.
사용법에 대한 질문은 stackoverflow에서 사용→ 해당 팀이 태그로 모니터함
보안 취약점 보고
고치기 전에 공개적으로 노출하지 마라.
https://spring.io/security-policy 에서 알려주는 방법 보기
Code convention and Housekeeping (코드 규약과 관리)
merge 전 그리고 original pull request 다음에 추가될 수 있음.
- spring javaformat 이용
-
- 플러그인 설치 : IDE에 전역으로 설치, 모든 프로젝트에 적용
- gradlew 설치 해당 프로젝트에만 적용 ./gradlew format
buildSrc에서 format 위반이 있으면 루트 디렉터리에서 ./gradlew -p buildSrc format 실행하여 해결 할 수 있음
-
- 빌드는 우리의 여러 코드 규약을 가진 Checksytle 규칙을 포함.
- ./gradlew checkstyleMain checkstyleTest 로 본인이 변경한 코드가 준수하는지 확인가능
- 새로운 *.java 파일들은 @author 태그로 본인을 나타내는 주석이 최소한 있어야 함. 가급적이면 최소한 한 문단으로 어떤 클래스인지 Javadoc class에 포함해야함.
- 모든 새로운 *.java 파일에 ASF 라이센스 주석을 추가.
- 본인이 중요하게 수정하는 .java 파일에 스스로 본인을 @author 로 추가하기.
- 몇몇 Javadocs를 추가
- 어느 정도 단위 테스트는 큰 도움이 됨. 누군가는 해야하니까.
- 여러 테스트와 Checkstyle이 포함된 확인된 task들은 프로젝트 루트에서 ./gradlew check 로 실행할 수 있음.
- SPRING_PROFILES_ACTIVE 환경 변수는 테스트 결과에 영향을 미칠 수 있음. 따라서 해당 경우에는 task를 실행하기 전에 unset SPRING_PROFILES_ACTIVE 를 실행하여 예방해라.
- 아무도 너의 브랜치를 사용하지 않으면 현재 main 브랜치(프로젝트에서 다른 타켓 브랜치)에서 rebase 해라.
- commit message 작성할 때는 커밋 메세지 작성규약 을 따라라.
Spring Java Format
일관성 있는 “Spring” 스타일을 제공해주고 어떤 Java 프로젝트든 적용될 수 있는 플러그인 모음
구성
- 소스코드 포매터 : 줄바꿈(wrapping) 및 공백 규칙을 적용
- Checkstyle plugin : 모든 소스코드 모음에 대한 일관성을 강제 부여
특징
- 일관성을 제공하는 것이므로 설정을 변경할 수는 없음
- 필요한 규칙에 맞게 나의 코드를 수정해야함.
Maven Central Repository
Maven 프로젝트에서 자바 개발자들이 사용하는 저장소
빌드 자동화 도구로 자바 프로젝트에서 주로 사용
주요 기능
- 자바 라이브러리와 아티팩트들을 공유(개발자가 가져다가 사용할수있게함)하고 호스팅(파일을 올려서 네트워크를 통해 접근 가능. 저장소에 파일을 올려두는 것) 할 수 있는 핵심 위치(저장소) 제공
- 쉬운 프로젝트 의존성 관리, 개발자 들이 필요한 라이브러리를 자동 다운로드할 수 있게해줌
- 다른 버전의 라이브러리와 호환성 관리
- 커뮤니티에서 공통 라이브러리를 공유하고 사용할 수 있게함.
mavenCentral()
gradle이 의존성 검색할 때 maven 에 저장된 저장소에서 라이브러리 가져오겠다는 의미
실제 루트 폴더에 존재하는 settings.gradle에서 gradle인데 왜 maven이 있지? 하면서 찾아본 것입니다.

settings.gradle
사용할 플러그인의 버전을 전역적으로 관리
하나의 프로젝트가 수십개의 모듈을 관리하는 것을 multi-module 프로젝트라함
- 루트 build.gradle에 모든 설정을 다 때려 박으면 관리 불가능해짐
- 그래서 setttings.gradle을 활용해 플러그인 버전을 전역적으로 설정을 관리함.
build life cycle
초기화 Initialization → 설정 Configuration → 실행 Execution
- 초기화 settings.gradle
- 빌드가 시작되자 마자 가장 먼저 실행
- 빌드에 참여할 프로젝트(모듈) 확정
- 멀티 모듈 프로젝트는 트리구조로 정의함
- include 하위 디렉터리 : 안에 들어있는 build.gradle을
- 설정 build.gradle
- settings.gradle로 빌드 대상이 확정된 이후(include 로 등록), 각 프로젝트(모듈)별로 실행됨
- 실제 빌드 로직(의존성 주입, 컴파일 옵션, 배포 설정 등) 정의
- 루트 프로젝트에도 있고, 하위 모듈에도 각각 들어가 있음
- 루트 build.gradle에 allProjects{}, subprojects{} 로 하위 모듈들이 설정 상속 받기 가능
- 실행
- 실제 컴파일 실행
https://docs.gradle.org/current/userguide/build_lifecycle.html
Build Lifecycle
The build lifecycle is the sequence of phases Gradle executes to turn your build scripts into completed work, from initializing the build environment to configuring projects and finally executing tasks.
docs.gradle.org
gradlew = gradle wrapper
특정 gradle 버전 자동 다운로드 + 사용해 빌드 해주는 도구
1. 현대의 build 방식
gradle은 build, test, deployment 를 빌드 스크립트를 통해 자동화해주는 도구이다
구체적인 실행명령(javac, mkdir)은 추상화되어 숨겨져 있고, 프로젝트 상태와 구성만 선언함
plugins {
java // Java 프로젝트의 표준 빌드 라이프사이클을 따르겠다 선언
}
group = "com.example"
version = "1.0.0"
repositories {
mavenCentral() //라이브러리는 여기서 가져와라
}
dependencies {
// 아래 라이브러리가 필요하다 (다운로드, 경로 설정, 버전 충돌해결 자동 수행)
implementatation("org.springframework.boot:spring-boot-stater-web:3.2.0")
testImplementation("org.junit.jupiter:junit-jupiter:5.10.0")
}
// 컴파일 옵션 등 상세 설정이 필요할 때만 블록을 열어서 수정 Convention over Configuration)
tasks.withType<JavaCompile> {
options.encoding="UTF-8"
}
2. 이전 build 방식
이전에는 build 스크립트를 명령형으로 작성하여 오타만 있어도 빌드가 되지 않거나 운영체제가 바뀌면 다시 짜야함
#!/bin/bash
# 1. 출력 디렉터리 설정
mkdir -p classes
# 2. 외부 라이브러리(jar) 경로 설정 -> 매우 번거로움
LIB_PATH = "./libs/spring-core.jar:./libs/spring-web.jar:..."
# 3. 컴파일 (명령어 옵션이 복잡함)
javac -d classes -cp $LIB_PATH src/main/java/com/example/*.java
# 4. 패키징(jar 파일 생성)
jar cvf my-app.jar -C classes .
echo "Build Complete!"

Working with the Code
정보를 수정, 빌드 그리고 코드를 테스트하는 경우, 프로젝트 위키에있는 Working with the code 를 참고
https://github.com/spring-projects/spring-boot/wiki/Working-with-the-Code
'OpenSource Contribution' 카테고리의 다른 글
| [OSS] Spring Boot 오픈소스 첫 기여 성공! (0) | 2025.12.19 |
|---|---|
| [OSS] 04. milestone에 PR등록되다 (간단한 후기) (0) | 2025.11.26 |
| [OSS] 03. Spring Boot 에 첫 Pull Request 날리기 - instanceof 패턴 매칭 적용 + 시도한 것들 (0) | 2025.11.26 |
| [OSS] 02. 오픈소스 기여를 위한 로컬 빌드 환경 구성 (브랜치명, JDK 등) 및 빌드 테스트 (0) | 2025.11.25 |