## 예시 프로젝트 소개 예시 프로젝트는 당연히 필요하다. 프로젝트 과정을 처음부터 끝까지 기록으로 남기는 게 목표인데, 프로젝트 없이 기록을 진행할 순 없다. 다만, 어떤 프로젝트를 할지는 고민해봐야 한다. 프로젝트의 규모나 성질에 따라 본래 취지인 기록에 집중하기 힘들어질 수 있기 때문이다. 그래서 나는 고민 끝에 딱 토이 프로젝트 수준으로 예시 프로젝트를 진행하기로 하였다. ### 예시 프로젝트 주제 : `ChatGPT 프록시 서버` **내가 선택한 예시 프로젝트의 주제는 ChatGPT 프록시 서버다**. 프로젝트 주제 선정 사유는 다음과 같다. >0. **앞으로 개발할 ChatGPT 응용 서비스를 위해** > ChatGPT를 응용한 서비스는 이미 시중에 많이 존재하고, 나도 ChatGPT 응용에 관심이 많다. 미리 ChatGPT 프록시 서버를 만들어두면 앞으로 ChatGPT 관련 서비스를 만들 때 큰 도움이 될 것이다. >1. **서버이자 클라이언트인 구조** > 프록시 서버는 요청을 처리하는 서버이자 요청을 보내는 클라이언트다. 이런 구조 덕분에 [[Server Programming/Spring Boot 🌿/readme 👋🏻#기록할 내용|그간 공부했던 것들]]을 적용하기 편하다. >2. **프롬프트 템플릿 처리** > ChatGPT를 잘 활용하려면 일을 시키는 프롬프트를 잘 작성해야 한다. 이를 Fancy한 용어로 프롬프트 엔지니어링[^1] 이라고 한다. 이런 프롬프트 엔지니어링은 템플릿 형태로 이뤄지는데([[프롬프트 기법 정리|템플릿 예시]]), 자바의 `String::format`로는 복잡한 템플릿을 다루기 힘들다. 또한, ChatGPT 응용 서비스마다 이런 템플릿을 다루는 로직을 추가하는 것도 비효율적이다. 따라서 이런 템플릿을 CRUD하고 클라이언트의 요청에 따라 템플릿으로 프롬프트를 생성하는 독립적인 서버를 만드려 한다. ## `ChatGPT 프록시 서버` 개요 ### 주요 서비스 >0. **Chat GPT API 중계** > `ChatGPT 프록시 서버`는 Chat GPT API 키를 사용자에게 숨기고, API를 최소한으로 사용하도록 Chat GPT API 중계 서비스를 제공한다. >1. **REST API를 통한 프롬프트 템플릿 관리** > `ChatGPT 프록시 서버`는 자신을 이용하는 클라이언트가 프롬프트 템플릿을 쉽게 CRUD 할 수 있도록 REST API를 제공한다. >2. **프롬프트 템플릿을 통한 프롬프트 생성** > `ChatGPT 프록시 서버`는 프롬프트 템플릿을 채울 콘텐츠를 `Map` 형식으로 받아 프롬프트를 생성하는 서비스를 제공한다. ### test 패키지 구조 ``` src/test/java/io.gitlab.red.chatgptproxyserver ├── config | ├── PromptTemplateTestConfig(ⓒ) │ ... (생략) ├── assertor │ ├── SingleArgAssertor(ⓘ) │ └── DoubleArgAssertor(ⓘ) ├── PromptTemplateRepositoryTest(ⓒ) ... (생략) ``` [^1]:개인적으로 **엔지니어링**이라는 단어는 과분하다고 생각한다.