Node.js에서 polling 구현하고 알림 푸시하기 | 오늘의 맛집은? 양파이 강남점

Sanghwa Lee·2022년 3월 10일
1
post-thumbnail

문제 상황

서버 개발자의 프론트에서 api 연동 시 타임아웃 해결법
이 글에서 서비스 서버가 엄~청 많은 일을 했는데, http response의 타임 아웃을 피하기 위해 request가 올바르면 success를 반환하다 보니 이 일의 성공 여부를 프론트엔드에 알려주지 못했다.

메시지 큐(Message Queue) & Node.js에서 celery queue로 메시지 보내기
이 글에선 서비스 서버를 가볍게 갖기 위해 위에서의 일들을 모두 인퍼런스 서버로 옮겼다. 그래서 서비스 서버조차 일의 성공 여부를 알지 못했다.

이때 프론트엔드는 이 일이 언제 다 되는지 모른 채로 그냥 유저에게 기다리라고 말할 수밖에 없었다. 그래서 UX가 좋지 않았고 이를 개선하기 위해 서비스 서버에서 일이 끝났음을 감지하면 알림을 푸시하도록 구현하기로 했다.

Polling

첫 번째 글에서 다른 분들이 남겨주신 댓글을 보며 서베이하다 알게 된 개념이다.

Polling은 주기적으로 장치나 프로그램의 상태를 검사하는 기법이다. 주로 실시간성을 요구하는 서비스에서 구현하는데, n초에 한 번씩 검사하고 변하는 상태에 따라 동작을 수행한다. 이때 n의 값이 너무 크면 실시간성을 잃을 수 있고, 너무 작으면 서버에 부하가 생기므로 적절한 값을 찾는 것이 좋다. 보통 5초로 설정하는 서비스들이 많아 나도 5초로 결정하였다.

Inference server가 요청 받은 내용을 inference하고, 그 결과를 DB에 저장한다. 서비스 서버는 DB에 값이 잘 저장되었는지를 검사한다. 이를 polling 방식으로 구현한 코드이다.

polling-필요한-파일.js

function componentDidMount() {
    var interval = setInterval(function() {	// polling을 interval로 구현
        for (...) {
          	// 각 객체의 inference 결과가 정상적으로 저장되었는지 탐색
          	// 정상적으로 저장된 객체라면, 해당 사용자에게 알림 푸시
        }

        if (...) {	// 모든 객체의 inference 결과가 정상적으로 저장되었다면 polling 종료
            clearInterval(interval);
            return;
        }
    }, 5000);	// 검사 주기를 5초로 설정
}
componentDidMount();

개인적으로 메시지 큐와 프론트엔드, 유저를 위한 UX까지 한방에 개선되었다는 점에서 마음에 들었던 태스크였다.

오늘의 맛집

양고기 맛집만 두 번째이다.. 그치만 나는 양고기보다 소고기를 좋아한다는 점...⭐ 소고기는 다 맛있어서 맛집을 못 고르는 것이다. ㅠㅠ

강남에 있는 양파이라는 곳이다. 양꼬치 먹으러 가서 친구가 양갈비 안 먹어봤다길래 시켰다. 저번에 올린 일일양이랑 비교하면 프렌치렉은 더 맛있고 양갈비는 냄새가 좀 나서 일일양이 더 맛있었다. 그리고 소스는 일일양이 더 다양해서 좋았지만 여기에서 곁들여 먹으라고 주시는 난이랑 파인애플, 치즈 퐁듀 조합이 미쳤었다. 그래서 다시 가라면 여기 갈 듯. ㅎㅎ 분위기도 좋았고 외관도 예뻤다. 아 그리고 마파두부도 맛있었다.

근데 친구가 마파두부 찐맛집은 학교 앞 양꼬치 집이라고 해서 다음에 학교 갈 일이 생기면 갈 거다. 대면이 고픈 4학년이지만 막상 대면 수업 오라 하면 울 거 같다.

profile
맛집 보고 가세요 😀

2개의 댓글

comment-user-thumbnail
2022년 3월 18일

좋아요~

1개의 답글