Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/#156 server에 Page별 editor crdt 적용 #163

Merged
merged 28 commits into from
Nov 21, 2024

Conversation

hyonun321
Copy link
Collaborator

@hyonun321 hyonun321 commented Nov 21, 2024

📝 변경 사항

  1. CRDT구조로 client와 server 연동
  2. useSocket -> useSocketStore Zustand 로 소켓 연결 관리
  3. 각종 작업 관련 버그 수정
  4. 직렬화된 정보를 사용하는 곳에서 class로 역직렬화를 하고, 이를 Props로 자식요소에 전달해주는 방식을 사용.
  5. 서버에서 pageId를 생성하여 클라이언트에 부여 (create/page)

🔍 변경 사항 설명

  1. CRDT구조로 client와 server 연동
    | Workspace -> Page -> editorCRDT -> Block -> Char ..
  • 의 구조로 동작하도록 각 client의 editor와 server의 API 통일
  1. useSocket -> useSocketStore Zustand 로 소켓 연결 관리

  2. 각종 작업 관련 버그 수정

  • 불필요한 Props interface 개선
  • 필요한 Props interface 추가
    • pageId, BlockId 등 인터페이스 개선
  1. 직렬화된 정보를 사용하는 곳에서 class로 역직렬화를 하고, 이를 Props로 자식요소에 전달해주는 방식을 사용.
  • 사용되는 컴포넌트에서 역직렬화 메소드를 통해 useState상태 및 useRef로 활용하여 컴포넌트 렌더링에 사용
  • 현재는 workspace부터, editorCRDT까지만 해당하는 클래스에서 역직렬화 하여 사용되고, 이후 editorCRDT부터 나머지 Char까지는 모든 자식요소에 클래스 인스턴스로 전달하고 있다.
  • 이유는 해당 요소에 도착할때마다 인스턴스화를 할경우, 기존에 있는 값들 끼리 비교하는 insert연산을 할때 역직렬화를 하지 않아 메소드를 찾지 못하는 현상이 발생하여 props로 바로 클래스를 넘겨주었습니다.
  1. 서버에서 pageId를 생성하여 클라이언트에 부여 (create/page)
  • 페이지 버튼을 누르면 서버에서 pageId를 부여받고 이를 기반하여 클라이언트 인스턴스에 등록&렌더링이 진행된다.

🙏 질문 사항

  • 동작 테스트 부탁드립니다. (버그제보 받습니다!)
    • 아직 Page의 Id끼리 입력된 값을 분류하여 넣어지지는 않습니다.
    • MongoDB가 없어도 client <-> server와의 간단한 동작테스트를 하실 수 있습니다.

📷 스크린샷 (선택)

  • 작업 사항
    image

✅ 작성자 체크리스트

  • Self-review: 코드가 스스로 검토됨
  • Unit tests 추가 또는 수정
  • 로컬에서 모든 기능이 정상 작동함
  • 린터 및 포맷터로 코드 정리됨
  • 의존성 업데이트 확인
  • 문서 업데이트 또는 주석 추가 (필요 시)

Ludovico7 and others added 27 commits November 19, 2024 15:08
…project into Feature/#155_페이지_클릭시_캐럿_이동
- 블록 추가
- 블록 삭제
- 페이지 아이디 생성
- useSocket 사용안되는곳 제거
- workspace useState 추후 사용예정이므로 console.log 추가해둠
- 타입 변경시 텍스트 추가 불가
- 타입 변경시 block 역직렬화 안되있음
- 사용하지 않는 모듈 제거
- 새로고침하면 page isVisible False로 변경
- emit -> braodcast, emit 으로 송신자와 나머지에게 전부 보내도록 수정
- pages, workspace 에 usePagesManage 의존성 부여하여 바로 반영되도록 수정

#156
- 불필요한 console.log 제거
…into Feature/#156_server에_Page별_EditorCRDT_적용

# Conflicts:
#	client/src/App.tsx
#	client/src/features/editor/Editor.tsx
#	client/src/features/editor/components/block/Block.tsx
#	client/tsconfig.tsbuildinfo
@hyonun321 hyonun321 added FE 프론트엔드 작업 BE 백엔드 작업 Feat 새로운 기능 추가나 기존 기능 확장 작업 labels Nov 21, 2024
Co-authored-by: hyonun <[email protected]>
Co-authored-by: minjungw00 <[email protected]>
Co-authored-by: Jang seo yun <[email protected]>
Copy link
Collaborator

@minjungw00 minjungw00 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고많으셨습니다!!!

Copy link
Member

@pipisebastian pipisebastian left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

짱입니닷,,,... 꼼꼼하게 못봐드려서 죄송합니다,,, 🙇‍♂️

@github-actions github-actions bot merged commit 95b0f0d into dev Nov 21, 2024
5 checks passed
@pipisebastian pipisebastian deleted the Feature/#156_server에_Page별_EditorCRDT_적용 branch November 26, 2024 04:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
BE 백엔드 작업 FE 프론트엔드 작업 Feat 새로운 기능 추가나 기존 기능 확장 작업 P1 긴급/즉시 반영
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants