개요
수강생·강사·관리자 3개 역할로 구성된 온라인 강의 판매 플랫폼입니다. 강의 검색부터 장바구니·결제, 수강까지 전 과정을 구현했으며, Spring Boot + MyBatis + Thymeleaf 스택으로 MVC 구조를 갖추고 Docker + GitHub Actions CI/CD로 AWS EC2에 배포·운영 중입니다.

주요 기능
| 역할 | 기능 |
|---|---|
| 수강생 | 강의 검색·카테고리 필터, 장바구니, 결제, 수강 페이지, 리뷰 |
| 강사 | 강의 등록(이미지·첨부자료 업로드), 강사 프로필 관리 |
| 관리자 | 회원·강의·결제 내역 조회 및 관리, 공지사항 등록 |
| 공통 | 회원가입/로그인, 이메일 인증 비밀번호 재설정, 커뮤니티 게시판 |

서비스 아키텍처
Spring Boot MVC 모놀리식 구조로, AWS EC2 한 대에서 Nginx 리버스 프록시 뒤에 운영됩니다.
[사용자] ──HTTPS──> AWS EC2 (t3.small · 서울)
Nginx 리버스 프록시 · HTTPS
│
▼
Spring Boot (Thymeleaf MVC) ──> MySQL
│
업로드 파일 → Docker named volume ×6 (영속화)
CI/CD — main 브랜치 push → GitHub Actions (bootJar 빌드 → JRE 베이스 이미지에 JAR 복사 → push) → GHCR(ghcr.io/leewj12/koslearn) → EC2 pull·재기동
DB 구조

담당 역할
팀 프로젝트 당시
- 메인 페이지 Thymeleaf 프론트엔드 구현 (강의 카드 레이아웃, 카테고리)
- 관리자 페이지 구현 — 회원·강의·결제 내역 조회 및 관리 (프론트엔드 + 백엔드)
프로젝트 이후 단독 개선
- CSS 전면 리디자인 — 분산된 스타일을 common.css 디자인 시스템으로 통합, 7,003줄 → 2,763줄로 경량화
- 반응형 적용 — 전체 페이지 모바일 대응
- 버그 수정 29건 — 결제 흐름, 파일 업로드, 페이징 등 주요 기능 수정
- Docker + CI/CD — Dockerfile(JAR 복사 방식), 볼륨 6개(업로드 파일 영속), GitHub Actions → GHCR → EC2 자동 배포
개발 일정
| 기간 | 작업 |
|---|---|
| 11/18~11/21 | 요구사항 분석, 기획, DB 설계 |
| 11/22~11/28 | 기능 구현 (수강생·강사·관리자) |
| 11/29~12/01 | 통합 테스트, 버그 수정, 발표 준비 |
트러블슈팅
CSS 경량화 — 디자인 시스템 도입 팀원마다 CSS를 각자 작성하다 보니 중복·충돌이 누적되어 7,003줄에 달했습니다. 전체를 common.css 기준으로 재설계해 변수·컴포넌트 클래스로 통합하고 2,763줄로 줄이면서 일관된 디자인을 확보했습니다.
Docker 파일 영속성 컨테이너 재시작 시 업로드 파일이 사라지는 문제가 있었습니다. 강의 이미지·첨부파일·프로필 이미지 등 6개 경로를 named volume으로 분리해 해결했습니다.
배운 점
팀 프로젝트가 끝난 뒤에도 혼자 CSS 정리·버그 29건 수정·CI/CD 구축까지 끌고 가며, '발표용으로 동작하는 코드'와 '실제로 배포되어 운영되는 서비스'는 다르다는 것을 체감했습니다. 특히 Spring Security 기반 인증·권한과 Docker 배포를 직접 다루면서, 만드는 것만큼 안정적으로 운영하는 것이 중요하다는 점을 배웠습니다.