부모님 가게에 쓸 POS 사이트를 만들고 있습니다.
Next.js와 MongoDB를 활용해 만들고 있는데,
선생님 말마따나 기본적인 게시판 만드는 과정과 거의 동일해 어지간한 기능은 다 구현했습니다.
그런데 가장 핵심적인 실시간 통신 부분에서 막히고 있네요.
1. 클라이언트 측에서 주문을 접수하면 서버에게 POST 요청 날림
2. 서버는 그에 맞게 DB에 주문 내역을 기록함
3. DB에 성공적으로 기록이 되면 서버는 클라이언트 측에
실시간으로 주문 내역을 업데이트 해줘야 함. (새로고침없이 즉시 업데이트)
4. 또한 영수증 프린터가 달린 주방(회원 계정 중 auth 명을 printer로 지정해둠)에서는
주문 내역이 업데이트되면 바로 영수증이 인쇄되어야 함.
주방과 카운터에서는 주문 내역 화면을 계속해서 띄우기만 해놓고
알아서 업데이트가 되어야 하는 상황이라
수동으로 새로고침을 하는 게 아니라 실시간으로 업데이트가 되어야 합니다.
그렇게 하려면 Node 강의에서 배운 Server Sent Event를 활용하거나
Web Socket을 이용하는 방법을 통해 구현을 해야 할 것 같은데,
Next.js의 API 코드는 서버리스 함수라 무한한 실행이 불가능해
직접적으로 Web Socket을 사용하지는 못한다고 되어있군요..
Ably나 Railway와 같은 외부 서비스를 통해
Web Socket을 지원하는 방법이 있는 것 같은데
외부 서비스 말고는 방법이 없는지 궁금합니다.
Node 서버를 한 대 더 만들라는 얘기도 있던데
그러려면 기존 Next.js 서버와 웹 소켓용 서버를 어떻게 연결 시켜야 할지 감이 안 잡히네요.
뭔가 쉽게 해결할 수 있는 방법이 있을 것 같은데...
저 과정이 어찌저찌 된다면 아래처럼 로직이 되어야 할 거 같은데 아래 과정이 맞는지도 궁금합니다.
1. 클라이언트와 서버간의 웹 소켓 연결 완료
2. MongoDB측에 새로운 주문 내역이 들어오거나 기존 주문 내역이 수정되는 상황 발생
3. MongoDB의 Change Stream 기능을 통해 서버 측에 전달
4. 서버는 즉시 연결되어있는 클라이언트에 업데이트 된 내용을 갱신시킴