Skip to content

refactor: 모임 생성 폼 리팩토링 (PR 리뷰 대응)#49

Merged
youngminss merged 3 commits intofeature/ym-self-qafrom
feature/feedback-gathering-create-api
Jan 30, 2026
Merged

refactor: 모임 생성 폼 리팩토링 (PR 리뷰 대응)#49
youngminss merged 3 commits intofeature/ym-self-qafrom
feature/feedback-gathering-create-api

Conversation

@youngminss
Copy link
Member

@youngminss youngminss commented Jan 29, 2026

🎯 PR 제목

refactor: 모임 생성 폼 리팩토링 (PR 리뷰 대응)

📑 작업 상세 내역

PR #38, #42에서 @RookieAND 가 남긴 리뷰 코멘트 반영

PR #38 반영 내용

코멘트 반영 내용
react-hook-form에게 제출 액션 위임 page.tsx<form onSubmit={handleSubmit(onSubmit)}> 추가, API 호출 로직을 page 레벨로 이동
useController 활용 setValue + useWatch 조합을 useController로 변경
validation 커스텀 훅 제거 usePeopleStepValidation, useDateStepValidation, useRegionStepValidation 제거하고 field.value로 직접 유효성 검사

PR #42 반영 내용

코멘트 반영 내용
Tanstack Query v5의 mutationOptions 함수 사용 mutationOptions() 함수로 mutation option 생성
Query/Mutation options 파일 분리 queryOptions.ts, mutationOptions.ts로 분리

반영하지 않은 코멘트

PR #38 - CreateMeetingForm 필드 required 변경

각 Step에서 toggle 기능(선택 해제)이 있어 폼 작성 중 값이 undefined가 될 수 있으므로 optional 유지

  • PeopleStep: onChange(isSelected ? undefined : count)
  • DateStep: onChange(slot === value ? undefined : slot)
  • RegionStep: onChange(region === value ? undefined : region)

추가 수정사항

  • Chip 컴포넌트에 type="button" 기본값 추가 (form 내에서 의도치 않은 submit 방지)

🙏 리뷰 요청 사항

  • useController 적용 방식 확인
  • form submit 위임 구조 확인

📃 참고 자료

🖼️ 작업 결과물

테스트 완료 항목

  • Step 1: 인원 선택 → "다음" 버튼 활성화 확인
  • Step 2: 날짜 + 시간대 선택 → "다음" 버튼 활성화 확인
  • Step 3: 지역 선택 → "완료" 버튼 활성화 확인
  • "완료" 클릭 → API 호출 + 로딩 상태 확인
  • API 성공 → complete 페이지 이동 확인
  • 각 Step toggle 기능 정상 동작 확인

@youngminss youngminss self-assigned this Jan 29, 2026
@github-actions github-actions bot requested a review from RookieAND January 29, 2026 16:41
@github-actions github-actions bot added 🔨 Refactor 코드 리팩토링 및 구조 개선 ☑️ Need Review 작업이 완료되어 리뷰를 기다리고 있는 PR 입니다 labels Jan 29, 2026
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @youngminss, 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은 모임 생성 폼의 리팩토링을 통해 코드의 유지보수성과 견고성을 향상시키는 데 중점을 둡니다. 폼 제출 로직을 중앙화하고, react-hook-formuseController를 활용하여 유효성 검사를 개선하며, React Query 통합을 더욱 체계적으로 분리했습니다. 또한, 버튼의 기본 동작을 명확히 하여 사용자 경험을 안정화합니다.

Highlights

  • 폼 제출 로직 중앙화: 모임 생성 폼의 최종 제출 로직이 RegionStep.tsx에서 app/gathering/create/page.tsx로 이동되어, 폼 제출과 관련된 모든 처리가 단일 페이지 컴포넌트에서 관리됩니다.
  • 폼 유효성 검사 개선: 기존의 개별 스텝 유효성 검사 훅(usePeopleStepValidation, useDateStepValidation, useRegionStepValidation)이 제거되고, react-hook-formuseControllerrules를 사용하여 각 입력 필드에 대한 유효성 검사가 직접 구현되었습니다. 이는 폼 유효성 검사를 더욱 명확하고 컴포넌트 내부에서 관리할 수 있도록 합니다.
  • React Query 통합 개선: gatheringOptions 파일이 gatheringQueryOptions.tsgatheringMutationOptions.ts로 분리되어 쿼리와 뮤테이션 옵션이 명확하게 구분되었습니다. useCreateGathering 훅은 이제 gatheringMutationOptions를 사용합니다.
  • 버튼 타입 명시: Chip 컴포넌트와 DateStepFooter, PeopleStepFooter 내의 Button 컴포넌트에 type="button"이 명시적으로 추가되어, 의도치 않은 폼 제출을 방지합니다.
  • 로딩 상태 처리: 모임 생성 API 호출 시 useCreateGathering 훅의 isPending 상태가 RegionStepFooter로 전달되어, API 호출 중에는 제출 버튼이 비활성화되고 로딩 인디케이터가 표시됩니다.

🧠 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.

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

전반적으로 모임 생성 폼의 로직을 개선하는 좋은 리팩토링입니다. 특히 API 호출 로직을 페이지 최상단으로 옮기고, 각 스텝 컴포넌트의 책임을 명확히 분리한 점이 인상적입니다. react-hook-formuseController를 도입하여 상태 관리를 개선하려는 시도도 좋습니다. 다만, 몇몇 컴포넌트에서 useController가 중복으로 사용되어 잠재적인 문제를 일으킬 수 있는 부분이 발견되었습니다. 각 스텝의 Footer 컴포넌트에서 useController 대신 useWatch를 사용하도록 수정하는 것을 제안합니다. 자세한 내용은 각 파일에 남긴 리뷰 코멘트를 참고해주세요.

Comment on lines +112 to 127
name: "scheduledDate",
rules: scheduledDateRules,
});

const { field: timeSlotField } = useController({
control,
name: "timeSlot",
rules: timeSlotRules,
});

const isValid =
!isNil(scheduledDateField.value) &&
isValidDateFormat(scheduledDateField.value) &&
!isNil(timeSlotField.value);

return (
Copy link
Contributor

Choose a reason for hiding this comment

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

high

useController는 동일한 필드에 대해 여러 번 호출하면 안 됩니다. 현재 DateStepContentDateStepFooter에서 scheduledDatetimeSlot 필드에 대해 각각 useController를 사용하고 있어, react-hook-form의 예기치 않은 동작을 유발할 수 있습니다. Footer에서는 useController 대신 useWatch를 사용하여 필드 값을 구독하고 유효성을 검사하는 것이 올바른 방법입니다. useWatch를 사용하려면 react-hook-form에서 import해야 합니다.

	const [scheduledDate, timeSlot] = useWatch({
		control,
		name: ["scheduledDate", "timeSlot"],
	});

	const isValid =
		!isNil(scheduledDate) &&
		isValidDateFormat(scheduledDate) &&
		!isNil(timeSlot);

Comment on lines +47 to +53
const { field } = useController({
control,
name: "peopleCount",
rules,
});

const isValid = !isNil(field.value);
Copy link
Contributor

Choose a reason for hiding this comment

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

high

useController는 동일한 필드에 대해 여러 번 호출하면 안 됩니다. 현재 PeopleStepContentPeopleStepFooter에서 peopleCount 필드에 대해 각각 useController를 사용하고 있어, react-hook-form의 예기치 않은 동작을 유발할 수 있습니다. Footer에서는 useController 대신 useWatch를 사용하여 필드 값을 구독하고 유효성을 검사하는 것이 올바른 방법입니다. useWatch를 사용하려면 react-hook-form에서 import해야 합니다.

Suggested change
const { field } = useController({
control,
name: "peopleCount",
rules,
});
const isValid = !isNil(field.value);
const peopleCount = useWatch({
control,
name: "peopleCount",
});
const isValid = !isNil(peopleCount);

Copy link
Member Author

Choose a reason for hiding this comment

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

@RookieAND 흠 이 친구 의견은 우리가 생각하는거랑 반대로 이야기하네 흥미롭네

Comment on lines +65 to +71
const { control } = useFormContext<CreateMeetingForm>();

const handleComplete = () => {
const formData = getValues();
const { field } = useController({
control,
name: "region",
rules,
});
Copy link
Contributor

Choose a reason for hiding this comment

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

high

useController는 동일한 필드에 대해 여러 번 호출하면 안 됩니다. 현재 RegionStepContentRegionStepFooter에서 region 필드에 대해 각각 useController를 사용하고 있어, react-hook-form의 예기치 않은 동작을 유발할 수 있습니다. Footer에서는 useController 대신 useWatch를 사용하여 필드 값을 구독하고 유효성을 검사하는 것이 올바른 방법입니다. useWatch를 사용하려면 react-hook-form에서 import해야 합니다.

Suggested change
const { control } = useFormContext<CreateMeetingForm>();
const handleComplete = () => {
const formData = getValues();
const { field } = useController({
control,
name: "region",
rules,
});
const region = useWatch({
control,
name: "region",
});
const isValid = !isNil(region);

Copy link
Member Author

Choose a reason for hiding this comment

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

@RookieAND 위와 동일

@github-actions github-actions bot added 🔨 Refactor 코드 리팩토링 및 구조 개선 and removed ☑️ Need Review 작업이 완료되어 리뷰를 기다리고 있는 PR 입니다 🔨 Refactor 코드 리팩토링 및 구조 개선 labels Jan 29, 2026
@youngminss youngminss added the ☑️ Need Review 작업이 완료되어 리뷰를 기다리고 있는 PR 입니다 label Jan 29, 2026
youngminss and others added 2 commits January 31, 2026 02:38
- mutationOptions 함수 사용하여 queryOptions/mutationOptions 파일 분리
- Step 컴포넌트에 useController 적용하여 setValue + useWatch 제거
- 커스텀 validation 훅 제거하고 field.value로 직접 유효성 검사
- form submit을 page.tsx로 위임하여 react-hook-form에 제출 액션 위임
- Chip 컴포넌트에 type="button" 기본값 추가

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@RookieAND RookieAND force-pushed the feature/feedback-gathering-create-api branch from 776b6d1 to 27eee87 Compare January 30, 2026 17:38
@youngminss youngminss merged commit 4c34c8f into feature/ym-self-qa Jan 30, 2026
6 checks passed
youngminss added a commit that referenced this pull request Jan 30, 2026
* feat: DotsLoader 컴포넌트 추가

3개의 점이 순차적으로 bouncing되는 로딩 UI 컴포넌트 구현
- size variant 지원 (small, medium)
- bg-current로 부모 텍스트 색상 상속

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

* fix: Button 컴포넌트 높이 고정 (h-14)

로딩 상태에서 버튼 크기가 변하지 않도록 높이 고정

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

* refactor: RegionStep 로딩 UI를 DotsLoader로 변경

Spinner 대신 DotsLoader 사용으로 버튼 배경색과의 대비 개선

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

* refactor: 모임 생성 폼 리팩토링 (PR 리뷰 대응) (#49)

* refactor: 모임 생성 폼 리팩토링 (PR 리뷰 대응)

- mutationOptions 함수 사용하여 queryOptions/mutationOptions 파일 분리
- Step 컴포넌트에 useController 적용하여 setValue + useWatch 제거
- 커스텀 validation 훅 제거하고 field.value로 직접 유효성 검사
- form submit을 page.tsx로 위임하여 react-hook-form에 제출 액션 위임
- Chip 컴포넌트에 type="button" 기본값 추가

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

* chore: 코드 포맷팅

* fix: queryOptions 모듈 분기 처리 과정에서 capacity 가 누락되었던 이슈 수정

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: RookieAND <gwangin1999@naver.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: RookieAND <gwangin1999@naver.com>
@youngminss youngminss removed the ☑️ Need Review 작업이 완료되어 리뷰를 기다리고 있는 PR 입니다 label Feb 6, 2026
RookieAND added a commit that referenced this pull request Feb 16, 2026
* feat: DotsLoader 컴포넌트 추가

3개의 점이 순차적으로 bouncing되는 로딩 UI 컴포넌트 구현
- size variant 지원 (small, medium)
- bg-current로 부모 텍스트 색상 상속

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

* fix: Button 컴포넌트 높이 고정 (h-14)

로딩 상태에서 버튼 크기가 변하지 않도록 높이 고정

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

* refactor: RegionStep 로딩 UI를 DotsLoader로 변경

Spinner 대신 DotsLoader 사용으로 버튼 배경색과의 대비 개선

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

* refactor: 모임 생성 폼 리팩토링 (PR 리뷰 대응) (#49)

* refactor: 모임 생성 폼 리팩토링 (PR 리뷰 대응)

- mutationOptions 함수 사용하여 queryOptions/mutationOptions 파일 분리
- Step 컴포넌트에 useController 적용하여 setValue + useWatch 제거
- 커스텀 validation 훅 제거하고 field.value로 직접 유효성 검사
- form submit을 page.tsx로 위임하여 react-hook-form에 제출 액션 위임
- Chip 컴포넌트에 type="button" 기본값 추가

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

* chore: 코드 포맷팅

* fix: queryOptions 모듈 분기 처리 과정에서 capacity 가 누락되었던 이슈 수정

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: RookieAND <gwangin1999@naver.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: RookieAND <gwangin1999@naver.com>
github-actions bot pushed a commit that referenced this pull request Feb 16, 2026
## 1.0.0-beta.1 (2026-02-16)

### Features

* [#70](#70) ([#72](#72)) ([b676e0e](b676e0e))
* [QA] 모임 생성 완료, 결과페이지 페이지 UI 개선 ([#66](#66)) ([f10225d](f10225d))
* [QA] 서비스 전체 배경색 및 Layout Root 그림자 효과 적용 ([#59](#59)) ([384b56f](384b56f))
* api client 모듈 생성 ([#37](#37)) ([a37b0a9](a37b0a9)), closes [#38](#38) [#39](#39) [#40](#40) [#41](#41)
* Button 컴포넌트 추가 ([#11](#11)) ([83b7607](83b7607))
* Chip Component 추가 ([#9](#9)) ([e9d8b8f](e9d8b8f))
* Color theme 초기화 ([#2](#2)) ([97f1dcc](97f1dcc))
* DotsLoader 컴포넌트 추가  ([#48](#48)) ([cfe4582](cfe4582)), closes [#49](#49)
* GA4 이벤트 트래킹 통합 ([#70](#70)) ([0c1b9fa](0c1b9fa))
* GTM(Google Tag Manager) 통합을 위한 Analytics 컴포넌트 추가 ([#57](#57)) ([87a6ded](87a6ded))
* IconBase 컴포넌트 및 아이콘 컴포넌트들 구축 ([#13](#13)) ([8557b75](8557b75)), closes [#FFCD00](https://github.com/Nexters/yogieat/issues/FFCD00) [#FFAD00](https://github.com/Nexters/yogieat/issues/FFAD00) [#15](#15) [#ff5a3c](https://github.com/Nexters/yogieat/issues/ff5a3c)
* InputField 컴포넌트 추가 ([#16](#16)) ([99b8aa2](99b8aa2))
* Landing / Opinion Form 페이지 분리 ([#61](#61)) ([0f11e71](0f11e71))
* Layout 컴포넌트 추가 ([#10](#10)) ([9efce6f](9efce6f))
* Semantic Color Token 추가 ([#19](#19)) ([fcaedaf](fcaedaf))
* Spacing utility 클래스 초기화 ([#8](#8)) ([2e38d7a](2e38d7a))
* Tag 컴포넌트 추가 ([#20](#20)) ([f69dd05](f69dd05))
* Toast 컴포넌트 추가 ([#21](#21)) ([76e84b0](76e84b0))
* 모임 생성 퍼널 Step 1 (인원 선택) 구현 ([#23](#23)) ([7fc01a1](7fc01a1)), closes [#24](#24) [#1f2933](https://github.com/Nexters/yogieat/issues/1f2933) [#ff5a3c](https://github.com/Nexters/yogieat/issues/ff5a3c) [#25](#25) [#26](#26) [#27](#27) [#28](#28) [#29](#29) [#30](#30) [#31](#31) [#32](#32) [#34](#34)
* 프로젝트 기초 세팅 진행 ([aa0ec20](aa0ec20))
* 프로젝트 폴더 구조 반영 ([e54962d](e54962d))

### Bug Fixes

* 1순위를 1개라도 선택했다면 바로 CTA 가 활성화 되도록 수정 ([#60](#60)) ([e5758b4](e5758b4))
* 1차 MVP 배포 이전 최종 QA 항목 반영 ([#58](#58)) ([6574231](6574231))
* Button/Chip type 속성 추가 및 의견 수렴 UX 개선 ([#50](#50)) ([7e86e4a](7e86e4a)), closes [#51](#51) [#52](#52) [#53](#53) [#54](#54) [#55](#55) [#56](#56)
* cat 에서 echo 로 env.production 파일을 생성하도록 수정 ([f15307d](f15307d))
* CI/CD health check 타이밍 개선 및 수동 배포 기능 추가 ([54fd2b8](54fd2b8))
* Docker build-args로 환경 변수 전달 방식 변경 ([#77](#77)) ([e5fa0b9](e5fa0b9))
* Docker 이미지 강제 pull 및 컨테이너 재생성 ([#79](#79)) ([c253ec1](c253ec1))
* Health check 전략 개선 및 curl 기반으로 변경 ([765d3da](765d3da))
* nginx http2 deprecated 경고 해결 ([2fd9c75](2fd9c75))
* PendingView 내에서 ShareButton 을 렌더링 하지 않도록 수정 ([7bc3e12](7bc3e12))
* 결과 페이지 맛집 이미지 기본 placeholder, 공유하기 toast 미노출 ([#68](#68)) ([3c80844](3c80844))
* 동시 배포 방지를 위한 concurrency 설정 추가 ([e9bfd52](e9bfd52))
* 모임 생성 퍼널 필드 상태 초기화 버그 수정 ([#64](#64)) ([3934066](3934066)), closes [#65](#65)
* 모임 생성 폼 필드명 변경 (meetingDate → scheduledDate, location → region) ([#35](#35)) ([e90beed](e90beed))
* 배포 워크플로우에 GA4 환경 변수 추가 ([#73](#73)) ([835ae1f](835ae1f))
* 의견 수렴 페이지 내 UI 수정 및 인터렉션 개선 ([#36](#36)) ([a74f7da](a74f7da))
* 의견 수합 Form Capacity 폴링 제거 및 ErrorCode 타입 시스템 추가 ([#67](#67)) ([d55dba1](d55dba1))
* 인원 수 선택 Grid 및 의견 수렴 QA 수정 사항 반영 ([f01626e](f01626e))
* 테스트 용으로 추가했던 페이지 제거 및 icons 폴더 추가 ([4116025](4116025))

### Code Refactoring

* Button 컴포넌트 스펙을 Figma 명세에 맞춰 수정 ([#14](#14)) ([2e27f17](2e27f17))

### Build System

* Docker 빌드 시 NEXT_PUBLIC 환경변수 주입 프로세스 추가 ([#47](#47)) ([88ba163](88ba163))

### Documentation

* 프로젝트 개발 가이드 문서 추가 ([#84](#84)) ([4313145](4313145))
github-actions bot pushed a commit that referenced this pull request Feb 16, 2026
## 1.0.0 (2026-02-16)

### Features

* [#70](#70) ([#72](#72)) ([b676e0e](b676e0e))
* [QA] 모임 생성 완료, 결과페이지 페이지 UI 개선 ([#66](#66)) ([f10225d](f10225d))
* [QA] 서비스 전체 배경색 및 Layout Root 그림자 효과 적용 ([#59](#59)) ([384b56f](384b56f))
* analytics 개선 및 네이버 서치 어드바이저 등록 ([#88](#88)) ([4372aa5](4372aa5))
* api client 모듈 생성 ([#37](#37)) ([a37b0a9](a37b0a9)), closes [#38](#38) [#39](#39) [#40](#40) [#41](#41)
* Button 컴포넌트 추가 ([#11](#11)) ([83b7607](83b7607))
* Chip Component 추가 ([#9](#9)) ([e9d8b8f](e9d8b8f))
* Color theme 초기화 ([#2](#2)) ([97f1dcc](97f1dcc))
* DotsLoader 컴포넌트 추가  ([#48](#48)) ([cfe4582](cfe4582)), closes [#49](#49)
* GA4 이벤트 트래킹 통합 ([#70](#70)) ([0c1b9fa](0c1b9fa))
* GTM(Google Tag Manager) 통합을 위한 Analytics 컴포넌트 추가 ([#57](#57)) ([87a6ded](87a6ded))
* IconBase 컴포넌트 및 아이콘 컴포넌트들 구축 ([#13](#13)) ([8557b75](8557b75)), closes [#FFCD00](https://github.com/Nexters/yogieat/issues/FFCD00) [#FFAD00](https://github.com/Nexters/yogieat/issues/FFAD00) [#15](#15) [#ff5a3c](https://github.com/Nexters/yogieat/issues/ff5a3c)
* InputField 컴포넌트 추가 ([#16](#16)) ([99b8aa2](99b8aa2))
* Landing / Opinion Form 페이지 분리 ([#61](#61)) ([0f11e71](0f11e71))
* Layout 컴포넌트 추가 ([#10](#10)) ([9efce6f](9efce6f))
* Semantic Color Token 추가 ([#19](#19)) ([fcaedaf](fcaedaf))
* Spacing utility 클래스 초기화 ([#8](#8)) ([2e38d7a](2e38d7a))
* Tag 컴포넌트 추가 ([#20](#20)) ([f69dd05](f69dd05))
* Toast 컴포넌트 추가 ([#21](#21)) ([76e84b0](76e84b0))
* 모임 생성 완료 페이지 UI 리뉴얼 ([#89](#89)) ([17a3fc1](17a3fc1))
* 모임 생성 퍼널 Step 1 (인원 선택) 구현 ([#23](#23)) ([7fc01a1](7fc01a1)), closes [#24](#24) [#1f2933](https://github.com/Nexters/yogieat/issues/1f2933) [#ff5a3c](https://github.com/Nexters/yogieat/issues/ff5a3c) [#25](#25) [#26](#26) [#27](#27) [#28](#28) [#29](#29) [#30](#30) [#31](#31) [#32](#32) [#34](#34)
* 프로젝트 기초 세팅 진행 ([aa0ec20](aa0ec20))
* 프로젝트 폴더 구조 반영 ([e54962d](e54962d))

### Bug Fixes

* 1순위를 1개라도 선택했다면 바로 CTA 가 활성화 되도록 수정 ([#60](#60)) ([e5758b4](e5758b4))
* 1차 MVP 배포 이전 최종 QA 항목 반영 ([#58](#58)) ([6574231](6574231))
* Button/Chip type 속성 추가 및 의견 수렴 UX 개선 ([#50](#50)) ([7e86e4a](7e86e4a)), closes [#51](#51) [#52](#52) [#53](#53) [#54](#54) [#55](#55) [#56](#56)
* cat 에서 echo 로 env.production 파일을 생성하도록 수정 ([f15307d](f15307d))
* CI/CD health check 타이밍 개선 및 수동 배포 기능 추가 ([54fd2b8](54fd2b8))
* Docker build-args로 환경 변수 전달 방식 변경 ([#77](#77)) ([e5fa0b9](e5fa0b9))
* Docker 이미지 강제 pull 및 컨테이너 재생성 ([#79](#79)) ([c253ec1](c253ec1))
* Health check 전략 개선 및 curl 기반으로 변경 ([765d3da](765d3da))
* nginx http2 deprecated 경고 해결 ([2fd9c75](2fd9c75))
* PendingView 내에서 ShareButton 을 렌더링 하지 않도록 수정 ([7bc3e12](7bc3e12))
* 결과 페이지 맛집 이미지 기본 placeholder, 공유하기 toast 미노출 ([#68](#68)) ([3c80844](3c80844))
* 동시 배포 방지를 위한 concurrency 설정 추가 ([e9bfd52](e9bfd52))
* 모임 생성 퍼널 필드 상태 초기화 버그 수정 ([#64](#64)) ([3934066](3934066)), closes [#65](#65)
* 모임 생성 폼 필드명 변경 (meetingDate → scheduledDate, location → region) ([#35](#35)) ([e90beed](e90beed))
* 배포 워크플로우에 GA4 환경 변수 추가 ([#73](#73)) ([835ae1f](835ae1f))
* 의견 수렴 페이지 내 UI 수정 및 인터렉션 개선 ([#36](#36)) ([a74f7da](a74f7da))
* 의견 수합 Form Capacity 폴링 제거 및 ErrorCode 타입 시스템 추가 ([#67](#67)) ([d55dba1](d55dba1))
* 인원 수 선택 Grid 및 의견 수렴 QA 수정 사항 반영 ([f01626e](f01626e))
* 테스트 용으로 추가했던 페이지 제거 및 icons 폴더 추가 ([4116025](4116025))

### Code Refactoring

* Button 컴포넌트 스펙을 Figma 명세에 맞춰 수정 ([#14](#14)) ([2e27f17](2e27f17))

### Build System

* Docker 빌드 시 NEXT_PUBLIC 환경변수 주입 프로세스 추가 ([#47](#47)) ([88ba163](88ba163))

### Documentation

* 프로젝트 개발 가이드 문서 추가 ([#84](#84)) ([4313145](4313145))
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.

2 participants