강의 제작·업로드·스트리밍·학습 관리·결제 전 과정에 GenAI 기반 진단과 피드백을 결합한 차세대 LCMS 플랫폼
Organization · Frontend · Infrastructure
LGCMS는 기존 온라인 학습 환경에서 반복적으로 발생하는 세 가지 문제를 해결하기 위해 개발했습니다.
| Problem | LGCMS Solution | Expected Value |
|---|---|---|
| 학습자가 자신의 수준과 다음 학습 방향을 판단하기 어려움 | AI 레벨 테스트와 개인별 학습 리포트 | 강점·약점과 다음 학습 경로를 정량적으로 확인 |
| 강의 시청 중 생긴 질문을 즉시 해결하기 어려움 | 강의 자료 기반 RAG 튜터 챗봇 | 현재 수강 중인 강의 맥락에 근거한 실시간 질의응답 |
| 강사가 수강생 반응과 강의 품질을 파악하기 어려움 | 강사 대시보드와 AI 개선 리포트 | 수익·수강·완강 지표 및 리뷰·질문 기반 개선 방향 제공 |
단순히 AI 기능만 추가한 것이 아니라, 강의 등록 → 원본 업로드 → HLS 인코딩 → CDN 스트리밍 → 학습 진도 관리 → 결제 → 분석과 피드백까지 이어지는 LCMS 전체 파이프라인을 구현했습니다.
| Metric | Result | Metric | Result |
|---|---|---|---|
| Development period | 2025.07.04 - 2025.09.11 | Team | 8 members |
| Domain services | 13 | Functional requirements | 91 |
| WBS implementation tasks | 263 completed | Main AI modules | 4 |
| Cloud region | AWS ap-northeast-2 |
Project duration | 10 weeks |
| Student | Lecturer | Platform |
|---|---|---|
| AI 기반 역량 진단과 맞춤형 리포트 | 수익·수강·완강 지표 대시보드 | 도메인별 독립 배포가 가능한 MSA |
| 강의 시청 중 실시간 학습 Q&A | 리뷰·질문 기반 AI 개선 피드백 | Kafka 기반 비동기 처리 |
| 진도·메모·퀴즈·Q&A 통합 학습 | 강의·강좌 등록과 콘텐츠 관리 | 관측성, 오토스케일링, GitOps |
| 강의 탐색·장바구니·결제 | 데이터 기반 강의 품질 개선 | S3·CloudFront 기반 콘텐츠 전달 |
README에서 제품의 실제 완성도를 빠르게 확인할 수 있도록 주요 프론트엔드 화면을 사용자 여정 순서로 구성했습니다.
강의 탐색 — 검색, 기술 태그, 강의 카드와 사용자 메뉴를 한 화면에 구성 |
강의 시청 — 차시 목록, 영상 재생, 해상도 전환과 학습 도구를 통합 |
- 사용자가 기술 카테고리를 선택합니다.
- 하 3문제, 중 4문제, 상 3문제로 구성된 10개 서술형 문제를 풉니다.
- 비동기 채점 완료 후 점수, 개념별 이해도, 강점·약점, 종합 피드백과 다음 학습 추천을 확인합니다.
|
강의를 벗어나지 않는 학습 Q&A 강사가 등록한 PDF 자료를 임베딩하고, 현재 강의 ID 범위에서 관련 청크를 검색합니다. 수강생은 영상을 시청하면서 별도 페이지 이동 없이 질문하고, 강의 내용에 근거한 답변을 받을 수 있습니다. 강의 PDF → Kafka → pgvector → RAG → Tutor Response
|
정량 분석 — 수익 분포, 강의 완강률, 수강률 구간별 학생 수와 시계열 지표 |
정성 분석 — 수강평과 질문 데이터를 기반으로 장점·단점·개선 방향 생성 |
강사는 강의 기본 정보와 강좌 구성을 입력하고 영상·PDF 자료를 업로드할 수 있습니다. 업로드된 영상은 비동기 인코딩 파이프라인을 거쳐 HLS 콘텐츠로 제공되며, PDF는 AI Tutor 검색 문서로 사용됩니다.
- Google 로그인, JWT 인증, 역할 기반 사용자 관리
- 강의 검색·상세·등록·수정과 강좌 구성
- 강의 수강 신청, 진도 저장, 메모와 퀴즈
- 학생 질문·강사 답변, 수강평과 별점
- 장바구니, 단건·묶음 결제, 구매 상태 관리
- Kafka 이벤트와 SSE 기반 실시간 알림
- FFmpeg 기반 HLS 다중 비트레이트 인코딩과 CDN 스트리밍
| Module | Input | Processing | Output |
|---|---|---|---|
| AI Level Test | 기술 카테고리와 서술형 답변 | 난이도별 문제 구성, 비동기 LLM 채점, 개념 분석 | 점수, 강점·약점, 종합 피드백, 다음 학습 추천 |
| AI Tutor | 강의 PDF와 수강생 질문 | Kafka 임베딩 이벤트, pgvector 검색, RAG, 대화 메모리 | 강의 내용에 근거한 학습 답변 |
| Guide Bot | 서비스 이용 질문 | FAQ 임베딩, Query Expansion, Re-ranking | 안내 답변, 관련 이미지와 페이지 URL |
| Lecturer Consulting | 강의 지표, 수강평, Q&A | Airflow·Spring Batch 집계, Bedrock 분석 | 대시보드와 강의 개선 리포트 |
프론트엔드는 학생·강사·시스템 기능을 하나의 애플리케이션에서 제공하되, 도메인별 상태와 화면 책임을 분리하는 방향으로 구성했습니다.
| Concern | Implementation | Effect |
|---|---|---|
| UI 개발 | React 19, TypeScript, 공통 컴포넌트 | 타입 안정성과 화면 재사용성 확보 |
| Build environment | Vite | 빠른 개발 서버와 HMR 기반 개발 생산성 향상 |
| Global state | Redux Toolkit, 도메인별 Slice | 학생·강사·시스템 상태를 예측 가능한 단방향 흐름으로 관리 |
| State persistence | Redux Persist, localStorage | 새로고침 이후에도 로그인·학습 관련 상태 유지 |
| Styling | Styled Components, ThemeProvider | 색상·폰트·간격 토큰을 공통화해 UI 일관성 유지 |
| API communication | Axios 기반 API 레이어, Store 참조 구조 | 인증 오류·토큰 갱신 등 공통 처리 확장 가능 |
| Realtime UI | SSE 알림 | 인코딩·AI 채점 등 비동기 작업 완료 상태를 사용자에게 전달 |
| Quality | ESLint | 코드 스타일 통일과 잠재 오류 사전 탐지 |
- 메인·검색·강의 상세·강의 시청
- 강사 강의·강좌 등록과 콘텐츠 관리
- 로그인·회원가입·학생 수강 화면
- AI 레벨 테스트와 결과 리포트
- 수강평·Q&A·장바구니·결제
- 가이드 봇·AI Tutor·SSE 알림 UI
- 강사 대시보드와 AI 강사 리포트
사용자가 답안을 제출하면 HTTP 요청을 장시간 점유하지 않고 즉시 응답한 뒤, 백그라운드에서 채점과 리포트 생성을 수행합니다.
답변 저장
→ 문항별 LLM 채점
→ 핵심 개념 이해도 분석
→ 강점·약점·추천 학습 방향 생성
→ 종합 리포트 저장
→ Kafka 완료 이벤트 발행
→ SSE 사용자 알림
LLM 출력은 그대로 저장하지 않고 점수 범위와 응답 구조를 애플리케이션 레벨에서 검증해 비정상 응답으로 인한 리포트 생성 실패를 방지했습니다.
강의 PDF 업로드
→ S3 / CloudFront 저장
→ Kafka 임베딩 이벤트
→ PDF 파싱·청크 분할
→ Titan Text Embeddings v2
→ PostgreSQL pgvector 저장
→ 강의 ID 기반 유사도 검색
→ Claude 3 Haiku 응답
→ Valkey 대화 히스토리 저장
- 강의 ID를 검색 조건에 포함해 다른 강의의 자료가 검색 결과에 섞이지 않도록 분리했습니다.
- pgvector의 HNSW 인덱스와 Cosine Distance를 사용합니다.
- 사용자·강의별 대화 기록을 Valkey에 보관해 멀티턴 질의응답을 지원합니다.
서비스 FAQ와 안내 데이터 임베딩
→ 사용자 질문 Query Expansion
→ 벡터 유사도 검색
→ Re-ranking
→ 안내 답변 + 관련 이미지 + 이동 URL 반환
일반적인 생성형 답변이 아니라 실제 서비스 이용 흐름을 안내하는 것이 목적이므로, 답변과 함께 관련 화면 이미지와 페이지 URL을 반환하도록 구성했습니다.
flowchart LR
A[Lecturer Upload] --> B[Upload Service]
B --> C[(S3 Original File)]
B --> D[Kafka Encoding Event]
D --> E[Streaming Service]
E --> F[FFmpeg Transcoding]
F --> G[HLS Master Playlist]
F --> H[Multi-bitrate Segments]
G --> I[(S3 Encoded Content)]
H --> I
I --> J[CloudFront CDN]
J --> K[Adaptive Streaming Player]
FFmpeg로 영상을 여러 비트레이트의 HLS .m3u8 플레이리스트와 세그먼트로 변환합니다. 플레이어는 네트워크 상태에 따라 화질을 전환하고, CloudFront는 세그먼트를 캐싱해 원본 서버 부하를 줄입니다.
Airflow Daily DAG
→ Spring Batch 통계 집계
→ 강의별 집계 테이블 저장
→ 대시보드 조회
→ 리뷰·질문 데이터 분석 요청
→ Bedrock 강의 개선 리포트 생성
- Airflow가 매일 자정 통계 집계 Job을 실행합니다.
- Spring Batch가 수익 분포, 완강률, 수강률 구간별 학생 수를 미리 계산합니다.
- Java 21 Virtual Threads와 Batch Writer 최적화로 대량 집계 처리 시간을 단축했습니다.
- 리포트 생성에 약 20~40초가 걸리는 구간에는 Redisson 분산 락을 적용해 동일 요청의 중복 LLM 호출과 토큰 낭비를 방지했습니다.
- Route 53이 서비스 도메인을 관리합니다.
- 정적·미디어 콘텐츠는 S3와 CloudFront를 통해 전달합니다.
- API 트래픽은 ALB와 Istio Ingress Gateway를 거쳐 EKS의 도메인 서비스로 전달됩니다.
- 서비스 데이터는 PostgreSQL·pgvector, Valkey, Kafka에 분산 저장·처리됩니다.
- 생성형 AI와 임베딩은 Amazon Bedrock을 통해 호출합니다.
- 애플리케이션 배포는 Helm과 Argo CD 기반 GitOps로 관리합니다.
- Prometheus·Grafana·Loki·Tempo·OpenTelemetry·Kiali로 메트릭, 로그와 트레이스를 관찰합니다.
- AWS
ap-northeast-2리전에 VPC를 구성했습니다. - Public Subnet에는 외부 진입점과 운영 접근용 리소스를 배치했습니다.
- Private Subnet에는 EKS 워커, PostgreSQL, Valkey, Kafka 등 내부 리소스를 배치했습니다.
- Bastion Server를 통해 내부 자원에 제한적으로 접근합니다.
- Terraform과 Terragrunt로 인프라 구성을 코드화했습니다.
| Challenge | Solution |
|---|---|
| 여러 인스턴스에서 동일 AI 작업을 동시에 실행 | Valkey·Redisson 기반 분산 락으로 Critical Section 제어 |
| 대량 통계 데이터 집계 지연 | Spring Batch, JDBC Batch Writer, Java 21 Virtual Threads, Airflow 적용 |
| 영상 파일의 브라우저·네트워크 환경 대응 | FFmpeg 기반 HLS ABR 인코딩과 S3·CloudFront 배포 |
| 서비스별 인증과 접근 제어 | Istio RequestAuthentication, AuthorizationPolicy, JWT Claim 기반 정책 |
| 마이크로서비스의 통신 흐름 추적 | OpenTelemetry와 Tempo 기반 분산 트레이싱 |
| 트래픽 증가 시 서비스 가용성 유지 | Metrics Server 기반 Horizontal Pod Autoscaler |
| 서비스 변경의 독립적 배포 | Custom Helm Chart와 Argo CD GitOps |
| 장애 분석에 필요한 통합 관측 | Prometheus·Grafana, Promtail·Loki, OpenTelemetry·Tempo, Kiali |
- Gateway / VirtualService: 외부 API 진입과 경로·가중치 기반 트래픽 라우팅
- RequestAuthentication: JWT 검증과 Claim 추출
- AuthorizationPolicy: 역할과 Claim에 따른 접근 제어
- DestinationRule: 서비스 Subset과 로드밸런싱 정책 정의
- Telemetry: Envoy 사이드카의 네트워크 메트릭과 트레이스 수집
운영 도구를 단순 도입 목록으로만 제시하지 않고, 실제 파이프라인과 관측 화면을 함께 남겼습니다.
Airflow · Observability · Argo CD 화면 보기
| Area | Technology |
|---|---|
| Frontend | React 19, TypeScript, Vite, Redux Toolkit, Redux Persist, Styled Components, React Router, Axios, SSE |
| Backend | Java 21, Kotlin, Spring Boot 3.5, Spring Cloud, JPA, QueryDSL, R2DBC, OpenFeign, Spring Batch, Resilience4j |
| AI | Spring AI, Amazon Bedrock, Claude 3 Haiku, Titan Text Embeddings v2, RAG, pgvector |
| Media | FFmpeg, HLS, Adaptive Bitrate Streaming, S3, CloudFront |
| Data & Messaging | PostgreSQL, pgvector, Valkey, Apache Kafka |
| Cloud | EKS, EC2, ALB, Route 53, RDS, ElastiCache, S3, CloudFront, Bedrock, ECR |
| Platform | Docker, Istio, HPA, Terraform, Terragrunt, Helm, Argo CD |
| CI & Quality | GitHub Actions, Jenkins, ESLint, Gradle, JUnit 5, Mockito, JaCoCo, SonarQube |
| Observability | Prometheus, Grafana, Promtail, Loki, OpenTelemetry, Tempo, Kiali |
| Collaboration | GitHub, Jira, Notion, Figma, Slack |
최종 산출물 기준으로 GitHub Actions는 저장소 테스트, Jenkins는 통합·딜리버리, ECR은 컨테이너 이미지 저장, Helm·Argo CD는 배포를 담당합니다. 일부 서비스 저장소에는 GitHub Actions·GHCR 기반 워크플로도 병행되어 있습니다.
Backend and platform repositories
| Service | Responsibility | Repository |
|---|---|---|
| Auth | Google 로그인, JWT 발급·갱신·무효화 | backend-auth |
| Member | 회원 정보, 역할, 관심 카테고리, 강사 승인 | backend-member |
| Core | 공통 카테고리와 FAQ 데이터 | backend-core |
| Lecture | 강의, 수강 신청, Q&A, 수강평 | backend-lecture |
| Lesson | 강좌, 진도, 메모, 퀴즈 | backend-lesson |
| Payment | 장바구니, 결제 준비·승인, 구매 상태 | backend-payment |
| Upload | 원본 콘텐츠 업로드와 저장 이벤트 | backend-upload |
| Streaming | FFmpeg 인코딩과 HLS 콘텐츠 생성 | backend-streaming |
| Notification | Kafka 이벤트, 알림 저장, WebFlux·SSE | backend-notification |
| Guide Bot | FAQ 기반 RAG 서비스 안내 | backend-guide-bot |
| Tutor Bot | 강의 자료 기반 학습 질의응답 | backend-tutorbot |
| Level Test | LLM 자동 채점과 종합 학습 리포트 | backend-level-test |
| Consulting | 강사 대시보드, 배치 집계, AI 피드백 | backend-consulting |
| Resilience Common | Resilience4j 공통 복원력 모듈 | backend-resilience-common |
| Airflow | 통계 배치 파이프라인 스케줄링 | backend-airflow |
| Database | 서비스별 PostgreSQL 초기 스키마 | database-sql |
| Infrastructure | AWS 인프라 프로비저닝 | infra-terraform |
| Helm Charts | 공통 Spring·Nginx 배포 Chart | infra-helm-charts |
| Helm Values | 서비스·환경별 배포 설정 | infra-helm-values |
| Helm Packages | 배포 Chart 패키지 저장소 | infra-helm-packages |
| Phase | Period | Scope |
|---|---|---|
| Planning | 2025.07.04 - 2025.07.12 | 팀 구성, 아이디어 구체화, 협업 도구 설정 |
| Design | 2025.07.12 - 2025.08.05 | UI/UX, 요구사항, ERD, 서비스·인프라 아키텍처 |
| Development | 2025.07.15 - 2025.09.07 | Frontend, Backend, AI, Streaming, Infrastructure |
| Deployment | 2025.07.16 - 2025.09.04 | CI/CD, AWS, GitOps, Logging, Monitoring |
| Finalization | 2025.09.08 - 2025.09.11 | 통합 테스트, 버그 수정, 문서화, 발표와 시연 |
Team 교육저기다. · Mentor 정상덕
| Member | Role | Main Responsibility |
|---|---|---|
| 김형균 | Team Lead · Frontend | 일정·산출물 관리, 공통 컴포넌트와 헤더, 메인·검색, 강사 강의·강좌, 상세·등록·시청, 수강평·Q&A, 알림 SSE, 가이드·튜터 UI |
| 임다희 | Frontend | 로그인·회원가입, 학생 강의, 레벨 테스트·리포트, FAQ 화면 |
| 남윤호 | Full-stack | 강사 대시보드, Consulting 서비스, AI 강사 리포트, Batch 최적화 |
| 심규환 | Backend | 강의·강좌·코어·결제·업로드·스트리밍 서비스 |
| 이재원 | Cloud Admin · Backend | 회원·인증·알림 서비스, AWS 인프라, CI/CD, 서비스 메시와 관측성 |
| 김선호 | Backend · AI | 서비스 가이드 봇, FAQ RAG, Query Expansion·Re-ranking |
| 정수연 | Backend · AI | 튜터 봇, PDF 임베딩, 강의 자료 RAG와 대화 메모리 |
| 조민준 | Backend · AI | 레벨 테스트, 비동기 LLM 채점과 종합 리포트 |
- 요구사항 정의서: 13개 도메인, 91개 기능 요구사항
- WBS: 구현 태스크 263개 완료
- 서비스 아키텍처 및 시퀀스 다이어그램
- AWS 인프라 구성도
- Terraform·Terragrunt IaC
- Custom Helm Chart와 환경별 Values
- 최종 발표 자료와 시연 영상
- GitHub Issues, Pull Requests, Jira 기반 협업 이력
LG CNS AM Inspire Camp 2기 Final Project
Team 교육저기다. · 2025














