Skip to content
@ajou-JSL

MOUM:모音

음악인들을 잇는 커뮤니티 플랫폼, ’MOUM:모音’ 밴드 리쿠르팅부터 공연 관리까지 한 번에! MOUM:모音에서 해결하세요:)

🎶 프로젝트 소개

음악인들을 잇는 커뮤니티 플랫폼, 'MOUM:모音'

음악인과 음악 단체를 이어주는 커뮤니티 플랫폼, 밴드 리쿠르팅부터 공연 관리까지 한 번에!

음악을 즐기고 사랑하는 모든 이들을 위한 커뮤니티 기반의 올인원 솔루션 프로젝트 입니다.
다양한 사람들과 함께 소통하며 팀을 구성하여 함께 공연하고, 프로필을 꾸며 각자의 개성과 이력을 뽐내보세요!

🌳 주요 기능

🌲커뮤니티🌲
게시판 이용 및 팀 생성/구인
실시간 인기 컨텐츠 조회
사용자 필터링에 따른 컨텐츠 조회
유저 간 실시간 채팅 소통
불건전 컨텐츠 및 악성유저 신고 가능
 
🌲프로필🌲
개인/팀 프로필 관리
활동 내역에 따른 프로필 티어(랭킹) 상승
랭킹 별 조회
 

🌲Moum🌲 팀 생성, 연습시설 찾기 등 공연 라이프사이클 관리 각 단계 별 프로세스 추적 및 관리 사용자 필터링에 따른 공연장, 연습장 조회 및 모음 등록   🌲관리자🌲 제휴업체의 공연장/연습장 시설 정보 등록 가능 유저들의 이용 내역 관리 가능 신고 내용에 대하여 관리자의 피드백 가능


🔨 스택 및 도구

🍀 Android & Web Admin


🍀 WAS & DB


🍀 Server & Cloud Tech


🍀 Tools


🍀 Third Party



🏛️ 프로젝트 구조

⚙️ 멀티모듈 아키텍처

멀티모듈 그림
채팅 모듈과 애플리케이션 모듈을 분리하여 각 기능의 독립성을 보장하였습니다.

각 모듈을 상호간의 간섭 및 충돌 없이 성능 최적화 및 유지 보수에 집중 가능하게 하였습니다.


⚙️ API Gateway

아키텍처

Nginx의 Reverse Proxy Pass를 동적으로 구성하여 사용자와 관리자의 요청을 처리하는 API Gateway 역할을 수행합니다.
각 모듈은 컨테이너화 되어있으며, 각 컨테이너끼리 통신할 수 있도록
Docker Compose를 통해 두 모듈이 동일한 네트워크에 속하게 구성하였습니다.


⚙️ No-Downtime 배포환경

무중단배포 그림

Github Action을 활용한 무중단 배포 환경 구축입니다.
Green/Blue 방식의 무중단 배포 시스템에서 Reverse Proxy로 설정한 Nginx가 적절히 라우팅하여
트래픽이 새로운 서버로 전환되고 사용자에게 서비스를 중단 없이 지속적으로 제공할 수 있도록 구성하였습니다.

위 그림에서 새로운 버전이 배포되면 개발자의 push 이벤트로 인해 Github Action Script가 ssh 서버의 배포 스크립트 실행,
Nginx에 의해 :8081 포트로 트래픽이 변경됩니다.

⭐ 핵심 기술

⚙️ Spring WebFlux & SSE 기반 채팅 시스템

멀티모듈 그림

        🟢비동기 및 반응형 처리🟢
        WebFlux의 Non-Blocking 특성을 이용해 SSE 방식으로 
        실시간 채팅 메시지 응답을 Streaming하여 빠르게 안정적인 데이터 전송 구현 
         
        🟢실시간 데이터 전송(SSE)🟢
        SSE는 서버가 클라이언트로 실시간 데이터를 푸시하는 방식으로,
        클라이언트와 서버는 지속적으로 연결된 상태를 유지하며, 
        새로운 메시지가 발생할 때만 전송하므로 데이터 전송 오버헤드와 서버 부하를 최소화
         
        🟢고성능 및 확장성🟢
        Spring WebFlux의 리액티브 모델을 기반으로 많은 사용자들이 
        동시에 채팅에 참여할 수 있도록 확장 가능성 확보 및 고성능 메시징 서비스 제공
        

⚙️ 쿼리 최적화로 커뮤니티 사용성 고려


        🟢파일 데이터 관리🟢
        파일 데이터는 ncp Object Storage PresignedURL 방식으로 저장하여
        서버 및 스토리지에 부담이 되는 파일 데이터를 효과적으로 관리
         
        🟢테이블 튜닝🟢
        용량이 큰 컨텐츠는 Vertical Partitioning 하여 선택적 쿼리하는 전략 사용
        Mysql Partition 구문 이용하여 text 길이 기준 Horizontal Partitioning 적용
         
        🟢검색 쿼리 최적화🟢
        MySQL Full-Text Search 와 ngram parser를 이용한 효율적인 검색어 쿼리 작성
         
        🟢페이징 쿼리 최적화🟢
        QueryDSL, PageableExecutionUtil클래스 조합으로 
        fetch 쿼리, count 쿼리 분리를 통한 페이지네이션 성능 최적화
         
        🟢논클러스터드 인덱스 활용🟢
        최신순 정렬 쿼리 최적화를 위해 created_at 컬럼에 역방향 인덱스를 적용하여 
        sorting 연산에 의한 쿼리 속도 저하 개선
        

👀 작품 확인


첨부파일 하단 링크 접속하면 아주대학교 소프트콘에 등록된 상세 내용을 확인할 수 있습니다

SW캡스톤디자인_04_JSL_판넬_page-0001
아주대학교 소프트콘 작품보기 링크

🧑‍💻 팀원 정보

Team Name Position E-Mail Stack
Leader 소성하 Frontend Developer sososongha3@ajou.ac.kr Android UI/UX, Chat Service, Main Service
Member 이승우 Backend Developer swo98@ajou.ac.kr Backend Module, DevOps
Member 장재혁 Backend Developer cjaehyuk4zed@gmail.com Chat Module, Admin Service
Member 진선재 Frontend Developer jsj714246@gmail.com Android UI/UX, Community Service

Pinned Loading

  1. Frontend Frontend Public

    음악인들을 잇는 커뮤니티 플랫폼, ’MOUM:모音’의 안드로이드 프로젝트입니다.

    Java 2

  2. Backend-Multi-Module Backend-Multi-Module Public

    Backend Multi-Module with both Spring MVC and Spring WebFlux

    Java 1

Repositories

Showing 4 of 4 repositories

Top languages

Loading…

Most used topics

Loading…