프로젝트 목록

팀 프로젝트 4 · 2025.06 · 수강생 사이트 프론트엔드 · 관리자 페이지 일부 · 배포

Edudy

국비지원 교육기관 ERP 플랫폼

개요

국비지원 교육기관 운영을 위한 ERP 플랫폼입니다. 수강생용 강의 사이트와 관리자 대시보드를 분리 구성해 수강 신청·출결·성적·상담·만족도 평가 등 교육 운영 전 과정을 통합 관리합니다.

메인 페이지

기획 배경

교육기관에서 출결·성적·상담 이력을 개별 도구로 관리하는 비효율을 해결하고자 했습니다. 수강생과 관리자 양측의 흐름을 분리해 역할별 UI를 설계했으며, 실제 국비지원 과정 운영에 바로 적용 가능한 수준을 목표로 했습니다.

주요 기능

강의 상세 페이지

관리자 대시보드

서비스 아키텍처

프론트엔드(Vercel)와 백엔드(AWS EC2)를 분리 배포한 구조입니다.

[사용자] ──HTTPS──> Vercel (React SPA · React 18 · Vite · Tailwind)
                    edudy.wonjae.cloud
                          │  API 호출 (CORS 허용)
                          ▼
              AWS EC2 (t3.small · 서울)
              Nginx 리버스 프록시 · HTTPS
              api.edudy.wonjae.cloud
                          │
                          ▼
                 Spring Boot API ──> MySQL

CI/CD — 백엔드: main push → GitHub Actions (bootJar 빌드 → Docker 이미지 → push) → GHCR → EC2 pull·재기동 / 프론트: Vercel 자동 배포

DB 구조

ERD

담당 역할

수강생 사이트

영역내용
레이아웃헤더, 푸터, 전체 라우팅 구조
로그인/회원가입폼 구현, SMS 인증, 토스트 알림
배너 슬라이더, 수강신청 많은 강의 카드
강의 상세강의 소개·과목·수강평 탭, 수강 신청
마이페이지출결 확인, 성적 조회, 설문 제출, 내 정보 수정 (공동)

관리자 사이트

영역내용
수강생관리수강생 목록 조회·상태 관리
과정관리과정 목록 조회, 수강신청 처리 (공동)
회원관리회원 조회·등급 조정 (공동)
성적관리성적 조회·입력 (공동)
상담일지상담 이력 조회·작성
강의평가강의·강사 만족도 조회
사이트관리배너, 과정 노출 우선순위 설정

기타: 기능명세서 작성 (공동), AI 기능 검토 및 방향 전환

개발 일정

주차작업
1주차 (06.09~06.15)기획·설계, ERD, 기능명세서, 개발 환경 세팅
2주차 (06.16~06.22)수강생 사이트 핵심 페이지, 관리자 주요 기능
3주차 (06.23~06.27)잔여 페이지, 배포, 최종 점검

트러블슈팅

공공 API XML 매핑 오류

공공데이터포털 공휴일 API 응답이 XML 형식인데, Java 11부터 JAXB가 JDK에서 제거되면서 XML DTO 매핑이 실패했습니다. build.gradle에 JAXB 의존성 2개(jakarta.xml.bind-api, jaxb-runtime)를 추가해 해결했고, 공휴일 데이터를 DB에 저장해 출결 스케줄러에서 수업일 계산에 활용했습니다.

SPA 라우팅 새로고침 404

React SPA를 Vercel에 배포 후 직접 URL 접근이나 새로고침 시 404가 발생했습니다. Vercel은 기본적으로 정적 파일만 서빙하기 때문에 클라이언트 라우팅 경로를 모릅니다. vercel.json에 모든 경로를 index.html로 rewrite하는 규칙을 추가해 해결했습니다.

CORS 설정

React(Vercel, edudy.wonjae.cloud)에서 Spring Boot API(api.edudy.wonjae.cloud)를 호출할 때 CORS 오류가 발생했습니다. 로컬에서는 동일 출처라 문제없었으나 배포 환경에서는 도메인이 달라 차단됐습니다. Spring Security 설정에서 허용 출처와 메서드를 명시해 해결했습니다.

배운 점

프론트엔드와 백엔드를 서로 다른 환경(Vercel·EC2)에 분리 배포하면서, 로컬에서는 없던 CORS·SPA 새로고침 404·공공 API XML 매핑 같은 문제가 배포 단계에서 처음 드러났습니다. 이를 직접 해결하며 '만드는 것'과 '실제 환경에서 계속 돌아가게 하는 것'은 다른 역량이라는 것을 배웠습니다.