ABOUT
home
Members
home

PURFIE.IO

Contact info@purfie.io

Purfie 프로젝트 마스터 아카이브 (2024.11 ~ 2025.10)

I. 프로젝트 개요 및 목표 설정

항목
내용
프로젝트명
Purfie (학원 관리 시스템)
목표
오프라인 학원 대상 구독형 온라인 플랫폼 개발
핵심 가치
학원 친화적(학원 효율성 증진) 서비스 지향 (학생/학부모 타깃은 후순위)
대상 시장
호주 (퀸즈랜드 브리스번)
실증 목표
2025년 11월 1일 실증 시작 (학원생 300명, 강사 30명 규모 학원 대상)
기술 스택
Back-end: Spring Boot (Java), DB: MySQL, Front-end: React

II. 기간별 개발 과정 및 핵심 성과

A. 초기 구상 및 기반 구축 (2024.11 ~ 2025.01)

기간
서버 (Back-end)
프론트엔드 (Front-end)
2024.11
초기 아키텍처 설계 완료 (Java/Spring Boot, MySQL)7.
React/Vue 중 React 유력 검토8.
2024.12
핵심 DB 스키마 1차 정의 (총 17개 테이블)9. Java 기반 도메인 모델(Entity) 및 Repository 초안 구축10.
프론트 필요 페이지 목록 및 권한별 접근 구조 구상11.
2025.01
JWT 기반 인증/인가 시스템 세팅 완료12. Refresh Token 관리를 위해 Redis 도입 결정13. 핵심 CRUD API (학원, 계정, 학생, 강사 등록) 초안 테스트 완료14.
React 프로젝트 초기 세팅 완료. 권한별 대시보드 레이아웃 초안 및 로그인 UI 구현 시작15.

B. 코어 기능 완성 및 아키텍처 개선 (2025.02 ~ 2025.03)

기간
서버 (Back-end)
프론트엔드 (Front-end)
2025.02
아키텍처 변경: 레이어드 → 도메인 기반 모듈화로 전환하여 유지보수성 확보1616. 스케줄 중복 체크 로직을 공통 유틸리티로 분리1717. **RestControllerAdvice**를 통한 전역 예외 처리(GlobalExceptionHandler) 시스템 구축1818.
권한별 페이지 분할사이드바/레이아웃 구현 완료1919. Admin/Instructor/Student 마이페이지 및 CRUD 기능 UI 구현 착수2020.
2025.03
인증 안정화: JWT 갱신 로직 오류 해결Refresh Token을 쿠키에 저장하는 자동 로그인 플로우 확립21. S3 파일 업로드/다운로드 로직 구현 완료. 호주 썸머타임(타임존) 이슈를 인지하고 시간 처리 로직 개선 시작22.
UI/UX 고도화 진행 (디자인 피드백 반영). **모든 핵심 페이지(출석, 과제, 상담)**의 UI를 구현하여 베타 버전 완성도 극대화23.

C. 최종 안정화 및 인프라 구축 (2025.04 ~ 2025.06)

기간
서버 (Back-end)
프론트엔드 (Front-end)
2025.04
SUPER_ADMIN 권한 및 기능 구현 완료. AWS EC2/RDS/S3 인프라 구축 및 서버 배포 시작24. 국제화: 타임존/DST 이슈를 프론트와 연계하여 완벽히 해결 (FullCalendar 연동)25. 로깅: activity log system 구축 및 application.yml 민감 정보 제거 등 보안 강화26.
FullCalendar 타임존 해결: dayjs 기반의 타임존 오프셋 변환 로직을 적용하여 글로벌 환경에서 캘린더 시간이 밀리는 문제를 해결27. UI/UX 최종 컨펌 및 모든 권한별 페이지 구현 완료28.
2025.05
커뮤니케이션 모듈 구현 (Q&A, 공지, 댓글/대댓글 포함)29. 스케줄 승인 로직 안정화Soft Delete 정책 확립 (일정 기간 후 영구 삭제)30.
FullCalendar 드래그앤드롭 일정 추가 기능 구현. 버튼 통일성, 색감 등 UI/UX 디테일 최종 수정 완료31.
2025.06
로그 시스템 강화: 불필요한 요청 로깅 제외 및 자동화 봇 공격 대응32. 파일 인코딩 오류 (한글 파일명) 수정 완료33. 사업 확장 데이터 확보: 호주 대학 입시 ATAR 데이터 크롤링 및 정리34.
S3 정적 웹사이트 배포를 통한 실증 테스트 시작. 라우팅 구조를 React Router 기반으로 전환하며 유지보수성 향상35.

D. 최종 인증 및 모바일 최적화 (2025.07 ~ 2025.10)

기간
서버 (Back-end)
프론트엔드 (Front-end)
2025.07
Redis RDB 스냅샷 권한 오류 해결36. 파일 업로드 용량 증대 (100MB)37. API 리팩토링: RESTful API 원칙 기반으로 Controller 구조 리팩토링 진행38.
모바일 최적화 개발 착수39. AuthGuard 패턴을 도입하여 전역 userInfo 상태 관리 및 라우팅 안정화40. ATAR 기능을 차세대 핵심 기능으로 준비 시작41.
2025.08
AWS SES 기반 이메일 인증 시스템 구축 완료42. 계정 정규화: IdentityNormalizer를 통해 Login ID/Email 중복 체크 로직을 NFKC 정규화 기준으로 강화43. CourseSchedule에서 불필요한 dayOfWeek 컬럼 삭제44.
모바일 최적화 진행: Admin, Instructor, Student 관리 페이지 모달 및 리스트 스타일링 최적화45.
2025.09
Email Dispatch/Template 시스템 최종 구현 완료4646. 온보딩 플로우 통합: 이메일 인증 기반의 첫 로그인(INIT_LOGIN) 플로우ID/PW 찾기 기능 구현4747. 예외 처리: 모든 비즈니스 로직에 대한 세부 예외 메시지를 표준화4848.
Web-ID/PW 찾기, 온보딩 페이지 구현 완료. 프론트 아키텍처를 라우팅 기반으로 전환 완료4949.
2025.10
회원가입 코드 시스템 최종 도입 (AcademyJoinCode)5050. 이메일 인증 코드(CODE 인증) 방식 추가 및 VerificationToken 보안 강화5151. Parent/Student 관계 분리 및 학부모 메일 발송 기반 마련5252.
모바일 최적화 완료5353. 웹 컴포넌트 구조 정리 (Header/Sidebar/Outlet) 완료5454. 버튼/스타일 통일성react-datepicker 다크모드 적용5555.

III. 아키텍처 및 기술적 주요 결정

1. 인증 및 계정 관리 (Auth & Account)

인증 방식: JWT (Access Token in Body, Refresh Token in HttpOnly/Secure Cookie).
계정 정규화: loginIdemailNFKC 유니코드 정규화(IdentityNormalizer)를 거쳐 저장 및 조회되어 중복 체크의 보안성을 높임.
로그인 ID 정책: loginId전역 유니크로 관리.
이메일 정책: email학원 단위 유니크로 관리.
온보딩: 첫 로그인은 INIT_LOGIN 토큰 기반의 이메일 인증 플로우를 강제하여 사용자 ID 설정 및 비밀번호 변경을 유도.
삭제 정책: Student, Instructor 계정 삭제 시 Soft Delete를 적용하여 일정 기간 동안 데이터 무결성(출석, 상담 기록)을 유지하도록 결정.

2. 스케줄 및 시간 처리 (Schedule & Timezone)

캘린더 구현: FullCalendarDayjs 라이브러리 사용.
타임존 대응: 서버는 모든 시간을 UTC Instant 기준으로 저장하고, 각 일정에 IANA Zone ID를 함께 저장63. 프론트엔드에서 사용자 설정 타임존 기준으로 변환하여 표시하는 로직을 구현.
엔티티 리팩토링: CourseSchedule에서 dayOfWeek 컬럼을 제거하고, scheduleDatestartTimezoneId로부터 파생하여 데이터 정합성을 확보.

3. 데이터 및 인프라 (Data & Infrastructure)

DB: MySQL 사용.
파일 처리: AWS S3를 파일 저장소로 사용하고, 파일 업로드/다운로드 로직은 서버(Spring Boot)에서 처리66. 파일 용량 100MB까지 허용.
이메일 발송: AWS SES를 사용하며, 발송 현황 관리를 위해 EmailDispatchEmailDeliveryLog 테이블을 분리하여 메시지 ID(messageId) 기반으로 추적 가능하도록 설계.
배포 환경: AWS EC2 (서버) + RDS (DB) + S3 (프론트/파일) 프리티어 환경 구축 완료.

4. 에러 및 로깅 (Error & Logging)

예외 처리: @RestControllerAdvice를 통해 **전역 예외 처리(GlobalExceptionHandler)**를 구현하고, 모든 비즈니스 예외를 HTTP 400 또는 409 상태 코드로 표준화하여 프론트엔드에 전달.
로깅: RequestLoggingFilter를 통해 불필요한 리소스 요청 로깅을 제외하고, 요청 IP와 상태 코드를 포함한 액티브 로깅 시스템을 구축하여 보안/운영 모니터링 기반을 마련함.

 IV. 브랜드 아이덴티티 및 디자인 시스템

1. 브랜드 아이덴티티 (Brand Identity)

핵심 메시지: Purfie는 “항상 곁에 있는 학습 파트너”를 지향하며, 학생들이 성장의 과정을 눈으로 확인할 수 있는 경험을 제공하는 것을 목표로 함.
브랜드 스토리:
이름의 어원처럼 강아지(Puppy)처럼 따뜻하고 친밀한 존재감을 전달.
학습 환경 속에서 심리적 안전감꾸준함을 제공하는 “옆자리 친구”의 역할을 수행.
슬로건:
“Learning that Stands Out”
눈에 보이는 성취를 통해 자기 효능감을 강화하고, 작은 성공의 반복이 장기적 성장으로 이어지도록 설계.

2. 비주얼 모티브 (Visual Motif)

성장과 성취:
학생이 얼마나 성장했는지,
무엇을 달성했는지,
어떤 사람이 되었는지
를 확인할 수 있도록 하는 “보이는 성장”의 개념을 중심에 둠.
시각 요소:
책을 펴고 공부하는 Purfie 캐릭터
점점 쌓여가는 블록/책
높이/단계/진척도의 수치화된 표현
목적:
결과물이 즉시 확인되며
학습 여정이 한 눈에 인지되고
학생이 자신의 진전과 노력을 자랑스러워할 수 있도록 디자인.

3. 로고 디자인 (Logo System)

지금의 Purfie를 위해 거쳐간 수많은 Purfie들
디자인 컨셉:
알파벳 P를 기본 형태로 사용.
학생의 실력·성취를 상징하는 책(Book) 모양을 결합하여 Purfie의 얼굴을 형상화.
의미적 결합:
“공부하는 Purfie”라는 캐릭터 스토리를 전달하며
함께 책을 펴고 성장하는 학습적 파트너십을 강조.
버전 확장:
단색, 윤곽선, 아이콘형 등
다양한 확장 버전으로 재활용이 가능하도록 설계.

4. 컬러 시스템 (Color System)

주요 색상 선정 기준:
학생들이 사랑할 수 있는 색
에너지가 있고 밝으며 긍정적인 분위기
노력과 성장을 담담하게 응원해주는 정서
역할 분배:
색 A: 열정, 도전, 밝음
색 B: 안정감, 신뢰, 꾸준함
적용 원칙:
UI/UX 전반에 걸쳐 일관된 시각 언어로 사용
강조/구분/정보 계층 표현에 색의 기능적 역할을 부여
학습 성취 데이터 시각화에도 동일한 팔레트를 사용하여 정체성 유지
202411~202412 (11~12월 핵심: 프로젝트 구상 및 아키텍처 설계)
202501 (1월 핵심: 핵심 도메인 구현 및 인증/인가 시스템 구축)
202502 (2월 핵심: 코어 로직 완성, 아키텍처 개선 및 프론트 개발 착수)
202503 (3월 핵심: 인증/스케줄 기능 안정화, 프론트 UI/UX 완성 및 배포 준비)
202504 (4월 핵심: 글로벌 타임존 문제 해결, SUPER_ADMIN 구현 및 베타 완성도 극대화)
202505 (5월 핵심: 커뮤니케이션 모듈 완성, 최종 디테일 및 배포 전 점검)
202506 (6월 핵심: 배포 중 버그 수정, 서버 로깅 강화 및 사업 데이터 확보)
202507 (7월 핵심: 모바일 최적화 개발, Redis 장애 해결 및 ATAR 기능 준비)
202508 (8월 핵심: 이메일 인증 시스템 도입, 계정 관리 로직 최종 안정화)
202509 (9월 핵심: 이메일 발송 시스템 완성 및 온보딩 플로우 통합)
202510 (10월 핵심: 회원가입 코드 도입, 모바일 최적화 완료 및 최종 배포 전 점검)
PURFIE.IO
YEOURAIN.COM
MAEUMMOA.COM