댓글/좋아요 알림 구현 방법
조회수 3940회
첨부한 이미지와 같이 댓글 또는 좋아요 등의
알림 기능을 만들고자 한다면 어떻게 해야 할까요?
구현해야 할 부분은 다음과 같은 것 같습니다.
- 신규 알림 수
- 신규 알림 확인 시 알림 표시 제거
- 알림 클릭 시 읽음 하이라이트 기능
1 답변
-
질문하시는 것은 알림(notifications)이라는 것인데, 이런 경우는 결국 DB에 저장하시게 됩니다.
noti
테이블을 하나 만듭니다. 그 테이블은 대략 이런 것으로 구성돼 있습니다.- 알림 자체의 고유 ID.
uuid
- 알림을 받는 사람 ID.
userid
- 알림 내용(의 배열). 여기에는 알림을 보낸 사람 ID, 알림 메시지 텍스트 등이 포함됨.
data
- 생성 시각 및 읽음처리 시각.
created_at
,read_at
- 알림 자체의 고유 ID.
- 알림이 일어날 만한 사건이 발생할 때,
noti
테이블에 적당히 값을 주어서INSERT
를 실행합니다. - 사용자가 자기 앞으로 온 알림 목록을 보는 화면에는 대략 다음과 같은 SQL을 질의한 결과를 뿌려줍니다.
SELECT data FROM noti WHERE userid = 34 AND read_at IS NULL ORDER BY created_at LIMIT 50 OFFSET 0
- 사용자가 어떤 알림을 '읽음' 처리하는 사건이 발생할 때는,
noti
테이블의 해당 자료에 대해서read_at
을now()
로 찍어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
댓글 입력