Skip to content
tnemn edited this page Jun 11, 2025 · 1 revision

'한모(한세에서 모여요)' 프로젝트 발표 자료


Slide 1: 표지

  • 프로젝트명: 한모 : 한세에서 모여요
  • 팀원:
    • [cite_start]Frontend: 유상진, 이경환
    • [cite_start]Backend: 김예람, 김태남, 박다혜, 박지훈
  • 발표일: 2025년 O월 O일

Slide 2: 목차 (Agenda)

  1. 프로젝트 소개
  2. 서비스 주요 기능 및 흐름
  3. 적용 기술 및 시스템 아키텍처
  4. 핵심 기능 개발 과정 (매칭, 채팅)
  5. 주요 도전 과제 및 해결 방안
  6. 프로젝트 성과 및 향후 계획
  7. Q&A

Slide 3: 프로젝트 소개

  • 선택 배경
    • [cite_start]학기 초와 달리 시간이 지나며 학생 간의 교류가 줄어드는 문제점을 해결하고자 했습니다.
    • [cite_start]특히, 대학 축제 기간 동안 함께 즐길 친구를 만들어 축제 참여를 활성화하는 것을 목표로 삼았습니다.
  • 프로젝트 목표
    • [cite_start]1:1 동성 및 2:2 이성 매칭 서비스를 통해 교내에서 새로운 인연을 찾을 수 있도록 돕습니다.
    • [cite_start]궁극적으로 학생들 간의 교류를 활성화하여 더 즐거운 캠퍼스 생활을 만드는 것을 지향합니다.

Slide 4: 서비스 주요 기능 및 흐름

  • 사용자 이용 흐름
    1. [cite_start]시작 및 가입: 첫 화면에서 회원가입을 선택하고 [cite: 10][cite_start], SMS를 통해 본인 인증을 진행합니다.
    2. [cite_start]정보 입력: MBTI, 성별, 학과, 인스타그램 ID 등 매칭을 위한 기본 정보를 입력합니다.
    3. [cite_start]랜덤 닉네임 생성: 입력한 정보를 바탕으로 재미있는 랜덤 닉네임이 생성됩니다[cite: 13]. [cite_start](1회 변경 가능 )
    4. [cite_start]매칭 신청: 메인 페이지에서 원하는 매칭(1:1 또는 2:2)을 신청합니다.
    5. [cite_start]매칭 완료 및 확인: 매칭이 완료되면 팀원들의 닉네임과 인스타그램 ID를 확인합니다.
    6. [cite_start]커뮤니티: 게시판에서 과팅 후기나 자유로운 의견을 나눌 수 있습니다.
    7. [cite_start]채팅: 매칭된 팀원들과 24시간 동안 대화할 수 있는 채팅방이 자동으로 생성됩니다.

Slide 5: 시스템 아키텍처 및 적용 기술

  • 시스템 구성도

    • [cite_start]사용자 요청은 **Nginx(리버스 프록시)**를 통해 HTTPS(SSL)로 처리됩니다.
    • [cite_start]Docker 컨테이너 환경에서 애플리케이션이 실행되며 [cite: 3, 69][cite_start], Jenkins를 통해 CI/CD 자동 배포를 구축했습니다.
    • [cite_start]백엔드 서버는 Spring Framework로 구현되었으며 [cite: 3, 7][cite_start], 데이터는 **AWS RDS(MySQL)**에 [cite: 3][cite_start], 매칭 대기열과 세션 관리는 Redis에 저장됩니다.
  • 주요 기술 스택

    • [cite_start]Frontend: React [cite: 3, 7][cite_start], Next.js [cite: 3, 7][cite_start], TypeScript [cite: 3, 7][cite_start], Styled-components [cite: 3, 7][cite_start], Recoil
    • [cite_start]Backend: Java [cite: 3, 7][cite_start], Spring Framework [cite: 3, 7][cite_start], MySQL [cite: 3, 7][cite_start], Redis [cite: 23, 29][cite_start], QueryDSL
    • [cite_start]DevOps/Infra: AWS (RDS, S3) [cite: 3, 7][cite_start], Docker [cite: 3, 7][cite_start], Jenkins [cite: 3, 7][cite_start], Nginx
    • [cite_start]Monitoring: Grafana, Prometheus를 이용해 서버 상태를 모니터링했습니다.

Slide 6: 핵심 기능 개발 과정 ① - 매칭 시스템

  • 1차 개발 (랜덤 매칭)

    • [cite_start]사용자가 매칭을 신청하면 Redis 대기열에 PENDING 상태로 등록됩니다.
    • [cite_start]조건(성별, 매칭 타입)을 만족하는 유저가 모이면 매칭 그룹을 생성하고 MATCHED 상태로 변경했습니다.
  • 2차 개발 (조건 매칭 - MBTI, 학번)

    • [cite_start]MBTI 선호 매칭: 사용자가 선호하는 MBTI를 입력하면, 상호 간의 선호 MBTI가 일치하는 유저들을 우선적으로 필터링하여 매칭 그룹을 구성합니다.
    • [cite_start]학번 선호 매칭: 사용자가 선호하는 학번(예: 20학번)을 선택하면, 해당 학번의 ±1 범위 내에 있는 유저들을 필터링하는 로직을 추가했습니다.
    • [cite_start]이러한 조건 필터링은 Redis에서 1차 필터링 후, 서비스 로직에서 2차로 처리하여 DB 부하를 최소화했습니다.
  • 매칭 쿨다운 및 예외 처리

    • [cite_start]정상 매칭 시 24시간의 쿨다운을 적용했으며 [cite: 98][cite_start], 그룹이 파괴될 경우 남은 인원의 쿨다운은 즉시 해제하여 재매칭이 가능하도록 개선했습니다.

Slide 7: 핵심 기능 개발 과정 ② - 실시간 채팅

  • [cite_start]기능 목표: 매칭된 사용자들이 24시간 동안 소통하며 연락처를 교환하도록 유도하는 것.
  • 구현 흐름:
    1. [cite_start]채팅방 자동 생성: 매칭 성공 시, MatchEvent가 발행되어 채팅방을 즉시 생성하고 Redis에 24시간 TTL로 저장합니다.
    2. [cite_start]연결 및 인증: 클라이언트는 WebSocket(STOMP)으로 서버에 접속하며, Handshake 과정에서 JWT 토큰으로 참가 권한을 확인합니다.
    3. [cite_start]메시지 동기화: 서버 확장성을 고려하여 Redis Pub/Sub 모델을 통해 여러 서버 인스턴스 간 메시지를 동기화하고 모든 구독자에게 브로드캐스트합니다.
    4. [cite_start]자동 만료 처리: Redis의 TTL이 만료되면 RoomExpiredListener가 종료 알림을 보내고 [cite: 151][cite_start], 자정 크론으로 매칭 데이터를 최종 초기화합니다.

Slide 8: 주요 도전 과제 및 해결 방안

  • Backend: Redis 타입 불일치 에러

    • [cite_start]문제: RedisTemplate의 타입이 Object로 설정되어 UserEntity를 저장할 때 Bean 등록 에러가 발생했습니다.
    • [cite_start]해결: UserEntity에 맞는 타입을 명시한 RedisTemplate<String, UserEntity>를 별도로 생성하여 문제를 해결했습니다.
  • Backend: 자기 자신과 매칭되는 버그

    • [cite_start]문제: 매칭 대기열 필터링 시, 본인을 제외하지 않아 자기 자신과 매칭되는 경우가 발생했습니다.
    • [cite_start]해결: 매칭 후보 리스트를 생성하는 단계에서 자기 자신을 명시적으로 제외하는 로직을 추가하여 해결했습니다.
  • Frontend: 코드 중복 및 재사용성 문제

    • [cite_start]문제: 초기 개발 단계에서 여러 페이지에 중복되는 스타일과 컴포넌트 코드가 많았습니다.
    • [cite_start]해결: 공통 스타일과 에러 메시지 등을 별도의 컴포넌트로 분리하는 리팩토링을 진행하여 [cite: 38][cite_start], 코드 가독성과 재사용성을 높이고 전체 코드 양을 약 20% 줄였습니다.

Slide 9: 프로젝트 성과 및 향후 계획

  • 프로젝트 성과 (축제 기간 배포)

    • [cite_start]총 가입자 수: 약 200명의 학생이 서비스에 가입했습니다.
    • [cite_start]총 매칭 수: 총 65팀의 매칭이 성공적으로 이루어졌습니다.
  • 향후 개발 계획

    • [cite_start]기능 고도화: 사용자 신고 및 관리자 페이지 기능 강화 [cite: 84, 85, 126][cite_start], OCR을 이용한 학생증 본인 인증 도입 검토.
    • [cite_start]사용자 경험 개선: 매칭 후 만남 장소 추천 기능 추가 [cite: 86][cite_start], 커뮤니티 게시판 기능 세분화 (예: 밥모, 겜모).
    • [cite_start]UI/UX 개선: 디자이너와 협업하여 랜딩, 매칭 결과 페이지 등의 디자인을 지속적으로 개선할 예정입니다.

Slide 10: Q&A

  • 질의응답
  • 감사합니다.