-
Notifications
You must be signed in to change notification settings - Fork 3
소켓 서버와 api 서버 분리
저희 OctoDocs 팀은 실시간 통신을 위한 socket 서버와 HTTP 통신을 위한 RESTful API 서버를 함께 사용하고 있습니다.
실시간으로 노드, 페이지 정보를 수정할 때는 socket 서버를 사용하고 인증 및 워크 스페이스 정보를 수정할 때는 RESTful API를 사용하고 있습니다.
처음에는 아래처럼 nest 서버 하나에서 포트를 분리하여 websocket 서버와 REST API 서버를 함께 사용했습니다.
하지만 하나의 nest 서버를 사용하면서 불편함을 느꼈고 저희는 아래와 같이 socket 서버와 API 서버를 분리하기로 결정했습니다.
우선 저희 프로젝트의 핵심적인 3가지 기능에 대해 설명드리겠습니다.
1. 실시간으로 문서 변경 사항 감지해서 redis에 저장
2. RESTful API CRUD 기능
3. 주기적으로 redis에 저장된 값을 postgres에 갱신
위 3가지 기능 중 가장 중요한 부분은 1번이고 대부분의 트래픽이 1번에서 발생합니다.
지금까지는 위 3가지 기능이 모두 하나의 nest 서버에 존재했습니다.
nest 서버가 한 개일 때 가장 큰 문제점은 위 3가지 기능 중 하나라도 문제가 발생하면 3가지 기능 모두 영향을 받는다는 점입니다.
예를 들어 저 3가지 기능 중 3번 기능은 문제가 생기더라도 당장 사용자의 서비스 사용에 영향을 주지 않습니다.
하지만 3가지 기능이 모두 같은 서버에 존재하기 때문에 3번 기능에서 에러가 발생하면 서버가 죽어버리고 모든 기능이 동작하지 않게 됩니다.
하지만 서버를 분리한다면 한 가지 기능에 문제가 생기더라도 다른 기능에 영향을 주지 않습니다.
저희 프로젝트에서 socket 서버와 API 서버는 서로 독립적으로 동작합니다.
socket 서버는 변경된 데이터를 받아 redis에 저장하고 postgres 데이터베이스를 사용하지 않습니다. (물론 아예 사용하지 않는 것은 아닙니다.)
postgres 데이터베이스를 사용하는 서버는 API 서버입니다.
socket 서버와 API 서버의 책임이 명확하기 때문에 서로 독립적인 서버로 분리하는 편이 개발에 있어서 더욱 편리할 것이라고 생각했습니다.
위 두 가지 이유 때문에 저희는 서버를 분리하기로 결정했습니다.
제대로 분리하기 위해서는 3가지 기능을 모두 별도로 분리하는 편이 좋겠지만 오버 엔지니어링이라고 판단하여 socket 서버와 API 서버만 분리하고 주기적 갱신 기능은 API 서버에 넣기로 했습니다.
⚓️ 사용자 피드백과 버그 기록
👷🏻 기술적 도전
📖 위키와 학습정리
✏️ 에디터
Novel이란?
Novel 스타일링 문제
에디터 저장 및 고려 사항들
📠 실시간 협업, 통신
Yorkie와 Novel editor 연동
YJS, Websocket, React-Flow
YJS, Socket.io
WebSocket과 Socket.io에 대해 간단히 알아보기
YJS 가이드 근데 이제 Socket.io를 곁들인
🏗️ 인프라와 CI/CD
NCloud CI CD 구축
BE 개발 스택과 기술적 고민
private key로 원격 서버 접근
nCloud 서버, VPC 만들고 설정
monorepo로 변경
⌛ 캐시, 최적화
rabbit mq 사용법
🔑 인증, 인가, 보안
passport로 oAuth 로그인 회원가입 구현
FE 로그인 기능 구현
JWT로 인증 인가 구현
JWT 쿠키로 사용하기
refresh token 보완하기
🧸 팀원 소개
⛺️ 그라운드 룰
🍞 커밋 컨벤션
🧈 이슈, PR 컨벤션
🥞 브랜치 전략
🌤️ 데일리 스크럼
📑 회의록
1️⃣ 1주차
킥오프(10/25)
2일차(10/29)
3일차(10/30)
4일차(10/31)
2️⃣ 2주차
8일차(11/04)
9일차(11/05)
11일차(11/07)
13일차(11/09)
3️⃣ 3주차
3주차 주간계획(11/11)
16일차(11/12)
18일차(11/14)
4️⃣ 4주차
4주차 주간계획(11/18)
23일차(11/19)
24일차(11/20)
25일차(11/21)
5️⃣ 5주차
5주차 주간계획(11/25)
29일차(11/25)
32일차(11/28)
34일차(11/30)
6️⃣ 6주차
6주차 주간계획(12/2)
37일차(12/3)