Post

미니 SNS 스파클링 백엔드 2주차

미니 SNS 스파클링 백엔드 2주차

스파클링 2주차 회고

2주차에 한 것

  1. 핵심 유스케이스 작성 (목표)
    • 사용자는 게시글 작성 후 등록을 통해 게시글 확이니 가능하다.
    • 사용자는 댓글 작성과 댓글 좋아요가 가능하다.
    • 사용자는 검색을 통해 게시글, 사용자 검색이 가능하다.
    • 사용자는 게시글 작성 시 해시태그 작성이 가능하다.
    • 사용자는 게시글 작성자와 1:1 채팅이 가능하다.
  2. API 목록표 초안 작성
    • API를 나눈 기준 : API가 어떤 자원을 이용하는지를 기준으로 (테이블) 기능 API를 나눔.
    • 인증 여부 판단 기준 : 서박 요청자를 식별해야만 올바른 응답을 만들 수 있는 가를 기준으로 나눔
    1. 사용자 (users)
    2. 게시글 (posts)
    3. 댓글 (comments)
  3. API 요청/응답 JSON 3개
    1. POST /users/login
    2. POST /posts
    3. GET /comment/{postid}

멘토링 이후

유스케이스 관련

  1. 게시글 검색 시나리오
    • 확장 시나리오에서 사용자는 찾은 게시글이 없는 경우, alert를 띄우는데 이게 사용자 경험에서 적절할까?

alert를 띄우는 것이 아닌, 찾은 게시글이 없는 경우 빈 게시글 목록을 보여주는 것이 더 적절한 흐름이라고 생각했고 수정했습니다.

  1. 해시태그 시나리오 (1)
    • 해시태그를 본문 내용에 보내면, 클라이언트가 파싱을 해야할까? 서버가 해야할까?

서버에서 하는 걸로 결정했습니다.

판단 이유로는 클라이언트가 파싱해서 보낸 것을 무조건 믿어야 하는가 생각해보면 서버에서 결국 한 번더 하게 될텐데 이럴거면 그냥 서버에서 처리하는게 맞다고 생각했고, 해시태그 사용 이유를 보면 검색이나, 집계를 위함인데 이를 사용하는 것이 서버라고 생각했기 때문입니다.

  1. 해시태그 시나리오 (2)
    • 해시태그를 게시글 이름, 게시글 내용으로 검색하는게 맞을까?

적절하지 않다고 생각했습니다.

해시태그는 파싱되어 다른 DB에 저장될 텐데, 사용자가 원하지 않은 게시글이 노출되는 것 같아 해시태그 검색 카테고리를 만들어야 겠다고 생각했습니다.

  1. 1:1 채팅 시나리오
    • 1:1 채팅을 채팅 내용이 기록을 왜 안해?
    • 채팅창 연결이 되지 않았을 때, 채팅창 연결이 끊겼을 때, 여러 상황을 고려해 봤니?

사실 채팅 시나리오를 작성할 때 크게 고민하지 않고 했습니다. 이 후, 1:1 채팅에 대해 여러 고민을 해봤는데 결론은 채팅 내역을 저장하지 않는 방향을 결정했습니다. 아래는 내가 대답한 답과 판단 근거입니다.

1. 상대방이 온라인일 때, 가능한 것 아닌가?

상대방이 온라인인 것을 어떻게 알지?

  1. 클라이언트에서 30초에 한 번씩 헬스체크 HTTP를 보내 살아있다는 것을 확인 (풀링 방식)
  2. 헬스체크 없이, 유저가 어떤 API든 호출할 때마다 살아있다는 것을 갱신
  3. 클라이언트에서 포그라운드 진입 시 서버와 Web Socket으로 연결 후 관리를 통해 확인

결정: 클라이언트는 포그라운드 진입 시 서버와 웹 소켓을 연결하고 서버는 온라인인지 확인하는 방식

근거: HTTP 기반으로 온라인 상태를 확인하게 되면, 이는 추측으로 아직 푸시 알람 기능을 고려하지 않고 있기 때문에 온라인 상태의 정확성이 중요하다고 판단했습니다. 채팅 구조상 WebSocket이 필수이기 때문에 A <-> 서버 <-> B 실시간 중계로만 채팅이 전달되도록 설계할 예정입니다.

2. 오프라인 상태일 때, 어떻할 것인가?

오프라인 상대와는 채팅방 연결이 되지 않도록 할 것입니다. 또한, 연결 후 상대가 갑자기 끊긴다면 30초 정도 기다리다가 이 후 완전히 채팅방 연결이 끊기도록 할 예정입니다.

3. 멀티 디바이스는 어떻게 처리할 것인가?

세션은 유저 단위가 아니라, 디바이스 단위로 판단하고 채팅 요청이 오게 되면 수진자의 연결된 모든 디바이스에 요청 메시지 푸시를 합니다. 이 후, 연결된 최초 디바이스와 연결하는 방식으로 정했습니다.

This post is licensed under CC BY 4.0 by the author.