핵심 요약: Year Log는 20개 주관식 질문에 대한 답변을 AI가 분석해 개인화된 연말 회고 리포트를 생성해주는 무료 서비스다. 이번 글에는 이 서비스를 만들게 된 계기부터 구현 과정까지의 세세한 과정을 담았다.
이 글의 구성
- 1편: 기획 배경, 질문 설계, 기술 스택 선택, 프롬프트 최적화, UI/UX 디자인
- 2편: 전환 퍼널 데이터 분석, 사용자 반응, 제품 방향성, 운영 회고
연말 회고 서비스를 만든 이유
12월이면 데이터 기반 연말 결산 콘텐츠가 쏟아진다. 유튜브 리캡이나 애플 뮤직의 리플레이처럼 "올해 가장 많이 들은 노래" 같은 것들.
콘텐츠 마케터로 업무할 당시 서비스 전체 데이터를 활용하는 연말결산 콘텐츠를 기획했었고, 심리 테스트 포맷도 작업해봤다. 이 두 가지 경험과 최근 잘 활용하고 있는 AI를 더해 처음부터 끝까지 하나의 서비스를 혼자 만들어보기로 했다. 가을에 맨땅에 헤딩하며 혼자 앱을 출시해본 경험 덕분에 새로운 시도에 대한 허들이 사라진 것 같다!
내가 올해 만들어보고 싶었던 것은 숫자로 표현되는 회고랑은 조금 달랐다. 올해 뭘 배웠는지, 어떻게 달라졌는지, 데이터만으로는 다 담아내지 못하는 경험을 정리하고 싶었다. 질문을 던지고, 직접 답하게 하고, 그걸 AI가 분석해주는 연말결산. 5분 만에 끝나는 심리테스트가 아니라 좀 더 딥하게 한 해를 돌아보는 경험을 만들고 싶었다.
바이럴을 노린다면 선택형 옵션으로만 구성하고 결과도 심플한 게 좋겠지만, 나는 '회고'라는 특성에 집중하기로 했다. 주관식으로 직접 적게 하고 AI 분석 결과도 충분히 길게 보여주는 쪽으로. 이번에 만든 연말결산 회고 서비스 'Year Log'는 이렇게 출발했다.

48시간 개발: 빠른 MVP 출시 전략
방향성을 정하고 나니 빠르게 실행에 옮기는 게 중요했다. 연말결산은 시즌성이 짙은 서비스이다. 12월을 벗어나면 해야 할 이유가 사라진다. 그래서 우선순위를 바로 올리고 일정을 이틀로 픽스했다. 이틀 동안 기획부터 배포까지 모두 마쳤다. 혼자서 이 속도가 나온 건 AI 도구 덕분이다.
사업자 없이 무료 서비스 운영하기
유료로 할까 잠깐 생각은 해봤다. 2티어 모델도 고민해봤다.
무료 (20개 질문, 라이트 AI) → 프리미엄 (50개 질문, 풀 AI, 1,900원)
하지만 역시 PG 연동에는 현실적인 벽이 있었다. 토스페이먼츠 등 국내 PG사는 사업자 등록이 필수다. 다른 한편 Stripe/PayPal 같은 해외 결제는 내 타깃인 사용자에게는 낯설다.(실제로 UI보여줬을 때 어려워함) 비용 이슈를 따져봤다. OpenAI 연동의 경우 사용량 대비 토큰 비용을 계산해보았을 때 크게 부담되지 않았다. 그래서 무료 모델로 빠르게 결정했다.
질문 설계: 50개에서 20개로, AI 분석에 최적화된 주관식 질문
Year Log의 핵심은 질문이다. 질문에 따라 결과가 달라진다.
처음엔 프리미엄 모델을 생각하며 50개 질문을 리스트업했었다. 하지만 무료 모델로 결정하면서 질문 수를 현실적으로 줄이기로 했다. 주변에 테스트 돌려봤을 때 30문항도 많다는 피드백이 있어서 20문항으로 줄였다.
50개 → 20개로 줄일 때의 기준
- 중복 제거: "올해 가장 큰 변화" vs "올해 나를 성장시킨 경험" → 하나로 통합
- 분석 가치: AI가 분석하기에 의미 있는 답변이 나올 질문만
- 뎁스 조절: 부정적이거나 무거운 질문은 최소화
최종 카테고리 구성
| 카테고리 | 질문 수 | 의도 |
|---|---|---|
| 올해의 나 | 2개 | 한 해를 압축해서 표현 |
| 감정 | 3개 | 올해 느낀 감정들 |
| 성장과 변화 | 3개 | 어떻게 달라졌나 |
| 취향과 라이프 | 10개 | 나다움을 보여주는 것들 |
| 미래의 나 | 2개 | 내년에 대한 다짐 |
취향과 라이프 스타일 카테고리가 질문의 절반을 차지하도록 배치했다. 요즘은 "나는 누구인가"를 설명하는 방식이 바뀌었다. 이제 사람들은 "Taste"로 자신의 정체성을 드러낸다. 플레이리스트, 즐겨 찾는 카페, 좋아하는 브랜드. 이런 것들이 '나'를 설명한다.
반면 무겁거나 부정적인 질문은 최소화했다. "가장 힘들었던 순간" 정도만 넣고, 나머지는 가볍고 구체적인 질문으로 채웠다. 회고가 무겁기만 하면 끝까지 가기 힘들다.
몇 가지 특별한 질문도 넣었다. "올해 나를 가장 잘 아는 사람은 누구? 그 사람은 나를 뭐라고 표현할까?"처럼 타인의 시선으로 나를 객관화하게 만드는 질문. 그리고 "버리기를 미루고 있던 지금 당장 버려야 할 물건은?", "내년 1월에 바로 실행할 것 한 가지는?" 같은 질문으로 단순 회고에서 끝나지 않고 실제 행동으로 이어지게 했다. 회고를 하는 이유는 결국 나를 돌아보고 다음은 더 나아지기 위해서니까.

왜 주관식인가
대부분 주관식(텍스트 입력)으로 갔다.
객관식이 편하긴 하다. 클릭 몇 번이면 끝나니까. 근데 그러면 기존 심리테스트랑 다를 바가 없다. 회고는 본질적으로 불편한 행위이다. 지난 나를 되짚어보고, 외면했던 순간들을 다시 꺼내보고, 솔직하게 마주하는 과정은 쉽지 않다. 그래서 많은 사람들이 빈 페이지 앞에서 멈춘다.
주관식으로 직접 적게 한 건 바로 이 지점 때문이었다. 구체적인 질문으로 시작점을 마련해주되, 스스로 생각을 정리하며 문장을 완성하는 시간을 주고 싶었다. 빈 페이지는 부담스럽지만, "1년 전의 나라면 절대 안 했을 것을 올해 했다면?"이라는 질문은 한 걸음 내딛게 해준다. AI가 분석하기에도 주관식은 텍스트가 훨씬 풍부하다.
빈칸 채우기 형식도 몇 개 넣었다. "요즘 나는 ____가 제일 무섭다" 같은 형식. 문장을 완성하는 정도라서 진입장벽이 조금 낮다. 민감한 질문에는 구체적인 예시도 제공했다. "올해 숨겨둔 작은 비밀은?"이라는 질문에 "전 연인 SNS 몰래보기, 숨겨둔 비상금, 아픈 척 약속 취소" 같은 예시를 보여주면 가볍게 접근할 수 있다.
책, 여행, 취미, 향수처럼 모든 사람이 경험하지 않을 수 있는 질문 5개는 선택 항목으로 만들어 건너뛸 수 있게 했다.
기술 스택 선택: Next.js, Supabase, GPT-4o-mini를 고른 이유
Next.js + Tailwind CSS
프론트엔드는 Next.js로 갔다. LLM에 구현하려는 기능(짧은 공유 URL, OG 메타데이터 동적 생성 등)을 설명했더니 가장 적합한 스택으로 추천해줬다. Vercel 배포도 단순하다.
Next.js가 적합했던 이유: 동적 라우팅(/result/[id])으로 짧은 URL 구현이 쉽고, 서버 컴포넌트로 사용자별 OG 메타데이터를 동적 생성할 수 있다. API Routes로 프론트/백엔드를 한 프로젝트에서 처리할 수 있어 빠른 개발에 유리하다는 특성도 있다.Tailwind는 디자인 시스템 없이도 빠르게 스타일링하기 좋다. 48시간짜리 프로젝트에서 컴포넌트를 직접 꾸미기에 적합했다.
GPT-4o-mini
AI는 GPT-4o-mini를 썼다. 다른 모델 대비 합리적으로 연말결산 분석에 필요한 성능을 충분히 커버한다. input/output 토큰 수와 예상 리퀘스트 수를 계산해보니 무료 운영이 가능한 비용 수준이었다.
Supabase
DB는 Supabase. 결과를 저장해야 /result/abc123 같은 짧은 URL을 줄 수 있는데 Supabase가 바로 쓸 수 있는 대안이었다. 무료 티어가 넉넉하고 셋업도 빠르다. 이제 수파베이스에 조금 익숙해진 상태이기도 해서 더 편했다.
결과 생성 → Supabase 저장 → short_code 발급 → 공유 URL 생성
Vercel
배포는 Vercel. Next.js 기반이라 호환성이 좋고 무료 티어 안에서 충분히 운영할 수 있다. 커스텀 도메인 연결도 간단하다.
GPT-4o-mini 프롬프트 최적화: 연말결산 분석 성능 높이기
JSON 구조 설계
AI에게 7개 섹션을 JSON으로 달라고했다. 구조화를 해서 해당 포맷으로 입출력하면 프론트엔드에서 렌더링할 때도 깔끔하다.
{
"title": "~한 한 해",
"summary": "2025년 총평",
"emotion": "감정 분석",
"growth": "성장 포인트",
"taste": "취향/나다움 분석",
"advice": "2026년 맞춤 조언",
"keywords": ["키워드1", ..., "키워드10"]
}
정해진 형식으로 결과 페이지가 구성되어 나오기 때문에 일관성이 생겼다.
톤 지정
톤앤매너도 명시했다. 내가 그려둔 Year Log 컨셉에 맞춰 원하는 온도를 구체적으로 적어주었다.
- 따뜻하고 친근한 어조로 작성
- 판단하지 말고 공감하기
- 부정적인 답변에도 긍정적 관점 제시
- "~네요", "~했군요" 같은 부드러운 종결어미 사용
"당신은 이런 사람입니다"보다는 "이런 한 해를 보내셨군요"가 덜 위압적이다. 같은 말도 다르게 느껴진다. 사용자 답변을 존중하는 어조를 직접 명시했다.
AI 도구로 48시간 만에 디자인하기
한 해를 회고하며 사용자들은 주관식으로 직접 타이핑을 하고, 깊이 있는 질문도 마주한다. 쉽지 않은 여정이다. 그렇기에 디자인만큼은 최대한 따뜻하고 포근하게 만들어야 한다고 생각했다.
딱딱한 UI 대신 손으로 만든 것 같은 질감을 목표로 했다. 친구가 직접 바느질해서 건네주는 연말 카드 같은 느낌. 가볍지 않은 질문을 던지더라도 그걸 감싸는 분위기만큼은 따뜻해야 한다.
Midjourney로 에셋 제작
- 집: 메인 화면 이미지로 따뜻한 보금자리
- 편지지/우체통: 결과를 주고 받는 메세지함
- 하트: 만족도를 표현하는 좋아요 버튼
- 눈송이: 연말 눈 내리는 겨울날 분위기
프롬프트에 "felt texture", "embroidery style", "handmade" 같은 키워드를 넣어서 일관된 펠트 질감으로 뽑았다. react-snowfall로 눈 내리는 효과를 추가해 연말 분위기와 차별점을 만들었다.
사용자 플로우: 이름 입력부터 AI 결과까지 5단계
사용자가 어떤 순서로 이 여정을 밟게 될지 그려봤다.
1. 이름 입력
처음에 이름이나 닉네임부터 받는다. "{이름}님의 2025 연말결산"이라고 뜨면 심리적으로 내 이야기라는 느낌이 강해진다. OG 메타데이터에도 반영되니까 공유했을 때 존재감이 다르다.
2. 질문 미리보기
바로 질문으로 가지 않고 어떤 질문들이 있는지 예시를 먼저 보여준다.

"올해 가장 행복했던 순간은?"
"요즘 나는 ____가 제일 무섭다"
"올해 가장 잘한 소비는?"
"올해 숨겨둔 작은 비밀은?"
"2026년엔 어떤 사람이 되고 싶나?"
어떤 질문이 나올지 미리 보여주면 예상도 가능하고 마음의 준비도 할 수 있다.
3. 20개 질문
질문은 한 번에 하나씩, 차분하게 답변하는 구조다.
- 자동 저장: 답변할 때마다 localStorage에 저장
- 24시간 유효: 나갔다 와도 이어서 가능
- 중간에 나가도 OK
4. AI 분석 로딩
결과 생성에 5-10초 가량이 걸린다. 스피너만 보여주면 진행 상황을 알 수 없어서 메시지를 넣었다.
"당신의 2025년을 정리하고 있어요..."
"답변에서 패턴을 찾고 있어요..."
"올해의 이야기를 엮고 있어요..."
"거의 다 됐어요, 조금만요..."
초마다 바뀌면서 AI 결과 생성이 진행 중임을 보여준다. 대기 시간에도 이탈하지 않도록 하는 장치다.
5. 결과 확인
AI가 분석한 결과를 보여준다. 구체적인 페이지 구성은 아래와 같다.
AI 결과 페이지: GPT가 분석한 7개 섹션과 바이럴 CTA
AI 분석 섹션
AI는 7개 섹션으로 분석 결과를 제공한다. 과거(총평) → 현재(감정/성장) → 미래(조언) 순서로 자연스럽게 한 해를 정리하고 내년을 바라보게 만드는 구조다.

CTA 버튼
결과 페이지 하단에는 액션 버튼을 배치했다. 사용자가 AI 분석을 확인한 직후 어떤 행동을 하게 만들지에 집중했다.
- 이미지로 저장하기: 결과를 기록으로 남겨두게 했다.
- 결과 공유하기: 카카오톡 등 링크로 공유할 수 있게 했다.
- 하트 버튼: 마음에 들면 하트를 중복으로 누를 수 있게 했다. 만족도 표현과 더불어 "N개의 마음이 쌓였다"를 메인과 결과 페이지에 보여줘서 다른 사람들도 참여하고 반응했다는 걸 보여준다.
- 나도 해보기: 친구 결과 보고 온 사람한테 중요한 버튼. 바이럴 루프의 핵심이다.
공유 링크
바이럴의 핵심은 공유 링크다.
- 결과를 Supabase에 저장
- 6자리 짧은 코드 발급 (예:
x7k2m9) /result/x7k2m9형태의 깔끔한 URL
카톡에 링크를 보내면 "{이름}님의 2025 연말결산"이라고 뜬다. OG 메타데이터를 동적으로 생성했기 때문이다.

Buy me a coffee 섹션
최하단에는 "이 프로젝트가 마음에 닿았다면, 작은 응원은 계속 이어갈 수 있는 힘이 됩니다"라는 메시지와 함께 "응원하기" 버튼을 넣었다. 펠트 질감 컨셉과 문구가 자연스럽게 이어지도록 했다.
브랜딩: 도메인과 서비스 정체성
서비스 이름은 Year Log로 정했다. 한 땀 한 땀 바느질하듯 한 해를 기록한다는 의미를 담았다. 펠트/자수 디자인 컨셉과도 자연스럽게 이어진다.
도메인은 stitch-planet.com으로 했다. "한 땀 한 땀 삶의 순간을 기록하고 엮어간다"는 의미를 담고 있다. 향후 서비스 확장을 고려한 선택이기도 하다.
푸터에 개인정보처리방침을 넣고 Stitch Planet 로고를 박았다. 이런 기본 요소가 있어야 서비스가 진짜로 존재하는 것처럼 느껴진다.
다음 편에서는
2편에서는 운영 결과와 회고를 다룬다. 인스타그램 광고 결과, 전환율과 바이럴 지표 분석, 사용자 피드백, 그리고 한 달간 운영하며 배운 것들을 담았다.