티스토리 뷰

AI

ChatGPT 로 Commit Message 생성하기

상추님 2024. 1. 15. 16:28

ChatGPT 로 Commit Message 생성하기

유용한 커밋 메세지

commit 메세지를

  • 개발, 리팩토링 진행 시 작업을 세분화하고 이력을 명확히 남기고
    • 한 작업은 보통 한개의 jira 와 관련이 있지만. QA 이슈 지라가 발행되는 경우 jira 번호 링크하여 추적에 도움
    • 개발, 버그 수정, 새기능 추가, 리팩토링 을 한번에 하는 것이 아닌 나눠 수행하도록 상기
  • 코드 리뷰 시, 팀원들의 이해를 돕고 (불가피하게 많은 량의 코드를 pr로 올리는 경우 commit msg가 도움)
  • 문제 추적을 용이하게 하고(필요시 각 단위작업 rollback 용이성 확보)

하기 위해 작성을 하곤 하는데요.

변수명, 함수명 못지않게 고민이 되는 것이 commit 메세지 입니다.

이번 글 에서는 Commit Message 작성 시 ChatGPT 의 도움을 받아 업무 만족도와 효율성을 높이는 방법에 대해 공유합니다.

고려 해야 하는 사항

  • “사내 코드 or 사내 프로젝트에 머지될 본인이 작성한 코드” 는 외부로 유출 되어서는 안된다.
    • 작업 내용 위주로 사전 정보를 GPT 에게 제공하도록 한다. (불가피한 경우 코드는 보안 위험이 없는 정도로 재작성하여 일부만 넘길 수도 있다.)
  • 본인이 방출 시킨 코드에 대한 의도가 무엇인지 명확히 파악 하고 있어야 한다.
    • 어떤 의도로 무슨 코드를 작성한지 본인도 명확히 글로 풀어낼 수 없으면 프롬프트 작성 자체가 불가능 하다.

프롬프트 작성

프롬프트 작성은 사실 정해진 정답은 없지만, 어느정도 정립되어지고 있는 여러 수법들이 있습니다. 이번 글에서는 여러 전략들 중 하나인 Few Shot 전략을 통해서 Commit Message 를 생성해보려고 합니다.

Few Shot 전략이란?

input 으로 몇 개(few)의 예시(example) 를 LLM 에게 주고 결과를 유추해내는 작업 입니다.

0-Shot 프롬프트

GPT에 가장 일반적으로 사용하고 있는 질문도 Few Shot 기법에 해당합니다.

예시를 주지 않고, “설명해 줘”, “답변해 줘”, “x가 궁금한데 알려줘” 등의 모든 지시 or 역할 프롬프트는 0-shot 프롬프트에 해당합니다.

아래는 0-Shot 프롬프트를 통해 커밋 메세지를 작성하도록 GPT 에게 유도하는 것에 대한 예시입니다.

You:

나의 안드로이드 앱에서 뒤로가기 버튼을 누르면 앱이 죽는 문제를 해결했어 이거에 대한 커밋 메세지를 만들어줘.

ChatGPT:

앱에서 발생한 뒤로가기 버튼 문제를 해결한 것에 대한 커밋 메시지를 작성하겠습니다. 
커밋 메시지는 간결하고 명확해야 하며, 변경 사항에 대한 핵심적인 정보를 포함해야 합니다. 
다음은 그러한 조건을 충족하는 예시입니다:

```vbnet
"Fix crash issue on back button press in Android app"

Detailed explanation:
Resolved an issue where pressing the back button caused the app to crash. This was achieved by modifying the onBackPressed() method to handle the back navigation properly, ensuring a smooth user experience.

이 메시지는 문제의 본질을 명확하게 설명하고, 어떤 방식으로 해결했는지에 대한 간략한 정보를 제공합니다. 커밋 메시지는 기술적인 디테일보다는 변경 사항의 요약을 제공하는 것이 좋습니다.

### 1-Shot 프롬프트

1-Shot 프롬프트는 1개의 예제를 함께 input 으로 전달하고 답을 유도해내는 방법입니다. 0-Shot 에 비해 비교적 정확한 답변을 얻을 수 있는 방법으로 간주됩니다.

아래는 1-Shot 프롬프트를 통해 커밋 메세지를 작성하도록 GPT 에게 유도하는 것에 대한 예시입니다.

**You:**

```markdown
Input: 미사용되는 리소스가 해제되지 않아 메모리가 누수되는 문제를 해결했습니다.
commit message: Fix: Resolve Memory Leak by Releasing Unused Resources
Detailed Description: Fixed an issue where unused resources were not being released, causing a memory leak. This update ensures that all unused resources are properly disposed of, preventing unnecessary memory consumption and improving the overall performance and stability of the application.

Input: 안드로이드 앱에서 뒤로가기 버튼을 누르면 앱이 죽는 문제를 해결했습니다.
commit message:
Detailed Description:

ChatGPT:

The commit message for the Android app issue could be succinctly described as:

Commit message: Fix: Resolve App Crash on Back Button Press in Android

Detailed Description: Addressed an issue in the Android application where pressing the back button resulted in the app crashing. This fix involves correcting the back button's event handler to ensure smooth and error-free navigation. With this update, the app now handles the back button press correctly, enhancing user experience and application reliability.

조금 더 의도한 답변과 가까워진 모습 입니다.

Few-Shot 프롬프트

2개 이상의 예시를 제공하고 답을 유도해내는 방법입니다. LLM 이 답을 구조적으로 구체화하여 답변할 수 있도록 하기 위한 방법으로 0~1 Shot 에 비해 더욱 더 정확한 답을 얻을 수 있습니다.

You:

Input: 미사용 코드 임시로 주석화
commit message: Chore: Temporarily Comment Out Unused Code
Detailed Description: I've temporarily commented out sections of code that are currently not in use. This action is taken as a precaution to avoid any potential conflicts or performance issues, while keeping the code available for future reference or reactivation.

Input: 로그인 필요한 페이지 경우 test code 가 실패하여 수정
commit message: Fix: Test Failure for Login-Required Pages
Detailed Description: Adjusted the test code to handle scenarios where login is required. The test now includes steps for authentication, ensuring it successfully navigates through pages that demand user login. This fix ensures our automated tests remain robust and reflective of real-user scenarios, particularly for features gated behind authentication.

Input: toast message 를 출력해야하는 케이스에 대한 핸들링을 ExecutorToastMsg 로 이동하였습니다.
commit message: Refactor: Move Toast Message Handling to ExecutorToastMsg
Detailed Description: I refactored the code to move the handling of toast messages to the ExecutorToastMsg class. This change centralizes toast message processing, leading to cleaner and more maintainable code.

Input: 안드로이드 앱에서 뒤로가기 버튼을 누르면 앱이 죽는 문제를 해결했습니다.
commit message: 
Detailed Description: 

ChatGPT:

Commit Message: Fix: Resolve Crash Issue on Android App Back Button Press

Detailed Description: Addressed a critical issue in the Android app where pressing the back button caused the application to crash. This fix involved modifying the app's back button handling logic to ensure stable functionality. This change not only enhances the user experience but also ensures the app's reliability, particularly for navigating through various screens or functions within the app.

번역: Android 앱에서 뒤로 가기 버튼을 누르면 앱이 충돌하는 심각한 문제를 해결했습니다. 이 수정에는 앱의 뒤로 가기 버튼 처리 로직을 수정하여 안정적인 기능을 보장하는 작업이 포함되었습니다. 이 변경으로 사용자 경험이 향상되었을 뿐만 아니라 특히 앱 내의 다양한 화면이나 기능을 탐색할 때 앱의 안정성이 보장되었습니다.

어떤가요? 불필요한 메세지 없이 의도한 내용만 답변해주는 것을 볼 수 있습니다.

Tip:

...(생략)

Input: 특정기기(Galaxy S21)에서 카메라 기능을 실행하고 뒤로가기 버튼을 누르면 앱이 죽는(Crash) 되는 문제를 해결했습니다.
commit message: 
Detailed Description: 

(Input 으로 더욱 구체화된 작업 내용을 전달할 수록 좋은 결과를 얻을 수 있습니다.)

Commit Message: Fix: Resolve App Crash on Galaxy S21 When Using Camera and Pressing Back

Detailed Description: Addressed an issue causing the app to crash on the Galaxy S21 when the camera function is used and the back button is pressed. This fix involved modifying the camera handling logic to ensure stability and prevent crashes. This change specifically targets the Galaxy S21, enhancing the app's reliability and user experience on this device.

번역: 갤럭시 S21에서 카메라 기능을 사용하고 뒤로 가기 버튼을 눌렀을 때 앱이 충돌하는 문제를 해결했습니다. 이 수정에는 안정성을 보장하고 충돌을 방지하기 위해 카메라 처리 로직을 수정하는 작업이 포함되었습니다. 이 변경 사항은 특히 갤럭시 S21을 대상으로 하며, 이 기기에서 앱의 안정성과 사용자 경험을 향상시킵니다.

Few-Shot 이대로 좋은가?

예제 케이스를 3개로 늘려 우리가 원하는 output 을 유도하는데 어느정도 성공한 것으로 보여진다. 필요에 따라 예시를 늘려가며 commit message 를 얻기위한 고정 프롬프트를 사용할 수 있게 되었다.

commit message 는 당분간 걱정이 없겠으나,, 만약 다른 목적으로 GPT 를 활용 해야할 때는 또 다른 프롬프트 전략을 채택하고 프롬프트를 개발하고 이를 검증하고 사용하는 단계를 거쳐야한다.

매번 프롬프트를 작성하기도 번거롭고, 프롬프트 작성에 어려움이 있다면 원하는 결과를 도출하기 어려울 것이다.

나만의 GPT

고맙게도 OpenAi 에서 My GPTs 라는 서비스를 진행중인데, 이를 통해 특정 목적을 가진 GPT 를 생성해줄 수 있다.

설정을 통해서 명령(프롬프트) 을 설정할 수있고 사전 지식도 업로드 가능하며, 더 세세한 설정 또한 포함되어 있다.

그러면 프롬프트 작성은 어차피 해야하는 것인가.

GPT Builder

GPT Builder 를 통해서 원하는 GPT 를 만드는데 도움을 받을 수 있다.

가령. 다시 우리가 원했던 Commit Message 를 전문적으로 생성해주는 GPT 를 빌드해보자.

GPT Builder: (output)

Great! Let's give your GPT a name. 
How about "Commit Composer"? 
Do you like this name or would you prefer something else?

GPT 의 이름까지 추천 해주는 모습이다.

이로써 나만의 GPT 가 탄생 했다. 무려 프로필 이미지도 생성 해준다.

한번 사용 해보자.

명쾌하지 않은 작업 내용을 전달 하니 좀 더 세부적인 내용을 알아서 요청하고 있다.

번역: 이 커밋은 갤럭시 S21에서 카메라 기능을 사용할 때 발생하던 기기별 충돌 문제를 해결합니다. 이 문제는 카메라를 실행한 후 뒤로 버튼을 눌렀을 때 관찰되었습니다. 조사 결과, 이 문제는 카메라 API 상호 작용 및 활동 수명 주기가 갤럭시 S21에서 특별히 관리되는 방식과 관련이 있는 것으로 밝혀졌습니다. 이 문제를 해결하기 위해 카메라 처리 및 뒤로 버튼 누르기 로직을 수정하여 이 기기 모델에서 호환성과 안정성을 보장했습니다. 이 업데이트는 갤럭시 S21에서 앱의 안정성을 크게 개선하여 원활한 카메라 경험을 제공하고 카메라 기능에서 벗어날 때 예기치 않은 앱 종료를 방지합니다.

좀더 명확한 내용을 입력하니 commit message 를 생성 해주었다.

사실 이런게 가능한 이유는 GPT Builder 와 대화하며 요청한 내용을 기반으로 GPT가 프롬프트를 직접 작성해주었기 때문인데, Configure 탭에서 이를 확인해볼 수 있다.

The GPT will assist users in generating commit messages and detailed descriptions based on the development content they provide. It will analyze the input to understand the nature of the changes, improvements, or fixes made in the code and then create a concise, clear, and relevant commit message. Additionally, it will provide a more detailed description that encapsulates the essence of the development work, highlighting key changes and their implications.

번역: GPT는 사용자가 제공한 개발 콘텐츠를 기반으로 커밋 메시지와 자세한 설명을 생성하는 데 도움을 줍니다. 입력을 분석하여 코드의 변경, 개선 또는 수정 사항의 성격을 파악한 다음 간결하고 명확하며 관련성 있는 커밋 메시지를 생성합니다. 또한 개발 작업의 본질을 요약하고 주요 변경 사항과 그 의미를 강조하는 보다 자세한 설명을 제공합니다.

그런데 제공하지 않았던 정보까지 창작하여 상세 정보를 생성해주었는데 이것은 원하지 않은 동작이었다.

또한 구체적인 작업 내용을 말해주지 않아도 커밋 메세지를 작성 해줬으면 한다.

좀 더 세부적으로 요청하여 GPT 를 보완할 수 있다.

You:

저는 안드로이드(Android) 개발을 하고 있는 개발자 입니다.
개발 언어는 주로 Kotlin 을 사용하고 있으며, 단순한 내용이든
구체적인 내용이든 작업한 내용을 입력하면 적절한 Commit 메세지와
상세 설명을 생성해주는 전문가가 필요합니다.
Commit 메세지 형식은 "Feat: ", "Fix: ", "Refactor: ", "BugFix: ",
"Update: ", "Chore: " 등 처럼 시작했으면 좋겠습니다.
답변 내용은 MarkDown 형식으로 아래 형태로 생성 해주세요.
감사합니다. 잘 부탁드립니다.

## Commit Message
[실제 커밋 메세지]
## Detailed Description
[상세 설명]

이제 검증 해보자.

요청한 대로 MarkDown 형식으로 출력해 주었으며, 좀 더(너무나..) 구체적인 Detailed Description 을 작성해주고 있다.

생성된 Prompt:

You are a GPT specialized in assisting Android developers, particularly those working with Kotlin. Your primary function is to generate meaningful commit messages and detailed descriptions based on the work inputted by the developer. Your responses should start with a commit message format like "Feat:", "Fix:", "Refactor:", "BugFix:", "Update:", "Chore:", and so on. Additionally, your answers should be formatted in Markdown, following a specific structure. 

**Commit Message:** The message should succinctly summarize the changes made in the format requested by the user. 

**Detailed Description:** This section provides an in-depth explanation of the changes, why they were made, and any other relevant details.

생성된 Promt 또한 좀 더 구체적으로 작성 되어 있는 것을 확인할 수 있다.

검증 시 마음에 들면 Save 하여 사용할 수 있다. (직접 만든 GPT 는 나만 사용하거나 공유하여 사용할 수 있는 옵션도 제공한다.)

이제 매번 input 으로 직접 프롬프트를 전달하지 않고도 세련된 Commit Message 를 생성할 수 있게 되었다.

(또 다른 GPT 도 생성 해보고 싶지 않은가? 가령 Super Senior Android Development Master….)

사용 시 유의

  • 코드 통신 보안..
  • 생성된 메세지를 모두 믿지 말자. 직접 검수 한 뒤 실제 commit 하자.

결론

  • 잘 설계된 커밋 메세지 작성은 매우중요하다.
  • Few-Shot 기법을 통해 프롬트트를 작성하고 ChatGPT 를 이용하여 Commit Message 를 생성 했다.
  • GPT Builder 를 통해 프롬프트 생성을 자동화하고, 맞춤형 GPT 를 생성하여 매번 프롬프트를 직접 작성하지 않고 편하게 사용할 수 있다.

References

작성자 : 상추님 vviprogrammer@gmail.com

댓글
최근에 올라온 글
최근에 달린 댓글
네이버 이웃추가
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함