개발일지
PhraseUp 개발기 — 하루 만에 만든 알파, 사흘간의 다듬기
2026년 7월 19일 · 2분 읽기
#PhraseUp#개발기#영어학습
PhraseUp은 한국어가 모국어인 성인이 자신의 실제 삶을 재료로 영어 구동사를 배우는 웹앱입니다. AI가 검토된 200개 구동사 카탈로그에서 하루 두 표현을 고르고, 각 표현을 두 사람이 주고받는 맞춤 대화로 만들어 줍니다. 문장별 TTS 듣기, 유사·반대 표현 비교, 두 표현을 결합한 복습까지 하나의 학습 팩으로 묶여 있어요.
첫 커밋에서 배포까지, 하루
클로즈드 알파 전체가 첫날 커밋 하나로 세워졌고, 이후 사흘간 18개 커밋으로 배포·리디자인·TTS 고도화까지 이어졌습니다. 속도의 비결 중 하나는 학습 자료를 미리 분리해 둔 것 — 형제 프로젝트에서 검토를 마친 구동사 200개를 추출 스크립트로 뽑아 서버 카탈로그에 고정했기 때문에, 운영 배포가 원본 자료 프로젝트에 의존하지 않습니다.
배포 첫날 밤의 씨름
운영 환경은 언제나 예상 밖의 수업을 줍니다. 첫날 밤에는 데이터베이스와의 컨테이너 네트워크가 이름은 풀리는데 연결만 타임아웃되는 기묘한 문제를 만나 연결 경로를 재구성했고, 이어서 AI 구조화 출력의 프로바이더 호환성 문제를 세 커밋에 걸쳐 해결했습니다.
가장 기억에 남는 건 DNS 사건입니다. 어느 날부터 TTS가 조용히 기기 기본 음성으로 폴백되고 있었는데, 원인은 서버 DNS 설정에 죽은 항목이 여럿 남아 있던 것. glibc는 nameserver를 3개까지만 읽기 때문에 4번째의 정상 DNS가 통째로 무시되고 있었습니다. DNS 설정을 정리하고, 앱에는 DNS를 직접 지정해 이중 방어를 걸었습니다.
4가지 시안을 겨룬 리디자인
초기 UI가 투박하다는 판단에 젠 미니멀 · SaaS 클린 · 플레이풀 러닝 · 다크 에디토리얼, 4가지 시안을 나란히 만들어 비교했습니다. 최종 선택은 모던 SaaS 클린 — 딥 제이드 단일 액센트, 모바일 우선, 로고의 'up'에만 색을 칠하는 타이포 장치, 그리고 처음부터 라이트·다크 모드를 CSS 토큰으로 동시 구현했습니다.
지금은
폐쇄형 알파로 소수의 테스터와 함께 다듬는 중입니다. 계정이 없어도 게스트 샘플 팩으로 학습 흐름을 둘러볼 수 있어요. 배포는 커밋마다 불변 이미지를 만들고, 마이그레이션과 헬스체크를 통과해야만 교체되며 실패 시 자동 롤백되는 게이트식 파이프라인으로 돌아갑니다. 다음 일지에서는 학습 팩 생성 파이프라인을 다뤄 보겠습니다.