Skip to content

anewjean/Polaryx

 
 

Repository files navigation

🎓 Polaryx

🌟 프로젝트 소개

Polaryx는 교육기관을 위한 멀티테넌트 학습관리시스템(Learning Management System)입니다. Slack과 유사한 직관적인 인터페이스를 제공하며, 교육기관별 독립적인 데이터 관리와 확장 가능한 아키텍처를 통해 효율적인 온라인 교육 환경을 구축합니다.

🎯 특징

  • 멀티테넌트 아키텍처: 교육기관별 비즈니스 로직, 데이터 분리
  • 역할 기반 접근 제어(RBAC): 개인/그룹 단위의 세분화된 권한 관리
  • 확장 가능한 시스템 설계: DDD 기반 레이어드 아키텍처 적용
  • 실시간 협업: Slack 스타일의 직관적인 사용자 경험
  • 자동화된 배포: CI/CD 파이프라인을 통한 안정적인 서비스 운영

🚀 주요 기능

📚 1. 워크스페이스 & 탭 관리

  • 워크스페이스: 교육기관별 독립적인 학습 공간
  • : 카테고리 (Anouncements / Courses / Channels / DirectMessage)별 구분 단위
  • 서브탭: 탭 내 세부 분류 (추후 도입 예정)
  • 실시간 채팅: WebSocket 기반 실시간 메시지 전송/수신

💬 2. 메시징 & 커뮤니케이션

  • 리치 텍스트 에디터: TipTap 기반 다양한 형식 지원 (굵게, 기울임, 링크 등)
  • 파일 업로드: 이미지, 문서 첨부 기능 (AWS S3 연동)
  • 이모지 반응: 체크, 박수, 좋아요, 기도, 반짝 이모지로 빠른 피드백
  • 메시지 편집/삭제: 실시간 메시지 수정 및 삭제 기능
  • 무한 스크롤: 페이지네이션 기반 메시지 히스토리 로딩

🔐 3. 권한 관리 시스템

  • 4단계 권한 체계:
    • Admin: 시스템 전반에 대한 관리 및 설정
    • Instructor: 공지, 학습자료 관리 및 협업 활동
    • Student: 학습자료 열람, 과제 제출 및 협업 활동
    • Guest: 미등록 사용자에 대한 제한적 접근
  • 그룹 관리: 그룹별 권한 설정
  • 세분화된 접근 제어: 페이지/기능별 권한 설정

📊 4. 관리 도구

  • 사용자 관리: 회원 등록, 역할 할당, 프로필 관리
  • 그룹 관리: 교육생 등록, 탭 초대 등 그룹 단위 관리 가능
  • 역할 관리: 커스텀 역할 생성 및 권한 설정
  • Excel 일괄 업로드: 사용자 정보 대량 등록 기능

📝 5. 콘텐츠 관리

  • Canvas (Notion 연동): 외부 Notion 페이지 임베딩
  • 링크 저장소: 중요 링크 수집 및 공유
  • 검색 기능: 메시지, 사용자, 콘텐츠 통합 검색
  • 저장된 메시지: 중요 메시지 북마크 기능 (추후 도입 예정)

🔔 6. 알림 시스템

  • 실시간 알림: SSE(Server-Sent Events) 기반 워크스페이스별/탭별 신규 메세지 즉시 알림
  • 푸시 알림: PWA 기반 브라우저 푸시 알림

📈 7. 리포트 & 분석

  • 활동 분석: 사용자별 참여도 및 메시지 통계
  • 워크스페이스 현황: 전체 활동 현황 대시보드

🔄 8. 실시간 기능

  • WebSocket 연결: 실시간 메시지 송수신
  • 자동 재연결: 연결 끊김 시 자동 재연결
  • 출석 상태: 출석 시 컬러 화면으로 활성화 (추후 도입 예정)
  • 온라인 상태: 사용자 접속 상태 표시 (추후 도입 예정)

🏗️ 기술 스택

Frontend

  • TypeScript - 타입 안정성 보장
  • Next.js - Node.js 백엔드 없이 FastAPI 직접 연동, App Router 기반 파일 시스템 라우팅으로 개발 생산성 향상
  • Tailwind CSS - 일관된 디자인 시스템과 빠른 UI 개발
  • Zustand - 워크스페이스, 탭 상태와 실시간 메시지 상태에 대한 효율적 관리

Backend

  • Python - 빠른 프로토타이핑에 최적화
  • FastAPI - WebSocket 실시간 통신 및 비동기 처리 지원
  • Redis - Pub/Sub 기반 메시지 큐, 멀티 서버 환경에서 실시간 메시지 동기화 및 세션 관리

Database

  • MySQL - ACID 트랜잭션 보장으로 멀티테넌트 환경에서 데이터 정합성 확보, JOIN 기반 복잡한 관계형 데이터 처리에 최적화

Infrastructure & DevOps

  • Docker & Docker Compose - 멀티 서비스 컨테이너화를 통한 로컬 개발환경과 프로덕션 환경 일관성 보장
  • AWS
    • EC2 - ECS 대신 직접 서버를 관리하며 인프라 전반에 대한 학습
    • ECR - 도커 이미지 버전 관리 및 저장소
    • ALB - HTTP/HTTPS 트래픽 처리에 최적화된 L7 로드밸런서
    • ASG - 스텝 스케일링 정책 기반 리소스 관리
    • S3 - 정적 파일 저장소
  • GitHub Actions - 브랜치 전략 기반 자동화된 CI/CD 파이프라인

📁 프로젝트 구조

├── BE/                    # 백엔드 (FastAPI)
│   ├── app/
│   │   ├── core/          # 핵심 설정 및 유틸리티
│   │   ├── domain/        # 도메인 모델 (DDD)
│   │   ├── repository/    # 데이터 접근 계층
│   │   ├── service/       # 비즈니스 로직 계층
│   │   ├── router/        # API 라우터 (인터페이스 계층)
│   │   └── schema/        # API 스키마 정의
│   └── sql/               # 데이터베이스 스키마
├── FE/                    # 프론트엔드 (Next.js)
│   ├── app/               # App Router
│   ├── components/        # 재사용 컴포넌트
│   ├── hooks/             # 커스텀 훅
│   ├── store/             # 상태 관리
│   └── apis/              # API 클라이언트
└── .github/workflows/     # CI/CD 파이프라인

📚 기술 문서

🏗️ 1. 시스템 아키텍처

Polaryx 시스템 아키텍쳐

📑 2. API 명세서 링크

🔄 3. 시퀀스 다이어그램 (BE/docs/sequence/)

🧪 4. WebSocket 성능 테스트 결과 (BE/docs/test/)

📊 4-1. 테스트 환경 및 도구

  • 테스트 도구: K6
  • 프로토콜: WebSocket (실시간 메시징)
  • 서버 구성: Redis Pub/Sub 기반 멀티 서버 아키텍처

🎯 4-2. 테스트 시나리오

  • 1️⃣ Smoke 테스트

    • 동시 사용자: 20 VUS
    • 총 세션 수: 39개
    • 연결 성공률: 100% (39/39)
    • 평균 연결 지연시간: 64ms
    • 메시지 처리: 756개 송신, 10,419개 수신
    • 검증 목적: 기본적인 WebSocket 연결 및 메시지 송수신 안정성
    • 테스트 결과
  • 2️⃣ Load 테스트

    • 동시 사용자: 400 VUS
    • 총 세션 수: 15,598개
    • 연결 성공률: 99.9% (15,587/15,598)
    • 평균 연결 지연시간: 1,083ms
    • 검증 목적: 일반적인 사용자 부하를 가정하여 빈번한 연결/해제 상황에서의 시스템 안정성
    • 테스트 결과
  • 3️⃣ Soak 테스트

    • 동시 사용자: 1,200 VUS
    • 총 세션 수: 9,636개
    • 테스트 시간: 842초 (약 14분)
    • 연결 성공률: 100% (9,636/9,636)
    • 메시지 처리: 278,118개 송신, 5,435,263개 수신
    • 검증 목적: 고부하 상황에서의 장시간 안정성 검증
    • 테스트 결과

📈 4-3. 성능 지표 요약

유형 동시 사용자
(VUS)
연결
성공률
평균
지연시간
p(95)
지연시간
메시지 처리량
Smoke 20 100% 64ms 187ms 송신: 756
수신: 10,419
Load 400 99.9% 61ms 89ms 송신: 15,695
수신: -
Soak 1,200 100% 3,020ms 9,790ms 송신: 278,118
수신: 5,435,263

👤 역할 및 기여사항

🎯 핵심 역할: 백엔드 & 데브옵스 엔지니어

1. 🏛️ DDD 기반 레이어드 아키텍처 패키지 구조 정립

  • Domain-Driven Design 원칙을 적용한 모듈화된 백엔드 구조 설계
  • Router, Service, Domain, Repository 계층 분리로 관심사 분리 및 유지보수성 향상
  • 팀 공통 개발 방식 표준화를 위한 코드 템플릿 및 컨벤션 구축

2. 🏗️ 인프라 아키텍처 및 CI/CD 파이프라인 구축

  • Docker 컨테이너화를 통한 환경 일관성 보장
  • 로드 밸런싱 및 오토 스케일링 고려한 인프라 설계
  • GitHub Actions를 활용한 빌드/배포 자동화

3. 🏢 멀티테넌트 아키텍처 설계

  • 워크스페이스별 데이터 및 비즈니스로직 분리 구현
  • 교육기관 증가에 따른 수평적 확장 가능한 구조 설계

4. 🔐 권한 관리 시스템 설계

  • RBAC(Role-Based Access Control) 모델 기반 개인 및 그룹별 세분화된 권한 체계 설계
  • 페이지 단위 접근 제어 시스템 구축
  • 동적 권한 할당

5. 🤝 프론트엔드 기술 지원

  • 백엔드 API와 프론트엔드 연동 이슈 해결

About

📖 실시간 채팅 기반 LMS 서비스

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • TypeScript 68.7%
  • Python 28.7%
  • CSS 1.2%
  • JavaScript 0.9%
  • SCSS 0.4%
  • Dockerfile 0.1%