← 포트폴리오 목록

매스뱅크 문제은행 콘텐츠 관리 시스템

수학 문제를 과목/대/중/소 4단계로 분류해 대량으로 축적·재사용하는 문제은행 콘텐츠 관리 시스템의 핵심 MVP를 구현합니다.

분류 트리 Closure Table 설계PostgreSQL Closure Table 구조로 4단계 분류를 저장해 조상·자손 조회를 단일 쿼리로 처리하는 구조를 설계합니다
수식·도형 통합 저작 파이프라인 구현MathLive LaTeX 입력과 JSXGraph 좌표 데이터를 하나의 문항 스키마로 통합해 저장·렌더링하는 구조를 구현합니다
콘텐츠-표시형식 분리 스키마 설계문항 콘텐츠와 표시 형식을 별도 테이블로 분리해 형식 일괄 변경이 콘텐츠 수정 없이 반영되는 구조를 구축합니다
서비스 타입Web
업종교육 플랫폼
기술 스택
React 18TypeScriptTailwind CSSMathLiveJSXGraphNode.jsExpressPostgreSQLPrisma
주요 기능
  • 4단계 분류 트리 & 문항 CRUD
  • 수식·도형 작도 에디터
  • 표시형식 분리 설정 & 일괄 반영
  • 통합 검색·필터 & 이미지 재사용
Overview

프로젝트 개요

범위: 개발, 디자인, 기획

수학 문제를 과목/대/중/소 4단계로 분류해 대량으로 축적·재사용하는 문제은행 콘텐츠 관리 시스템의 핵심 MVP를 구현합니다. 문항 CRUD, 수식·도형 작도 에디터, 콘텐츠와 표시형식을 분리한 일괄 반영 구조, 통합 검색·이미지 재사용을 React와 Node.js 기반으로 설계·구현합니다.

작업 범위

  • 4단계 분류 트리 & 문항 CRUD: 관리자가 과목/대분류/중분류/소분류 트리에서 원하는 위치를 선택해 문항을 입력·수정·삭제하고, 문항마다 복수 태그와 속성을 설정합니다
  • 수식·도형 작도 에디터: 관리자가 분수·루트·지수·적분 등 기호 버튼을 눌러 수식을 입력하고, 좌표평면·함수 그래프·기하 도형을 직접 그려 문항에 삽입합니다
  • 표시형식 분리 설정 & 일괄 반영: 관리자가 문항 내용은 그대로 두고 글꼴·크기·줄간격·배치 등 표시 형식만 별도 화면에서 변경하면 대상 분류의 모든 문항에 한 번에 반영합니다
  • 통합 검색·필터 & 이미지 재사용: 관리자가 분류·태그·문항 본문 키워드로 통합 검색하고 다중 필터를 조합하며, 이미지 라이브러리에서 기존 이미지를 재사용합니다

주요 업무

  • 4단계 분류 트리 & 문항 CRUD 화면: 재귀형 트리 컴포넌트 + PostgreSQL Closure Table 기반 4단계 분류 저장, 변경 이력 append-only 로깅
  • 수식·도형 작도 에디터 화면: MathLive 라이브러리 기반 수식 버튼 입력기로 LaTeX을 생성해 문항에 저장, JSXGraph 기반 canvas/SVG 작도 도구로 좌표평면·도형을 구성해 좌표 데이터로 저장
  • 표시형식 분리 설정 & 일괄 반영 화면: 문항 콘텐츠/표시형식 테이블 분리 스키마, 표시형식 프리셋 CRUD, 트랜잭션 기반 일괄 업데이트
  • 통합 검색·필터 & 이미지 재사용 화면: PostgreSQL pg_trgm 유사 검색 + 분류/태그 다중 필터 조합, Debounced 검색 + 무한 스크롤, 이미지 참조 카운트 재사용
매스뱅크 문제은행 콘텐츠 관리 시스템
요구사항 정의

프로젝트 핵심 과제

프로젝트 진행 시 해결한 핵심 기술 과제입니다.

MathLive 기반 수식 버튼 입력과 LaTeX 저장 형식 간 변환 로직을 안정적으로 설계할 필요가 있으며

버튼 입력값과 렌더링 결과의 동기화 검증으로 대응합니다

JSXGraph 작도 결과(좌표·도형 데이터)를 문항 렌더링 파이프라인과 일관되게 연동해야 하며

좌표 데이터를 표준 JSON 스키마로 통일해 대응합니다

표시 형식 일괄 변경 시 대량 문항에 대한 트랜잭션 원자성과 부분 실패 방지가 필요하며

DB 트랜잭션과 배치 단위 재시도 로직으로 대응합니다

4단계 분류 트리의 깊은 이동·재배치 시 하위 문항 참조 무결성을 유지해야 하며

Closure Table 갱신을 단일 트랜잭션으로 묶어 대응합니다

구현 내용

핵심 기능 상세

핵심 기능 1

4단계 분류 트리 & 문항 CRUD

관리자가 과목/대분류/중분류/소분류 트리에서 원하는 위치를 선택해 문항을 입력·수정·삭제하고, 문항마다 복수 태그와 속성을 설정합니다.

  • 재귀형 트리 컴포넌트로 과목/대/중/소 4단계 분류를 구현하며 노드 이동 시 React Query 캐시를 무효화합니다
  • PostgreSQL Closure Table 구조로 분류 트리를 저장해 조상·자손 조회를 단일 쿼리로 처리하는 스키마를 설계합니다
  • 문항 변경 이력을 별도 테이블에 append-only로 기록해 수정 전/후 diff를 조회할 수 있는 구조를 구현합니다

Closure Table 기반 분류 트리와 append-only 변경 이력 테이블을 결합해, 깊은 분류 이동과 문항 수정 추적을 동시에 지원하는 콘텐츠 스키마를 구현합니다.

4단계 분류 트리 & 문항 CRUD
4단계 분류 트리 & 문항 CRUD 실제 화면
핵심 기능 2

수식·도형 작도 에디터

관리자가 분수·루트·지수·적분 등 기호 버튼을 눌러 수식을 입력하고, 좌표평면·함수 그래프·기하 도형을 직접 그려 문항에 삽입합니다.

  • MathLive 라이브러리를 통합해 분수/루트/지수/적분 기호 버튼 클릭으로 LaTeX 수식을 입력하고 즉시 렌더링합니다
  • JSXGraph 기반 좌표평면·함수 그래프 작도 도구를 통합해 드래그로 점·직선·도형을 생성하고 JSON 좌표로 저장합니다
  • 작성된 수식·도형은 미리보기 화면에서 학생 노출 형태 그대로 즉시 확인할 수 있도록 렌더링 파이프라인을 연결합니다

오픈소스 수식·작도 라이브러리(MathLive, JSXGraph)를 통합해 별도 편집 소프트웨어 없이 브라우저 안에서 문항의 수식·도형을 직접 저작하는 구조를 구현합니다.

수식·도형 작도 에디터
수식·도형 작도 에디터 실제 화면
핵심 기능 3

표시형식 분리 설정 & 일괄 반영

관리자가 문항 내용은 그대로 두고 글꼴·크기·줄간격·배치 등 표시 형식만 별도 화면에서 변경하면 대상 분류의 모든 문항에 한 번에 반영합니다.

  • 문항 콘텐츠 테이블과 표시 형식(폰트/크기/줄간격/배치) 테이블을 분리 설계해 형식 변경이 콘텐츠 수정 없이 반영되는 구조를 구축합니다
  • 표시 형식 프리셋을 저장·적용하는 CRUD와 일괄 반영 트랜잭션을 구현해 대량 문항에 원자적으로 적용합니다
  • 미리보기 화면과 실시간 연동해 형식 변경 결과를 저장 전에 확인할 수 있는 프리뷰 파이프라인을 구현합니다

콘텐츠·표시형식 분리 스키마와 트랜잭션 기반 일괄 반영을 결합해, 개발사 의존 없이 관리자가 직접 표시 형식을 전면 교체할 수 있는 구조를 구현합니다.

표시형식 분리 설정 & 일괄 반영
표시형식 분리 설정 & 일괄 반영 실제 화면
핵심 기능 4

통합 검색·필터 & 이미지 재사용

관리자가 분류·태그·문항 본문 키워드로 통합 검색하고 다중 필터를 조합하며, 이미지 라이브러리에서 기존 이미지를 재사용합니다.

  • PostgreSQL pg_trgm 확장 기반 유사 검색과 분류/태그 다중 필터를 조합하는 통합 검색 쿼리 빌더를 구현합니다
  • Debounced 검색 입력과 무한 스크롤로 대량 문항 목록을 탐색하는 리스트 UI를 구현합니다
  • 이미지 업로드 시 중복 검사를 거쳐 이미지 라이브러리에 등록하고, 여러 문항에서의 참조 카운트를 관리하며 재사용합니다

pg_trgm 유사 검색과 다중 필터 조합, 이미지 참조 카운트 관리를 결합해 대량 콘텐츠 안에서도 원하는 문항과 자산을 빠르게 재사용하는 구조를 구현합니다.

통합 검색·필터 & 이미지 재사용
통합 검색·필터 & 이미지 재사용 실제 화면
구현 과정

프로젝트 진행 단계

STEP 1

데이터 구조 설계 및 분류 트리 스키마 정의 · 2026.09

문항·분류·태그·표시형식 분리 테이블 설계, Closure Table 기반 4단계 분류 구조 정의

STEP 2

문항 CRUD 및 분류 관리 API 개발 · 2026.09

Express 기반 문항/분류/태그 CRUD API 구현, 변경 이력 로깅 미들웨어 적용

STEP 3

수식·도형 에디터 통합 · 2026.09

MathLive 수식 입력기와 JSXGraph 작도 도구를 문항 입력 화면에 통합

STEP 4

표시형식 분리 & 검색 UI 개발 · 2026.09

표시형식 설정 화면, 통합 검색·필터, 이미지 재사용 라이브러리 UI 구현

STEP 5

미리보기 및 통합 테스트 · 2026.09

학생 노출 미리보기 렌더링 검증, 전체 기능 통합 테스트 수행

프로젝트 성과

주요 성과

분류 트리 Closure Table 설계PostgreSQL Closure Table 구조로 4단계 분류를 저장해 조상·자손 조회를 단일 쿼리로 처리하는 구조를 설계합니다
수식·도형 통합 저작 파이프라인 구현MathLive LaTeX 입력과 JSXGraph 좌표 데이터를 하나의 문항 스키마로 통합해 저장·렌더링하는 구조를 구현합니다
콘텐츠-표시형식 분리 스키마 설계문항 콘텐츠와 표시 형식을 별도 테이블로 분리해 형식 일괄 변경이 콘텐츠 수정 없이 반영되는 구조를 구축합니다
이미지 참조 카운트 재사용 체계 구축이미지 라이브러리에 참조 카운트 컬럼을 두어 여러 문항이 동일 이미지를 중복 업로드 없이 재사용하는 구조를 설계합니다
Highlights

기술적 주안점

  • Closure Table 기반 분류 트리와 append-only 변경 이력 테이블을 결합해, 깊은 분류 이동과 문항 수정 추적을 동시에 지원하는 콘텐츠 스키마를 구현합니다
  • 오픈소스 수식·작도 라이브러리(MathLive, JSXGraph)를 통합해 별도 편집 소프트웨어 없이 브라우저 안에서 문항의 수식·도형을 직접 저작하는 구조를 구현합니다
  • 콘텐츠·표시형식 분리 스키마와 트랜잭션 기반 일괄 반영을 결합해, 개발사 의존 없이 관리자가 직접 표시 형식을 전면 교체할 수 있는 구조를 구현합니다

유사한 프로젝트를 기획하고 계신가요?

FIRSTPIP이 개발 범위와 로드맵을 함께 정리해드립니다

무료 상담 시작하기