팀원이 설정/수정한 알림이 내 폰에서 울려야한다.
서론
프로젝트를 전부 구현해놨더니 기획을 엎어버렸다.
내가 기획팀한테 타 서비스와의 차별성과 방향성이 애매하다고 하긴했지만, 이런 결과를 원한 것은 아니다.. ㅠㅠ
지인들은 기획팀을 엎으라고 했지만, 더 나은 결과물을 위한 것이니 좋게 생각하고 있다.
개선된 기획안은 이렇다.
"열정은 있지만 팀프로젝트를 할 사람이 필요한 사람들에게 마음맞는 팀원을 구할 수 있는 TODO 및 캘린더 기능과 커뮤니티를 제공해준다."
여기서 TODO, 캘린더 기능이 팀 단위로도 설정할 수 있기 때문에 본인이 아닌 다른 팀원이 추가, 수정한 알람이 내 폰에서 울려야한다.
본론
FCM쓰면 되긴하는데 학생이니 구현 경험을 쌓고 싶었다..
내가 조사해본 결과 우리 프로젝트에 가장 적절한 팀 알람의 방식은 이렇다.
이렇게 서버에서 추가된 알람을 클라이언트에게 알려주는 방식은 크게 3가지가 존재한다.
- 폴링
- 소켓
- SSE(Server-Sent-Events)
결과부터 말하자면, 알람 기능을 구현할 때는 SSE방식이 가장 적절하다.
폴링
폴링은 단순하게 API를 주기적으로 여러번 날려서 변경되었는지 확인하는 방식이다.
폴링 방식의 예시는 Node.js의 동기&논 블로킹 방식이다. (다른 방식도 존재하는데 왜 Node.js가 다른 방식을 이용하는지도 궁금해졌다.)
유사품으로 롱폴링 방식이 존재하지만, 폴링와 유사하기에 넘어간다.
폴링 방식은 여러번 호출해야하기 때문에 통신 비용이 증가한다.
소켓
소켓 방식의 예시는 채팅이다. Node.js에서는 socket.io 기능을 제공하기에 그 기능을 사용하면 쉽게 만들 수 있다.
통신 과정은 이렇다.
이렇게되면 폴링방식과 비교했을 때는 효율적으로 구현이 가능하다.
하지만, 이 방식은 꽤 무거운 방식이다. 다음에 설명 하는 SSE 방식을 사용하면 더 효율적인 방식으로 구현 가능하다.
SSE(Sever-Sent-Events)
소켓이 참가한 채팅방에서 서로 양방향에서 메세지를 보낼 수 있다면,
SSE는 서버에서 클라이언트으로 단방향으로 메세지를 보낼 수 있다.
다음과 같은 SSE를 사용하여 알람 업데이트를 개발을 해보려고 한다.
그럼 알람 기능은 어떻게 구현할까?
SSE를 사용하여 알람 업데이트를 클라이언트에게 알려줄 수 있다.
그렇게 나온 흐름도는 이렇다.
플로우
- A: 팀 알람 추가
- 서버: B에게 알람 변경 사항 알려주기.
- B: 팀 알람 수정
- 서버: A에게 알람 변경 사항 알려주기.
구현 방식
- 각 멤버는 고유 SSE이 존재한다.
- 본인이 속한 팀들에서 알람의 변경사항(추가, 삭제도 포함)이 발생 시, SSE를 통해 알려준다.
팀별로 SSE가 있는 경우도 생각해봤지만 서버에서 구현하여 프론트의 부담을 조금 줄여주려고 한다.
SSE 구현
참고 레퍼런스
'트러블 슈팅' 카테고리의 다른 글
Refresh Token을 사용하는 이유(Feat. Redis) (0) | 2023.04.07 |
---|---|
인덱스의 카디널리티, 복합키의 성능 최적화 (0) | 2023.03.30 |
어떨 때 composite key를 사용해야 할까? (0) | 2023.03.19 |
OAuth 로그인을 하는데 새로운 계정이 생성되면 안된다. (0) | 2023.02.23 |
[Node.js] 싱글 스레드 언어가 어떻게 비동기 처리가 가능한가?, Node.js 동작 원리 (0) | 2023.01.26 |
글 내용 중 잘못되거나 이해되지 않는 부분은 댓글을 달아주세요! 감사합니다! 문의: puleugo@gmail.com