Skip to content

Conversation

@Grit03
Copy link
Member

@Grit03 Grit03 commented Jan 8, 2026

🔗 관련 이슈

✅ 작업 내용

핵심 기능 구현

  • 기술 스택 드래그 앤 드롭 기능 구현

    • @dnd-kit/core 라이브러리를 활용한 드래그 앤 드롭 시스템 구축
    • DraggableTechStackItem: 모달 내 드래그 가능한 기술 스택 아이템 컴포넌트
    • SelectedTechStackBox: useDroppable을 활용한 드롭 영역 구현
    • TechStackWidget: DndContext로 전체 드래그 앤 드롭 컨텍스트 관리
    • DragOverlay를 사용하여 드래그 중인 아이템을 별도 레이어에서 렌더링
  • ReactPortal 컴포넌트 추가

    • 모달을 DOM 트리 외부(root)에 렌더링하기 위한 포털 컴포넌트 구현
    • parent prop을 통해 렌더링 위치 커스터마이징 가능
  • TechStackModal 개선

    • 헤더 드래그를 통한 모달 위치 이동 기능 구현
    • ReactPortal을 통해 캔버스 transform에 영향받지 않도록 처리
  • TechStackItem 컴포넌트 추가

    • 기술 스택 아이콘 및 이름을 표시하는 UI 컴포넌트
    • 아이콘 로딩 실패 시 첫 글자를 표시하는 fallback 처리

트러블슈팅

  • 드래그 overlay 좌표 버그 수정

    • DragOverlay가 캔버스 transform의 영향을 받아 좌표가 틀어지는 문제 해결
    • ReactPortal을 사용하여 모달과 overlay를 캔버스 외부에서 렌더링하도록 변경
  • CursorWithName 컴포넌트 대소문자 오류 수정

    • 파일명 대소문자 불일치로 인한 import 오류 해결

리팩토링

  • TechStack 타입에 id 필드 추가 및 타입 분리
  • 상대 경로를 모두 절대 경로(@/) 방식으로 변경
  • Props 인터페이스 명시적 추가 및 적용
  • dark 모드 클래스 추가 및 스타일 수정

📸 스크린샷 / 데모 (옵션)

2026-01-08.6.19.01.mov

🧪 테스트 방법 (옵션)

  1. 워크스페이스 페이지에서 기술 스택 위젯의 "추가하기" 버튼 클릭
  2. 기술 스택 모달에서 원하는 기술을 드래그하여 위젯의 드롭 영역에 드롭
  3. 선택된 기술 스택이 위젯에 표시되는지 확인
  4. 모달 헤더를 드래그하여 모달 위치 이동 가능 여부 확인
  5. 선택된 기술 스택의 X 버튼을 클릭하여 삭제 기능 확인

💬 참고 사항

  • @dnd-kit/core 패키지가 새로 추가되었습니다
  • 드래그 overlay의 좌표 문제는 캔버스의 transform과 충돌하여 발생했으며, ReactPortal을 통해 별도 DOM 트리에서 렌더링하는 방식으로 해결했습니다.

Important

전반적으로 canvas의 이벤트 핸들러가 모든 이벤트를 다 받을 수 있어서, 이벤트 전파 방지 코드를 작성을 많이 해야했습니다.
현재 상태라면 유지보수하기 어려울 것 같아, 더 적절한 아키텍쳐를 고안해보아야할 것 같습니다!

Grit03 added 12 commits January 8, 2026 01:42
- parent 속성 기본값을 document.body에서 defaultRoot로 변경
- onRemove 메서드를 onClose로 변경
- LuTrash2 아이콘을 LuX 아이콘으로 변경
- div 요소를 header 요소로 변경하여 접근성 개선
- props를 추가하여 ModalHeader의 유연성 향상
- 기술 스택을 표시하는 TechStackItem 컴포넌트와 드래그 가능한 DraggableTechStackItem 구현
- LabelList 및 TechLabel 컴포넌트의 네이밍을TechStackModal에서 TechStackList로 변경
- 모달의 태그를 dialog로 조정하여, 시멘틱 태그를 활용
- 배럴 패턴으로 export
- 세부 컴포넌트를 분리하여 디렉토리를 구성하여 배럴 패턴으로 export
- 기술 스택 모달에서 선택한 내용으로 위젯에 추가되는 드래그 앤 드롭 기능 구현
- 선택된 기술 스택을 표시하고 제거할 수 있는 UI 구성
- index.html에서 root div에 "dark" 클래스 추가
- WorkSpacePage 컴포넌트에서 불필요한 "dark" 클래스 제거
- 전체적인 스타일 일관성을 위해 수정
@github-actions github-actions bot added the ✨ feat 새로운 기능 추가 label Jan 8, 2026
Grit03 added 10 commits January 8, 2026 13:56
- techStackInfo.ts 파일에서 모든 기술 스택 항목에 대해 id 필드 추가
- 새로운 techStack.ts 파일을 생성하여 TechStack 인터페이스 정의
- drag id에서 정규식으로 기술 스택의 id를 찾아 적절한 기술 스택 이름을 반환
- DraggableTechStackItem prop을 TechStack으로 변경
- useDraggable 훅에서 id를 `tech-stack-${id}` 형식으로 설정
- 코드 가독성을 높이기 위해 filter 함수의 매개변수 이름을 tech로 변경
- selectedTechStacks 기술 스택 데이터 타입을 TechStack[]으로 변경하여 전부 받도록 설정
- handleRemoveTech 메서드를 techId를 사용하여 기술 스택 항목을 제거하도록 수정
- TechStackItem에서 기술 스택 이름을 getTechStackName 함수를 통해 가져오도록 변경
- Merge remote-tracking branch 'origin/main' into feat/5-techstack-dnd
- DragOverlay를 모달에 위치하여 react portal에 위치하도록 하여 transform 영향을 받지 않도록 수정
- dialog에 event propagtion을 막아서, 모달 이동 및 아이템 이동시 캔버스가 이동되지 않도록 막음
- DraggableTechStackItem의 opacity를 0.5에서 0.8로 변경하여 드래그 중 시각적 피드백을 강화
@Grit03 Grit03 changed the title Feat/5 techstack dnd feat: 기술 스택 드래그 앤 드롭 기능 구현 Jan 8, 2026
@Grit03 Grit03 marked this pull request as ready for review January 8, 2026 09:22
@auto-assign auto-assign bot requested review from SnailW, as-zini and davidpro08 January 8, 2026 09:22
Copy link
Collaborator

@SnailW SnailW 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
Collaborator

@davidpro08 davidpro08 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
Collaborator

@as-zini as-zini left a comment

Choose a reason for hiding this comment

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

dnd 구현이 생각보다 힘든 작업이었네요🥹 고생많으셨습니다!

@Grit03 Grit03 merged commit 60aafba into main Jan 8, 2026
3 checks passed
@Grit03 Grit03 deleted the feat/5-techstack-dnd branch January 8, 2026 15:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ feat 새로운 기능 추가

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[SUB] 사용자는 기술 스택 위젯의 추가하기 버튼을 사용하여, 기술 스택 선택 모달을 띄울 수 있다.

5 participants