Skip to content

Leets-Official/MoodMate-BE

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MoodMate - 무드, 나이, 학과를 반영한 대학생 맞춤 1대1 매칭 서비스

MoodMate



📱 MoodMate | 사이트 바로가기 (서비스 종료)
📌 Official Account | MoodMate Instagram


🗓️ 8개월간의 기획, 개발, 출시 및 유지보수 (2023.10 ~ 2024.06)

💏 '가천대학교 대학생'을 대상으로 시즌 1에서 약 400명, 시즌 2에서 약 350명의 학생 사용자 유치


MoodMate(무드메이트)는 '가천대학교 대학생' 을 대상으로 매일 밤 10시에 사용자의 '데이트 무드', '나이', '학과'를 고려하여 남녀를 1대1로 매칭해주는 서비스입니다.

매칭된 남녀는 채팅방에서 1:1 대화를 나눌 수 있으며, 22시간 동안 유지되어 다음 날 오후 8시에 채팅방이 비활성화 되어 더 이상 대화를 나눌 수 없게 됩니다.

상대방과 더 이야기를 나누고 싶다면, 채팅방이 비활성화되기 전에 연락처나 SNS를 서로 주고 받으세요!

📄 목차


✍🏻 프로젝트 기획 개요

  • 기존 데이팅 서비스는 외모 중심의 획일적인 매칭에 집중하여, 진정한 소울메이트를 찾는 사용자들의 갈증을 해소하지 못했습니다.
  • 저희는 단순한 외모가 아닌, 깊이 있는 교감과 공통의 가치관을 통해 오래도록 함께할 수 있는 인연을 원하는 사용자들의 목소리에 집중했습니다.
  • 이러한 사용자들의 요구를 반영하여, '무드'를 매개로 서로의 내적인 면을 먼저 이해하고 대화를 이어나갈 수 있는 매칭 서비스 'MoodMate'를 기획하게 되었습니다.



1️⃣ 시즌 1

✨ 주요 기능 소개

로그인 페이지

  • URL로 서비스 도메인을 입력하게 되면 로그인 페이지로 이동합니다.
  • 소셜 로그인을 통해 로그인 과정이 진행됩니다.



회원 정보 입력

  • 사용자는 소셜 로그인 후 회원 정보를 입력하게 됩니다.
  • 입력 정보에는 닉네임, 성별, 나이, 학과, 키워드가 포함되며 키워드를 제외한 나머지 정보를 이용하여 매칭이 진행됩니다.



상대 무디 조건 설정

  • 사용자는 회원 정보 입력을 완료한 후, 상대방에 대한 조건을 설정하게 됩니다.
  • 설정 조건에는 나이 구간, 같은 학과 선호 여부, 선호하는 무드가 포함되며, 이 정보들은 매칭 프로세스에서 중요한 기준으로 활용됩니다.



메인페이지

매칭대기중 | 매칭 후 채팅중 | 비활성화중 메인

  • 회원 정보 입력과, 상대 무디 조건 설정이 완료되면 메인페이지로 이동합니다.
  • 메인 페이지에서는 매일 밤 10시에 시작되는 매칭 이벤트를 강조하는 카운트다운 타이머가 표시됩니다. 카운트다운이 종료되면 자동으로 매칭 프로세스가 시작되며, 매칭된 사용자는 분홍색 배경의 페이지로 전환되어 채팅방으로 들어가면 매칭된 사람과 대화를 할 수 있습니다.
  • 하단의 탭 바를 통해 사용자는 다음과 같은 기능에 쉽게 접근할 수 있습니다
    • 채팅방 아이콘: 매칭된 상대와의 대화를 시작하거나 진행 중인 대화를 계속할 수 있으며, 매칭이 되지 않은 사람은 채팅방에 입장이 불가능합니다.
    • 마이페이지 아이콘: 사용자의 프로필을 관리하고, 설정을 조정할 수 있는 마이 페이지로 이동합니다.
    • 비활성화 아이콘: 사용자가 원할 경우 매칭 이벤트 참여를 일시적으로 비활성화할 수 있으며, 재활성화하기 전까지 매칭에서 제외됩니다.



채팅

채팅 미리보기 | 채팅중 | 상대 무디 정보 조회

  • 매칭이 되게 되어 채팅 페이지에 입장하게 되면, 상대로 부터 온 메시지를 미리보기로 확인할 수 있습니다.
  • 미리보기 바를 누르면 채팅방에 입장할 수 있으며, 매칭된 상대와 1:1로 대화를 나눌 수 있습니다.
  • 상대의 아이콘을 눌러서 상대 무디의 정보도 확인할 수 있습니다.



마이페이지

  • 마이 페이지에서는 앞서 설정했던 본인의 정보를 확인할 수 있습니다.

2️⃣ 시즌 2

🧐 시즌 1 유저 리서치 결과

리서치 홍보

  • 무드메이트 시즌1을 마무리 한 후, 웹사이트를 직접 사용한 학우분들의 의견을 듣고 사용자의 니즈를 파악하고 기능을 기획하기 위해 유저 리서치를 위한 설문조사를 실시하였습니다.
  • 교내 커뮤니티 에브리타임에 글을 게시하여 총 7명의 학우분들의 답변을 받을 수 있었습니다.
  • 구글폼 링크

리서치 분석

  • 리서치에 참여한 인원은 총 7명으로 남자 5명, 여자 2명이었습니다.
  • 비록 적은 인원이었지만, 지인들의 피드백과 교내 커뮤니티의 반응을 함께 참고하여 분석을 진행하였습니다.

  • '추가로 필요한 서비스'에 대한 의견 남성 응답자의 경우 다양한 항목이 제시되었으며, 특히 ‘채팅 알림’과 ‘상대방 조건 추가’가 높은 빈도로 언급되었습니다. 여성 응답자는 ‘채팅 알림’이 높은 빈도로 언급되었습니다.

  • '서비스 개선이 필요하다고 느낀 부분'에 대해서 총 다섯 분께서 의견을 주셨고,'채팅 알림 도입'을 가장 많이 제안해 주셨습니다.

시즌 2 방향성 설계

채팅 알림 기능 우선 도입

  • ‘채팅 알림 도입’이 남성 및 여성 응답자 모두에게서 높은 빈도로 언급되었습니다.
  • 이는 사용자들이 실시간으로 소통할 수 있는 환경을 필요로 하고 있음을 시사한다고 생각했습니다.
  • 따라서 FCM을 활용한 채팅 알림 기능을 우선적으로 도입하여 사용자 경험을 개선하는 방향으로 계획을 수립했습니다.

상대방 조건 추가

  • 남성 응답자들 사이에서 ‘상대방 조건 추가(키, 관심사, 취미 등)’에 대한 요구가 다수 제기되었습니다.
  • 하지만 키를 상대방 조건으로 등록하게 되면 서비스 취지인 ' 내적인 면을 먼저 이해하고 대화를 이어나갈 수 있는 매칭 서비스'에 적합하지 않다고 생각했습니다.
  • 따라서 나를 나타낼 수 있는 키워드 개수를 확대하고, 기존 카테고리를 취미 관련 키워드로 전환하여 사용자 경험을 개선하는 방향으로 계획을 수립했습니다.

서비스 성능 및 안정성 개선

  • 로딩 속도, 오류 개선과 같은 기능적 문제가 지적되었습니다.
  • 기존에 개발진도 이러한 문제를 인지하고 있었기 때문에, 안정성과 성능 최적화에 주력하여 사용자 경험을 개선하는 방향으로 계획을 수립했습니다.

지속적인 사용자 피드백 수집 및 반영

  • 적은 인원이었지만 다양한 의견이 제공되었으며, 이는 서비스 개선 방향성에 중요한 자료가 되었습니다.
  • 보다 빠르게, 보다 많은 유저의 의견을 받기 위해 '에브리타임' 커뮤니티에서 유저와 실시간으로 소통하며 지속적으로 피드백을 받아 서비스를 개선하는 방향으로 계획을 수립했습니다.

🌊 주요 변경 사항

PWA 도입

온보딩 페이지

  • 앱 알림 서비스와 UX, 채팅 기능을 개선하기 위해 프로그레시브 웹 어플리케이션(PWA)을 도입하였습니다.
  • 유저 서비스 만족도 조사 결과, 채팅 알림 기능에 대한 유저의 요구가 확인되었고, 이를 Firebase의 FCM을 활용한 웹 푸쉬 기능을 적용하여 사용자 경험을 개선하였습니다.
  • Android, iOS, Desktop 앱으로 다운로드할 수 있습니다.

구글 로그인 → 카카오 로그인

구글 로그인(시즌1) | 카카오 로그인(시즌2)

  • 시즌 1에서는 구글 로그인 기능을 도입하여 서비스를 운영하였습니다.
  • 그러나, 일부 유저가 여러 개의 구글 계정을 보유한 경우, 하나의 유저가 여러 계정으로 가입하는 문제를 완전히 방지할 수 없다는 한계가 있었습니다.
  • 때문에, 시즌 2에서는 카카오 로그인으로 변경하여 중복 가입 문제를 막을 수 있었습니다.

회원 탈퇴 및 닉네임 수정 API 도입

회원 탈퇴 및 닉네임 수정 기능 공지

회원 탈퇴

  • 시즌 1에서는 회원 탈퇴 기능 없이 배포했으며, 관련 피드백이 없었기 때문에 시즌 2에서도 회원 탈퇴 기능을 포함하지 않고 배포했습니다.
  • 그러나 시즌 2에서는 회원 탈퇴 기능을 문의하는 유저가 많아졌습니다.
  • 이에 따라 회원 탈퇴 기능의 필요성을 인지하고, 신속하게 탈퇴 회원 API를 제작하여 배포했습니다.

닉네임 수정

  • 시즌 1에서도 실수로 본인의 이름으로 가입하여 닉네임 수정을 원하는 유저가 많았습니다.
  • 그러나 매칭 로직을 변경해야 했기 때문에, 짧은 서비스 기간 내에 이를 수정하고 닉네임 수정 API를 제작하는 데 어려움이 있었습니다.
  • 이에 따라 시즌 2에서는 매칭 로직을 변경하고, 중복 체크 기능을 포함한 닉네임 수정 API를 제작하여 배포했습니다

유령 회원 방지

  • 시즌 1에서는 매칭 비활성화 버튼을 누르지 않은 채 서비스를 이용하지 않는 유령 회원들이 매칭에 참여하게 되어, 대화가 원활하게 이어지지 않는 문제가 있었습니다.
  • 이를 해결하기 위해 스프링 스케줄러(cron)를 활용하여, 매칭 시점부터 다음 날 채팅방 비활성화 시간까지 채팅을 입력하지 않는 유령 회원을 자동으로 매칭에서 제외하도록 했습니다.

무드 초점 전환(데이트 무드 -> 연애 무드)

데이트 무드(시즌1) | 연애 무드(시즌2)

무드 변경 공지

무드 초점 전환

  • 시즌 1에서는 “어떤 무드의 데이트를 하고 싶은지”에 초점을 맞춰 4개의 데이트 무드로 카테고리를 나누어 진행했습니다.
  • 시즌 1 회고에서, 데이트 무드로 나누는 것이 데이트의 일회성 활동에 중점을 두는 것 같다는 의견이 제기되었습니다.
  • 이에 따라 내부 회의에서 시즌 2에서는 “어떤 연애를 하고 싶은지“로 초점을 전환하고, 연애 스타일에 맞춰 카테고리를 재구성하여 사용자가 더 깊이 있는 관계 형성을 목표로 할 수 있도록 개선하기로 결정하였고, 시즌 2에 이를 반영하여 배포하였습니다.

무드 변경(뜨거운 -> 잔잔한)

  • 연애 카테고리(뜨거운, 편안한, 설레는, 재밌는)를 나누어 배포했을 때, “뜨거운” 무드에 대한 유저의 선호도가 매우 낮다는 것을 확인했습니다.
  • 이에 따라 효율적인 서비스 운영을 위해 카테고리 조정이 필요하다고 판단하였고, 내부 회의를 통해 “뜨거운” 무드를 “잔잔한” 무드로 변경했습니다.
  • 그 결과, 잔잔한 무드를 선택하는 사용자가 점차 늘어나면서 사용자들이 고르게 분산되었고, 서비스 효율성이 향상되었습니다.

키워드 개수 확대 및 취미 관련 카테고리로 변경

키워드(시즌1) | 키워드(시즌2)

키워드 추가 공지

  • 유저 서비스 만족도 조사 결과, 상대방 조건 추가(키, 관심사, 취미 등)에 대한 유저의 요구가 확인되었으며, 이를 반영하여 기존 카테고리를 취미 관련 키워드로 전환하고, 키워드 개수를 확대하여 사용자 경험을 개선하였습니다
  • 취미 카테고리로 변경함으로써 상대방의 취미를 이전보다 더 자세히 알 수 있었다는 긍정적인 피드백을 받았습니다.
  • 또한, 서비스 도중 유저로부터 받은 추천 키워드(“워커홀릭”, “집순돌이”, “춤”, “애주가”)를 추가하여 사용자들이 자신을 표현할 수 있는 폭을 더욱 넓혔습니다.

매칭 알고리즘 고도화

✍🏻 매칭 알고리즘 고도화 Wiki 보러가기

채팅 고도화

✍🏻 채팅 고도화 Wiki 보러가기

인프라 최적화

✍🏻 인프라 최적화 Wiki 보러가기

📊 서비스 배포 결과

🎤 홍보 과정

1. 교내 커뮤니티 사이트 '에브리타임'에 홍보게시물 게시

시즌 1

시즌 2

2. 공식 인스타그램 계정에 홍보글 게시

시즌 1

시즌 2

3. 교내 홍보 포스터 부착

시즌 1

시즌 2

🙋‍ 유저 수

시즌 1

  • 배포기간 (2023.12.18 - 2023.12.26 총 9일) 운영 DB 기준 회원가입 수 총 396명을 기록하였습니다.

시즌 2

  • 배포기간 (2024.05.17 - 2023.06.01 총 16일) 운영 DB 기준 회원가입 수 총 342명을 기록하였습니다.
  • 첫날 가입한 9명은 정식 출시 전에 QA를 위해 가입한 팀원들입니다.

💬 매칭을 통해 생성된 채팅방 수

시즌 1

  • 매칭 서비스 기간 (2023.12.19 - 2023.12.25, 총 7일) 동안 운영 DB 기준으로 하루 평균 약 87개의 채팅방이 생성되었으며, 이는 하루 평균 약 174명의 남녀가 매칭되었다는 의미입니다.
  • 시간이 지남에 따라 매칭된 남녀 수가 꾸준히 증가하면서 더 많은 채팅방이 생성되었습니다. 특히 2023년 12월 25일에는 가장 많은 110개의 채팅방이 생성되었으며, 이는 총 220명의 남녀가 매칭된 것을 의미합니다.

시즌 2

  • 매칭 서비스 기간 (2024.05.18 - 2024.05.31, 총 14일) 동안 운영 DB 기준으로 하루 평균 약 59개의 채팅방이 생성되었으며, 이는 하루 평균 약 118명의 남녀가 매칭되었다는 의미입니다.
  • 유령 회원을 비활성화함으로써 실제로 서비스를 사용하는 사용자들 간의 매칭이 이루어져 매칭의 질이 향상되었고, 실제 대화가 이루어질 가능성이 높힐 수 있었습니다.
  • 또한, 유령 회원을 제외했음에도 불구하고 매칭된 채팅방 수가 꾸준히 증가하는 것은 유효 사용자 기반이 지속적으로 확대되고 있음을 시사하며, 이는 서비스 개선 노력의 성공과 사용자 경험이 긍정적임을 의미합니다.

🧑🏻‍💻 BE 팀원 소개

이동훈 이서빈 인지원 장민호
BE Developer BE Developer BE Developer BE Developer


🚀 핵심 기능

매칭 시스템

유저가 설정한 데이트 무드, 나이 선호도, 같은 학과 선호 여부를 고려

  • 기존 Gale-Shapley 알고리즘을 서비스에 맞게 커스텀하여, N명의 남성과 M명의 여성(또는 그 반대)의 세 가지 선호도(무드, 나이, 같은 학과 여부)를 기반으로 최적의 매칭을 제공하도록 개발하였습니다.
  • 매칭 활성화 시 하루에 한 번 자동으로 매칭이 이루어지며, 매칭이 비활성화된 경우, 유저가 다시 활성화할 때까지 매칭이 진행되지 않도록 구현했습니다.
  • 시즌 1에서는 시스템이 user_id를 테이블에 저장된 순서대로 가져와 이전에 매칭된 사용자가 다시 매칭되는 문제가 있었습니다. 이를 해결하기 위해 매칭 시스템의 무작위성을 높이고, 이미 매칭된 사람과 다시 만날 확률을 최소화하는 작업을 진행했습니다.
  • 시즌 2에서는 시즌 1에서 보수하지 못했던, 매칭 과정에서 모든 사용자가 참여할 수 있도록 보장하고, 매칭되지 않는 문제를 해결하며, 예외 처리를 통해 시스템 안정성을 강화하는 등 핵심적인 기술 개선 작업을 진행했습니다. 또한, 매칭 알고리즘 작동 중 회원 탈퇴를 방지하여 프로그램의 신뢰성을 높였습니다.

1:1 실시간 채팅

웹 소켓과 Stomp 프로토콜을 이용한 1:1 채팅방 구현

  • 실시간 채팅에 적합하며 양방향 통신을 지원하는 Socket통신 방식을 WebSocket 프로토콜을 사용하여 개발하였습니다.
  • 효율적인 메세지전송을 위해 서브프로토콜로 Stomp를 사용하여 메시지의 유형, 형식, 내용을 정의하여 규격을 갖춘 메시지를 전송할 수 있게 구현했습니다.
  • 구독 정보를 redis 서버에 ChannelTopic으로 저장해 같은 Topic을 구독하고 있는 사용자에게 메세지를 송수신하도록 구현했습니다.
  • 시즌 2에서는 채팅 보관 DB를 RDBMS 에서 NoSQL인 MongoDB로 이전하여 데이터 처리 성능 최적화를 진행했습니다.

⚙️ 기술 스택

Framework

ORM

Authorization

Security

Database

Cloud

CI/CD

Monitoring

ElasticSearch Logstash Kibana

Other

Jira

🔨 시스템 아키텍처

👥 Contributors