야 GPT 개발 좀 해줘.

지인호·2023년 1월 9일
14
post-thumbnail
post-custom-banner

이 글은 필자가 GPT를 써보다가 충격먹고 급하게 벨로그 켜서 쓴 글입니다.
어느정도 두서없이 내용이 정리되어있더라도 양해 부탁드려요 🙏

배경

지금까지 썻던 TIL을 정리하면서 중간에 @Inherited에 대한 간단한 궁금증이 생겼지만 구글검색으로는 원하는 답을 찾을 수 없었습니다. 혹 ChatGPT 에 물어보는건 어떨까 싶어서 물어본 결과, 단 3번의 질문으로 원하는 답을 찾을 수 있었습니다.

그렇다면, ChatGPT에게 개발을 시켜보면 어떨까요??

목적

제가 피드백이 가능한 Kotlin + SpringBoot 기반의 단순한 계정API 를 개발해보라 할 것 입니다.

  • 이때, 질문을 이해하고 코드를 작성하는지 (이해도)
  • 기능이 제대로 구현되었는지 (기능구현)
  • 구조는 깔끔한지 (코드구조)
    3가지 기준을 가지고 AI가 짠 코드를 피드백해나가며, 실제 사람이 개발한 코드와 같거나 더 높은 수준의 계정API를 개발시키는것을 목표로 합니다.
    이 과정에서 질문에 어떠한 코드도 포함하지 않고, 단순히 00기술을 적용해줘 정도의 요구사항만을 명시합니다.

결과

첫번째 테스트는 중간에 네트워크 오류가 나서 두번째 테스트를 기준으로 작성하였습니다
답변이 길어서 답변링크를 Gist로 따로 달아두었습니다
필자의 영어실력이 좋지 않아 질문이 문법적으로 좋지 않을 수 있습니다

첫번쨰 질문

Q. please develop simple account api using kotlin and spring boot
A. Sure, here is an example of a simple API for managing accounts using Kotlin and Spring Boot
답변 링크

일단 여기서부터 놀랐습니다. SpringBoot와 Kotlin을 사용하여 계정에 대한 관리를 수행하는 API 에 대한 최소스팩을 완전히 짯거든요.
심지어 각 API endpoints 에 대한 설명부터 사용한 기술들에 대한 설명까지 완벽히 수행하였습니다.

기준척도
이해도100
기능구현70
코드구조20

하지만, 해당 코드를 실무에서 사용하기엔 어려움이있습니다.

  • 우선 영속성을 띄는 DataStorage를 사용하지 않았으며
  • 비즈니스로직이 Controller 에 존재합니다.

따라서 clean architecture 를 도입하고, mysql 을 사용하며 service, repository를 포함할것을 요청하였습니다.
또한 이 과정에서 mysql 관련 datasource를 잘 설정했는지 확인하고자 application.yml 파일도 포함할것을 요청하였습니다

두번째 질문

Q. please use service and repository. refer to clean architecture. and, i wan't add application.yml code. i use mysql that works in localhost:3306.
A. Certainly! Here is an example of an API for managing accounts using Kotlin, Spring Boot, and the clean architecture principles, with a MySQL database running on localhost:3306:
답변 링크

아쉽게도 답변 길이가 길어서 그런지 중간에잘리긴 했지만, 예상을 뛰어넘는 결과를 보여주었습니다.

  • 클린아키텍처의 적용은 물론
  • JPA 스팩에 따라 가장 단순한 Entity를 구성하였을 뿐더러
  • PSA를 도입하여, AccountService에 대한 인터페이스를 작성하였습니다.
  • 또한 datasource의 경우, 제공하지 않은 정보(유저명, DB명, 암호 등)를 적절하게 맞추어 작성하였습니다.

이미 이때부터 제가 2년전에 작성한 코드보다는 깔끔한 코드를 작성하기 시작했습니다. 태어난지 1년도 안된 ChatGPT가요...

기준척도
이해도100
기능구현100
코드구조60

하지만 아직도 개선점을 보였습니다. Entity 스팩에 해당하는 Account를 Controller/Service 단에서 사용하고있으니까요.

세번째 질문

Q. please use Dto, Entity spec. service and controller must not use entity spec
A. Certainly! Here is an example of an API for managing accounts using Kotlin, Spring Boot, the clean architecture principles, and DTOs (data transfer objects) to decouple the service and controller layers from the entity layer:
답변 링크

답변을 보는 순간 실소가 터져나왔습니다. to decouple the service and controller layers from the entity layer 라니요. 제가 요구한 사항이 어떤 이유로 필요한지까지 정확하게 추론하여, 로직을 변경하였습니다.
심지어 반복될 가능성이 높은 DataSpec간 치환로직을 toDto, toEntity라는 함수로 분리하여 재사용성 또한 높였죠.
아쉽게도 답변 길이제한으로인해, 중간에 코드가 잘리긴 했지만, 이를 감안하더라도 충분히 좋은 코드를 작성했다고 생각할 수 있습니다.

기준척도
이해도100+
기능구현100
코드구조100

이미 프로덕트 코드는 높은 완성도를 보이고있습니다. 그렇다면, 테스트코드는 어떨까요? 과연 ChatGPT가 테스트코드 마저 정복할 수 있을까요?

네번째 질문

Q. please write unit test of that api using kotest
A. Certainly! Here is an example of unit tests for the API using Kotest:
답변 링크

네 컨트롤러에대한 유닛테스트를 완전하게 작성했습니다.
심지어 MockMVC를 사용해서요.
마찬가지로 길이제한때문에 중간에 코드가 끊기긴 했지만 충분히 원하는 결과를 얻을 수 있었습니다.

기준척도
이해도100+
기능구현100+
코드구조100

이제, 개발자들이 그토록 어려워하는 배포도 ChatGPT가 해낼 수 있을지 테스트해봅시다.
물론, ChatGPT는 서버 비용은 커녕 AWS계정도 없기에, 단순히 배포 계획을 수립해보라는 방식으로요.

다섯번째 질문

이부분은 제 영어실력이 부족한 관계로 파파고의 힘을 빌려 질문하였습니다.
Q. Now, I will deploy that API that I have distributed so far for both John in the United States and me in Korea. Draw up a detail deployment plan.
A. Certainly! Here is a detailed deployment plan for the API:
답변 링크

주어진 정보가 없어서그런지 약간 추상적인 답변이 나왔습니다.
하지만, kotlin을 사용한다는 기존 맥락을 이해하고있어서 그런지 java, gradle 을 통한 build 방법에 대해서는 어느정도 자세한 설명이 첨부된 것을 볼 수 있습니다.

기준척도
이해도100+
답변80

그렇다면, 답변의 1번 섹션에서 말했던 호스팅 플랫폼을 선택한다면 어떻게 답변할까요??

마지막 질문

Q. pleasae more detail when I choose hosting platform "AWS"
A. Certainly! Here is a more detailed deployment plan for the API on AWS:
답변 링크

와중에 please 가 아닌 pleasae 로 오타가 났음에도 질문을 이해하고 답변하는 모습을 볼 수 있습니다. ㅋㅋㅋㅋ
AWS라는 정보를 입력하자, AWS계정 생성 방법부터, 리전 선택, EC2등의 서비스 사용까지 굉장히 디테일한 정보를 알려주는것을 볼 수 있습니다.

기준척도
이해도100+
답변100+

회고

단순한 계정 API 개발이라고는 하지만 ChatGPT는 상상을 초월한 성능을 보였습니다.

지금까지, AI가 인간을 대체할 수 있다 라는 사실에 대해 많은 사람들이 아직 아니다. 라고 말하곤 했습니다.
그런데 이번 결과를 보고 이런 생각을 해봤어요.
만약, OpenAI에서 ChatGPT를 기업용으로서 가공한 뒤, AI마케터, AI개발자 등으로 판매하면 어떻게 될까?
적어도 개발의 경우, ChatGPT를 포함한 단 두명의 개발자만 있어도 됩니다.

  • 코드를 작성할 Chat GPT
  • ChatGPT가 작성한 코드가 요구사항을 반영하는지 확인하고 실제 IDE로 이전시킬 개발자

AI는 기존 맥락을 파악하고 알잘딱깔센 한 코드를 짜지 못한다고요?
만약 OpenAI에서 AI의 맥락파악 기능을, 하나의 질문 시퀀스가아니라 하나의 기업단위로 적용한다면 어떻게 될까요? (제가 AI전문가가 아니라 이게 가능한지는 모릅니다만)

AI가 사람을 대체한다 는 더이상 먼 미래 이야기가 아니라는걸 이번 기회를 통해서 뼈저리게 체감한 것 같습니다.

항상 글 쓸때마다 마무리가 어려운데 이만 끝마칠게요

profile
테오의 스프린트 17기 퍼실리테이터
post-custom-banner

4개의 댓글

comment-user-thumbnail
2023년 1월 13일

한글로 입력하고, "영어로 답해줘." 라고 하면 굳이 영어로 질문하지 않아도 됩니다.

1개의 답글
comment-user-thumbnail
2023년 1월 18일

AI 학습 데이터 자체가 딥하지못하기에 딥한 질문을 하면 답인듯한 오답을 내줍니다
어쩔 수 없는 빅데이터 및 AI의 한계이기도하고요

1개의 답글