내일배움캠프 최종 프로젝트 - 프로젝트 기획(1주차)

KDG: First things first!·2024년 10월 27일
0

프로젝트

목록 보기
3/4

최종 프로젝트 개막

내일배움캠프 Spring 6기의 최종 프로젝트가 요번 주에 시작되었다.
우리 팀은 팀장인 나를 포함하여 다른 팀보다 1, 2명 많은 6명으로 구성되었다. 팀원 중 한 분이 요번 주 토요일에 결혼하시고 2주 동안 신혼여행을 가셨기 때문에 실질적으로 다른 팀과 인원 차이는 크게 다르지 않기는 하다.



주제 선정

  • 프로젝트 주제: 우리 지금 만나(아 당장 만나)

  • 프로젝트 요약: 프로젝트 한줄 요약 사용자가 쉽고 안전하게 소모임을 생성하고, 활발한 커뮤니티를 형성할 수 있도록 직관적인 사용자 경험과 신뢰 기반의 환경을 제공

같은 동네주민들끼리 특정 목적을 위해 소모임을 만들어 모이고 그 안에서 멤버들끼리 또 일정을 만들어 같이 만나 특정 활동을 공유할 수 있는 당근마켓의 동네생활의 모임 에서 아이디어를 많이 얻었다.



프로젝트 기획

개요

  • 개인주의가 많아진 현대사회에서, 각자의 취미생활을 공유할 수 있는 그룹을 찾기위한 소모임 개최 및 참여형 애플리케이션입니다.
  • 사용자가 다양한 활동(운동, 공부, 식사, 취미 등)을 함께할 사람들과 소모임을 쉽게 구성하고 그 안에서 일정을 함께할 수 있도록 도와주는 웹 기반 플랫폼입니다.

배경

  • 현대 사회에서는 개인의 관심사나 취미를 공유할 수 있는 소모임을 찾는 것이 중요한 요소로 부상하고 있지만, 현실적으로 관심사나 위치가 비슷한 사람들과 함께 모일 수 있는 플랫폼은 제한적입니다.
  • 이 서비스는 다양한 활동을 매개로 사람들을 연결하여, 이들이 손쉽게 모임을 만들고 참여할 수 있는 환경을 제공하는 데 목적을 둡니다.

필수 기능

  • 회원 가입 및 로그인

  • 프로필 설정 : 사용자 관심사, 지역, MBTI, 이미지 등 프로필 정도 설정 및 수정

  • 소모임 생성 : 사용자가 주제를 설정하고 소모임을 직접 생성할 수 있는 기능

  • 소모임 참여 : 사용자가 소모임에 신청 및 참여할 수 있는 기능
    • 소모임 참여 신청 수락, 거절

  • 일정 생성
    • 일정 참여 신청 수락, 거절

  • 강제퇴장

핵심 기능

  • 소모임 검색(인덱싱)
    • 인덱싱 : 검색 시 성능을 향상하기 위해 소모임의 주요 검색 필드(제목, 주제, 지역 등)에 대해 데이터베이스 인덱스를 적용.
    • 동시성 제어 : 여러 사용자가 동시에 검색할 때, 캐시를 사용하여 데이터베이스 접근을 줄여 동시성 문제를 해결

  • 소모임 관리
    • 캐싱 : 자주 접근하는 소모임 정보(멤버 리스트, 게시글 목록 등)는 캐시에 저장하여 빠르게 조회 가능하도록 설정.

  • 소모임 매칭(메시지(이벤트) 브로커, 동시성 제어)
    • 캐싱 : 소모임 매칭 작업에서 추천 소모임 목록을 캐시에 저장하여 매칭 속도를 개선.
    • 인덱싱 : 매칭 알고리즘에서 사용하는 주요 필드(사용자의 관심사, 지역 등)를 인덱싱하여 매칭 결과를 빠르게 제공.
    • 매칭 요청이 다수 발생할 경우 큐 기반 처리를 통해 동시성을 관리하고, 여러 매칭 작업이 동시에 일어나더라도 서버 부하를 줄이며 안정적으로 처리할 수 있음.

워크로드 분산 고려 사항

  1. 캐싱 시스템 도입
    1. 자주 조회되거나 수정이 적은 데이터(소모임 리스트, 인기 소모임, 매칭 결과 등)를 캐시하여, 데이터베이스 부하를 줄이고 빠른 응답을 제공

  2. 데이터베이스 인덱싱
    1. 검색, 매칭, 관리 작업에서 성능을 개선하기 위해 소모임의 title, location 같은 필드에 인덱싱을 적용하여 데이터베이스 조회 성능을 최적화.

  3. 동시성 제어 및 락킹 전략
    1. 여러 사용자가 동시에 소모임 정보나 매칭 데이터를 수정할 경우 충돌을 방지하고, 중요한 수정 작업이 일어날 때는 데이터의 일관성을 보장할 수 있도록 락킹 메커니즘을 적용.

  4. 메세지 큐
    1. RabbitMQ, Kafka 등의 메시지 큐 시스템
    2. 매칭 작업이나 대규모 데이터 처리가 필요한 경우 메시지 큐를 사용해 요청을 비동기적으로 처리하고 서버 부하를 분산하며 락킹 전략으로 동시성 문제를 해결
    3. 여러 사용자가 동시에 매칭 요청을 보낼 때 성능 저하를 방지할 수 있음.

추가했으면 하는 기능

  • 광고(수익 창출)
  • 광고 제거(구독제: 수익 창출)
  • 매칭 시스템(일대일 또는 다대다)(1순위)
  • 날씨에 따라 추천되는 모임(노출도)
  • 클래스(수업을 원하는 유저가 제안서를 업로드하면 튜터가 수업받고 싶은 유저를 선택해 매칭되는 방식)


와이어 프레임 구상



ERD 구상

ERD는 현재 필수 기능과 관련된 테이블만 추가되어 있어서 차후 프로젝트를 개발해나가면서 더 추가될 예정이다.

(크기가 작아서 잘 안 보일시 마우스 왼쪽 클릭 후 '새 탭에서 이미지 보기'로 확대하여 보시기를 권장합니다.)



API 명세서 일부 예시



profile
알고리즘, 자료구조 블로그: https://gyun97.github.io/

0개의 댓글