본문 바로가기
카테고리 없음

[BalancingLibra] 이슈 및 PR 템플릿 작성

by mazayong 2026. 1. 2.

커밋 메세지는 신경쓰면서 이슈, PR 내용은 신경을 쓰지 않았어서 LLM을 사용해 해당 부분은 어떻게 정리하는 게 좋을지 정리하겠다. 그리고 해당 프로젝트에서는 어떤 형식으로 적용할 건지에 대한 내용을 간단히 작성하겠다.

 

 

 

1. 개요

2. 이전 PR / 이슈 작성 내역

3. 수정한 이슈 템플릿

4. 수정한 PR 템플릿

5. 후기

 

 

1. 개요

이전에 소규모 개발, 동아리 프로젝트 등에서는 이슈와 PR 기능을 제대로 활용하지 못한 아쉬움이 있었다. 그래서 이번 프로젝트부터는 과거의 나, 미래의 나와 협업을 잘 해내고 다른 사람들과 협업할 떄(오픈소스 프로젝트에 참여할 때 등등) 원활하게 진행되게 하는 기반을 다지기 위해 템플릿을 작성하게 되었다.

 

 

 

2. 이전 PR / 이슈 작성 내역

이전 PR, 이슈 내역은 아래와 같다.

PR 내역

 

이슈 내역. 내용이 없다.

 

 

해당 내용만 보고서 수정 내역과 기능을 명확히 확인하기 어려워 과거의 나와 협업한다는 생각으로 수정하기로 하였다.

 

 

3. 수정한 이슈 템플릿

수정한 형태는 다음과 같다.

## 1. 목적
//해당 이슈 구현 이유 현재 사용하는 기술 스택과 연관지어 정리

## 2. 기술적 요구 사항
//어떤 클래스 구현/기술 사용하는지 설명하고, 어떤 기능을 추가할지 설명한다.


## 3. 작업 목록
//어떤 코드를 어떤 식으로 작업할 것인지 간단하게 설명

일단 해당 이슈를 왜 사용했는지 전체적인 맥락을 파악할 수 있게 설명하는 것을 목적으로 하였다.

그래서 일단 해당 이슈를 왜 구현했는지에 대한 목적을 작성한다.

어떤 기능을 어떻게 구현할지에 대해 기술적 요구 사항을 정리한다. 이 때 어떤 기능을 추가할지에 목적을 둬서 정리한다.

마지막에 작업 목록을 정리함으로써 어떻게 구현할지에 초점을 맞춘다.

 

 

예시는 다음과 같다.

## 1. 목적
`SceneManager.LoadScene`을 직접 호출하는 방식은 오타의 위험이 있고, 씬 전환 시 초기화 조건을 매번 작성해야 한다. 이를 해결하기 위해 `SingletonBehaviour`를 상속받는 `SceneLoader`를 구현하여 씬 전환 로직에 대한 안정성을 확보한다.

## 2. 기술적 요구 사항
- **SceneLoader 클래스 구현** : 전역 매니저로 구현하며, 씬 초기화 조건들을 추가한다.
- **ReloadScene() 구현** : 현재 활성화된 씬을 다시 로드하는 재시작 기능을 `SceneLoader`에 추가한다.


## 3. 작업 목록
- `SceneLoader.cs`스크립트 작성 및 `SingletonBehaviour` 상속 적용
- `SceneType Enum`에 프로젝트 내 씬 이름들 정의
-` GameManager`의 `RestartGame` 로직 변경
- 게임오버 후 재시작이 정상적으로 이루어지는지 테스트

 

4. 수정한 PR 템플릿

수정한 형태는 다음과 같다.

## 개요
//커밋 내용 요약

> 관련 이슈 : #관련이슈번호 

## 작업 내용
### 1. 기능 요약 
- 성과 : 어떻게 구현했는지 설명

## 테스트 계획
//어떤 식으로 테스트할 계획인지 기록한다.


##  기타
//추가로 작성하고 싶은 내용을 작성한다.

우선 PR에 포함된 내용들을 이해하기 쉽게 개요로 요약한다.

PR 내용이 이슈와 관련이 있을 경우, 관련 이슈를 추가한다.

작업 내용을 설명할 때 번호로 나눠서 설명하고, 기능의 결과와 성과를 요약해서 설명한다.

그리고 해당 작업 내용을 어떻게 테스트할 것인지 간단하게 테스트 계획을 작성한다.

기타에는 그 외 내용들을 기록한다.

 

 

예시는 다음과 같다.

## 개요
릴리즈 빌드 시 성능 저하 방지 및 디버깅 효율 상승을 위해 `Logger` 클래스를 구현했습니다.
또한 이전 `Debug.Log`의 로그 호출부를 `Logger`로 교체해 중앙 집중식 관리 체계를 적용했습니다.

> 관련 이슈 : #2 

## 작업 내용
### 1. Logger 클래스 구현 
- **빌드 최적화** : `[Conditional("DEV_VER")]` 속성을 적용하여 `DEV_VER` 심볼이 없을 경우 빌드에서 로그 코드가 자동 제거되도록 설정.
- **디버깅 강화**
   - 밀리초 단위 타임스탬프 추가로 실행 순서 추적 용이.
   - `UnityEngine.Object context` 파라미터 지원을 통해 콘솔 클릭시 하이어라키 오브젝트 핑 기능 지원.
- `LogWarning`이 `Debug.Log`로 매핑되는 문제 및 `LogError` 포맷팅 오타 수정 완료.

### 2. GameManager 리팩토링
- 기존 `Debug.Log` 호출부 `Logger` 함수로 교체.
-  `this` 컨텍스트 주입으로 에러 발생 시 어떤 인스턴스인지 즉시 파악 가능하도록 기능 추가.

### 3. 설정 변경
- Project Settings : `Scripting Define Symbols`에 `DEV_VER` 심볼 추가.

## 테스트 계획
1. **심볼 확인** : `Project Settings` > `Player` > `Other Settings`에 `DEV_VER` 등록 여부 확인
2. **콘솔 출력** : 게임 실행 시 로그 포맷이 `[HH:mm:ss.fff] 메시지` 형태로 출력되는지 확인
3. **Context Ping** : 로그를 더블 클릭했을 때 하이어라키의 `GameManager`가 노란색으로 깜빡이는지 확인
4. **빌드 테스트** : `DEV_VER` 심볼 제거 후 빌드 시 로그가 출력되지 않는지 확인

##  기타
- `Logger` 클래스는 정적(static) 클래스여서 인스턴스화 없이 사용 가능합니다.

 

 

++ 이후에 기타 부분은 구현한 기능에 연관된 내용이었기 때문에 작업 내용에 포함하도록 수정했다.

++ 테스트 계획 부분은 실제로 테스트를 어떤 방식으로 했는지를 자세하게 설명하도록 설정했다.

 

 

5. 후기

PR과 이슈 내용을 작성하니 이후 포트폴리오나 이력서 정리할 때도 기록이 남아서 좋았다. 그리고 정리하면서 어떤 기능을 어떻게 구현했는지를 정리를 더 명확하게 할 수 있어서 나은 선택이었다. 그리고 테스트 계획을 작성해야 한다는 것은 몰랐던 사실이었다. 그런데 생각해보니 내가 구현한 코드를 냅다 머지하면 대참사가 나니 미리 이런 테스트를 했다라고 알려주는게 팀원들(지금은 과거의 나들이지만)에게 좋겠다는 생각이 들었다.