팀원 : PM(1) / Design(1) / Frontend(2) / Backend(3)
기간 : 2024.03 ~ 2025.03
링크 : https://github.com/M-ung/MoodBuddy_Server
서비스 내용 : 사용자가 작성한 일기를 바탕으로 감정 분석하는 웹 서비스
소통 : GitHub, Slack, Notion, Discord
서비스 배포 후 운영을 하면서 32명의 사용자로부터 "일기 저장 시간이 너무 길어요!!"라는 피드백을 공통적으로 받았다.
일기 서비스에서 일기 저장은 핵심 기능이기에 이를 주도적으로 해결하기로 했다.
처음에는 일기 저장 API 호출할 때, 아래 3가지 기능이 하나의 트랜잭션으로 묶여 동작했다.
1. OpenAI를 호출하여 일기 분석.
2. S3에 일기 이미지 업로드.
3. 일기 데이터 DB에 저장.
이로 인해, 일기 저장 시 발생하는 3.78초의 시간 지연으로 병목 현상이 발생했다.
이를 해결하기 위해 일기 저장 API를 본연의 역할에 집중하도록 개선하고자 했다.
1. 클라이언트가 직접 S3에 이미지를 업로드하도록 Presigned URL 적용
기존 서버에서 직접 S3에 이미지를 업로드하고, DB에 저장하는 설계에서 Presigned URL 방식을 적용해서 개선했다.
이로 인해 클라이언트에서 직접 S3에 이미지를 업로드하여, 서버의 부담을 줄일 수 있도록 개선했다.
2. 일기 저장과 일기 분석 API 분리
기존에는 일기 저장과 분석을 하나의 API에서 처리한 설계에서 일기 저장 API와 일기 분석 API를 분리하여 각각 독립적으로 동작하도록 개선했다.
3. 일기 저장 API 호출 후, 반환되는 데이터 최소화
기존에는 일기 저장 API 호출 후, 저장된 일기에 대한 모든 데이터를 반환했다. 하지만 이는 불필요하다고 판단해 id 값만 반환하도록 개선했다.
개선 결과는 아래와 같다.
1. 일기 저장 속도 3.78s → 233ms, 약 93.9% 응답 시간 단축.
2. 하나의 트랜잭션에서 독립적인 트랜잭션으로 분리.
📍 개전 선, 일기 저장
📍 개전 후, 일기 저장