댓글/좋아요 알림 구현 방법

조회수 3940회

첨부한 이미지와 같이 댓글 또는 좋아요 등의

알림 기능을 만들고자 한다면 어떻게 해야 할까요?

구현해야 할 부분은 다음과 같은 것 같습니다.

  1. 신규 알림 수
  2. 신규 알림 확인 시 알림 표시 제거
  3. 알림 클릭 시 읽음 하이라이트 기능

이미지

이미지

  • 한가지 방법은 웹소켓을 이용해서 서버에서 변경(댓글 추가등)이 일어나면 클라이언트로 푸시하면 되겠죠 정영훈 2019.2.4 18:04
  • 안녕하세요. 영훈님. 우선 답변 감사합니다. 웹소켓도 생각해보았는데, 너무 코스트가 크지않을까도 생각해보았네요 ^^. 새해 복 많이 받으시고. 남은 명절 잘 보내세요. 김운아 2019.2.5 08:27

1 답변

  • 좋아요

    3

    싫어요
    채택 취소하기

    질문하시는 것은 알림(notifications)이라는 것인데, 이런 경우는 결국 DB에 저장하시게 됩니다.

    1. noti 테이블을 하나 만듭니다. 그 테이블은 대략 이런 것으로 구성돼 있습니다.
      • 알림 자체의 고유 ID. uuid
      • 알림을 받는 사람 ID. userid
      • 알림 내용(의 배열). 여기에는 알림을 보낸 사람 ID, 알림 메시지 텍스트 등이 포함됨. data
      • 생성 시각 및 읽음처리 시각. created_at, read_at
    2. 알림이 일어날 만한 사건이 발생할 때, noti 테이블에 적당히 값을 주어서 INSERT를 실행합니다.
    3. 사용자가 자기 앞으로 온 알림 목록을 보는 화면에는 대략 다음과 같은 SQL을 질의한 결과를 뿌려줍니다.
      SELECT data FROM noti WHERE userid = 34 AND read_at IS NULL ORDER BY created_at LIMIT 50 OFFSET 0
    4. 사용자가 어떤 알림을 '읽음' 처리하는 사건이 발생할 때는, noti 테이블의 해당 자료에 대해서 read_atnow()로 찍어 UPDATE해 줍니다.

    여기까지만 구현하면, 이 알림은 사용자가 새로고침을 직접 해야 하는 알림 목록이 됩니다. 사용자의 새로고침 없이도 알림 INSERT 사건을 사용자에게 알려주고 싶다면, 그건 이벤트 브로드캐스팅이라고 하는 좀 다른 주제이기 때문에 대략 정영훈님의 댓글을 참고하시면 되겠습니다.

    mongodb에 테이블 같은 건 없지만 적당히 걸러서 이해해 주세요.

    • 안녕하세요. 엽토군님. 우선 답변 감사합니다. 결국에는 DB를 이용해야 겠네요 ^^; 제가 너무 복잡하게 생각하였나 보네요. redis나 memcache 같은것을 사용해야 하나 하였는데 간단하게 이해가 되었습니다. 새해 복 많이 받으시고 명절 잘보내세요. 김운아 2019.2.5 08:23
    • 추가적으로 궁금한것이 있다면 알림 카운트 체크는 어떻게 해야할지 고민이 되네요. 제가 생각한 방법은 사용자 계정마다 카운트 필드를 추가해주고 noti 인서트 시 카운트를 추가해주는 방법입니다. 만약 로그인 후 카운트 수 가 0보다 클 경우 카운트 표시 그리고 알림 카운트를 클릭 하면 카운트를 0으로 초기화해주는 방법이 어떨까 싶긴 합니다. 김운아 2019.2.5 08:29
    • Redis나 memcache 같은건 실시간 알림 줄때 필요해지고 그게 실시간일 필요가 없으면 db 쓰면 되는것 같더라고요. 카운트는 머… 라라벨의 경우에는 그냥 SELECT COUNT(*)를 때려버리는데 말씀하신 것처럼 별도 카운트 집계 컬럼이 있어도 나쁘지 않겠지요. 엽토군 2019.2.5 09:23
    • 알림 카운트는 상태 체크가 가능해야 하는데 SELECT문으로 통계내기에는 한계가 있을것 같아서요. notiCount 컬렉션(테이블)을 만들거나 회원필드에 count 필드를 만드는게 좋을것 같아서요. 엽토군님 ^^; 김운아 2019.2.5 10:25

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)