Skip to content

refactor: PeopleIllustration 캐릭터 배치 및 구조 개선#112

Merged
RookieAND merged 5 commits intodevelopfrom
feature/people-animate-interactive
Feb 25, 2026
Merged

refactor: PeopleIllustration 캐릭터 배치 및 구조 개선#112
RookieAND merged 5 commits intodevelopfrom
feature/people-animate-interactive

Conversation

@RookieAND
Copy link
Collaborator

@RookieAND RookieAND commented Feb 25, 2026

🎯 PR 제목

refactor: PeopleIllustration 캐릭터 배치 및 구조 개선

📑 작업 상세 내역

  • 리팩토링
    • 좌상단 기준 좌표 시스템으로 변경합니다
    • 사다리꼴 배치 패턴으로 캐릭터 겹침을 최소화합니다
    • 컴포넌트 파일 구조를 단순화하고 개별 캐릭터 SVG를 추가합니다

🙏 리뷰 요청 사항

  • 좌표 시스템 변경으로 인한 레이아웃 정렬이 의도대로 동작하는지 확인해주세요
  • 4~10명 각 인원수별 캐릭터 배치가 자연스럽고 겹치지 않는지 검증해주세요
  • 사다리꼴 배치 패턴이 모든 인원수에서 일관되게 적용되었는지 확인해주세요

📃 참고 자료

  • 변경된 주요 파일:
    • src/pageComponents/gathering/create/PeopleIllustration/ (신규 디렉토리)
    • public/images/people/character_1~10.svg (신규 SVG 파일)
    • src/components/illustrations/PeopleIllustration.tsx (삭제)

🖼️ 작업 결과물

2026-02-25.4.44.54.mov

RookieAND and others added 3 commits February 25, 2026 16:41
- 좌상단 기준 좌표 시스템으로 변경 (transform: translate(-50%, -50%) 제거)
- 4~10명 사다리꼴 배치로 겹침 최소화 (뒷줄로 갈수록 간격 증가)
- 점진적 간격 증가 패턴 적용 (약 50% 증가율)
- PeopleIllustration.util.ts 제거 및 로직 인라인화
- 컴포넌트 파일 구조를 3개로 단순화 (Character.tsx, PeopleIllustration.tsx, PeopleIllustration.constants.ts)
- 개별 캐릭터 SVG 파일 추가 (character_1~10.svg)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- 4명: 1열 간격 60px→70px, 2열 간격 100px→150px (사다리꼴 효과 강화)
- 8명: 1열 간격 60px→65px, 2열 간격 80px→95px (점진적 증가 비율 개선)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
@RookieAND RookieAND added the 🔨 Refactor 코드 리팩토링 및 구조 개선 label Feb 25, 2026
@RookieAND RookieAND self-assigned this Feb 25, 2026
@RookieAND RookieAND added the 🔨 Refactor 코드 리팩토링 및 구조 개선 label Feb 25, 2026
@RookieAND RookieAND requested a review from youngminss February 25, 2026 07:52
@RookieAND RookieAND changed the base branch from main to develop February 25, 2026 07:53
@github-actions github-actions bot added 🔨 Refactor 코드 리팩토링 및 구조 개선 and removed 🔨 Refactor 코드 리팩토링 및 구조 개선 labels Feb 25, 2026
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @RookieAND, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

이 PR은 PeopleIllustration 컴포넌트의 배치 및 구조를 개선하고, 모임 의견 수합 페이지의 전반적인 에러 처리 및 페이지 흐름을 강화하는 데 중점을 둡니다. 새로운 에러 페이지를 도입하고, API 응답 및 추천 결과 상태에 따른 동적인 리다이렉트 로직을 추가하여 애플리케이션의 견고성과 사용자 경험을 향상시켰습니다. 또한, FoodCategory 관련 명칭을 Category로 리팩토링하고 SSE를 활용한 실시간 업데이트 기능을 추가하여 코드의 일관성과 기능성을 높였습니다.

Highlights

  • PeopleIllustration 컴포넌트 개선: 좌상단 기준 좌표 시스템으로 변경하고, 캐릭터 겹침을 최소화하는 사다리꼴 배치 패턴을 적용했습니다. 컴포넌트 파일 구조를 단순화하고 개별 캐릭터 SVG 파일을 추가하여 일러스트레이션의 유연성과 성능을 향상시켰습니다.
  • 의견 수합 페이지 에러 처리 및 흐름 개선: 모임 의견 수합 관련 페이지(랜딩, 의견 입력, 대기, 완료, 결과) 전반에 걸쳐 에러 처리 로직을 강화하고 페이지 리다이렉트 흐름을 개선했습니다. API 에러 코드 및 추천 결과 상태에 따라 notFound() 또는 적절한 페이지로 리다이렉트되도록 하여 사용자 경험의 안정성을 높였습니다. 또한, 전역 에러 페이지와 404 페이지를 추가하여 일관된 에러 처리를 제공합니다.
  • Changelog 및 스키마/컴포넌트 명칭 리팩토링: CHANGELOG.md 파일을 2.0.0-beta.1 버전으로 업데이트하고, FoodCategory 관련 스키마 및 컴포넌트 명칭을 Category로 일관되게 변경하는 등 여러 리팩토링 내역을 반영했습니다. 이는 코드의 가독성과 유지보수성을 높이는 데 기여합니다.
  • SSE(Server-Sent Events) 기반 실시간 업데이트: 의견 수합 대기 페이지에서 SSE를 활용하여 실시간으로 참여자 수 변동을 감지하고, 모든 의견이 모이면 자동으로 추천 결과 페이지로 이동하도록 구현했습니다. 이는 사용자에게 동적인 피드백을 제공하고 페이지 전환을 자동화하여 편의성을 높입니다.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • .gitignore
    • Git worktree 디렉토리 .worktrees/를 무시하도록 추가했습니다.
  • CHANGELOG.md
    • 버전을 2.0.0-beta.1로 업데이트하고, 스키마 및 컴포넌트 명칭 변경 등 여러 리팩토링 내역을 추가했습니다.
  • app/error.tsx
    • 애플리케이션 전반의 에러를 처리하는 새로운 에러 페이지를 추가했습니다.
  • app/gathering/[accessKey]/landing/error.tsx
    • 모임 랜딩 페이지의 특정 에러 페이지를 삭제했습니다.
  • app/gathering/[accessKey]/landing/page.tsx
    • API 에러 코드에 따른 notFound() 처리 및 LandingView 컴포넌트 이름을 LandingPage로 변경했습니다.
  • app/gathering/[accessKey]/opinion/complete/CompleteViewContainer.tsx
    • 의견 수합 완료 페이지의 컨테이너 컴포넌트를 삭제했습니다.
  • app/gathering/[accessKey]/opinion/complete/error.tsx
    • 의견 수합 완료 페이지를 위한 새로운 에러 페이지를 추가하고, 다양한 API 에러 코드에 따른 리다이렉트 로직을 구현했습니다.
  • app/gathering/[accessKey]/opinion/complete/page.tsx
    • 추천 결과 및 모임 참여자 현황 데이터를 가져와 상태에 따른 리다이렉트 로직을 추가하고, CompleteViewContainer 컴포넌트 이름을 CompletePage로 변경했습니다.
  • app/gathering/[accessKey]/opinion/error.tsx
    • 의견 수합 페이지의 에러 처리 로직을 개선하여 API 에러 코드에 따른 notFound() 및 리다이렉트를 구현했습니다.
  • app/gathering/[accessKey]/opinion/page.tsx
    • 추천 결과 및 모임 참여자 현황 데이터를 가져와 상태에 따른 리다이렉트 로직을 추가하고, OpinionFormView 컴포넌트 이름을 OpinionFormPage로 변경했습니다.
  • app/gathering/[accessKey]/opinion/pending/PendingViewContainer.tsx
    • 의견 수합 대기 페이지의 컨테이너 컴포넌트를 삭제했습니다.
  • app/gathering/[accessKey]/opinion/pending/error.tsx
    • 의견 수합 대기 페이지를 위한 새로운 에러 페이지를 추가하고, 다양한 API 에러 코드에 따른 리다이렉트 로직을 구현했습니다.
  • app/gathering/[accessKey]/opinion/pending/page.tsx
    • 추천 결과 및 모임 참여자 현황 데이터를 가져와 상태에 따른 리다이렉트 로직을 추가하고, PendingViewContainer 컴포넌트 이름을 PendingPage로 변경했습니다.
  • app/gathering/[accessKey]/opinion/result/ResultViewContainer.tsx
    • 의견 수합 결과 페이지의 컨테이너 컴포넌트를 삭제했습니다.
  • app/gathering/[accessKey]/opinion/result/error.tsx
    • 의견 수합 결과 페이지를 위한 새로운 에러 페이지를 추가하고, 다양한 API 에러 코드에 따른 리다이렉트 로직을 구현했습니다.
  • app/gathering/[accessKey]/opinion/result/page.tsx
    • 추천 결과 및 모임 참여자 현황 데이터를 가져와 상태에 따른 리다이렉트 로직을 추가하고, ResultViewContainer 컴포넌트 이름을 ResultPage로 변경했습니다.
  • app/global-error.tsx
    • 전역 에러를 처리하는 새로운 global-error 페이지를 추가했습니다.
  • app/not-found.tsx
    • 404 Not Found 페이지를 추가했습니다.
  • package.json
    • 프로젝트 버전을 1.5.0에서 2.0.0-beta.1로 업데이트했습니다.
  • public/images/people/person1.svg
    • PeopleIllustration 컴포넌트에서 사용할 person1.svg 이미지를 추가했습니다.
  • public/images/people/person10.svg
    • PeopleIllustration 컴포넌트에서 사용할 person10.svg 이미지를 추가했습니다.
  • public/images/people/person2.svg
    • PeopleIllustration 컴포넌트에서 사용할 person2.svg 이미지를 추가했습니다.
  • public/images/people/person3.svg
    • PeopleIllustration 컴포넌트에서 사용할 person3.svg 이미지를 추가했습니다.
  • public/images/people/person4.svg
    • PeopleIllustration 컴포넌트에서 사용할 person4.svg 이미지를 추가했습니다.
  • public/images/people/person5.svg
    • PeopleIllustration 컴포넌트에서 사용할 person5.svg 이미지를 추가했습니다.
  • public/images/people/person6.svg
    • PeopleIllustration 컴포넌트에서 사용할 person6.svg 이미지를 추가했습니다.
  • public/images/people/person7.svg
    • PeopleIllustration 컴포넌트에서 사용할 person7.svg 이미지를 추가했습니다.
  • public/images/people/person8.svg
    • PeopleIllustration 컴포넌트에서 사용할 person8.svg 이미지를 추가했습니다.
  • public/images/people/person9.svg
    • PeopleIllustration 컴포넌트에서 사용할 person9.svg 이미지를 추가했습니다.
  • public/images/result/distance-far.svg
    • 결과 페이지에서 사용할 distance-far.svg 이미지를 추가했습니다.
  • public/images/result/distance-near.svg
    • 결과 페이지에서 사용할 distance-near.svg 이미지를 추가했습니다.
  • src/apis/recommendResult/api.ts
    • 추천 결과 생성을 요청하는 postProcessRecommendResult API 함수를 추가했습니다.
  • src/apis/recommendResult/index.ts
    • 추천 결과 관련 Mutation Key 및 Option을 내보내도록 업데이트했습니다.
  • src/apis/recommendResult/mutationKey.ts
    • 추천 결과 Mutation Key를 정의하는 recommendResultMutationKeys를 추가했습니다.
  • src/apis/recommendResult/mutationOptions.ts
    • 추천 결과 Mutation Option을 정의하는 recommendResultMutationOptions를 추가했습니다.
  • src/apis/recommendResult/type.ts
    • PostProcessRecommendResultRequestPostProcessRecommendResultResponse 타입을 추가했습니다.
  • src/components/illustrations/NotFoundIllustration.tsx
    • NotFoundIllustration 컴포넌트를 추가했습니다.
  • src/components/illustrations/index.ts
    • NotFoundIllustration 컴포넌트를 내보내도록 업데이트했습니다.
  • src/components/tag/Tag.tsx
    • Tag 컴포넌트에 theme prop을 추가하여 스타일을 확장했습니다.
  • src/constants/gathering/opinion/category.ts
    • 새로운 CATEGORY 상수, 타입 및 관련 유틸리티를 정의하여 food.ts 파일을 대체했습니다.
  • src/constants/gathering/opinion/distance.ts
    • DISTANCE_RANGE_WALKING_MINUTES 상수를 추가했습니다.
  • src/constants/gathering/opinion/food.ts
    • 음식 카테고리 관련 상수를 정의하던 파일을 삭제했습니다.
  • src/constants/gathering/opinion/index.ts
    • 의견 수합 관련 상수들을 새로운 category, rank, recommendationResultStatus, timeSlot 모듈에서 가져오도록 업데이트했습니다.
  • src/constants/gathering/opinion/mockResults.ts
    • 목업 추천 결과 데이터에 status, gathering, distances 필드를 추가했습니다.
  • src/constants/gathering/opinion/rank.ts
    • 랭크 관련 상수를 RANKS, RANK_LABELS에서 RANK, RANK_LIST, RANK_LABEL로 리팩토링했습니다.
  • src/constants/gathering/opinion/recommendationResultStatus.ts
    • 추천 결과 상태를 정의하는 RecommendationResultStatus 상수를 추가했습니다.
  • src/constants/gathering/opinion/timeSlot.ts
    • 시간대 레이블을 정의하는 TIME_SLOT_LABEL 상수를 추가했습니다.
  • src/hooks/apis/gathering/useGetGatheringCapacity.ts
    • useGetGatheringCapacity 훅에서 refetchInterval 옵션을 제거했습니다.
  • src/hooks/apis/recommendResult/index.ts
    • usePostProceedRecommendResult 훅을 내보내도록 업데이트했습니다.
  • src/hooks/apis/recommendResult/usePostProceedRecommendResult.ts
    • 과반수 이상 의견 등록 시 추천 결과 생성을 요청하는 usePostProceedRecommendResult 훅을 추가했습니다.
  • src/hooks/gathering/index.ts
    • useProceedRecommendResult 훅을 내보내도록 업데이트했습니다.
  • src/hooks/gathering/useOpinionForm.ts
    • 의견 폼 필드 이름을 dislikedFoods에서 dislikedCategories로, preferredMenus에서 preferredCategories로 변경했습니다.
  • src/hooks/gathering/useProceedRecommendResult.ts
    • 추천 결과 진행 상태를 관리하고 API 요청을 처리하는 useProceedRecommendResult 훅을 추가했습니다.
  • src/hooks/sse/index.ts
    • useServerSentEvent 훅을 내보내도록 업데이트했습니다.
  • src/hooks/sse/useServerSentEvent.ts
    • Server-Sent Events(SSE)를 활용하여 실시간 업데이트를 처리하는 useServerSentEvent 훅을 추가했습니다.
  • src/pageComponents/gathering/create/DateStep.tsx
    • TIME_SLOT_LABEL 상수의 import 경로를 업데이트했습니다.
  • src/pageComponents/gathering/create/PeopleIllustration/Character.tsx
    • PeopleIllustration 컴포넌트의 개별 캐릭터를 렌더링하는 Character 컴포넌트를 추가했습니다.
  • src/pageComponents/gathering/create/PeopleIllustration/PeopleIllustration.constants.ts
    • PeopleIllustration 컴포넌트의 캐릭터 위치 및 애니메이션 관련 상수들을 정의했습니다.
  • src/pageComponents/gathering/create/PeopleIllustration/PeopleIllustration.tsx
    • 모임 인원수에 따라 캐릭터를 동적으로 배치하고 애니메이션을 적용하는 PeopleIllustration 컴포넌트를 추가했습니다.
  • src/pageComponents/gathering/create/PeopleStep.tsx
    • PeopleIllustration 컴포넌트를 통합하여 모임 인원 선택 시 시각적 피드백을 제공하도록 업데이트했습니다.
  • src/pageComponents/gathering/opinion/CompleteView.tsx
    • 의견 수합 완료 페이지 뷰 컴포넌트를 삭제했습니다.
  • src/pageComponents/gathering/opinion/DislikeStep.tsx
    • 의견 수합 비선호 음식 선택 스텝 컴포넌트를 삭제했습니다.
  • src/pageComponents/gathering/opinion/DistanceSelector.tsx
    • 의견 수합 거리 선택 컴포넌트를 삭제했습니다.
  • src/pageComponents/gathering/opinion/FoodCategoryButton.tsx
    • DislikedCategoryButton.tsx로 파일명을 변경하고 form/ 디렉토리로 이동했습니다.
  • src/pageComponents/gathering/opinion/FoodCategoryCarousel.tsx
    • CategoryCarousel.tsx로 파일명을 변경하고 complete/ 디렉토리로 이동했습니다.
  • src/pageComponents/gathering/opinion/IntroStep.tsx
    • 의견 수합 랜딩 페이지 인트로 스텝 컴포넌트를 삭제했습니다.
  • src/pageComponents/gathering/opinion/LandingView.tsx
    • 의견 수합 랜딩 페이지 뷰 컴포넌트를 삭제했습니다.
  • src/pageComponents/gathering/opinion/PendingView.tsx
    • 의견 수합 대기 페이지 뷰 컴포넌트를 삭제했습니다.
  • src/pageComponents/gathering/opinion/PreferenceStep.tsx
    • 의견 수합 선호 음식 선택 스텝 컴포넌트를 삭제했습니다.
  • src/pageComponents/gathering/opinion/RankChip.tsx
    • RankChip.tsx로 파일명을 변경하고 form/ 디렉토리로 이동했습니다.
  • src/pageComponents/gathering/opinion/RankSection.tsx
    • RankSection.tsx로 파일명을 변경하고 form/ 디렉토리로 이동했습니다.
  • src/pageComponents/gathering/opinion/ResultView.tsx
    • 의견 수합 결과 페이지 뷰 컴포넌트를 삭제했습니다.
  • src/pageComponents/gathering/opinion/SubmissionBottomSheet.tsx
    • SubmissionBottomSheet 컴포넌트가 useGetGatheringCapacity 훅을 사용하도록 변경했습니다.
  • src/pageComponents/gathering/opinion/complete/CategoryCard.tsx
    • 카테고리 정보를 표시하는 CategoryCard 컴포넌트를 추가했습니다.
  • src/pageComponents/gathering/opinion/complete/CategoryCarousel.tsx
    • 카테고리 이미지를 자동으로 슬라이드하는 CategoryCarousel 컴포넌트를 추가했습니다.
  • src/pageComponents/gathering/opinion/complete/CompletePage.tsx
    • 의견 수합 완료 페이지를 렌더링하는 CompletePage 컴포넌트를 추가했습니다.
  • src/pageComponents/gathering/opinion/complete/ShowResultButton.tsx
    • 결과 보기 버튼을 렌더링하는 ShowResultButton 컴포넌트를 추가했습니다.
  • src/pageComponents/gathering/opinion/complete/index.ts
    • complete/ 디렉토리의 컴포넌트들을 내보내도록 업데이트했습니다.
  • src/pageComponents/gathering/opinion/form/DislikeStep.tsx
    • 의견 수합 비선호 음식 선택 스텝을 구성하는 DislikeStep 컴포넌트를 추가했습니다.
  • src/pageComponents/gathering/opinion/form/DislikedCategoryButton.tsx
    • 비선호 카테고리 선택 버튼을 렌더링하는 DislikedCategoryButton 컴포넌트를 추가했습니다.
  • src/pageComponents/gathering/opinion/form/DistanceStep.tsx
    • 의견 수합 거리 선택 스텝을 구성하는 DistanceStep 컴포넌트를 추가했습니다.
  • src/pageComponents/gathering/opinion/form/NicknameStep.tsx
    • 의견 수합 닉네임 입력 스텝을 구성하는 NicknameStep 컴포넌트를 추가했습니다.
  • src/pageComponents/gathering/opinion/form/OpinionFormPage.tsx
    • 의견 수합 폼 페이지를 렌더링하는 OpinionFormPage 컴포넌트를 추가했습니다.
  • src/pageComponents/gathering/opinion/form/PreferenceStep.tsx
    • 의견 수합 선호 음식 선택 스텝을 구성하는 PreferenceStep 컴포넌트를 추가했습니다.
  • src/pageComponents/gathering/opinion/form/RankChip.tsx
    • 랭크별 카테고리 선택 칩을 렌더링하는 RankChip 컴포넌트를 추가했습니다.
  • src/pageComponents/gathering/opinion/form/RankSection.tsx
    • 랭크별 카테고리 선택 섹션을 렌더링하는 RankSection 컴포넌트를 추가했습니다.
  • src/pageComponents/gathering/opinion/form/index.ts
    • form/ 디렉토리의 컴포넌트들을 내보내도록 업데이트했습니다.
  • src/pageComponents/gathering/opinion/index.ts
    • 의견 수합 페이지의 컴포넌트들을 새로운 디렉토리 구조에 맞춰 내보내도록 업데이트했습니다.
  • src/pageComponents/gathering/opinion/landing/GatheringDateBadge.tsx
    • 모임 날짜를 표시하는 GatheringDateBadge 컴포넌트를 추가했습니다.
  • src/pageComponents/gathering/opinion/landing/LandingIntroLottie.tsx
    • 랜딩 페이지 인트로 로티 애니메이션을 렌더링하는 LandingIntroLottie 컴포넌트를 추가했습니다.
  • src/pageComponents/gathering/opinion/landing/LandingPage.tsx
    • 의견 수합 랜딩 페이지를 렌더링하는 LandingPage 컴포넌트를 추가했습니다.
  • src/pageComponents/gathering/opinion/landing/OpinionStartButton.tsx
    • 의견 수합 시작 버튼을 렌더링하는 OpinionStartButton 컴포넌트를 추가했습니다.
  • src/pageComponents/gathering/opinion/landing/index.ts
    • landing/ 디렉토리의 컴포넌트들을 내보내도록 업데이트했습니다.
  • src/pageComponents/gathering/opinion/pending/PendingPage.tsx
    • 의견 수합 대기 페이지를 렌더링하는 PendingPage 컴포넌트를 추가했습니다.
  • src/pageComponents/gathering/opinion/pending/ShareButton.tsx
    • 링크 공유 버튼을 렌더링하는 ShareButton 컴포넌트를 추가했습니다.
  • src/pageComponents/gathering/opinion/pending/ShowResultButton.tsx
    • 결과 보기 버튼을 렌더링하는 ShowResultButton 컴포넌트를 추가했습니다.
  • src/pageComponents/gathering/opinion/pending/index.ts
    • pending/ 디렉토리의 컴포넌트들을 내보내도록 업데이트했습니다.
  • src/pageComponents/gathering/opinion/result/OtherCandidateCard.tsx
    • 다른 후보 음식점 카드를 렌더링하는 OtherCandidateCard 컴포넌트를 추가했습니다.
  • src/pageComponents/gathering/opinion/result/ResultPage.tsx
    • 의견 수합 결과 페이지를 렌더링하는 ResultPage 컴포넌트를 추가했습니다.
  • src/pageComponents/gathering/opinion/result/TasteSummaryCard.tsx
    • 취향 요약 카드를 렌더링하는 TasteSummaryCard 컴포넌트를 추가했습니다.
  • src/pageComponents/gathering/opinion/result/VoteSummarySection.tsx
    • 투표 요약 섹션을 렌더링하는 VoteSummarySection 컴포넌트를 추가했습니다.
  • src/pageComponents/gathering/opinion/result/index.ts
    • result/ 디렉토리의 컴포넌트들을 내보내도록 업데이트했습니다.
  • src/pageComponents/gathering/restaurantCard/RestaurantCard.tsx
    • 음식점 카드 컴포넌트를 삭제했습니다.
  • src/pageComponents/gathering/restaurantCard/TopRecommendCard.tsx
    • 최고 추천 음식점 카드 컴포넌트를 삭제했습니다.
  • src/pageComponents/gathering/restaurantCard/index.ts
    • 음식점 카드 관련 컴포넌트들을 내보내던 파일을 삭제했습니다.
  • src/providers/QueryProvider.tsx
    • SSR 환경에서 QueryClient 인스턴스를 관리하기 위해 makeQueryClientgetQueryClient 함수를 사용하도록 QueryProvider를 수정했습니다.
  • src/schemas/gathering/index.ts
    • 의견 폼 스키마 관련 내보내기를 업데이트했습니다.
  • src/schemas/gathering/opinionForm.schema.ts
    • 스키마 필드 이름을 foodCategorySchema에서 categorySchema로, dislikedFoodSchema에서 dislikedCategoriesSchema로, preferredMenusSchema에서 preferredCategoriesSchema로 변경했습니다.
  • src/schemas/sse/gatheringFull.schema.ts
    • 모임이 가득 찼을 때의 SSE 데이터를 위한 gatheringFullSchema를 추가했습니다.
  • src/schemas/sse/index.ts
    • SSE 스키마들을 내보내도록 업데이트했습니다.
  • src/schemas/sse/participantCount.schema.ts
    • 참여자 수 SSE 데이터를 위한 participantCountSchema를 추가했습니다.
  • src/types/gathering/createOpinionForm.ts
    • 의견 폼 타입에서 FoodCategoryCategory로, PreferredMenuPreferredCategory로 변경했습니다.
  • src/types/gathering/foodCategory.ts
    • 음식 카테고리 타입을 정의하던 파일을 삭제했습니다.
  • src/types/gathering/index.ts
    • 모임 관련 타입 내보내기를 업데이트했습니다.
  • src/types/gathering/preferredMenu.ts
    • PreferredMenu 타입을 PreferredCategory로 변경했습니다.
  • src/types/gathering/recommendationResult.ts
    • RecommendationResult 인터페이스에 status, gathering, distances 필드를 추가했습니다.
  • src/types/gathering/restaurant.ts
    • Restaurant 인터페이스의 largeCategory 타입을 Category로 변경하고, 새로운 음식점 상세 정보를 위한 필드들을 추가했습니다.
Ignored Files
  • Ignored by pattern: .gemini/** (1)
    • .gemini/styleguide.md
  • Ignored by pattern: .github/workflows/** (2)
    • .github/workflows/development-deploy.yml
    • .github/workflows/pr-auto-labeler.yml
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

PeopleIllustration 컴포넌트를 리팩토링하여 캐릭터 배치 및 애니메이션 로직을 개선한 점이 인상적입니다. 특히 motion을 활용하여 캐릭터가 추가되고 제거될 때의 애니메이션을 부드럽게 처리한 부분이 좋습니다.

코드 리뷰에서 몇 가지 스타일 가이드 위반 사항과 개선점을 발견하여 코멘트를 남겼습니다.

  • 상태 업데이트 로직: 렌더링 함수 내에서 직접 상태를 업데이트하는 부분은 useEffect를 사용하도록 수정이 필요합니다. (critical)
  • 스타일 가이드 준수:
    • Props 타입 정의 시 interface 대신 type을 사용해야 합니다.
    • 절대 경로 에일리어스(#/)를 사용해야 하는 곳에 상대 경로가 사용되었습니다.
    • 폴더명은 camelCase 규칙을 따라야 하지만, PeopleIllustrationPascalCase로 되어 있습니다.
    • 상수 파일명 또한 camelCase 규칙을 따라야 합니다. (peopleIllustration.constants.ts)
    • 디자인 토큰이 아닌 하드코딩된 크기 값이 사용된 부분이 있습니다.
  • 상수 관리: 여러 곳에서 사용되는 상수는 constants.ts 파일로 옮겨 중앙에서 관리하는 것이 좋습니다.

전반적으로 컴포넌트 구조가 더 명확해지고 확장성이 좋아진 것 같습니다. 제안된 수정 사항들을 반영하면 코드의 일관성과 유지보수성이 더욱 향상될 것입니다.

Comment on lines +21 to +22
const CHARACTER_WIDTH = 84;
const CHARACTER_HEIGHT = 90;
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

CHARACTER_WIDTHCHARACTER_HEIGHT 상수가 Character.tsx 컴포넌트 내부에 지역적으로 정의되어 있습니다. 이 값들은 캐릭터의 위치를 계산하는 데 사용되며, PeopleIllustration.constants.ts 파일에서도 주석으로 참조되고 있습니다.

여러 파일에서 사용되거나 참조되는 핵심적인 상수이므로, PeopleIllustration.constants.ts 파일로 옮겨서 중앙에서 관리하는 것이 유지보수 측면에서 더 좋습니다.

RookieAND and others added 2 commits February 25, 2026 20:44
- PeopleIllustration → PeopleGroup
- Character → PersonCharacter
- 관련 Props 타입명도 함께 변경

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
@RookieAND RookieAND merged commit ae95b72 into develop Feb 25, 2026
6 checks passed
github-actions bot pushed a commit that referenced this pull request Feb 25, 2026
## [2.0.0-beta.3](v2.0.0-beta.2...v2.0.0-beta.3) (2026-02-25)

### Bug Fixes

* 음식 카테고리 일러스트레이터를 Figma 내 최신 시안으로 수정 ([#114](#114)) ([18f9cc3](18f9cc3))

### Code Refactoring

* PeopleIllustration 캐릭터 배치 및 구조 개선 ([#112](#112)) ([ae95b72](ae95b72))
github-actions bot pushed a commit that referenced this pull request Feb 27, 2026
## [2.0.0](v1.5.1...v2.0.0) (2026-02-27)

### ⚠ BREAKING CHANGES

* OpinionForm field names changed

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* refactor: update schema field names and exports

- foodCategorySchema → categorySchema
- dislikedFoodSchema → dislikedCategoriesSchema
- preferredMenusSchema → preferredCategoriesSchema
- Update opinionFormSchema with new field names
- Replace hardcoded "ANY" with CATEGORY.ANY
* Schema field names changed

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* refactor: rename component files to use Category naming

- FoodCard → CategoryCard
- FoodCategoryCarousel → CategoryCarousel
- DislikedFoodButton → DislikedCategoryButton

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* refactor: update component export names

- FoodCard → CategoryCard
- FoodCategoryCarousel → CategoryCarousel
- DislikedFoodButton → DislikedCategoryButton
- Update component function names to match new file names
- Internal logic unchanged (will be updated in next PR)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* refactor: update import references to use new constant names

- Update all components to use new constant names:
  * RANKS → RANK_LIST
  * RANK_LABELS → RANK_LABEL
  * FOOD_CATEGORIES → CATEGORY_LIST
  * FOOD_CATEGORY_LABEL → CATEGORY_LABEL
  * FOOD_CATEGORY_VALUES → CATEGORY_VALUES
  * dislikedFoodSchema → dislikedCategoriesSchema
  * preferredMenusSchema → preferredCategoriesSchema

- Update type imports:
  * FoodCategory → Category

- Update form field references:
  * dislikedFoods → dislikedCategories
  * preferredMenus → preferredCategories

- Fix component imports after file renames:
  * FoodCategoryCarousel → CategoryCarousel
  * DislikedFoodButton → DislikedCategoryButton

This ensures the build succeeds after type system changes.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* style: run prettier format

- Format code according to project prettier rules
- No logic changes, only formatting

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

### Features

* 404, 500 에러 페이지 추가 ([#107](#107)) ([e9e5772](e9e5772))
* opinion 랜딩 페이지 UI 업데이트 (로고·lottie·footer) ([#120](#120)) ([2817c50](2817c50))
* SSE Event Registry 시스템 구현 및 마이그레이션 ([#119](#119)) ([178c79c](178c79c))
* SSE 기반 실시간 모임 현황 업데이트 구현 ([#87](#87)) ([0d220e0](0d220e0))
* 결과 페이지 - 투표 결과 섹션 구현 ([#106](#106)) ([c633225](c633225))
* 과반수 이상 의견 제출 시 추천 결과 생성 관련 API, Hook 추가 ([#103](#103)) ([5b31eec](5b31eec)), closes [#105](#105)
* 인원 수 선택 시 시각적 피드백 추가 ([e9f6de6](e9f6de6))
* 추천 결과 API response 타입 업데이트 ([#100](#100)) ([1d046ab](1d046ab)), closes [#101](#101) [#102](#102)
* 추천 결과 생성 대기 페이지 및 애니메이션 구현 ([#118](#118)) ([a720a76](a720a76))
* 취향 요약 카드 추가 ([#104](#104)) ([816fa96](816fa96))

### Bug Fixes

* 1, 3순위를 선택했으나 2순위를 선택하지 않았을 경우 Validation 을 막지 않았던 문제 수정 ([#113](#113)) ([22e58e8](22e58e8))
* GitHub Actions 워크플로우 개선 및 스타일 가이드 업데이트 ([#91](#91)) ([e6c009e](e6c009e))
* 결과 대기 페이지 내 공유 버튼 스타일을 Tertiary 로 수정 ([#115](#115)) ([a63ddd1](a63ddd1))
* 결과 페이지 - 상단 취향 요약 섹션, 하단 투표 결과 선호 카테고리 노출 순서 로직 수정 ([#117](#117)) ([f5c4a1c](f5c4a1c))
* 모임 인원 초과 및 결과 생성 완료 시 Toast 커스텀 기능 추가 ([#116](#116)) ([6088935](6088935))
* 음식 카테고리 일러스트레이터를 Figma 내 최신 시안으로 수정 ([#114](#114)) ([18f9cc3](18f9cc3))

### Code Refactoring

* opinion 페이지 컴포넌트 구조 개선 및 로직 통합 ([#109](#109)) ([a76f75f](a76f75f))
* PeopleIllustration 캐릭터 배치 및 구조 개선 ([#112](#112)) ([ae95b72](ae95b72))
* ProgressBar 컴포넌트 UI 개선 및 코드 최적화 ([#122](#122)) ([c73de1d](c73de1d))
* SSE 이벤트를 recommend-result-created로 변경 ([#121](#121)) ([222e613](222e613))
* 타입 시스템 리팩토링 - enum을 as const 패턴으로 전환 ([#110](#110)) ([d427378](d427378)), closes [#111](#111)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🔨 Refactor 코드 리팩토링 및 구조 개선

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant