ChatGPT로 소프트웨어 개발을 더 빠르게!!!

프롬프트 엔지니어링을 활용한 코드 품질 개선, 요구사항 분석, 리팩토링 기법

최근 ChatGPT와 같은 대형 언어 모델(LLM)이 소프트웨어 개발을 혁신적으로 변화시키고 있습니다. 특히 초기 셋업이나 잘 모르는 분야에 대한 빠른 접근을 위해서 매우 유용하게 사용할 수 있습니다. 물론 어느정도 복잡도 있고 어려운 문제에 대한 코드로 상당히 잘 만들어줍니다. (물론 100% 보장 못합니다. 하지만 코드 접근방식에서 유용할 수 있죠). 따라서 LLM은 주어진 환경에서 코드를 자동 생성하고, 요구사항을 정리하며, 소프트웨어 설계를 도와주는 등 개발자의 생산성을 높이는 다양한 기능을 수행할 수 있습니다.

하지만 단순한 프롬프트만으로는 원하는 결과를 얻기 어려울 때가 많습니다.
더 좋은 품질의 코드와 더 효과적인 소프트웨어 개발을 위해서는 **프롬프트를 체계적으로 설계하는 기술(프롬프트 엔지니어링)**이 필요합니다.

이번 글에서는 Vanderbilt University 연구진이 발표한 논문
“ChatGPT Prompt Patterns for Improving Code Quality, Refactoring, Requirements Elicitation, and Software Design” 내용을 기반으로,
소프트웨어 개발에 유용한 13가지 프롬프트 패턴을 소개하겠습니다.

ChatGPT를 소프트웨어 개발에 활용하는 방법

ChatGPT와 같은 LLM은 단순한 대화뿐만 아니라 소프트웨어 개발의 다양한 단계에서 활용될 수 있습니다.
하지만, 적절한 **프롬프트 패턴(Prompt Pattern)**을 사용해야 최상의 결과를 얻을 수 있습니다.

이 논문에서는 소프트웨어 개발에 특화된 프롬프트 패턴을 정리하고,
이를 활용하여 코드 품질을 향상시키고, 요구사항 분석을 자동화하며, 효율적인 리팩토링을 수행하는 방법을 연구했습니다.

소프트웨어 개발을 위한 13가지 프롬프트 패턴

논문에서는 프롬프트 패턴을 4가지 카테고리로 분류하고 있습니다.

카테고리주요 패턴
요구사항 분석 (Requirements Elicitation)요구사항 시뮬레이터, 명세 불명확성 분석, 변경 요청 시뮬레이션
시스템 설계 및 시뮬레이션 (System Design & Simulation)API 생성, API 시뮬레이션, 도메인 특화 언어(DSL) 생성, 아키텍처 설계
코드 품질 향상 (Code Quality)코드 클러스터링, 중간 추상화, 원칙 기반 코드 작성, 숨겨진 가정 탐색
리팩토링 (Refactoring)의사 코드 리팩토링, 데이터 기반 리팩토링

이제 각각의 패턴을 자세히 살펴보겠습니다.

1. 요구사항 분석 패턴 (Requirements Elicitation)

요구사항 시뮬레이터 (Requirements Simulator)

  • ChatGPT를 소프트웨어 시스템의 요구사항을 분석하는 도구로 활용
  • 사용자가 특정 기능을 수행하려 하면, 현재 요구사항으로 가능 여부를 분석
  • 만약 불가능하다면, 추가해야 할 요구사항을 제안

활용 예시:

“이 요구사항을 기반으로 시스템을 시뮬레이션해줘.
내가 특정 작업을 요청하면, 요구사항 내에서 가능한지 분석하고, 부족한 부분을 찾아줘.”


명세 불명확성 분석 (Specification Disambiguation)

  • 불명확한 요구사항을 찾아 개선하는 패턴
  • ChatGPT가 제공된 요구사항을 분석하여 모호한 부분을 찾아내고 개선안을 제안

활용 예시:

“다음 시스템 요구사항을 분석해서 불명확한 부분을 찾아주고, 어떻게 명확하게 개선할 수 있을지 제안해줘.”


변경 요청 시뮬레이션 (Change Request Simulation)

  • 요구사항 변경이 시스템에 미치는 영향을 분석
  • 특정 기능을 추가 또는 변경할 경우 영향을 받는 모듈과 파일을 식별

활용 예시:

“이 소프트웨어 시스템에서 사용자 프로필에 새로운 필드를 추가하면, 어떤 코드와 문서가 영향을 받는지 분석해줘.”


2. 시스템 설계 및 시뮬레이션 패턴 (System Design & Simulation)

API 생성 (API Generator)

  • 자연어로 설명된 시스템에서 API 명세를 자동 생성
  • OpenAPI, GraphQL 등 다양한 형식으로 API 설계 가능

활용 예시:

“이 시스템의 요구사항을 기반으로 OpenAPI 명세서를 생성해줘.”


API 시뮬레이션 (API Simulator)

  • 설계된 API를 가상으로 실행해보고 테스트
  • API 요청을 입력하면, 예상 응답을 생성하여 API의 사용성을 점검

활용 예시:

“이 OpenAPI 명세서를 기반으로 API를 시뮬레이션해줘.
내가 HTTP 요청을 입력하면, 예상 응답을 반환해줘.”


도메인 특화 언어(DSL) 생성 (Domain-Specific Language Creation)

  • ChatGPT가 특정 도메인을 위한 언어를 설계하고 설명
  • 보안 정책, 데이터 스키마 등 특정 분야에 맞는 DSL을 자동 생성

활용 예시:

“보안 정책을 정의하기 위한 YAML 기반의 도메인 특화 언어를 설계해줘.”


아키텍처 설계 (Architectural Possibilities)

  • 시스템을 설계할 때 다양한 아키텍처 옵션을 제시
  • 레이어드 아키텍처, 마이크로서비스 등 다양한 설계 패턴을 탐색

활용 예시:

“이 웹 애플리케이션을 개발할 때 고려할 수 있는 아키텍처 설계 방안을 3가지 제시해줘.”


3. 코드 품질 향상 패턴 (Code Quality)

코드 클러스터링 (Code Clustering)

  • 코드를 특정 기준에 따라 그룹화하여 더 읽기 쉽게 정리
  • 예를 들어, 비즈니스 로직과 데이터베이스 접근 코드를 분리

활용 예시:

“이 코드를 리팩토링해서, 데이터베이스 접근 코드와 비즈니스 로직을 분리해줘.”


중간 추상화 (Intermediate Abstraction)

  • 서드파티 라이브러리와 핵심 로직을 분리하여 유지보수성을 높임

활용 예시:

“이 코드를 리팩토링해서, 3rd-party 라이브러리와의 의존성을 줄일 수 있도록 중간 계층을 추가해줘.”


원칙 기반 코드 작성 (Principled Code)

  • SOLID 원칙, 클린 코드 등 특정 개발 원칙을 적용하여 코드 작성

활용 예시:

“이 코드를 SOLID 원칙에 맞게 리팩토링해줘.”


4. 리팩토링 패턴 (Refactoring)

의사 코드 리팩토링 (Pseudo-code Refactoring)

  • 사용자가 의사 코드를 제공하면, 실제 코드로 변환

활용 예시:

“이 의사 코드를 기반으로 실제 Python 코드로 변환해줘.”


데이터 기반 리팩토링 (Data-guided Refactoring)

  • 데이터 스키마 변경에 맞춰 기존 코드를 자동 수정

활용 예시:

“이 JSON 데이터 구조로 변경될 경우, 기존 코드를 리팩토링해줘.”


정리하면..

요구사항 단계에서는 요구사항에 대한 시뮬레이션이나, 요구사항을 좀 더 상세화 하기에 유용하게 사용할 수 있고, 시스템 설계나 코드를 직접적으로 요구하거나 대안을 제시하게 할 수 있습니다. 코드 퀄리티를 위해 리팩토링을 요청하거나 코드 분리, 추상화, 패턴 적용등 여러가지로 활용할 수 있게 됩니다.

저의 경우 오래되었거나 기억이 가물가물했던 프로젝트 초기 셋업, 그리고 간단한 코드 작성 등을 테스트해봤더니 매우 잘 되었습니다. 물론 오류가 있는 경우도 있었는데, 이것또한 다시 gpt에 물어보고 수정요청이나 해법을 요청했더니 여러가지 대안과 방법을 제시해주어 해결할 수 있었습니다.

이처럼 개발쪽에서도 상당부분 생산성을 올릴 수 있을 것 같았으나, 기존 도메인이 복잡하고 어려운 거대한 프로젝트 환경에서는 과연 만족할만한 답변을 줄 수 있을지는 의심스럽긴 했습니다만, 개발자들의 반복적이고 자주하진 않지만 귀찮은 부분들은 상당부분 해결해 줄 수 있을것으로 보입니다.

Leave a Comment