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

QA Learning 101

테스팅 방법론과 자동화를 실습으로 익히는 QA 학습 플랫폼 - 실무를 닮은 연습용 앱에 직접 테스트를 짜본다.

  • QA
  • Education
  • React
  • FastAPI

Setup

Problem

QA 엔지니어 입문자가 "무엇을 어떤 순서로 배워야 하는지"의 지도가 없다. 책은 무겁고, 강의는 일방향이라 손이 안 움직인다.

Context

QA 엔지니어로 14년 동안 "입문자에게 매번 같은 걸 다시 설명하는" 시간을 한 곳에 정리하려는 시도.

Build

What I did
  • FastAPI·PostgreSQL 백엔드와 React·TypeScript 프론트로 된 풀스택 학습 앱 (인증·게시판·댓글·할 일·칸반·캘린더·실시간 채팅·파일)
  • QA Hub - 은행 대시보드·예약 시스템·이커머스·소셜 피드 등 실무를 닮은 연습용 앱을 만들어, 자동화 테스트를 짜볼 대상으로 제공
  • 화면 전반에 CSS·구조와 무관한 data-testid 셀렉터 규칙을 심어 E2E가 리팩토링에 안 깨지게
  • Playwright(Python)·pytest로 E2E·API 테스트, Locust로 부하 테스트, GitHub Actions CI
  • KO/EN 다국어(i18next)와 GA4 분석, Sentry 에러 모니터링
Product decisions
  • 다크 모드·반응형·접근성을 처음부터 - 학습 도구가 접근성을 안 지키면 메시지가 무너진다
  • 연습용 앱을 '예제'가 아니라 은행·예약·이커머스처럼 실무를 닮은 화면으로 - 입문자가 실제와 같은 대상에 테스트를 짜보게
  • data-testid를 셀렉터 표준으로 - CSS·컴포넌트 구조가 바뀌어도 E2E가 안 깨지는 습관을 학습 단계에서 들인다
  • 매니지드(Render + Neon)로 시작했다가 비용 문제로 자체 호스팅한 Mac Mini + Cloudflare Tunnel로 이전 - 사이드 프로젝트에 매달 나가는 고정비를 줄였다
QA considerations
  • data-testid 셀렉터가 CSS·컴포넌트 구조 변경에도 안 깨져 E2E가 리팩토링에 견디는가(학습용 표준의 실증)
  • QA Hub 연습용 앱(은행·예약·이커머스·소셜 피드)이 실무를 닮은 상태·엣지 케이스를 실제로 담고 있는가
  • 학습 콘텐츠 자체의 정확성 - 방법론 설명이나 예제가 틀리면 입문자에게 잘못된 습관이 5년을 가므로 가장 회피할 회귀인가
  • 테스트 자동화 플레이그라운드가 연습용 앱 안에 격리돼, 학습자가 짠 테스트가 실계정·실데이터를 건드리지 않는가
  • Playwright·pytest E2E, Locust 부하 테스트가 GitHub Actions CI에서 회귀 게이트로 도는가
  • 실시간 채팅(WebSocket)·인증·파일 업로드 같은 상태 의존 경로가 재접속·토큰 만료에서 견고한가
  • 매니지드→자체 호스팅(Mac Mini + Cloudflare Tunnel) 이전 후에도 동일 동작이 유지되는가

Outcome

Metrics

qalearningweb.com에 라이브. 프론트는 Cloudflare Pages, 백엔드(FastAPI)와 Postgres는 처음 Render + Neon 매니지드로 올렸다가 비용 문제로 자체 호스팅한 Mac Mini로 옮기고 Cloudflare Tunnel로 노출한다. 사용자 수치는 미공개.

Tech stack
  • React
  • TypeScript
  • Vite
  • Tailwind
  • Zustand
  • React Query
  • i18next
  • FastAPI
  • Python
  • PostgreSQL
  • SQLAlchemy
  • Redis
  • WebSocket
  • Playwright
  • pytest
  • Locust
  • Sentry
  • Cloudflare Pages
  • Cloudflare Tunnel
  • Mac Mini