OpenAI ChatGPT API 활용

Q1. GPT가 선택하도록 프로필 엔진 ID를 반환한다고 했는데, 어떤 기준으로 ID를 정하나요?

A1. GPT에게 상황, 감정, 카테고리 등 맥락을 JSON 형태로 넘기고, 각 프로필의 조건과 매칭된 정도를 바탕으로 가장 적합한 프로필 ID를 추론하도록 prompt를 구성했습니다. Prompt 내부에서 스코어링 로직을 흉내내도록 설계했습니다.


- ERD 설계 포인트 / 폴더 구조

Q2. 폴더 트리 구조 구현 시 트리 무한 확장 방지는 어떻게 했나요?

A2. parent_folder_id를 fk로 설정해서 계층 구조를 구현하되, 최대 depth 제한을 논리적으로 걸고, 삭제/이동 시 유효성 검사를 통해 순환 참조가 생기지 않도록 막았습니다.

Q3. 동일 폴더명을 허용했는데, 사용자가 헷갈리지 않나요?

A3. 사용자마다 다른 폴더 구조를 가질 수 있도록 사용자 ID와 연관된 폴더 정보로 분리 관리했고, UI에서도 현재 경로를 항상 명시하여 혼동을 방지했습니다.


- 이메일 발송(SMTP → SendGrid)

Q4. SMTP 대신 SendGrid를 선택한 결정적 이유는 무엇인가요?

A4. SMTP 방식은 대량 전송 시 신뢰도가 낮고 스팸 분류 확률이 높아졌습니다. 반면 SendGrid는 인증된 도메인/IP 기반으로 발송되며, TLS, 모니터링 기능까지 제공되어 신뢰성과 관리 측면에서 더 적합하다고 판단했습니다.


- 커스텀 배치 시스템 구현

Q5. 왜 Spring Scheduler를 안 쓰고 직접 스케줄링 구현했나요?

A5. 고정된 주기보다 사용자 행태에 맞춘 유연한 스케줄링이 필요했고, Job 별 배치 타이밍을 조절하기 어려워 커스텀 로직으로 처리했습니다. 향후 확장성도 고려했습니다.


- 유효성 검사 Validator

Q6. 표준 Annotation이 아닌 커스텀 Validator를 쓴 이유는?