선택 프로젝트 — 주요 경력 프로젝트
문서·일정 운영 플랫폼
프로젝트를 수행하며 생기는 문서·업무·일정을 한 환경에서 관리하는 서비스입니다. 프로젝트마다 다른 관리 항목을 담을 수 있는 커스텀 필드 체계, 지연과 리스크를 먼저 보여주는 경보 화면, 필요한 위젯만 골라 놓는 대시보드를 맡아 만들었습니다.
프론트엔드 개발 · 전체 427커밋 중 109건(26%), 이슈 63건 · 274개 파일/2026.03 – 2026.09/Next.js 15 (App Router) / React 19 / TypeScript / TanStack Query / Zustand / @dnd-kit / Tailwind CSS / Radix UI

01 / 04
지금 막힌 일을 먼저 보여주는 개요
프로젝트에 들어오면 처음 만나는 화면입니다. 막힌 업무와 마감이 가까운 문서를 맨 위로 올리고, 각자 필요한 위젯만 골라 배치하게 했습니다. 위젯은 한 곳에 등록되고, 기존 개요 컴포넌트를 그대로 재사용하는 실데이터 위젯과 예시 데이터 위젯을 배지로 구분해 어디까지가 진짜인지 보는 사람이 알 수 있게 했습니다. 프로젝트명·구성원·문서명은 모두 지어낸 값입니다.
해결한 문제
- 백엔드가 NestJS에서 Spring Boot(Kotlin)로 통째로 넘어가는 중이었습니다. 엔드포인트와 DTO가 수시로 바뀌어 뷰 레이어가 런타임에 깨질 위험이 컸습니다.
- 프로젝트마다 추적해야 하는 항목이 달라 고정된 필드로는 감당이 안 됐습니다. 그렇다고 필드를 마음대로 고치게 두면, 이미 입력된 값이 어느 시점의 정의를 따른 것인지 알 수 없게 됩니다.
내가 기여한 것
- Resource 클래스 패턴으로 API 추상화 계층을 세워, 엔드포인트가 바뀌어도 컴포넌트까지 전파되지 않게 했습니다. TanStack Query(서버 캐시)와 Zustand(로컬 UI 상태)의 역할은 엄격히 나눴습니다.
- 필드셋에 버전을 붙여 정의와 값이 어긋나지 않게 했습니다. 구성은 초안 → 배포 → 대체로만 움직이고 셋당 배포본은 하나뿐이며, 업무는 늘 최신 배포본을 따릅니다. 배포는 되돌릴 수 없어서, 이번 버전에서 빠지는 필드를 먼저 세어 보여주고 한 번 쓰인 필드는 영구히 잠급니다. 필수 여부는 필드 기본값 위에 필드셋별 오버라이드를 얹어 계산합니다.
- AI 검토 워크플로를 단독 구현했습니다. 검토 요청은 빈 응답을 즉시 돌려줘서 언제 끝나는지 알려주지 않습니다. 그래서 요청 직전 결과의 시그니처(실행 ID·이슈 수·각 이슈의 해결 여부)를 찍어 두고 결과를 주기적으로 다시 읽어, 시그니처가 바뀌었을 때를 완료로 판정합니다. 실행 ID만 보면 서버가 실행을 재사용할 때 영영 끝나지 않습니다.
- AI 응답 시간은 보장되지 않아 기다림에 상한을 뒀습니다. 90초가 지나면 폴링을 끊고 "백그라운드에서 진행 중, 끝나면 자동 반영"으로 넘겨 무한 스피너를 만들지 않습니다. 진행 여부도 화면의 타이머가 아니라 서버가 내려주는 상태로 판정해, 검토 도중 새로고침하거나 탭을 옮겨도 진행 표시가 이어집니다. 체크리스트를 추가하면 자동으로 대기열에 오르는데, 이 대기 상태를 "검토 중"으로 쓰면 거짓말이라 실제로 도는 상태만 검토 중으로 표시합니다.
- AI가 지적한 내용은 그것이 나온 체크리스트 줄 아래에 붙이고, AI가 쓴 문장에는 별도 라벨을 달아 사람이 쓴 지침과 섞이지 않게 했습니다. 심각도는 '검토 필요'와 '참고' 둘만 두고, 해결 처리하면 이후 검토에서 제외되는 되돌릴 수 없는 선택이라 누르기 전에 그 사실을 먼저 확인받습니다.
- 지연·우회·기한임박 경보를 한 화면에 모으고, 세 조건을 셀렉트 하나로 합쳤습니다. 서버가 동시 지정을 허용하지 않는 조합이라, 두 개를 같이 켤 수 있게 두는 대신 애초에 고를 수 없게 만들었습니다.
- @dnd-kit 기반 위젯 대시보드를 만들어 각자 필요한 위젯만 골라 배치하게 했습니다. 위젯은 레지스트리 한 곳에 등록되고, 기존 개요 화면 컴포넌트를 그대로 재사용하는 실데이터 위젯과 예시 데이터 위젯을 배지로 구분합니다.
- macOS Finder식 다단 컬럼 문서함을 만들고 URL의 folderId와 탐색 상태를 묶어 딥링크가 되게 했습니다. PDF.js의 HTTPS CMap 폰트 오류를 잡고 Word 인라인 뷰어를 붙여 첨부를 앱 밖으로 나가지 않고 열람하게 했고, 권한이 없거나 삭제된 프로젝트로 들어갈 때 403이 반복되던 루프도 막았습니다.
임팩트
0건
백엔드 교체 기간 내내 배포 장애
63건
단독으로 처리한 이슈
버전 단위
필드 정의 변경을 묶어 값 정합성 유지
90초
AI 응답 대기 상한 · 이후 백그라운드 전환
PDF·Word
앱 안에서 바로 열람