미니 SNS 스파클링 백엔드 2주차
스파클링 2주차 회고
2주차에 한 것
- 핵심 유스케이스 작성 (목표)
- 사용자는 게시글 작성 후 등록을 통해 게시글 확이니 가능하다.
- 사용자는 댓글 작성과 댓글 좋아요가 가능하다.
- 사용자는 검색을 통해 게시글, 사용자 검색이 가능하다.
- 사용자는 게시글 작성 시 해시태그 작성이 가능하다.
- 사용자는 게시글 작성자와 1:1 채팅이 가능하다.
- API 목록표 초안 작성
- API를 나눈 기준 : API가 어떤 자원을 이용하는지를 기준으로 (테이블) 기능 API를 나눔.
- 인증 여부 판단 기준 : 서박 요청자를 식별해야만 올바른 응답을 만들 수 있는 가를 기준으로 나눔
- 사용자 (users)
- 게시글 (posts)
- 댓글 (comments)
- API 요청/응답 JSON 3개
POST /users/loginPOST /postsGET /comment/{postid}
멘토링 이후
유스케이스 관련
- 게시글 검색 시나리오
- 확장 시나리오에서 사용자는 찾은 게시글이 없는 경우, alert를 띄우는데 이게 사용자 경험에서 적절할까?
alert를 띄우는 것이 아닌, 찾은 게시글이 없는 경우 빈 게시글 목록을 보여주는 것이 더 적절한 흐름이라고 생각했고 수정했습니다.
- 해시태그 시나리오 (1)
- 해시태그를 본문 내용에 보내면, 클라이언트가 파싱을 해야할까? 서버가 해야할까?
서버에서 하는 걸로 결정했습니다.
판단 이유로는 클라이언트가 파싱해서 보낸 것을 무조건 믿어야 하는가 생각해보면 서버에서 결국 한 번더 하게 될텐데 이럴거면 그냥 서버에서 처리하는게 맞다고 생각했고, 해시태그 사용 이유를 보면 검색이나, 집계를 위함인데 이를 사용하는 것이 서버라고 생각했기 때문입니다.
- 해시태그 시나리오 (2)
- 해시태그를 게시글 이름, 게시글 내용으로 검색하는게 맞을까?
적절하지 않다고 생각했습니다.
해시태그는 파싱되어 다른 DB에 저장될 텐데, 사용자가 원하지 않은 게시글이 노출되는 것 같아 해시태그 검색 카테고리를 만들어야 겠다고 생각했습니다.
- 1:1 채팅 시나리오
- 1:1 채팅을 채팅 내용이 기록을 왜 안해?
- 채팅창 연결이 되지 않았을 때, 채팅창 연결이 끊겼을 때, 여러 상황을 고려해 봤니?
사실 채팅 시나리오를 작성할 때 크게 고민하지 않고 했습니다. 이 후, 1:1 채팅에 대해 여러 고민을 해봤는데 결론은 채팅 내역을 저장하지 않는 방향을 결정했습니다. 아래는 내가 대답한 답과 판단 근거입니다.
1. 상대방이 온라인일 때, 가능한 것 아닌가?
상대방이 온라인인 것을 어떻게 알지?
- 클라이언트에서 30초에 한 번씩 헬스체크 HTTP를 보내 살아있다는 것을 확인 (풀링 방식)
- 헬스체크 없이, 유저가 어떤 API든 호출할 때마다 살아있다는 것을 갱신
- 클라이언트에서 포그라운드 진입 시 서버와 Web Socket으로 연결 후 관리를 통해 확인
결정: 클라이언트는 포그라운드 진입 시 서버와 웹 소켓을 연결하고 서버는 온라인인지 확인하는 방식
근거: HTTP 기반으로 온라인 상태를 확인하게 되면, 이는 추측으로 아직 푸시 알람 기능을 고려하지 않고 있기 때문에 온라인 상태의 정확성이 중요하다고 판단했습니다. 채팅 구조상 WebSocket이 필수이기 때문에 A <-> 서버 <-> B 실시간 중계로만 채팅이 전달되도록 설계할 예정입니다.
2. 오프라인 상태일 때, 어떻할 것인가?
오프라인 상대와는 채팅방 연결이 되지 않도록 할 것입니다. 또한, 연결 후 상대가 갑자기 끊긴다면 30초 정도 기다리다가 이 후 완전히 채팅방 연결이 끊기도록 할 예정입니다.
3. 멀티 디바이스는 어떻게 처리할 것인가?
세션은 유저 단위가 아니라, 디바이스 단위로 판단하고 채팅 요청이 오게 되면 수진자의 연결된 모든 디바이스에 요청 메시지 푸시를 합니다. 이 후, 연결된 최초 디바이스와 연결하는 방식으로 정했습니다.