나의 공부방

[오픈소스] SpringBoot 오픈 소스 프로젝트에 컨트리뷰트 하기

망나니개발자 2022. 1. 30. 00:34
반응형

현재 SpringBoot의 동작 과정을 분석하는 포스팅을 작성하고 있습니다. 해당 소스코드를 분석하다보니 매우 작지만 컨트리뷰트를 할만한 코드를 찾게 되었습니다. 그래서 이번에는 어떻게 하면 오픈 소스에 컨트리뷰트 할 수 있는지 알아보고, 실제로 컨트리뷰트를 해보고자 합니다.

 

 

 

1. 컨트리뷰트할 내용 찾기


[ 컨트리뷰트할 내용 찾기 ]

오픈 소스에 컨트리뷰트하기 위해서는 수정할 코드 및 문서 등을 찾아야합니다. 특정 프로젝트의 Issues에 가서 원하는 이슈를 찾아도 되는데, 저는 이번에 SpringBoot 코드를 읽으면서 발견한 내용으로 컨트리뷰트를 하였습니다. 제가 컨트리뷰트한 코드는 다음과 같습니다.

private void configureIgnoreBeanInfo(ConfigurableEnvironment environment) {
	if (System.getProperty(CachedIntrospectionResults.IGNORE_BEANINFO_PROPERTY_NAME) == null) {
		Boolean ignore = environment.getProperty("spring.beaninfo.ignore", Boolean.class, Boolean.TRUE);
		System.setProperty(CachedIntrospectionResults.IGNORE_BEANINFO_PROPERTY_NAME, ignore.toString());
	}
}

 

위의 코드는 JSP에서 사용되는 기술인 자바 빈즈(Java Beans)를 위한 작업을 처리하지 않도록 설정해주는 부분입니다. 문제는 environment에서 프로퍼티를 꺼내기 위해 하드 코딩된 "spring.beaninfo.ignore"를 사용한다는 것인데 이 값은 이미 윗 라인에서 사용하고 있는 IGNORE_BEANINFO_PROPERTY_NAME와 동일한 값입니다. 그래서 "spring.beaninfo.ignore"를 사용하는 대신에 IGNORE_BEANINFO_PROPERTY_NAME를 사용하도록 수정하였습니다.

 

 

 

 

2. 오픈 소스에 컨트리뷰트하는 방법


[ 오픈 소스에 컨트리뷰트하는 방법 ]

1. Project Fork 받기

오픈 소스에 컨트리뷰트를 하기 위해서는 먼저 프로젝트를 fork 받아야한다. 우리가 컨트리뷰트할 프로젝트로 들어가서 우측 상단의 fork버튼을 누르면 해당 프로젝트를 개인의 레포지토리로 fork 받을 수 있다.

 

 

 

 

2. 프로젝트 클론 및 브랜치 생성

위의 과정대로 포크를 하였으면 이제 우리의 작업 공간에 동일한 프로젝트가 생성되었을 것이다.

 

 

그 다음에는 포크 받은 프로젝트를 클론받고 열어서 작업 가능하도록 빌드하면 된다. 그리고 작업을 진행할 브랜치를 생성하여 변경해주도록 하자.

 

 

 

3. 소스코드 수정 및 커밋

그 다음에는 소스 코드를 수정하고 커밋을 해야한다. 대게 오픈소스들이라면 코딩 및 커밋 컨벤션을 가지고 있으므로 해당 규칙을 만족시켜주어야 한다. SpringBoot 같은 경우에는 여기에서 커밋 메세지 규칙을 정리해두었다. 그러므로 우리도 해당 작업한 내용을 커밋 컨벤션 규칙에 맞게 커밋 메세지를 작성해주도록 하자.

 

 

 

 

4. 브랜치 푸시 및 PR 작성

그리고 fork 받은 프로젝트로 가서 Pull requests를 누르면 실제 프로젝트로 리다이렉트되며 다음과 같이 PR을 올릴 base repository와 브랜치를 지정할 수 있다.

 

 

 

그리고 커밋 메세지를 작성하고 올리면 다음과 같이 Pull Requests가 등록된다.

 

 

 

 

5. 오픈소스 컨프리뷰터 라이센스 동의

만약 오픈소스 컨트리뷰트를 위한 라이센스 동의를 하지 않았다면, 다음과 같이 라이센스 동의하라는 내용이 깃허브 액션을 통해 달린다.

 

 

그러면 주어진 링크로 가서 CLA에 Sign을 하면 된다. 개인적으로 컨트리뷰트하는 경우에는 왼쪽의 Sign Individual CLA를 누르고 서명을 하면 된다.

 

 

그러면 다음과 같이 CLA에 서명해줘서 고맙다는 코멘트가 달리게 된다.

 

 

 

6. PR 검토 및 머지

PR이 복잡한 내용이라면 개발 팀에서 이런 저런 코멘트를 주고 프로젝트 오너가 원하는 내용을 반영하여 수정해야 할 것이다. 하지만 이번처럼 매우 작은 변경의 경우에는 추가 수정 제안 없이 곧바로 머지가 될 것이다.

 

 

 

 

3. 오픈 소스 컨트리뷰트 결과 확인


[ 오픈 소스 컨트리뷰트 결과 확인 ]

몇시간 뒤에 메일로 머지가 되고 PR이 닫혔다는 알림이 왔다. 그리고 작성한 PR을 가서 확인해보니 다음과 같은 댓글과 함께 머지가 되었음을 파악할 수 있었다.

 

 

그리고 실제로 가서 코드를 보려고 하니 다음과 같이 컨트리뷰터로 추가되어 있음을 확인할 수 있었다.

 

 

 

그리고 최종적으로 실제 코드를 가서 확인해보니 PR을 올린대로 수정한 코드가 반영되어 있음을 확인할 수 있었다.

 

 

 

[ 머지된 코드 동기화 ]

프로젝트를 Fork한 리모트 레포지토리가 업데이트 되었으므로 우리의 프로젝트 역시 업데이트를 해주어야 한다. 그러기 위해서는 원격 저장소를 또 다른 remote로 등록해주어야 하는데, 일반적으로 upstream이라는 이름을 사용한다. 다음과 같이 입력하면 upstream이라는 이름으로 저장소를 추가할 수 있다.

# git remote add {이름} {주소}
git remote add upstream https://github.com/spring-projects/spring-boot

 

그리고 원격 리모트를 pull 받으면 우리의 로컬 저장소도 동기화가 된다. 그리고 실제 코드를 보면 다음과 같이 반영이 됨을 확인할 수 있다.

 

 

매우 작고 간단했던 작업 내용이였지만 내가 직접 스프링 부트의 소스 코드를 읽으면서 컨트리뷰트할 내용을 발견하였다는 점과 세계적인 오픈소스의 컨트리뷰터가 되기 위한 첫 걸음을 나아갔다는 점에서 상당히 뿌듯하다. 다음에는 조금 더 시간을 잡고 복잡한 내용을 컨트리뷰트해보고 싶다. 작업한 PR 링크는 여기에서 볼 수 있다.

 

 

 

 

굉장히 마이너한 건이였지만 제가 수정한 코드가 수 많은 사람들이 사용하는 오픈 소스에 컨트리뷰트되었다니 상당히 뿌듯하네요ㅎㅎ 다른 분들도 아무리 사소한 건일지라도 오픈소스에 컨트리뷰트를 하면서 동기부여받고 새로운 자극을 받아 나가면 좋을 것 같습니다!

감사합니다:)

 

 

 

 

 

반응형