Skip to content

feat(resume): 이력서 업로드/관리 기능 구현 및 실제 API 연동#24

Merged
i3months merged 11 commits into
feature/workspace-layoutfrom
feature/resume-management
May 20, 2026
Merged

feat(resume): 이력서 업로드/관리 기능 구현 및 실제 API 연동#24
i3months merged 11 commits into
feature/workspace-layoutfrom
feature/resume-management

Conversation

@Jaeho-Site

Copy link
Copy Markdown
Contributor

변경 사항

📋 작업 요약

이력서 도메인(features/resume) 슬라이스를 생성하고, 파일 업로드, 목록 조회, 삭제 기능의 UI 로직과 실제 백엔드 API 연동을 완료했습니다.

✨ 주요 변경 사항

  • 실제 백엔드 API 연동 (api/resume.ts)
    • 스프린트 목표에 맞추어 POST, GET, DELETE /api/resumes 엔드포인트와 통신하는 실제 코드를 작성했습니다. (Mock 데이터 미사용)
  • 상태 전이 및 폴링 (useResumes.ts)
    • TanStack Query를 활용하여, 분석 상태(PENDING, ANALYZING)일 경우 2초 단위로 상태를 갱신(Polling)하도록 처리했습니다.
  • ResumeDropzone 컴포넌트
    • 20MB 이하, PDF 파일만 올라가도록 클라이언트 사전 검증 로직을 추가했습니다.
    • 파일 업로드 시 자연스러운 UX를 위해 1.5초간 진행되는 진행률 바(Progress Bar) 애니메이션을 적용했습니다.
  • ResumeList 컴포넌트
    • 4-State UI 패턴(로딩, 에러, 빈 화면, 리스트)을 적용하여 예외 상황을 방어했습니다.
    • 각 이력서 카드에 상태별 뱃지(초록색, 스피너 등)와 삭제 확인 모달(confirm)을 추가했습니다.

💡 리뷰어 참고 사항

  • 실제 백엔드 서버 구동 시 정상 동작하는 연동 코드입니다. 따라서 현재 백엔드 서버가 다운되어 있거나 관련 도메인 로직이 업로드되기 전에는 로컬 환경에서 정상적인 실행 및 API 테스트가 어려울 수 있습니다 (통신 에러 발생 가능).**
  • Stacked PR 구조이므로, 변경 사항은 앞선 feature/workspace-layout PR을 베이스로 확인해 주세요.

@vercel

vercel Bot commented May 16, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
stackup Ready Ready Preview, Comment May 19, 2026 4:18pm

@Jaeho-Site Jaeho-Site changed the base branch from dev to feature/workspace-layout May 16, 2026 14:21
validateResumeFile,
} from '@/features/resume/lib/file-validation'

const FAKE_PROGRESS_DURATION_MS = 1_500

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

이건 곧 사라지겠군요

onError?: (message: string) => void
}

export function UploadResumeButton({ onError }: Props) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

resumedropzone 과 유사한 내용인듯한데. 하나로 공통화해서 쓸 수 있지 않을까 싶네요.
커스텀 훅으로 빼도 좋구요.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

오 거의 복붙 수준의 로직이었어서 바로 훅으로 분리했습니다.
좋은 리뷰네요 :)

function ResumeCard({ resume }: { resume: ResumeResponse }) {
const remove = useDeleteResumeMutation()
const handleDelete = () => {
const ok = window.confirm(

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

이부분도 나중에는 커스텀 UI로 바꾸면 좋겠습니다.

@i3months i3months merged commit be8774e into feature/workspace-layout May 20, 2026
2 checks passed
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.

2 participants