본문으로 건너뛰기
강홍재/ James
← Work
MVP2025 - 2026 · Solo Builder· Started(First Commit date)

TransLoop

Double translation 학습 루프를 도구로 만든 외국어 학습 앱 - 원문을 외국어로 번역하고, 며칠 뒤 자기 번역을 다시 모국어로 역번역해 의미 손실을 비교.

  • FastAPI
  • React
  • OpenAI
  • Language Learning
스크린샷
  • 프로젝트 목록 - 학습 주제별로 진도(EN→KO 비율)와 상태(active·draft·completed)를 한 화면에

  • 프로젝트 생성 - 이름·설명·원문/번역 언어만 정하면 학습 단위가 만들어진다

  • 프로젝트 안 - 텍스트 카드마다 난이도(Difficulty)와 직전 점수(Score) 노출, "Practise" 한 번으로 입장

  • Phase 2 - 자기 번역을 다시 원문 언어로 역번역하면서 의미 손실을 직접 본다

  • Result - 번역(82)·역번역(85) 두 점수를 함께 보여줘 "어디서 의미가 빠졌는지"가 비교된다

  • AI 피드백 - Strengths·Improvements·Hints·역번역에 보존된 표현까지 항목별로 정리

Setup

Context

외국어 학습에서 잘 알려진 "double translation" 기법(원문 → 외국어 → 모국어 역번역으로 의미 손실을 자기 점검)을 한 도구로 묶음. 2025년에 처음 시작했다가 멈췄고, 다시 풀스택 구조를 잡아 재시동 중.

Build

What I did
  • Backend - FastAPI + SQLAlchemy 2.0 async + Pydantic v2 + OpenAI, alembic 마이그레이션
  • Frontend - Vite + React 19 + Tailwind v4 + shadcn + TanStack Query, access/refresh 토큰 인증
  • 배포 - 백엔드 Render + Neon Postgres, 프런트 Cloudflare Pages
Product decisions
  • "정답 비교"가 아니라 "자기 번역과 원문의 차이"를 학습 신호로 - 정오답 채점보다 의미 손실을 본인이 보게 만드는 게 학습 깊이를 만든다
  • 토큰은 localStorage + 401 시 1회 자동 갱신 후 /login 리디렉션 - 학습 도중 끊김을 최소화
QA considerations
  • access/refresh 토큰 흐름 - 401 시 1회 자동 갱신이 무한 루프 없이 정확히 한 번만 돌고 실패 시 /login으로 안전히 떨어지는가
  • 며칠 뒤 역번역이라는 시간차 학습 루프에서 원문·1차 번역·역번역 상태가 어긋나지 않고 이어지는가
  • OpenAI 채점 응답이 비정형이거나 실패해도 학습 진행이 막히지 않고 degrade하는가
  • 의미 손실 비교가 학습 신호의 전부이므로, AI가 짚는 "어디서 의미가 빠졌는지"가 실제 손실과 어긋나지 않는가(신호 정확도)
  • 번역·역번역 두 점수(82·85)가 같은 입력에 재현 가능하고 임의로 흔들리지 않아 학습자가 점수 변화를 신뢰할 수 있는가
  • 2025년에 멈췄다 2026년 풀스택으로 재시동하는 과정에서 기존 학습 데이터(프로젝트·텍스트·기록)가 유실 없이 이어지는가
Tech stack
  • FastAPI
  • Python
  • SQLAlchemy 2.0 (async)
  • Pydantic v2
  • OpenAI
  • React 19
  • TypeScript
  • Vite
  • Tailwind v4
  • TanStack Query