요번에 이쁘게 구조도를 만들어 봤다ㅎㅎ(모두가 예쁘다고 좋아했다)
모름지기 개발이란,
성능과 사용성보단,
예쁜게 중요하다.
팀에 합류하고,
공통 모듈을 따로 만들고,
전체 푸시 알람 만들고..
디비 코멘트도 달고...
GPT socket하고 이것저것 했는뎅,
내가 처음으로 와서 한 일은 MSA 및 메시지큐를 도입했다.
푸시 알람이나 AI등 여러 기능들을
묶일 수 있는 공통의 그룹으로 묶고,
분리하려 했다.
이유는 다음과 같다.
1.
특정 섹션에서 병목이 나면, 다른 기능에 영향을 주기 싫었고,
2.
특정 섹션에 더 많은 계산이나 트래픽이 많다면, 부분적으로 스케일아웃, 업을 할 수 없는 구조 였다.
3.
처음에는 리소스가 많이 들어가지만, 정착되면 유지보수에 있어서 리소스가 적어질 것이라 판단했기 때문이다.
(실제로 내 경험도 그랬고)
4.간지난다.
-
여튼 프로덕트 서버에서 푸시를 다 처리하고 있었는데,
문제가 많았다고 한다. (당연히 그럴 수 밖에ㅠ.ㅠ)
그래서
대량의 푸시를 관리하고 로직이 많이 필요한 구조를 따로 빼서 메세지큐로 처리하려 했다.
내가 생각한 구조는 이렇다.
메시지 처리하는 걸 현실의 언어로 표현하려 했다.
주문서를 넣고 -> 주문서를 받고 -> 주문서를 처리한다.
액션
- 특정 동작을 하는 공간 (API, Cron등)
- 주문서를 보내는 모든 공간
스토어
- 주문을 받고 SQS에 메세지를 집어 넣는 공간
- 이곳에서 분기처리 및 1차적인 예외처리를 한다.
워커
- 주문 들어온 작업을 처리하는 공간
- SQS를 구독하고 있다가, 처리한다.
-
워커에서 일하는 애들은, 유저에게 아무 영향을 주지 않기 때문에,
시간이 오래 걸리는 작업들을 처리하는데 좋다.
유저에게 즉각적인 응답이 필요한 기획에는 이용하면 어렵겠다.
앞으로 워커엔 통계를 계산하고, 배치작업등등 할 예정이다.
물론 워커에서 DB에 부하를 많이 주면,
프로덕트에도 반영이 되니까 그 부분은 조심해야겠지만,
나중에 그런 상황이 온다면
DB클러스터를 읽기, 쓰기만 두는게 아니라,
Woker만 보는 클러스터를 따로 만들면된다.
지금은 오버 엔지니어링~~!
여튼 스토어와 워커는 모노레포로 만들었는데, 다음에 써야징
'Back > Node.js' 카테고리의 다른 글
[Monorepo, React, Next, Nest] 모노레포 앱구조 (0) | 2023.05.29 |
---|---|
[Monorepo, Yarn Berry, Github Private Package] can't be resolved to a satisfying (0) | 2023.05.17 |
[GPT, Node.js, React] 실시간으로 ChatGPT 연동하기 (0) | 2023.04.08 |
[NodeJs, Notion] Nodejs + Notion database 연동하기 및 만들기 (0) | 2022.09.09 |
[NodeJs, Express, Typescript] 전역 에러 핸들링 (express global error handle) (0) | 2022.09.08 |