안녕하세요.
이번에는 제가 평소 개발 업무에서 인공지능(AI)을 어떻게 활용하고 있는지 정리해 보았습니다.
코드 구현뿐만 아니라 조사, 설계, 일상적인 커뮤니케이션 등 다양한 상황에서 AI를 활용하고 있습니다.
여러분 팀에서도 유의미한 활용 방법이 있다면 댓글로 알려주시면 감사하겠습니다.
GitHub Copilot Review를 이용하면 주변 코드와의 정합성이나 고려 누락 등을 지적해 줍니다.
그 지적 내용을 Copilot에게 전달하여 수정을 요청하는 방식입니다.
수정 후 다시 Copilot Review를 실행하여 추가적인 지적이 있으면 수정하는 과정을 반복합니다. 이 방법을 통해 팀의 코드 리뷰가 진행되기 전에 어느 정도 문제를 파악할 수 있습니다.
다만, Copilot Review의 지적이 반드시 정확한 것은 아닙니다. 사양상 문제가 없거나, 수정했을 때 다른 부분에 영향을 줄 수도 있는 부분이 있기 때문에, 지적 내용을 확인한 후 수정이 필요한지 여부를 판단하는 것이 중요합니다.
AI에게 필요한 정보를 제공함으로써 버그 원인 조사나 수정을 요청할 수 있습니다.
예를 들어, DB 레코드 정보나 버그 발생 조건을 전달하며 “이 레코드의 경우에 이러한 현상이 발생한다”고 설명하면, 관련 코드를 조사하고 원인을 추측해 줍니다.
또한, 자신만의 생각이나 추가로 조사했으면 하는 내용을 전달함으로써 더욱 정확한 조사 및 수정으로 이어질 수 있습니다.
Unit Test나 Lint 같은 체크 에러에 대해서도 에러 내용을 제시하면 원인 특정부터 수정까지 대응할 수 있습니다.
더 나아가, 기존의 코드 규칙이나 구현 방침에 맞추기 위해 참고가 될 파일을 지정하면 의도에 맞는 수정이 기대됩니다.
업무용 채팅에서는 전달하고 싶은 것을 문장으로 정리하는 데 시간이 걸릴 때가 있습니다. 또한, 머릿속에서 생각한 내용을 그대로 전달할 경우 상대방에게 의도가 잘 전달되지 않을 수도 있습니다.
따라서 생각해 둔 내용을 ChatGPT 등에 그대로 입력하여 문장을 구성해 달라고 요청하는 활용 방법입니다.
다만, 한국어로서 부자연스러운 표현이나 필요 이상으로 딱딱한 글이 될 수 있으므로, 최종적으로는 스스로 미세 조정할 필요가 있습니다.
구체적인 예시
예를 들어, 다음과 같이 전달하고 싶은 내용을 그대로 입력합니다.
“수정이 완료되었다고 생각했는데, 확인해 보니 아직 반영되지 않았습니다. 다시 한번 확인해 주셨으면 합니다. 구성해 주세요.”
이렇게 요청하면 상대방에게 전달하기 쉬운 문장으로 정리해 줍니다.
원하는 요건이나 현재 겪고 있는 문제를 AI에게 전달하고 해결 방법이나 구현 방침을 상담하는 활용 방법입니다.
예를 들어, “이러한 요건이 있고, 현재 이런 문제가 발생하고 있습니다. 이 문제를 해결하기 위해서는 어떤 방법들이 있을까요?”와 같은 형태로 상담합니다.
자신만으로는 떠올리지 못했던 구현 방식이나 다른 접근법을 제안해 주기도 합니다.
다만, 답변의 정확성이 충분하지 않을 수도 있으므로, 최종적으로는 공식 문서 등에서 확인하는 것이 중요합니다.
구체적인 예시
예를 들어, 파일 업로드 기능을 구현할 경우,
“최대 12GB 파일을 업로드할 수 있도록 하고 싶습니다. 현재 웹 애플리케이션을 거쳐서 업로드하고 있는데, 파일 크기가 커서 타임아웃 등의 문제가 우려됩니다. GCS를 이용하는 경우 어떤 구성이 가능할까요? 각각의 장점과 단점도 알려주세요.”
이렇게 요건이나 우려점을 전달함으로써 여러 구현 방법이나 구성을 제안받을 수 있습니다.
백엔드에서 정의된 Domain 배열을 프론트엔드 쪽에서도 정의해 달라고 요청하면 상당히 정확하게 타입 정의를 만들어 줍니다.
또한, Model의 Domain 등도 마이그레이션(migration) 파일을 기반으로 생성할 수 있어, 이런 단순 작업의 감소에도 도움이 됩니다.
구체적인 예시
예를 들어, 백엔드 측에서 다음과 같은 Domain이 정의되어 있을 경우,
['id' => 1,
'name' => 'sample',
...
이를 프론트엔드에서 사용할 수 있는 TypeScript 타입으로 변환해 달라고 요청합니다.
type User = {
id: number;
name: string;
...}
“위의 백엔드 Domain을 참고하여, 프론트엔드에서 사용할 TypeScript 타입 정의를 만들어 주세요.”
라고 요청하는 것만으로도 타입 정의 생성 과정을 효율화할 수 있습니다.
AI에게 요청할 때는 사양(specification)이나 요구사항(requirement)을 정확하게 전달하지 않으면, 의도와 다른 수정이 이루어질 가능성이 있습니다.
처음부터 세부적으로 지시하는 방법도 있지만, 먼저 대략적인 내용을 전달하여 수정하게 하고, 그 결과를 확인한 후에 추가 조건이나 상세 사양을 전달해 나가는 방법도 효과적이라고 생각합니다.
또한, AI가 생성한 코드라 할지라도, 코드의 이해와 동작 확인(verification), 테스트는 필수라고 생각합니다.
현존하는 AI는 그럴듯한 코드를 작성할 수는 있지만, 최적의 구현(optimal implementation)이거나 결함이 없다는 것까지 보장해 주지는 않습니다.
팀의 코드 리뷰(code review)에서 지적을 받았을 때에도, 왜 그 구현(implementation)을 했는지 스스로 설명할 수 있도록 코드 이해도를 깊게 하는 것이 중요하다고 생각합니다.