-
Notifications
You must be signed in to change notification settings - Fork 4
5️⃣ 5주차 버그 기록
- 5주차 발표를 배포한 Octodocs로 진행하던 중 배포한 사이트로 사용자의 트래픽이 몰리면서 예상하지 못했던 버그가 터지고, 서버가 다운되었다.
- 해당 에러 메세지는 다음과 같다.
backend-1 | /[app/apps/backend/dist/page/page.service.js:70](http://app/apps/backend/dist/page/page.service.js:70)
backend-1 | throw new page_exception_1.PageNotFoundException();
backend-1 | ^
backend-1 |
backend-1 | PageNotFoundException: 페이지를 찾지 못했습니다.
backend-1 | at PageService.findPageById (/[app/apps/backend/dist/page/page.service.js:70:19](http://app/apps/backend/dist/page/page.service.js:70:19))
backend-1 | at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
backend-1 | at async /[app/apps/backend/dist/yjs/yjs.service.js:53:34](http://app/apps/backend/dist/yjs/yjs.service.js:53:34) {
backend-1 | response: { message: '페이지를 찾지 못했습니다.', error: 'Not Found', statusCode: 404 },
backend-1 | status: 404,
backend-1 | options: {}
backend-1 | }
- 해당 버그의 원인을 추려내고 해결하는 과정을 정리해보겠다.
-
onSync 시 initial Data, page 관련 쿼리 삭제, Y.Doc에만 넣어주기
- 필요없는 쿼리가 쌓여 그 중 하나가 만들어내는 버그일 수 있다.
-
워크스페이스 룸 및 ydoc 분리
- 워크스페이스 별로 ydoc과 룸을 분리하는 로직을 5주차에 추가했는데, 이 과정에서 발생하는 버그일 수 있다. 제대로 각각 워크스페이스별로 생성이 되는지 확인해야 한다.
-
링크로 입장, 권한 없을 시 /로 redirect
- 현재는 클라이언트를 워크스페이스로 권한이 없다는 에러를 서버에서 받으면 누구나 접근할 수 있는 홈 화면, 공용 워크스페이스으로 리디렉션이 되도록 하고 있다. 이 과정에서 엉뚱한 경우에도 리디렉션이 진행되었을 수도?
-
redis와 postgres 사이 데이터 동기화
- 현재 프로그램은 redis에 먼저 데이터가 가고, 데이터베이스인 postgres에 주기적으로 업데이트가 되는 구조이다. 그 둘 사이의 데이터 동기화가 제대로 이루어지지 않아 사용자가 찾는 페이지가 둘 중 하나에 누락되어 있어 발생하는 버그일 수 있다.
-
삭제, 추가 event 발생 시 서비스 호출로 변경
- 현재 클라이언트에서는 페이지가 변경될 시에는 감지 후 서비스를 이용하여 서버에 해당 사항을 반영하지만, 페이지가 삭제되거나 추가될 때는 서버의 api를 호출하는 별개의 방식을 사용한다. 데이터 변경 방식이 두 가지가 혼종되어 있어 발생하는 버그일 수 있다.
-
변경 사항 update 할 때 page not found 예외 발생
- 변경 사항을 서버의 yjs 서비스에서 업데이트하는 로직에 결함이 있어 발생하는 버그일 수 있다.
-
document-loaded 시, Y.Doc 클린업
- 공용워크스페이스에 클라이언트가 들어와 document - loaded 처리가 될 때, 클라이언트의 브라우저에 있던 Y.Doc의 데이터가 서버의 데이터와 달라 발생하는 버그일 수 있다.
그러나 버그의 원인은.... 확인해보기
⚓️ 사용자 피드백과 버그 기록
👷🏻 기술적 도전
📖 위키와 학습정리
✏️ 에디터
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)