Skip to content

Repository files navigation

TreamSSC (Tream Study Student Care) 프로젝트

image

📌 프로젝트 개요

  • 프로젝트 기간: 2024.07.17 ~ 2024.08.20
  • 프로젝트 설명:
    • Slack, Notion, Excel 등을 통한 복잡한 자료 제공 경로를 단순화하고, 공지 및 소통을 간편하게 관리하는 웹 애플리케이션 개발
    • 실시간 채팅 및 공지 시스템을 통해 사용자 간 원활한 소통을 지원하는 서비스입니다.

시스템 아키텍처

image

👥 팀 역할

역할이름담당 기능
리더함승완회원관련 기능, 프론트엔드 세팅
부리더박다미시큐리티 설정, 팀 프로젝트 관리, 채팅, 배포
팀원박강현게시글, 공지사항, 배포, 프론트엔드
팀원김창민트랙, 카카오 로그인
팀원김현민기수, 회원가입 승인, 이메일 인증

🚀 주요 기여

  • WebSocket 기반 실시간 채팅 기능 구현
  • JWT 인증 및 사용자 관리 시스템 개발
  • RabbitMQ 비동기 메시징 처리 구현
  • Docker 및 AWS EC2를 활용한 배포 경험
  • Jira를 활용한 프로젝트 플래닝 및 GitHub 이슈 관리

백엔드


데이터베이스

테스트

모니터링

문서

인프라

CI/CD

🛠 트러블슈팅

1️⃣ Docker 컨테이너 네트워크 문제 해결

  • 문제점: Spring 서버와 RabbitMQ 간 통신 오류 발생
  • 원인 분석:
    • 초기 설정에서 각 컨테이너가 개별 네트워크에서 실행됨
    • localhost를 사용하여 RabbitMQ에 접근하려 했으나 컨테이너 간 네트워크 격리로 인해 실패
  • 해결책:
    • Docker Compose를 사용하여 Spring 서버와 RabbitMQ를 동일 네트워크에 배치
    • rabbitmq 컨테이너의 고정 네트워크 이름으로 통신

2️⃣ 채팅 성능 최적화

  • 문제점 1: 높은 동시 접속 시 성능 저하
    • 원인 분석: WebSocket 요청이 단일 스레드에서 처리되어 병목 발생
    • 해결책: 멀티스레드 적용하여 동시 요청 처리 최적화
  • 문제점 2: 과도한 스레드 생성으로 인한 리소스 낭비
    • 원인 분석: 스레드 개수가 무제한으로 증가하여 서버 리소스 소모
    • 해결책: 스레드 풀(Thread Pool) 적용 해서 최적화

📚 관련 문서: WebSocket 성능 비교 및 최적화

3️⃣ 메시지 브로커 안정성 개선

  • 문제점: 메시지 소비 실패 시 DLQ(Dead Letter Queue)로 메시지가 이동, 지속적인 누적 발생
  • 원인 분석:
    • Consumer가 메시지 처리를 실패하면 메시지가 DLQ로 전송되면서 백로그가 쌓임
    • 특정 Consumer가 지속적으로 실패할 경우 시스템의 메시지 처리 속도 저하
  • 해결책:
    • 서킷 브레이커 적용 으로 일시적인 장애 시 점진적 복구 시도
    • Slack 알림 시스템 연동하여 개발자가 실시간으로 장애를 인지하고 조치 가능

📚 관련 문서: RabbitMQ DLQ 및 서킷 브레이커 전략

4️⃣ 배포 환경에서의 WebSocket 통신 문제 해결

  • 문제점: WebSocket 연결이 배포 환경에서 실패
  • 원인 분석:
    • 로컬 개발 환경에서는 ws://localhost:8080을 사용하여 정상 작동
    • 배포 환경에서는 도메인을 사용하여 접근해야 하지만 설정이 미흡하여 WebSocket 연결 실패
  • 해결책:
    • Nginx 리버스 프록시 설정을 통해 WebSocket 요청을 올바르게 라우팅
    • nginx.conf에서 WebSocket 업그레이드 헤더 설정 추가
    • 클라이언트에서 wss://{도메인}/chat으로 접속하도록 수정

5️⃣ JWT 인증 및 보안 강화

  • 문제점: JWT 토큰이 만료되면 사용자 세션이 종료됨
  • 원인 분석:
    • JWT는 기본적으로 세션을 유지하지 않으므로, 토큰이 만료되면 재로그인이 필요
    • 사용자 경험을 고려할 때, 자동 갱신 기능이 필요함
  • 해결책:
    • Refresh Token 적용하여 액세스 토큰 만료 시 자동 재발급
    • Redis를 활용한 세션 캐싱으로 사용자 인증 요청 속도 개선
    • Spring Security와 JWT 필터 체인 적용하여 인증 및 인가 로직 개선

📌 ERD

teamssc

🎥 시연 영상: 유튜브 링크

About

💻Team Student Stuey Care system

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages