Back to Projects
logo

교풀AI(GyopoolAI)

2025.09 - 현재
thumb

교사가 직접 제작한 AI 도구로 학생별 맞춤형 교육을 실현하는 에듀테크 플랫폼입니다. 교사의 과도한 행정 및 수업 설계 부담을 해결하며, 공교육 현장의 디지털 전환을 위해 시작했습니다.

Team & Role

Team : PM 1명, FE 1명, BE 2명, Data Engineer 1명

웹 개발 중간 관리자, Front-end

Tech Stack

코어ReactNext.js 15 (App Router)TypeScriptTurborepo
스타일링Tailwind CSSSCSS
상태 관리ZustandApollo Client

참여 활동

  • Next.js 15 & Turborepo 기반 모노레포 아키텍처 설계를 통해 선생님, 학생, 어드민 서비스 통합 관리,공통 UI 및 비즈니스 로직의 재사용성 극대화
  • React 19 Server Component 활용, 부분적 렌더링 구조 설계
  • App - Container - Hook - Component 4계층 구조 설계, 코드 응집도 향상 및 유지보수 효율성 극대화
  • vercel-react-best-practice AI 에이전트 기반 실시간 코드 리뷰 및 최적화 프로세스 구축
  • GraphQL + Apollo Client 통신 환경 기반 인스턴스 클라이언트 설정, InMemoryCache 전략을 수립하여 불필요한 네트워크 비용 절감 및 클라이언트 상태 관리 최적화
  • 결제 4단계 교차 검증 프로세스를 설계하여 자산 누락 리스크를 차단 및 Slack 알림 시스템 구축
  • Toss Funnel 라이브러리를 기반 다단계 입력 폼 내, URL 쿼리 파라미터 동기화 커스텀 훅 모듈화
  • Vitest, Husky 활용 pre-commit 단위 테스트 구축
  • Suspense와 Skeleton UI 적용을 통한 체감 대기 시간 단축

성과

번들 사이즈

88% 감소

874kb → 105kb

Lighthouse Performance Score

전 영역 90점 이상

Legacy 대비 88.5% 속도 향상

MAU

4000+

고객 유치

7000+

트러블 슈팅

# AI 도구 동적 제작 페이지의 폼(Form) 성능 최적화

Problem

AI 도구 동적 제작 페이지 구현 중, CPU 4배 속도 저하 환경에서 글자 입력 간 3초, 질문 위치 수정 간 4초가 소요되는 극심한 Form 성능 저하가 발생하였습니다. 렌더링 연쇄 작용과 브라우저 리플로우 관점에서 원인을 분석했습니다.

Solution

부모의 watch를 제거하고 useFieldArray의 fields를 활용하며, control 객체를 통해 각 컴포넌트가 필요한 상태만 격리하여 구독하도록 구조를 고도화했습니다. 또한 브라우저 리플로우를 방지하기 위해 자동 높이 조절 UI를 일반 텍스트 영역으로 교체하는 디자인적 협의를 진행했습니다.

Before

4,000ms

After

150ms

Learned
  • React의 가상 DOM 리렌더링과 브라우저의 리플로우(Reflow)를 분리하여 가설을 세우고, 크롬 개발자 도구의 성능 프로파일링을 통해 병목 지점을 특정하는 법을 익혔습니다.
  • 사용자 경험(UX)의 핵심 지표인 INP 수치를 개선하기 위해 서비스의 안정성과 반응 속도를 최우선으로 고려하는 비즈니스적 판단력을 길렀습니다.
  • 전체 구독 방식의 한계를 파악하고, 개별 구독 형태의 최적화된 상태 관리 로직을 구현하며 효율적인 설계의 중요성을 체감했습니다.
성능 측정 결과
Chrome DevTools를 활용한 메인 스레드 점유율 분석 및 병목 지점 확인 과정
잘못된 코드와 수정 코드 비교
잘못된 코드와 수정 코드 비교
오류 코드 예시
오류 코드 예시
수정 코드 예시
수정 코드 예시
개선 후 성능 측정 결과
개선 후 Chrome DevTools를 활용한 메인 스레드 점유율 분석 및 INP 개선 확인 과정

# 라이브 서비스의 무중단 다국어(i18n) 도입 및 번역 자동화 파이프라인 구축

Problem

서비스의 글로벌 진출로 인해 라이브 운영 중인 프로젝트에 다국어(i18n) 지원을 추가해야 했습니다. 이때 기존 유저들이 공유하거나 즐겨찾기 한 URL(Legacy URL)이 깨지지 않아야 했고, 검색 엔진 최적화(SEO) 점수 하락을 방지해야 하는 깐깐한 제약 조건이 있었습니다.

Solution

SEO 방어를 위해 URL 쿼리 파라미터가 아닌 Sub-path 라우팅(`/[locale]/...`) 방식을 채택했습니다. 초기 로딩 속도(TTFB)를 저하시키는 CSR 기반의 전역 상태(Context) 사용을 배제하고, next-intl의 미들웨어와 쿠키를 활용해 서버 단에서 언어를 우선 추론하도록 설계했습니다. 더불어 기획/디자인 팀과의 협업 병목을 줄이기 위해 Google Sheets API를 연동하여 평면적인 시트 데이터를 다국어 JSON 트리로 파싱하는 Node.js 스크립트를 작성했습니다.

✨ 개선 결과

  • 한국어 유저의 경우 기존 URL 경로를 그대로 유지(`as-needed` 설정)하면서도 다국어 라우팅을 매끄럽게 연동하여 기존 사용자의 UX와 SEO 점수를 완벽히 방어했습니다.
  • SEO가 중요한 영역은 서버 컴포넌트(SSR)로, 인터랙션이 필요한 부분은 클라이언트 컴포넌트(CSR)로 철저히 분리하여 성능 손실 없이 다국어 데이터를 하이드레이션(Hydration)했습니다.
  • 터미널 명령어 한 줄(`npm run build:i18n`)로 구글 시트의 번역 데이터가 운영 서버의 JSON 파일로 자동 반영되는 파이프라인을 구축했습니다.

Before

다국어 미지원

After

무중단 다국어 라우팅 및 자동화 구축

Learned
  • Next.js App Router 환경에서 전역 상태 관리(Zustand 등) 없이 미들웨어와 쿠키만으로 서버와 클라이언트 간의 상태를 동기화하는 구조적 패러다임을 깊이 이해했습니다.
  • 2차원 배열 데이터를 재귀(Recursive) 알고리즘을 통해 3차원 JSON 트리로 가공하는 로직을 직접 구현하며 데이터 핸들링 역량을 키웠습니다.
  • 기능 구현을 넘어, 타 직군(기획, 디자인)과의 협업 프로세스를 자동화하여 팀 전체의 개발 생산성(DX)을 끌어올리는 인프라 설계의 중요성을 체감했습니다.
구글 언어별 URL 구조 DOCS
구글 검색엔진 최적화 가이드 문서에서 권장하는 언어별 URL 구조
node 실행 스크립트 예시
npm run build:i18n 명령어로 구글 시트 데이터를 다국어 JSON 변환
번역 자동화 파이프라인 결과
번역 자동화 파이프라인 구축으로 구글 시트의 번역 데이터가 운영 서버의 JSON 파일로 자동 반영되는 모습
다국어 적용 결과 화면
깜빡임 없이 매끄럽게 동작하는 라이브 서비스 다국어 UI