Skip to content

[Fix] 경험 등록/수정/조회 페이지 리팩토링 전 버그 수정#157

Merged
u-zzn merged 3 commits into
devfrom
fix/#156/experience-pre-refactor-bugs
Mar 23, 2026
Merged

[Fix] 경험 등록/수정/조회 페이지 리팩토링 전 버그 수정#157
u-zzn merged 3 commits into
devfrom
fix/#156/experience-pre-refactor-bugs

Conversation

@u-zzn

@u-zzn u-zzn commented Mar 10, 2026

Copy link
Copy Markdown
Collaborator

✏️ Summary

  • close [Fix] 경험 등록/수정/조회 페이지 리팩토링 전 버그 수정 #156

  • 경험 등록/수정/삭제 페이지 리팩토링 전에, 선행 버그 수정 작업을 진행했습니다.

  • Query Key 오타 및 잘못된 Query Key 참조를 수정해 캐시 키가 의도한 도메인 기준으로 동작하도록 바로잡았습니다.

  • 제출 중 중복 요청이 발생하지 않도록 더블 submit 방지 로직을 추가하고, 에러 메시지 하드코딩 문자열을 상수로 분리해 메시지 관리 일관성을 높였습니다.

📑 Tasks

✔️ Query Key 오타 및 잘못된 참조 수정

  • experienceQueryKey.all()에서 "experiene"로 작성되어 있던 오타를 "experience"로 수정했습니다.
  • aiReportsQueryKey.list()experienceQueryKey.all()을 참조하고 있던 문제를 aiReportsQueryKey.all() 참조로 수정했습니다.
  • 같은 query-key.ts 파일 내에서 발견된 단순 버그들이라, 리팩토링 전에 먼저 바로잡아 이후 캐시 무효화 및 조회 흐름 기준선을 명확히 하고자 했습니다.
// before
all: () => ["experiene"]

// after
all: () => ["experience"]
// before
list: (page: number, keyword?: string) => [
  ...experienceQueryKey.all(),
  page,
  keyword,
]

// after
list: (page: number, keyword?: string) => [
  ...aiReportsQueryKey.all(),
  page,
  keyword,
]

✔️ 경험 등록/수정 시 더블 submit 방지

  • submit 함수 진입 시점에 isSubmitting 상태를 즉시 확인하는 guard를 추가해, 제출 중 중복 호출이 발생하면 바로 return 하도록 처리했습니다.
  • UI 레벨에서도 작성완료 버튼에 disabled={isSubmitting}을 적용해, 사용자가 제출 중 상태를 시각적으로 인지할 수 있도록 했습니다.
  • 단순히 버튼만 비활성화하는 방식이 아니라, 로직 레벨 + UI 레벨로 이중 방어하도록 구성했습니다.
const submit = useCallback(async () => {
  const { isSubmitting } = useExperienceDetailStore.getState();
  if (isSubmitting) return;

  // ...
}, []);
<Button
  variant="primary"
  size="small"
  onClick={submit}
  disabled={isSubmitting}
>
  작성완료
</Button>

✔️ 에러 메시지 매직 스트링 상수화

  • experience-detail-page.tsx에 직접 하드코딩되어 있던 "경험 데이터를 불러오는데 실패했습니다." 문자열을 EXPERIENCE_MESSAGES.API.FETCH_FAILED 상수로 분리했습니다.
  • 메시지 관리 위치를 messages.ts로 일원화해, 이후 문구 수정이나 에러 정책 확장 시 관리가 쉬운 구조로 정리했습니다.
API: {
  SAVE_FAILED: "경험 저장에 실패했습니다. 다시 시도해주세요",
  DELETE_FAILED: "경험 삭제에 실패했습니다. 다시 시도해주세요",
  DEFAULT_SETTING_FAILED: "기본 경험 설정에 실패했습니다",
  FETCH_FAILED: "경험 데이터를 불러오는데 실패했습니다.",
}
if (shouldFetch && isError) {
  return <div>{EXPERIENCE_MESSAGES.API.FETCH_FAILED}</div>;
}

👀 To Reviewer

  • 이번 PR은 경험 등록/수정/조회 페이지 전반 리팩토링에 앞서, 버그 수정에 초점을 맞춘 작은 PR입니다 🥹 리팩토링이랑 pr을 같이 쓰자니 애매해서 너무 작은 수정이긴 하지만 .. pr을 분리했습니닷 ..
  • 리뷰 시에는 Query Key 수정이 실제 조회/캐시 무효화 흐름에 문제 없는지, 더블 submit 방지 방식이 현재 UX 흐름과 잘 맞는지, 그리고 messages.ts 기반 메시지 관리 방향이 적절한지 위주로 봐주시면 감사하겠습니다!
  • 이후 약 3주 동안 경험 등록/수정/조회 페이지에 대해 단계적으로 리팩토링을 진행할 계획이며, 현재는 아래와 같은 흐름을 고려하고 있습니다.

현재 고려 중인 리팩토링 흐름

  1. PR 1 - 버그 수정

    • Query Key 오타 수정
    • 잘못된 Query Key 참조 수정
    • 더블 submit 방지
    • 에러 메시지 매직 스트링 상수화
  2. PR 2 - 중복 코드 제거 및 모듈 구조 정리

현재 experience-detail feature 내부에는 동일한 로직이 hook 버전과 순수 함수 버전으로 이중 구현되어 있는 부분이 있으며,
실제 사용되지 않는 hook도 함께 남아 있는 상태입니다.

또한 index.ts 배럴 파일에서 외부에서 사용되지 않는 내부 유틸과 로직까지 광범위하게 re-export되고 있어, feature의 public API 범위가 불필요하게 넓어지고 import 경로 판단이 모호해지는 문제가 있습니다.

따라서 아래와 같은 작업 진행하고자 합니다.

  • 실제 사용되지 않는 미사용 hook 제거
  • 동일 로직이 hook/순수 함수 두 형태로 존재하는 경우 사용되는 구현만 남기고 정리
  • hook이 아닌 파일에 붙어 있는 use- prefix 제거 및 파일명 정리
  • index.ts 배럴 파일에서 외부에서 실제 사용하는 API만 export하도록 범위 축소
  • shared util re-export 제거 등 feature public API 정리

index.ts export 정리는 오늘 정기 회의를 통해 결정된 기준에 맞추어 public API 범위를 재정리할 예정입니다.

  1. PR 3 - API 타입 안전성 강화 및 Alert 시스템 정리

현재 일부 API 훅에서 응답 타입을 as unknown as 형태로 강제 캐스팅하고 있어, 실제 응답 구조와 타입 정의가 어긋나더라도 컴파일 단계에서 잡히지 않는 문제가 있는 것을 확인했습니다.

또한 경험 페이지 전용 Alert helper 함수가 여러 개로 분산되어 있어 메시지만 다른 유사 함수들이 반복적으로 존재하는 상태입니다.

따라서 아래와 같은 작업 진행하고자 합니다.

  • as unknown as 형태의 unsafe 타입 캐스팅 제거
  • API 응답을 명시적으로 변환하는 매핑 함수(toEntity / toList 등) 도입
  • use-actions.ts 내부에 있던 DTO 변환 로직을 lib 계층으로 이동
  • 여러 개로 흩어진 Alert helper 함수를 메시지 key 기반의 공통 함수로 통합
  1. PR 4 - Zustand 스토어 구조 개선

현재 경험 페이지 스토어에는 다음과 같은 구조적 문제가 있습니다.

  • isSubmitting, isTransitioning 같은 상태를 스토어에서 수동으로 관리
  • isDraftDirty가 항상 initialDraft와 비교되어 edit 모드에서도 dirty로 판단되는 버그 존재
  • defaultExperience 상태가 불필요한 객체 래핑 구조로 되어 있음

따라서 아래와 같은 작업 진행하고자 합니다.

  • isSubmitting 상태 제거 → React Query mutation.isPending으로 대체
  • isTransitioning 플래그 제거
  • savedSnapshot 상태를 도입하여 edit 모드에서 저장된 값과 비교하도록 변경
  • isDraftDirty 비교 로직을 mode 기반 비교 방식으로 수정
  • defaultExperience 구조를 defaultExperienceId로 단순화
  1. PR 5 - 폼 검증 및 STAR 필드 config화

현재 경험 입력 폼에서는 STAR 필드(Situation, Task, Action, Result)가 각 컴포넌트에서 수동으로 반복 작성되어 있으며, 검증 로직 또한 별도의 상수와 분리된 형태로 관리되고 있는 상황입니다.

따라서 아래와 같은 작업 진행하고자 합니다.

  • STAR 필드 정보를 하나의 config (STAR_FIELDS)로 통합
  • Form / Viewer / validation에서 해당 config를 공통으로 참조
  • STAR 필드 렌더링을 하드코딩 → map 기반 데이터 렌더링 구조로 변경
  • blur 시점 기반 실시간 필드 검증 로직 추가
  • 입력 길이를 표시하는 글자 수 카운터 UI 추가
  1. PR 6 - DatePicker 최적화 및 컴포넌트 책임 분리

현재 ExperienceViewer와 ExperienceForm 컴포넌트에는 다음 문제가 있습니다.

  • View 모드에서도 DatePicker 컴포넌트를 disabled 상태로 렌더링
  • Viewer/Form 내부에 헤더 UI, 삭제 모달, 데이터 표시 로직이 혼합
  • 단일 컴포넌트가 여러 책임을 동시에 담당

따라서 아래와 같은 작업 진행하고자 합니다.

  • 삭제 확인 모달을 ExperienceDeleteModal 컴포넌트로 분리
  • StickyHeader 기반 헤더 UI를
    • ExperienceViewHeader
    • ExperienceFormHeader
      컴포넌트로 분리
  • Viewer/Form 컴포넌트는 순수 UI 역할만 담당하도록 정리
  1. PR 7 - Skeleton / Error Boundary / 접근성 개선

현재 경험 페이지에는 다음과 같은 UX 문제가 남아 있습니다.

  • API 로딩 중 빈 화면 표시
  • 에러 발생 시 스타일 없는 텍스트만 표시
  • 일부 입력 필드에 label 및 aria 속성이 없는 접근성 문제

따라서 아래와 같은 작업을 진행할 예정입니다.

  • 로딩 상태에서 표시할 ExperienceSkeleton UI 추가
  • 에러 상태를 처리하는 ExperienceError 컴포넌트 추가
  • 렌더링 오류를 처리하기 위한 ErrorBoundary 도입
  • 입력 필드에 label, aria-invalid, aria-describedby접근성 속성 보완
  • 목록 UI에 role="list" / role="listitem"스크린리더 대응 속성 추가
  • 위와 같이 대략적으로만 계획해본 경험 등록/수정/조회 페이지 리팩토링 순서가 적절한지, 혹은 더 먼저 정리해야 할 부분이 있는지 의견 부탁드립니다.
  • 또한 현재 생각한 PR 분리 단위가 너무 잘게 쪼개진 편인지 / 적절한 수준인지에 대해서도 함께 의견 주시면 이후 작업 계획을 조정하는 데 도움이 될 것 같습니다 🙇🏻‍♀️

📸 Screenshot

🔔 ETC

@github-actions github-actions Bot added 🐛FIX 기능적 오류, 버그 해결 유진🍒 labels Mar 10, 2026
@coderabbitai

coderabbitai Bot commented Mar 10, 2026

Copy link
Copy Markdown
📝 Walkthrough

Walkthrough

폼 제출 시 중복 방지 기능을 추가하고, API 에러 메시지를 상수화했으며, 쿼리 키의 오타를 수정했습니다.

Changes

Cohort / File(s) Summary
중복 제출 방지 기능
src/features/experience-detail/model/use-actions.ts, src/features/experience-detail/ui/experience-form/experience-form.tsx
isSubmitting 상태를 이용해 폼 제출 중복을 방지합니다. 스토어에서 isSubmitting 상태를 읽어 이미 진행 중인 제출을 조기에 차단하고, 버튼을 비활성화합니다.
에러 메시지 관리
src/features/experience-detail/config/messages.ts, src/pages/experience-detail/experience-detail-page.tsx
API 에러 메시지를 하드코딩에서 상수화하여 유지보수성을 개선합니다. FETCH_FAILED 메시지를 추가하고 이를 활용합니다.
쿼리 키 수정
src/shared/api/config/query-key.ts
experienceQueryKey.all의 오타("experiene" → "experience")를 수정하고, aiReportsQueryKey.list가 올바른 쿼리 키를 참조하도록 변경합니다.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~8 minutes

Suggested labels

정민🍐, 유진🍒

Suggested reviewers

  • odukong
  • hummingbbird
  • qowjdals23
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Linked Issues check ✅ Passed PR의 모든 변경사항이 이슈 #156의 요구사항을 충족합니다. Query Key 오타 수정, 잘못된 참조 수정, 더블 서밋 방지, 매직 스트링 상수화 모두 구현되었습니다.
Out of Scope Changes check ✅ Passed 모든 변경사항이 이슈 #156의 범위 내에 있으며, PR 설명과 일치합니다. 추가적인 범위 밖의 변경은 없습니다.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Title check ✅ Passed PR 제목이 주요 변경사항을 명확하게 반영하고 있습니다. '[Fix] 경험 등록/수정/조회 페이지 리팩토링 전 버그 수정'은 쿼리 키 오타 수정, 이중 제출 방지, 에러 메시지 상수화라는 핵심 버그 수정 내용을 정확히 요약하고 있습니다.
Description check ✅ Passed PR 설명이 템플릿 구조를 잘 따르고 있으며, 작업 내용이 명확하고 상세하게 작성되었습니다.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Tip

CodeRabbit can use TruffleHog to scan for secrets in your code with verification capabilities.

Add a TruffleHog config file (e.g. trufflehog-config.yml, trufflehog.yml) to your project to customize detectors and scanning behavior. The tool runs only when a config file is present.

@github-actions

Copy link
Copy Markdown

🚀 빌드 결과

린트 검사 완료
빌드 성공

로그 확인하기
Actions 탭에서 자세히 보기

@u-zzn u-zzn changed the title [Fix] [Fix] 경험 등록/수정/조회 페이지 리팩토링 전 버그 수정 Mar 10, 2026

@coderabbitai coderabbitai 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.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/features/experience-detail/model/use-actions.ts (1)

110-131: 🧹 Nitpick | 🔵 Trivial

isSubmitting 플래그가 stuck 상태로 남을 수 있는 edge case가 있어요.

현재 구조에서 setIsSubmitting(true) 이후 mutate() 호출 시, 성공/실패 콜백에서만 플래그가 해제돼요. 하지만 다음 상황에서 플래그가 true로 남을 수 있어요:

  1. 컴포넌트가 언마운트되어 콜백이 호출되지 않는 경우
  2. 네트워크 요청이 취소되는 경우

이 PR의 범위가 pre-refactor 버그 픽스이므로, 현재 구현으로도 대부분의 이중 제출 시나리오를 방지할 수 있어요. 하지만 향후 리팩토링 시 다음 패턴을 고려해보세요:

  • onSettled 콜백을 사용하여 성공/실패 모두에서 플래그 해제
  • 또는 페이지 진입 시 isSubmitting을 초기화하는 로직 추가
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/features/experience-detail/model/use-actions.ts` around lines 110 - 131,
setIsSubmitting(true) can remain true if mutate callbacks never run (e.g.,
component unmount or request cancel); update the mutate calls for createMutation
and patchMutation so they use their onSettled (or pass an options object with
onSettled) to always call setIsSubmitting(false) and handle showSaveError on
failure, and/or add a cleanup on component unmount to reset isSubmitting;
specifically adjust createMutation.mutate(...) and patchMutation.mutate(...) use
to supply onSettled and onError handlers rather than relying only on existing
success/failure callbacks.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/features/experience-detail/ui/experience-form/experience-form.tsx`:
- Around line 40-44: The submit Button in the rightSlot currently only disables
via isSubmitting; update the Button render logic in experience-form.tsx (the
rightSlot block referencing Button, submit, and isSubmitting) to also provide an
explicit loading state/label so users know submission is in progress—e.g., when
isSubmitting is true render the Button with a loading prop or show a spinner and
change its text to something like "제출중…" (ensure onClick remains wired to submit
and button stays disabled while loading for accessibility).

---

Outside diff comments:
In `@src/features/experience-detail/model/use-actions.ts`:
- Around line 110-131: setIsSubmitting(true) can remain true if mutate callbacks
never run (e.g., component unmount or request cancel); update the mutate calls
for createMutation and patchMutation so they use their onSettled (or pass an
options object with onSettled) to always call setIsSubmitting(false) and handle
showSaveError on failure, and/or add a cleanup on component unmount to reset
isSubmitting; specifically adjust createMutation.mutate(...) and
patchMutation.mutate(...) use to supply onSettled and onError handlers rather
than relying only on existing success/failure callbacks.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: ba746711-e8b3-4bcc-a192-d589e8d08255

📥 Commits

Reviewing files that changed from the base of the PR and between cf791e2 and a3fcdd5.

📒 Files selected for processing (5)
  • src/features/experience-detail/config/messages.ts
  • src/features/experience-detail/model/use-actions.ts
  • src/features/experience-detail/ui/experience-form/experience-form.tsx
  • src/pages/experience-detail/experience-detail-page.tsx
  • src/shared/api/config/query-key.ts

Comment on lines 40 to 44
rightSlot={
<Button variant="primary" size="small" onClick={submit}>
<Button variant="primary" size="small" onClick={submit} disabled={isSubmitting}>
작성완료
</Button>
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🧹 Nitpick | 🔵 Trivial

선택적 개선: 제출 중 상태를 사용자에게 더 명확히 전달할 수 있어요.

현재 버튼이 비활성화되지만, 사용자에게 "제출 중"임을 더 명확히 알려주면 UX가 향상될 수 있어요.

💡 제출 중 상태 표시 예시
 <Button variant="primary" size="small" onClick={submit} disabled={isSubmitting}>
-  작성완료
+  {isSubmitting ? "저장 중..." : "작성완료"}
 </Button>
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
rightSlot={
<Button variant="primary" size="small" onClick={submit}>
<Button variant="primary" size="small" onClick={submit} disabled={isSubmitting}>
작성완료
</Button>
}
rightSlot={
<Button variant="primary" size="small" onClick={submit} disabled={isSubmitting}>
{isSubmitting ? "저장 중..." : "작성완료"}
</Button>
}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/features/experience-detail/ui/experience-form/experience-form.tsx` around
lines 40 - 44, The submit Button in the rightSlot currently only disables via
isSubmitting; update the Button render logic in experience-form.tsx (the
rightSlot block referencing Button, submit, and isSubmitting) to also provide an
explicit loading state/label so users know submission is in progress—e.g., when
isSubmitting is true render the Button with a loading prop or show a spinner and
change its text to something like "제출중…" (ensure onClick remains wired to submit
and button stays disabled while loading for accessibility).

@odukong odukong left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

쿼리키 작성할 때 제가 졸았나봅니다..... 꼼꼼한 수정 감사합니다 !! 덕분에 API 호출 시에 잘못된 쿼리 키 설정으로 생길 수 있는 오류를 방지할 수 있을 것 같아요 !!🫰🏻

에러 메시지 데이터 (message.ts의 API)는 서버에서 직접적으로 받아온 에러 코드와 (프론트에서 매핑한) 에러 메시지를 보여주는 방식이 실제 에러와 대응되고 화면에는 적절한 메시지를 보여줄 수 있어 안정적이라고 생각해요. 그렇지만 현재 api 호출부와 에러 관리 체계가 아직 안정적이지 않다고 생각해서(아마 추후 리팩토링을 추가적으로 진행하지 않을까합니다..ㅜ) 지금처럼 message.ts에서 에러메시지 관리를 처리하는 것이 적절한 방향이라고 생각합니다!


추가적으로 리팩토링 흐름에 대한 부분에 고민이 많을 것 같아서 간단하게나마 의견 남겨보자면, 흐름 자체는 좋다고 생각합니다. 다만 한 기능에 대해 리팩터링의 규모가 비교적 세분화되어있다고 생각해요.

개발 아티클을 보면서 인상깊었던 말 중에 하나인데 구현하는데 이런 원칙을 가지라는 것을 본 적이 있어요.
"작동하게 만들고, 올바르게 만들고, 빠르게 만들어라"

우선 경험 등록,수정,조회에 대한 기능은 정상적으로 작동하기 때문에 제일 첫 번째 조건은 만족되었고, 다음 진행되어야 할 부분은 올바르게 만들어라!! 라고 생각합니다.

올바르게 만들기 위한 단계의 리팩토링은 우선적으로 두 가지 부분은 고려하여 진행하면 좋을 것 같아요.

1. 중복 코드 제거 및 모듈 구조 정리
2. zustand 스토어 구조 개선 
=> 스토어의 변화에 따른 경험 작성에 엮여있는 상태를 사용하는 코드에 대한 리팩토링 함께 진행 (PR 2, 4, 5) 

현재 경험 등록/수정/조회 기능은 결합도 분리를 위해서 분리된 모듈 파일이나 사용하고 있는 상태들이 많습니다. 그 만큼 함께 관리해야 하는 파일도 많아졌다고 생각이 들어 코드에 대한 적절한 가지치기와 상태에 대한 리팩토링을 함께 진행하는 것이 좋을 것 같다는 생각이 듭니다. (PR 4에 작성해주신 것처럼요!)

어느 정도의 가지치기가 완료가 되었다면, 그 때 유진님이 생각하기에 지금의 코드를 더 효율적으로 만들기 위해 적용하면 좋을 방법들을 코드에 녹여내어 보면, 비교적 쉽게 리팩토링을 진행할 수 있을 것 같아요. 이 단계에서 빠르게 만들어라.. 이건 아마 사용자 경험이나 최적화, DX적인 부분에 대한 개선을 의미하겠죠..? (PR 6, PR 7과 같은 부분)

이렇게 크게 두 흐름으로 나누어 리팩토링을 진행 흐름으로 정리를 해봤는데 천천히 코드 분석을 하다 보면 유진님에게 맞는 리팩토링 흐름이 보일 거라 생각해요! 제가 말한 방식이 정답은 아니기 때문에 리팩토링할 때 참고 용도로 보시면 될 것 같습니당

앞으로의 리팩토링도 아자아자아잣 화이팅 o((>ω< ))o
p.s. 쓰다보니.. 되게 명언충.. 같이 되었네요..

@hummingbbird hummingbbird left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

지난 회의 때 이야기했던 부분들은 수빈이가 위 리뷰에서 잘 정리해주어서 어푸만 남기겠습니다 ~~ 작업 파이팅하고 고민되는 지점은 언제든 쉐어해주세요 !! 😙😙

export const aiReportsQueryKey = {
all: () => ["aiReports"],
list: (page: number, keyword?: string) => [
...experienceQueryKey.all(),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

오 맞아요 나도 여기 보면서 수정 필요하다고 생각했는데! 굿굿 ~

@qowjdals23 qowjdals23 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

이번 pr은 리팩토링 전에 기준선 먼저 정리해두는 의미가 큰 수정이라고 느껴졌고,
query key 수정이나 submit 방지, 메시지 상수화도 지금 시점에 잘 필요한 정리였던 것 같습니다 !

"작동하게 만들고, 올바르게 만들고, 빠르게 만들어라"

위에서 좋은 의견이 너무너무 잘 정리되어 있어서 저도 어푸만 남기고 갑니다 ~~
너무 수고 많으셨고 !!! 이후 리팩토링도 모두 화이팅입니다~~ 🤩

@u-zzn

u-zzn commented Mar 23, 2026

Copy link
Copy Markdown
Collaborator Author

리뷰 꼼꼼하게 남겨주셔서 감사합니다!!

수빈님이 말씀해주신 것처럼, 현재는 message.ts에서 에러 메시지를 관리하고 추후 리팩토링을 통해 개선해나가는 방향 이해했습니다! :)

리팩토링 흐름 관련해서도

"작동하게 만들고, 올바르게 만들고, 빠르게 만들어라"

이 기준을 잘 기억하면서, 적어주신 리팩토링 과정 참고해서 우선 중복 코드/모듈 구조 정리와 상태 관리 개선을 중심으로 코드 정합성과 구조를 먼저 다듬는 방향으로 진행해보겠습니다!

리팩토링 순서에 대해 고민이 많았는데, 정리해주신 흐름 덕분에 방향을 잡는 데 큰 도움이 되었습니다 감사합니다 👍

그 이후에는 말씀해주신 것처럼 UX, 성능, DX까지 확장하는 흐름으로 이어가보겠습니다.

전체적으로 방향을 어떻게 가져가야 할지 기준이 잡힌 것 같아서 말씀해주신 내용 참고해서 리팩토링 단계적으로 진행해보겠습니다 🙇

@u-zzn u-zzn merged commit 7d08abb into dev Mar 23, 2026
4 checks passed
@u-zzn u-zzn deleted the fix/#156/experience-pre-refactor-bugs branch March 23, 2026 00:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

유진🍒 🐛FIX 기능적 오류, 버그 해결

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Fix] 경험 등록/수정/조회 페이지 리팩토링 전 버그 수정

4 participants