서버 개발자의 프론트에서 api 연동 시 타임아웃 해결법
이 글에서 서비스 서버가 엄~청 많은 일을 했는데, http response의 타임 아웃을 피하기 위해 request가 올바르면 success를 반환하다 보니 이 일의 성공 여부를 프론트엔드에 알려주지 못했다.
메시지 큐(Message Queue) & Node.js에서 celery queue로 메시지 보내기
이 글에선 서비스 서버를 가볍게 갖기 위해 위에서의 일들을 모두 인퍼런스 서버로 옮겼다. 그래서 서비스 서버조차 일의 성공 여부를 알지 못했다.
이때 프론트엔드는 이 일이 언제 다 되는지 모른 채로 그냥 유저에게 기다리라고 말할 수밖에 없었다. 그래서 UX가 좋지 않았고 이를 개선하기 위해 서비스 서버에서 일이 끝났음을 감지하면 알림을 푸시하도록 구현하기로 했다.
첫 번째 글에서 다른 분들이 남겨주신 댓글을 보며 서베이하다 알게 된 개념이다.
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학년이지만 막상 대면 수업 오라 하면 울 거 같다.
좋아요~