유저간 매칭 서비스
•
저희 서비스의 목적이자 가장 핵심적인 서비스 기능인 매칭 기능입니다.
로그인에 성공하면 자동으로 매칭 페이지로 넘어옵니다.
다른 페이지에서도 네비게이션 바의 ‘매칭상대찾기’ 아이콘을 클릭하면 매칭 페이지로 이동할 수 있습니다.
매칭 페이지에서는 내가 설정한 매칭 선호도에 따라 DB에서 필터링을 적용하여 10명씩 가져옵니다.
매칭 상대의 프로필 사진이 여러장이라면, 좌우 화살표 버튼으로(⇦, ⇨) 사진을 넘길 수 있습니다.
이름(닉네임), 성별, 나이, 나와의 거리와 같은 간략한 정보가 사진 아래에 뜨며 매칭상대 상세 조회 버튼(⇩)을 클릭 시 매칭 상대의 상세 프로필 페이지로 이동합니다.
싫어요/좋아요 처리
위 예시에서 좋아요/싫어요 할 때 보여지는 상대: 1 → 2 → 3 → 7 → 10 → 12 → 15 → 16 → 93 → 96
매칭 페이지에서 1또는 0을 누르면 매칭 상대에 대해 각각 좋아요/싫어요 api를 호출합니다.
좋아요 시에는 하트가 하나 차감되고, 싫어요 시에는 하트가 차감되지 않습니다.
해당 정보는 하트테이블에 반영되고 보유한 하트를 전부 사용하면 위 사진과 같이 알람이 나옵니다.
좋아요 시에는 하트가 하나 차감되고, 싫어요 시에는 하트가 차감되지 않습니다.
남은 하트 개수는 사이트에서 명시적으로 확인할 수 없도록 했습니다.
이는 남은 하트 개수를 모르면 하트를 아끼지 않고 소비하게 되고, 추후 도입할 골드회원의 혜택 중 하나인 ‘하트 무제한’을 위해 결제를 유도하기 위한 목적입니다.
하트는 오전9시/오후9시에 각 10개씩 충전됩니다.
매칭상대 상세조회
해당 정보는 하트테이블에 반영되고 보유한 하트를 전부 사용하면 알람이 나옵니다.
하트는 오전9시/오후9시에 각 10개씩 충전됩니다.
남은 하트 개수는 사이트에서 명시적으로 확인할 수 없도록 했습니다.
이는 남은 하트 개수를 모르면 하트를 아끼지 않고 소비하게 되고, 추후 도입할 골드회원의 혜택 중 하나인 ‘하트 무제한’을 위해 결제를 유도하기 위한 목적입니다.
메인 화면에서
︎ 화살표를 눌러 상대방의 프로필을 자세히 볼 수 있습니다.
해당 화면이 담고있는 정보를 통해 매칭 선호도에 따라 필터링이 잘 되었는지 확인할 수 있습니다.
Background Task
New Matching Creation (새 매칭 생성)
사용자가 기존에 매칭된 대상이 없거나, 기존 매칭이 모두 소모된 경우, 새로운 매칭을 생성합니다. 이 과정에서 필터링된 사용자 중 무작위로 매칭 상대를 선택하여 데이터베이스에 저장합니다.
•
매칭 대상이 없는 경우 처리:
사용자가 더 이상 매칭 대상이 남아 있지 않은 경우, 새로운 매칭을 생성하기 위해 현재 사용자의 선호도를 기반으로 필터링을 합니다. 필터링 후에는 그에 속하는 새로운 매칭을 10개 무작위로 가져옵니다.
•
기존 매칭 대상 제외:
사용자가 이미 매칭된 대상 중에 “좋아요” 또는 “싫어요”를 표시한 대상은 새로운 매칭에서 제외됩니다.
•
매칭 데이터 생성 및 저장:
선택된 사용자를 대상으로 새로운 매칭 데이터를 생성합니다. 해당 테이블에는 user_id, target_user_id, interaction_type 등이 포함됩니다.
Interaction Handling (상호작용 처리)
사용자가 다른 사용자에게 좋아요(Like) 또는 싫어요(Dislike)를 표시할 때, 이에 따른 여러 가지 후속 작업을 처리합니다. 이 작업은 트랜잭션 내에서 수행되며, 데이터의 일관성을 보장합니다.
•
트랜잭션 처리:
상호작용 작업은 데이터베이스 트랜잭션 내에서 처리됩니다. 트랜잭션은 모든 작업이 성공적으로 완료되거나, 오류 발생 시 모든 작업이 롤백되도록 보장합니다. 이를 통해 데이터의 일관성을 유지합니다.
•
자기 자신에 대한 상호작용 방지:
사용자가 자신의 프로필에 대해 좋아요 또는 싫어요를 누르려는 경우, BadRequestException을 발생시켜 이를 방지합니다.
•
좋아요 시 하트 차감:
사용자가 좋아요를 누를 때, 해당 사용자의 남은 하트(remainHearts)를 1만큼 차감합니다. 만약 남은 하트가 부족할 경우, BadRequestException이 발생합니다.
•
상대방도 나를 “좋아요”한 기록이 있는지 확인:
채팅방이 생성되고 두 명 모두에게 알림이 전송됩니다.
•
트랜잭션 완료 또는 롤백:
모든 작업이 성공적으로 완료되면 트랜잭션을 커밋(commit)합니다. 오류가 발생하면 트랜잭션을 롤백(rollback)하여 데이터의 일관성을 유지합니다.