Skip to content

[Deploy] main 브랜치 작동 - #91

Merged
sony-string merged 151 commits into
mainfrom
dev
Nov 11, 2025
Merged

sony-string merged 151 commits into
mainfrom
dev

Conversation

@sony-string

@sony-string sony-string commented Nov 11, 2025 •

Copy link
Copy Markdown
Member

수행한 작업

design

  • 홈 화면 UI/UX 기본 디자인 완성 27f3652
  • 반응형 레이아웃 완성 및 여러 컴포넌트로 나눔 d85403e
  • 홈화면(모아노트 접속 시 최초 등장 화면) 디자인 개선 488a493
  • 메인 화면(로그인 이후 등장하는 노트 화면) 디자인 완성 a2739ee
  • 모아 AI 챗봇 버튼 만듦 d4f66ca
  • 더 알아보기 버튼에 커서 포인터 효과를 추가 db6ec82
  • 공유 사용자 초대 창 디자인 7dc5b61
  • 본인 프로필 표시 UI 통합 b86c9e7
  • 공유 편집자 초대시 공유자 프로필 표시되는 UI 완성 de2b230
  • 노트 텍스트 편집 UI 일부 통합 54ecc5c
  • 텍스트 편집 UI 통합 완료 eeb61a0
  • 현재 선택한 문서의 제목이 상단 네비게이션 바에 표시되도록 함 671fa1e
  • 폴더 생성 UI 디자인 완성 5ee35c3
  • 폴더구조 UI 완성 b3b2976
  • 폴더 안 폴더 구조 구현 + 노트 폴더에 중복 저장 불가 로직 추가 830cba6
  • 상위 폴더의 노트가 하위 폴더 노트보다 위에 위치하도록 렌더링 순서 변경 99ebcbd
  • 생성된 폴더 수정 기능 추가 5a783d1
  • 홈 화면 타이핑 효과, 페이드 인 효과 적용 baba7f1
  • 메모 편집 박스 및 제목 박스 디자인 개선 5f7da28
  • 상단 네비게이션 바 디자인 개선 03b45f3
  • 노트 탐색기 + 추가버튼 + 노트/폴더 추가 모달 디자인 개선 5964913
  • 노트/폴더 편집 모달 디자인 개선 b22aff4
  • 노트/폴더 표시 디자인 수정 9dd6677
  • 기본 노트 표시 UI 디자인 개선 39ffb25

chore

  • 해결된 todo 주석 삭제 9b181cf
  • 잘못 커밋된 파일 삭제 604e778
  • 사용하지 않는 import useFugueDocumentSync 문 제거 4fc6074
  • 빌드를 위해 타입 오류와 린트 오류 수정 309df11

feat

  • BE 에서 변경된 subscribe destination 에 대응 f95e561
  • MarkdownEditor 에서 커서 위치를 추적하게 함 605fe4a
  • note 생성 기능 추가 56cd4d8
  • navigation bar 제목 표시 e49eb99
  • 디렉토리와 노트 수정 기능 추가 f8466e7
  • 텍스트 에디터에서 onChange 에 이용하기 위해, 두 문자열 사이 diff 구하는 알고리즘 구현 e8f4edb
  • Fugue 알고리즘을 지원하는 자료구조 구현체 treenote 작성 86e8739
  • treenote 를 이용한 편집기 컴포넌트 추가 887d7a7
  • CRDT Op-based 연산을 주고받는 DTO type 정의 1a96f16
  • 다이어그램 테스트 동기화 기능 완성 (하드코딩된 UUID) 6e91b8c
  • 채팅 기능 재통합, 이름 올바르게 뜨도록 수정 285f782
  • 초대 링크 임시 커밋 079273e
  • 공유링크 기능 보강 2ade25b
  • 세그먼트 추가 API call 함수 추가 acf986e
  • destination 변경 c2c0a8c
  • 디자인 수정 afa9471
  • treenote 불러오기 및 서버 동기화 가능 8adb7f9
  • 다이어그램 16a10c8
  • 에 UI를 랜더링 하기위한 Portal 컴포넌트 만듦 06b10c3
  • 기존 textarea 를 활용한 텍스트 에디터 컴포넌트를 contentEditable 을 이용한 수정이 가능하도록 변경 496b067
  • monaco editor 에 동시 편집 기능을 적용한 코드 에디터 컴포넌트 추가 183eadb
  • 노트 추가 모달에 소스 코드 생성 선택 및 소스코드 언어 선택 기능을 위한 UI 추가 9ca251b
  • Language 에 파일 확장자 필드 추가 a361b36
  • 노트 추가 시 소스 코드 옵션을 선택했을 때 API 를 올바르게 호출하도록 구현함 fc97a3e
  • 노트가 소스 코드인지 아닌지 서버로부터 데이터를 받아 적절한 에디터 UI 선택 4e3a5ce
  • 폴더 깊이에 따른 Left-Margin 제거 0fe7a0c
  • github 에서 import 한 폴더에 대해 github 로고가 표시되도록 추가 d755624
  • add GitHub integration UI flows a7c7bd9
  • 불러온 리포지토리에 대해 질문하여 답변을 생성받을 수 있는 페이지 추가 a52f434
  • 더 이상 폴더를 열기 전까진 하위 파일을 불러오지 않음 892d763
  • FolderItem 의 우클릭을 통한 초대 옵션 버튼 추가 89a69c1
  • 권한 부여 취소 기능 API 연결 ce58d1b
  • 폴더에 추가할 파일 선택 기능 제거 a213901
  • 페이지 마운트 시 백그라운드에서 미리 전체 파일 목록을 불러옴 6e81acd
  • 모든 문서를 monaco-editor 에서 수정하도록 변경 988e450
  • 동시 편집 시에 caret 위치를 서로 공유할 수 있는 기능 추가 00ec355

fix

  • note를 최초로 불러올 때 클라이언트에 적용 안되는 문제 3df632c
  • documentRenderer 컴포넌트에서 MarkdownRenderer 를 클릭 시에 수정 사항을 전파하는 현상 해결 60eef93
  • 채팅 기능 복원 20aa020
  • TreeBasedDocumentRenderer 의 초기화 및 수정사항 전파 오류 해결 56fcc00
  • stomp client 콜백함수에서 state 의 클로저가 오래된 state 를 참조하여 생기는 롤백 현상 수정 f247473
  • http response 처리 시 본문이 있는 경우에도 본문을 무시하는 경우가 있는 오류 수정 806e3f7
  • 언어 변경 실패 문제 및 일반 문서 생성 시 코드 문서가 생성되는 오류 수정 6a1d3a2
  • 수정 시에 긴 문서, 혹은 긴 수정 사항을 올바르게 SEND 하지 못하던 오류 수정 391d9de
  • 태그 린트 경고 해결 8cb698d

deps

  • tiny-invariant 의존성 추가; dev mode 에서만 동작하는 assert 84a80d4

refactor

  • lastCursorPosition 과 cursorHandler prop 을 optional 로 변경 97aba48
  • 서버에서 사용자/노트 정보를 가져올 수 있도록 컴포넌트 코드에 Props를 만들어 줌 e84ab9b
  • 기존 문서를 /main에서 띄우던 방식에서 각 노트 uuid로 링크를 연결해서 띄우는 방식으로 변경 73bd0e5
  • 새로 만든 컴포넌트를 사용하지 않고 기존 컴포넌트를 재사용하는 구조로 리팩토링 ca1cc4b
  • 노트 링크 접속 방식 변경 89751f5
  • 노트 폴더 구조 UI 컴포넌트 분리 192a094
  • 폴더 추가 모달은 FolderAddModal.tsx인데, 노트 추가 모달 이름은 AddNoteModal.tsx임. 혼동을 없애기 위해 NoteAddModal.tsx로 이름 변경 및 리팩토링 2da725f
  • 폴더 모달 관련 함수와 노트 모달 관련 함수 구조가 상이한 부분을 발견함. 혼란 최소화를 위해 구조 통일 eb9cf5d
  • 사용되지 않는 플래그 변수 endEditing 제거 및 파라미터의 optional 특성 제거 8690ac8
  • TreeBasedDocumentRenderer.tsx 의 문서 동기화 코드를 커스텀훅으로 만들어 분리 dd6dc86
  • 프로그래밍 언어 목록 데이터 중복 코드 삭제 7667bcb

style

  • 쓸데 없는 주석 삭제. 코드 변경 없음. 69375a4

feature

  • 동일 Chat id 메시지 update 기능 변경 544a363
  • 동일 Chat id 메시지 update 기능 변경 648cfa8
  • 동일 Chat id 메시지 update 기능 변경 64b1896
  • 홈 화면 레이아웃 버튼 및 링크 레이아웃 완성. 동작은 미구현 e6889cc
  • 홈 화면에서 시작하기, 로그인 클릭 시 백엔드 로그인 서버로 연결 d6b962e
  • 노트 탐색기에 노트 ID가 표시되도록 함 6cddb9b
  • 노트 목록에 열고 닫을 수 있는 햄버거 버튼 기능 추가 85cd0a6
  • 파일 구조 데이터 추가 fbb69ff
  • 파일 관련 API call 함수 추가 030b2b4
  • 파일 테스트 페이지 추가 8030a2f
  • fugue 동작을 주고 받는 STOMP API 를 위한 sync hook 구현 및 기존 컴포너트가 hook 을 사용하도록 함 1123efd

remove

  • 더이상 필요 없는 기존 프로필 이미지 삭제 9ff2581

BugFix

  • DocumentRenderer에 TextBlock의 디자인을 옮기는 과정에서 그림자 효과가 누락되었던 버그 수정 a16eb4f
  • 노트 링크로 이동시 화면이 살짝 밑으로 내려가던 버그 수정 ee7b745
  • Note 타입 컴포넌트를 빠뜨렸던 버그 해결 fa14bfd

rename

  • Final.tsx에서 Footer.tsx로 이름 변경 ea5f5de

test

  • Jest 를 통한 simpleDiff.test.ts 테스트 코드 작성. Jest 의존성 추가 f685f53
  • Treetest.tsx에서 onEditNote props 전달을 빠뜨리고 있던 부분 수정 e7b54f9
  • POST 요청 출력, 트리 구조 로그 출력 테스트 06e2343

temp

  • useFugueDocumentSync 로직을 TreeBasedDocumentRenderer 컴포넌트 내부에 복사하였습니다 a9ec290

bugFix

  • 19번 줄 text 타입 명시 5e504dd
  • 305번 줄 Collaborator[]를 Promise 객체로 수정 1d42ae4
  • (버그는 아니지만 잠재적 오류 발생 가능성이 있어서 수정) getSharedFiles 함수의 반환 타입을 Promise 객체로 수정 5388f66
  • 26번 줄 folder의 id 값과 24번 째줄 부터 반환하는 <FolderItem/> 부분 오류 수정 f21be6b
  • 102번 줄 <select>에서 collaborator.permission이 PermissionDTO 타입임을 명시 230e663
  • User 타입이 글로벌 타입이기 때문에 import를 지워야 함 + fetchCurrentUserServerSide 함수의 반환 타입을 Promise 객체로 수정(잠재적 오류 발생 방지) 2e11041
  • TopNavigationBar에는 note라는 props 타입이 없지만, 15번 줄에서 note props를 전달하고 있던 오류를 수정 93a9e03
  • user는 null이면 안 됨. user가 null인지 아닌지 체크하는 if문 추가 5479821
  • ExcalidrawElement의 import 경로가 잘못되어 있었던 오류를 수정 1db7081
  • getCollaborators에 null 체크 로직 추가 7c7fd63
  • <option>을 렌더링 할 때 각 자식에 고유한 key가 없었던 오류를 수정 9eb84b3
  • (이전 커밋의 FolderEditModal.tsx와 같은 오류) <option>을 렌더링 할 때 자식마다 고유한 키가 없는 오류를 수정 e18dd2f
  • (이전 커밋의 FolderEditModal.tsx, NoteEditModal.tsx와 같은 오류) <option>을 렌더링 할 때 자식마다 고유한 키가 없는 오류를 수정 1f8e06c
  • 폴더 열고 닫기 토글 버튼이 동작하지 않던 버그를 수정 78e9c91
  • (이전과 동일한 오류) 자식 리스트를 렌더링 할 때 Fragment에 고유한 key가 없었던 오류를 수정 16f2a18
  • 백엔드 json 응답의 본문이 없는 경우에도 json을 파싱하도록 되어있었음. 본문이 없으면 true, 본문이 있을 경우에만 json 파싱하도록 수정. 3a04012
  • 폴더 수정 시, 체크박스 해제로 노트를 폴더에서 빼는 기능이 동작하지 않던 오류를 수정 27524d1
  • 폴더 수정으로 노트 위치 이동 시, 트리 새로고침 타이밍이 맞지 않아 노트가 사라진 것 처럼 보이던 버그 수정 e58948c
  • (이전 커밋과 동일한 오류) 폴더 생성 시에도 비동기 작업이 끝난 후에 트리 새로고침이 이루어 지도록 Promis.all/await 사용해 수정 0a9076c
  • AddNoteModal에서 NoteAddModal로 수정 06a9a05
  • collaborators에 null safty 추가 2bfbb8e
  • blurr 처리와 모달 표시 위치 관련 오류 수정 b8ce4df

comment

  • 현재 사용되지 않는 컴포넌트라는 것을 표시하기 위해 주석 추가 699f352

format

  • 코드 전체 포매팅(prettier 사용) 4f8ed25

help

  • 버그 수정을 위해 로그 출력을 해보았으나, 버그를 해결하지 못함 fdaf9b8

enhance

  • 불필요한 재귀적 API 호출 로직 제거 42fa2fd

layout

  • 좌우 빈 공간을 채우도록 스타일 수정 5feb856

설명

관련 이슈

Zaixian5 and others added 30 commits May 6, 2025 21:07
TODO: 1. 버튼, 링크  등의 이벤트 요소 만들기
      2. 현재는 대부분 요소의 위치나 크기가 픽셀 단위로 하드코딩되어 있는데 이를 브라우저 크기에 맞게 자동 조정되도록 만들기

참고사항: 1. public 디렉토리에 home화면 제작에 사용된 이미지와 로고 이미지를 추가하였음.
          2. 기존의 components/layout/MoaLogo.tsx는 더이상 필요 없어졌기 때문에 삭제하였음.
- CBNU-MoaNote-CapstonDesign/backend#51 BE 에서 해당 이슈에 대응하면서 subscribe destination 이 수정되었기에 이에 대응함
최초로 note를 받아올 때는 강제로 덮어씌우도록 구현하였습니다.

close #39
…se-integration-useDocumentSync

Feature/database integration use document sync
- `MarkdownEditor` 에서 현재 커서의 위치를 추적해서 `cursorHandler` 콜백을 실행함
- `MarkdownEditor` 가 마운트 될 시에 prop 으로 전달받은 `lastCursorPosition` 을 통해 커서 위치를 초기화하도록 함
- 부모 컴포넌트인 `DocumentRender` 가 커서 위치를 state 로 관리하도록 함
- 관련 todo 제거
… 를 클릭 시에 수정 사항을 전파하는 현상 해결 #45

- 기존에는 `MarkdownEditor` 의 mount 시 `useEffect` 가 실행되며 조건없이 `updateContent` 를 호출하였음
- 또한 `updateContent` 는 `documentRenderer` 의 `send` 를 호출함 (`documentRenderer` 에서 그렇게 정의함) 따라서 실제로 수정이 일어나지 않았음에도 `MarkdownEditor` 가 호출될 시에 수정 사항을 외부로 전파함
- 따라서 문서 수정에 대한 `useEffect` 내부에서 `needSend` 조건을 체크하도록 변경
… 을 optional 로 변경

- initialContent 의 기본값을 null 로 수정
- 채팅 버튼 복원
- /api/auth/me 로 호출하는 것 삭제 후 BE me API로 복구
- 같은 chat id를 가진 메시지가 새로 들어오면 해당 메시지를 update 하도록 기능 변경
- 같은 chat id를 가진 메시지가 새로 들어오면 해당 메시지를 update 하도록 기능 변경
- 같은 chat id를 가진 메시지가 새로 들어오면 해당 메시지를 update 하도록 기능 변경
…ction

홈 화면에서 로그인 페이지로 이동 구현
- NoteUI.tsx, TitleBlock.tsx, TextBlock.tsx, DesignBlock.tsx에도 해당 매개 변수가 필요하나 아직 Props 전달 코드를 작성하지 않음.
- NoteUI.tsx 하위의 세 컴포넌트에 전부 같은 Props를 전달하는 방법을 고민 중.
sony-string and others added 27 commits October 12, 2025 03:27
- 일반 문서 /소스코드 문서 타입 선택 스위치 UI 추가
- 소스코드 문서 선택 시 언어 옵션 선택 UI 및 상태 추가
- onAdd 에서 위에서 추가한 옵션을 전달받기 위해 props 수정
- 필요한 type 및 enum 추가
[디자인 개선]
기존 텍스트 블록과 디자인 통일(그라데이션 색상 형태 등)

[추가된 기능]
1. 코드 복사
2. 코드 다운로드
3. 원하는 언어 선택(기존에는 default로 설정된 javascript만 됐었음)

[참고사항]
코드 에디터 개선 작업을 위해 NoteUI.tsx에 임시로 CodeEditor.tsx 컴포넌트 삽입함
- 파일 다운로드 기능 지원을 위함
- LANGUAGES 리스트에 파일 확장자 데이터 추가
- 이미 코드 베이스에 존재하는 객체를 활용하도록 수정
- note.ts 에서 각 언어의 value 를 backend api 와 동일한 스펙을 갖도록 수정
- 언어 변경 로직을 CodeEditor 의 언어 선택 로직과 동일하게 변경. 기존 코드는 undefined 가 set 되는 오류가 있었음
- 일반 문서 생성 시에도 language 가 set 되어 있고, 이것을 onAdd 에 항상 그대로 넘겨서 코드 문서가 생성되는 문제가 있었기에 해결함
- CodeEditor 의 경우 기본 언어를 서버로부터 받은 데이터를 통해 설정하도록 함
- 폴더 깊이가 깊어지면 지나치게 left-margin 이 생겨서 UI 가 망가지는 현상 때문
- 기존 API 에서 FileDTO 에 관련 필드가 추가되었기에 이를 활용
* **src/app/diagram/[uuid]/ClientDiagram.tsx**: 린트 오류를 유발하던 사용되지 않는 `TopNavigationBar` import를 제거.
* **src/app/diagram/[uuid]/page.tsx**: `params`를 Promise로 취급하고 사용 전에 await하여 Next.js의 기대와 맞게 타입을 맞춤.
* **src/app/doc/[uuid]/page.tsx**: 문서 페이지 라우트에도 동일한 Promise 기반 `params` 타입 수정 적용.
* **src/app/test/page.tsx**: 사용되지 않는 파일 서비스 import를 정리해 실제로 사용하는 헬퍼만 남김.
* **src/components/diagram/DiagramRenderer.tsx**: 린트 경고를 없애기 위해 사용하지 않는 React 훅과 Excalidraw import를 제거.
* **src/components/layout/NotePage/FolderItem.tsx**: GitHub 아이콘을 툴팁을 담고 보조기술에서 SVG를 숨기는 `<span>`으로 감쌈.
* **src/components/layout/NotePage/InviteUserModal.tsx**: 아이콘 import를 단순화하고, 미완성 제거 로직을 로그할 때 collaborator 인자가 참조되도록 보장.
* **src/components/layout/NotePage/NoteUI.tsx**: 상태 훅의 타입 체크를 위해 누락된 `NoteDTO` 타입 import를 추가.
* **src/libs/structures/treenote.ts**: 이전 실험에서 남은 사용되지 않는 `codeText` import를 제거.
* **src/types/file.d.ts**: 빈 `Segment` 인터페이스를 `SegmentDTO` 별칭으로 대체하여 빈 객체 타입에 대한 린트 규칙을 충족.
- 유저가 권한을 가진 파일이 너무 많으면 로딩이 현저히 느려지는 현상을 해결하기 위해, Lazy 하게 파일을 로딩하도록 기능을 변경함
- 이제 이 UI 로 권한 부여 대상을 폴더에도 가능함
- 기능의 편리함에 비해 로딩 속도에 주는 불이익이 더 크다고 판단함
- 전체 파일을 재귀적으로 이미 불러오면서도 이를 불필요하게 한 번 더 재귀적으로 호출하여 O(N^2) 복잡도가 되었었음
- 파일 위치 선택을 위한 API 를 미리 호출하여 로딩하여 파일 위치 선택이 필요한 모달의 마운트 속도 개선
- CodeEditor 는 수정 시 기존 개행문자를 무시하고 항상 모든 개행문자를 CRLF 로 (윈도우에서만 발생했을 수도 있음) 변환하던 현상이 있었음
- 위 현상때문에 긴 수정 사항, 혹은 긴 문서에서의 수정이 너무 큰 메시지를 생성하여 오류를 유발하였음
- CRLF / LF 중 판별하여 이를 존중하도록 수정함 (기존 문서가 CR 개행 문자를 사용하는 경우는 적기 때문에 고려하지 않았음)
- MarkdownRenderer 또한 monaco-editor 에서 선택 언어가 Markdown 일때만 미리보기를 띄울 수 있도록 함
- 기존 편집기는 @deprecated 처리함
- .md, .json, .html, .css, .txt,  지원 추가
- 기존 구독을 StompSubscription 을 통하여 관리하도록 리팩토링
- useCallback 을 통한 최적화 유도
@sony-string sony-string self-assigned this Nov 11, 2025
@sony-string
sony-string merged commit 13d3832 into main Nov 11, 2025
1 check passed

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/libs/client/file.ts
Comment on lines +49 to +70
async function postRequest(location: string, stringifiedBody?: string) {
console.log("post요청 location:", location);
console.log("post요청 body:", stringifiedBody);

const res = await fetch(`${getServerUrl()}${location}`, {
method: "POST",
credentials: "include",
body: stringifiedBody,
headers: {
"Content-Type": "application/json",
},
});

console.log(`postRequest[${res.status}]: ${location}`);


// 본문이 있으면 json 파싱
const responseBody = await res.json();
if (!responseBody)
return res.ok;
else
return responseBody;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Handle non‑JSON POST responses safely

The new postRequest helper always executes await res.json() and then returns the parsed payload even when res.ok is false. Many of the APIs this wrapper calls (e.g. create/edit/delete endpoints) return an empty body or a bare error message with 4xx status codes. In those cases this helper will either throw at res.json() for 204/empty responses or return a truthy error object, causing callers such as createFile to treat failed requests as successes. This means a network or server-side validation error will crash the client or leave the UI in a state that assumes a file was created. Consider checking res.ok and the Content-Type before parsing, and fall back to null/false on errors.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants