Togather : 채팅 기능 구현과 문제 해결 과정 (1)

2024. 11. 26. 06:51코딩 도구/프로젝트 & 경험 (Projects & Experiences)

반응형

이번에는 제가 24년 3월~6월에 참여한 Togather 프로젝트의 개발 과정을 공유하고자 합니다.

Togather는 배달비 분할 파티원 또는 공동 구매원 모집 서비스로, 저렴한 공동 구매 방식을 제공합니다.

 

https://m.youtube.com/watch?v=IT6z9czB58s

 

프로젝트 소개 

Togather는 배달비를 절약하고자 하는 사용자들을 위한 플랫폼으로, 공동 구매를 원하는 사람들이 모여 함께 주문할 수 있도록 도와줍니다. 사용자들은 모집글을 올리고, 손들기 기능을 통해 파티원을 모집하며, 채팅을 통해 소통할 수 있습니다.

 

https://github.com/cbnu-togather/togather-server

 

GitHub - cbnu-togather/togather-server: [Server Repo]

[Server Repo]. Contribute to cbnu-togather/togather-server development by creating an account on GitHub.

github.com

 

초기 계획

처음에는 WebSocket을 이용한 실시간 채팅 기능을 구현하려고 했습니다. 아래는 초기 채팅 및 알림 기능 구현을 위한 요구 사항입니다.

 

https://mkisos.tistory.com/entry/%EB%8B%A8%EC%B2%B4-%EC%B1%84%ED%8C%85-%EA%B8%B0%EB%8A%A5-%EA%B5%AC%ED%98%84%ED%95%B4%EB%B3%B4%EA%B8%B0-%EA%B8%B0%EC%B4%88-%EC%9E%91%EC%97%85

 

Togather : 단체 채팅 기능 구현해보기 (기초 작업)

개념 및 지식WebSocket:WebSocket은 HTTP와는 다른 전이중 통신 채널을 제공하는 프로토콜입니다. 서버와 클라이언트 간의 실시간 통신이 필요할 때 주로 사용됩니다.WebSocket을 사용하면 클라이언트와

mkisos.tistory.com

 

계획 변경 : WebSocket에서 CRUD로

스프링, 자바, REST 형식, GitHub 등 여러 새로운 툴과 기술을 동시에 익히면서 협업하기에는 시간과 경험이 부족하다고 판단했습니다.

특히 미루고 미루다 3학년 1학기에 시험과 다른 과제들도 많아 모든 것을 한꺼번에 처음부터 공부하기에는 무리가 있었습니다. 그래서 팀원들과 큰 회의 끝에 WebSocket 대신 CRUD 방식으로 기능을 구현하기로 결정했습니다.

개발 과정에서의 문제점과 해결

개발을 진행하면서 여러 문제점이 발생했고, 이를 하나씩 해결해 나갔습니다.

문제 1: 채팅방 참가자가 2명으로 고정되는 문제

현상: 채팅방에 참가자가 2명으로만 제한되고, 유저 프로필 사진도 2명분만 표시되었습니다.

해결: 코드 로직을 검토한 결과, 채팅방 생성 시 참가자 수를 제한하는 조건이 잘못 설정되어 있었습니다. 해당 조건을 수정하여 모집된 모든 참가자가 채팅방에 참여할 수 있도록 수정했습니다.

문제 2: 모집 완료 후 손들기 수락 불가 처리

현상: 모집이 완료되어 채팅방이 생성된 이후에도 방장이 손들기 수락을 할 수 있었습니다.

해결: 손들기 수락 API를 수정하여 모집이 완료된 이후에는 수락이 불가능하도록 로직을 추가했습니다. 모집 완료 여부를 확인하는 조건문을 추가하여 이 문제를 해결했습니다.

문제 3: 방장의 손들기 거절 기능 추가

현상: 방장이 손들기 요청을 거절할 수 있는 기능이 없었습니다.

해결: 새로운 API를 생성하여 방장이 손들기 요청을 거절할 수 있도록 했습니다. 거절 시 알림 목록에서 해당 알림이 삭제되도록 구현했습니다.

문제 4: 조기 마감 기능 추가

현상: 방장이 인원이 다 차지 않더라도 현재 모집된 인원만으로 채팅방을 생성할 수 있는 기능이 필요했습니다.

해결: 조기 마감 API를 생성하여 방장이 모집 인원에 상관없이 채팅방을 생성할 수 있도록 했습니다. 조기 마감 시 모집글의 상태를 업데이트하고, 현재까지 수락된 참가자들과 채팅방을 생성하도록 구현했습니다.

문제 5: 손들기 중복 요청 방지

현상: 동일한 사용자가 동일한 모집글에 손들기를 여러 번 요청할 수 있었습니다.

해결: 손들기 요청 시 기존에 요청한 내역이 있는지 확인하는 로직을 추가하여 중복 요청을 방지했습니다.

문제 6: Authorization 토큰 처리 방식 개선

현상: 모든 요청에서 Authorization 토큰을 파라미터로 전달해야 했습니다.

해결: HTTP 헤더의 Authorization 필드를 활용하도록 전체 API를 수정했습니다. 이를 통해 프론트엔드에서의 작업 효율성을 높였습니다.

문제 7: 채팅 등록 시 요청 방식 변경

현상: 채팅 내용을 Request Body가 아닌 Query Parameter로 받아야 했습니다.

해결: 채팅 등록 API를 수정하여 채팅 내용을 Query Parameter로 받을 수 있도록 변경했습니다.

 

다음주에 2편에서 추가 문제 해결과 채팅 코드 구현에 대해서 글을 작성하겠습니다.

 

 

반응형