Conversation
### 📝 작업 내용 - 신청 취소 api를 추가했습니다. - 신청 취소 로직에 연결하고, msw의 신청 취소도 수정했습니다. ### 📸 스크린샷 (선택) ### 🚀 리뷰 요구사항 (선택) - 오늘 찬규님이 말씀해주신 내용인데, 현재 모집 종료된 일정에서도 참여 취소가 가능합니다. 만약 막는다고 하면 추가적인 수정이 필요할 것으로 예상됩니다... - 이 PR과 연관 없는 일이긴 한데, dev 브렌치는 리뷰 요구 없이 바로 머지가 되는 것 같아 'Settings-Rules-Rulesets'에서 `main` 내용 복사해서 `dev`를 새로 만들었습니다.
### 📝 작업 내용 - 모바일 환경에서 참여자 페이지와 일정 상세 페이지의 참여자 미리보기 ui가 깨지는 문제를 수정했습니다. - 아바타 미리보기 디자인을 `UserAvatar` 컴포넌트로 만들고 헤더, 참여자 미리보기, 참여자 페이지에 적용했습니다. ### 📸 스크린샷 (선택) <img width="560" height="997" alt="스크린샷 2026-03-06 234933" src="https://github.com/user-attachments/assets/be5e420e-c82a-4b05-844f-6186aae442f3" /> <img width="1901" height="1295" alt="스크린샷 2026-03-06 234940" src="https://github.com/user-attachments/assets/611a3aa8-9204-4a55-884a-803e56300334" /> <img width="561" height="1000" alt="스크린샷 2026-03-06 234953" src="https://github.com/user-attachments/assets/0b085c55-65b6-4176-9046-93a1b03074d9" /> <img width="1889" height="1296" alt="스크린샷 2026-03-06 234959" src="https://github.com/user-attachments/assets/e69d3eb2-3df4-41bd-af26-a99a83df438b" /> ### 🚀 리뷰 요구사항 (선택) - 프로필 이미지가 없을 때 디자인은 임의로 만들어보았습니다. 혹시 어떠신가요..? - 헤더 부분의 프로필 이미지 아바타도 환경에 따라 크기가 변하게 만들었습니다. - 헤더 높이가 변하면 다른 페이지에서 본문을 가리는 등 오류가 날까 싶어 기존 크기였던 64px로 고정했습니다. 그래서 사실 헤더 아바타 크기는 변하지 않아도 괜찮습니다. 웹에서 사용하는 크기를 보면 헤더가 너무 꽉 차있다는 생각이 들기도 해서 그냥 모바일 버전의 크기로 아바타를 고정할까요? - 여러 작업을 수행할 때 서로 종속적인 내용이 없으면, 작업물2 브랜치를 작업물1 브랜치에서 만드는게 아니라 그냥 main(dev)를 기반으로 따로 만들라는 제미나이의 조언을 받아 이번 작업은 `feat/api-registragion-delete`이 아닌 `dev`를 기반으로 만들었습니다. 리뷰하기 더 편하시면 앞으로 이런 식으로 작업할게요. --------- Co-authored-by: Park Junyoung <bloomwayz@snu.ac.kr>
…colour (#119) ### 📝 작업 내용 - 회원가입 시 비밀번호에 특수문자를 요구하는 로직을 제거합니다. - 일정 상세 페이지에서 모임 링크 복사(텍스트와 함께 복사)를 할 때 복사된 글의 문구를 수정합니다.('[모이밍' 제거, 참여 링크가 제목 다음에 나오게) - 헤더-드롭다운에서 '로그아웃'이 텍스트 색상을 검은색에서 빨간색으로 변경합니다. ### 📸 스크린샷 (선택) ### 🚀 리뷰 요구사항 (선택) --------- Co-authored-by: Park Junyoung <bloomwayz@snu.ac.kr>
### 📝 작업 내용 - 프로필 수정 페이지에 남아 있던 비밀번호 특수문자 요건을 삭제하였습니다. ### 📸 스크린샷 없음 ### 🚀 리뷰 요구사항 없음
### 📝 작업 내용 - `SignUp`과 `ProfileEdit`에서 프로필 이미지와 관련된 로직을 모두 주석처리 했습니다. - unused variable ci 오류 때문에 `api/images/images.ts`와 `types/images.ts` 파일 전체를 주석처리했습니다. ### 📸 스크린샷 (선택) ### 🚀 리뷰 요구사항 (선택) --------- Co-authored-by: Park Junyoung <bloomwayz@snu.ac.kr>
### 📝 작업 내용 - 사용자가 존재하지 않는 URL로 접근했을 때 띄울 404 Not Found 페이지를 만들었습니다. ### 📸 스크린샷 <img width="582" height="1169" alt="스크린샷 2026-03-09 02 44 18" src="https://github.com/user-attachments/assets/4f1b02e8-95da-44c4-b563-fcd80e7beff1" /> ### 🚀 리뷰 요구사항 - 페이지 디자인은 제가 마음대로 해봤는데, 수정하셔도 상관없습니다.
### 📝 작업 내용 - 로그인 / 소셜 로그인 / 회원가입 시 현재 페이지를 `zustand`에 저장하고, 성공 시 다시 기존 페이지로 돌아오는 로직을 추가합니다. - 일정 신청 페이지(EventRegister)에서 로그인 등을 하면, public id를 이용해서 일정 상세 페이지로 리다이렉트 됩니다. ### 📸 스크린샷 (선택) ### 🚀 리뷰 요구사항 (선택) - 소셜 로그인과 회원가입은 로컬에서 확인해보지 못했습니다...
### 📝 작업 내용 - 피그마 와이어프레임에 맞게 화면 레이아웃을 전반적으로 다듬었습니다. 구체적으로, - 모임 메인·생성·수정·신청 화면에서 보이는 상단 내비게이션 바의 배치를 조정하였습니다. - 글씨 및 아이콘 크기를 모바일 환경에 맞도록 조정하였습니다. 물론 반응형 웹 작업은 언젠가 또 해야겠습니다만… - 많은 요소에 있던 그림자 효과를 제거했습니다. - 프로필 사진이 없을 때의 사용자 아바타를 수정하였습니다. 피그마에 있는 대로 파란색 배경에 이름 첫 글자가 나타나도록 했습니다. 이렇게 하고 보니 직관성은 다소 떨어진다는 생각은 드는데요… 우선 이렇게 해놓고 다음 회의 때 디자이너님과 얘기해 보면 될 듯합니다. - 일정 생성·수정 화면의 필드를 아래와 같이 재배치하였습니다. - 스텝 1(기본 정보): 모임 이름, 모임 시작·마감일시, 모임 장소, 설명 - 스텝 2(모집 설정): 신청 시작·마감일시, 모임 정원 - DateTimePicker 스타일을 되돌렸습니다. ### 📸 스크린샷 <div> <img width="296" height="584.5" alt="스크린샷 2026-03-16 02 36 28" src="https://github.com/user-attachments/assets/ee842a47-4cc4-4dbe-86ec-9623afe7ce56" /> <img width="296" height="584.5" alt="스크린샷 2026-03-16 02 36 50" src="https://github.com/user-attachments/assets/c120eaba-7e1f-4725-ac0b-414b916afcd3" /> </div> <div> <img width="296" height="584.5" alt="스크린샷 2026-03-16 02 37 06" src="https://github.com/user-attachments/assets/ffff778e-4709-4f8c-ad30-257c89ee0298" /> <img width="296" height="584.5" alt="스크린샷 2026-03-16 02 37 25" src="https://github.com/user-attachments/assets/22a95165-76f6-44d2-9d0c-b60936915acd" /> </div> ### 🚀 리뷰 요구사항 없음 --------- Co-authored-by: jun-0411 <jun411@snu.ac.kr>
### 📝 작업 내용 - CI 적용 대상에 `dev` 브랜치를 추가했습니다. - CI에서 사용하는 액션 `checkout`과 `setup-node`를 버전 6으로 올렸습니다. 종전에 사용하던 버전 4는 Node 20에 바탕을 두고 있는데, [깃허브 액션에서 Node 20의 지원이 곧 종료](https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/)되기 때문입니다. ### 📸 스크린샷 없음 ### 🚀 리뷰 요구사항 없음
### 📝 작업 내용 - 랜딩페이지에서 생성한 일정, 참여한 일정을 탭 ui로 선택할 수 있게 합니다. - 참여한 일정을 받아오는 api를 추가합니다. - 생성한 일정, 참여한 일정에 무한스크롤을 추가합니다. - `mocks`를 수정하여, 이제 `event.db`의 이벤트의 `viewer.status`를 기반으로 생성/참여한 일정을 구분해서 보여줍니다.(개발 편의상 `NONE` 인 경우 생성한 일정에서 보여지게 설정했습니다.) - 조건부로 생성되는 스크롤바 때문에 ui에 깜빡임이 생기는 현상을 방지하기 위해 `App.css`에 `scrollbar-gutter: stable`를 추가했습니다. ### 📸 스크린샷 (선택) <img width="1937" height="1132" alt="image" src="https://github.com/user-attachments/assets/b79d9f99-5f67-47e8-a063-8f0f1cc80527" /> ### 🚀 리뷰 요구사항 (선택) - 피그마에 따라 탭ui를 **생성한 모임**과 **참여한 모임** 이라는 문구로 설정했는데, 페이지 전체적으로 **모임**과 **일정**이 혼용되고 있습니다. 한 쪽으로 통일하는 것이 좋아 보이는데, 어느 쪽을 선호하시나요? - 신청한 모임 페이지네이션이 한 번에 5개로 고정되는 듯 하여, 참여한 모임에서도 20개가 아닌 5개 씩 페이지네이션 되게 만들었는데, 참여한 모임에서 만이라도 20개로 늘리는게 좋을까요? - 참여한 모임 페이지네이션은 꼼수로 구현한 것이라, 추후 백엔드와 함께 리팩토링이 필요할 것 같습니다. --------- Co-authored-by: Park Junyoung <bloomwayz@snu.ac.kr>
## 📝 작업 내용 ### 일정 검증 로직 업데이트 - 3월 14일 회의에서 결정된 정책에 맞추어 일정 검증 로직을 고쳤습니다. - '지금부터 시작하기' 옵션이 켜져 있으면 페이로드의 `registrationStartsAt` 필드를 비우도록 했습니다. ### 의도치 않은 폼 초기화 해결 시도 - 일정 생성에 실패하면 모달과 함께 입력했던 값이 모두 날아간다는 문제가 있었습니다. - 문제의 원인이 렌더링이 일어나는 타이밍에 있다는 진단이 있었고, 이 가설에 따라 이벤트 폼 기본값을 기억화하여 재렌더링을 방지하였습니다. - `NewEvent`: `useMemo([], [])` → 마운트 시 1회만 생성 - `EventEdit`: `useMemo([event])` → 서버 데이터 변경 시에만 재생성 ## 🚀 리뷰 요구사항 - 일정 검증 로직 관련해서 직접 검토도 하고 AI에게도 여러 차례 검토를 부탁했었는데, 그럼에도 놓친 부분이 있을지도 모르겠습니다. 혹시 검증 로직에서 빠진 부분이 보이면 수정 요청해 주시거나, 수정을 부탁드립니다. - 우선 `defaultValues`의 재렌더링이 문제라는 진단에 따라 이 부분을 수정했고 로컬에서 잘 작동하는 것도 확인했는데, 실제 웹에서도 잘 돌아갈지 모르겠네요. 우선 해봐야 알 것 같습니다… 리뷰에 참고가 될까 하여 제미나이가 지적한 폼 초기화 문제의 원인을 아래에 부칩니다. ## 🔍 Gemini says 1. **매 렌더링마다 새로운 객체 생성** `NewEvent.tsx`와 `EventEdit.tsx` 부모 컴포넌트에서 `defaultValues` 객체를 컴포넌트 바디 안에서 매번 새로 생성하고 있었습니다. 특히 `new Date()`를 호출하여 매 초마다 미세하게 값이 바뀌는 객체가 전달되었습니다. 2. **`EventForm`의 `useEffect` 트리거** `EventForm.tsx` 내부에서는 `defaultValues`가 변경될 때마다 `react-hook-form`의 `reset(defaultValues)`를 호출하는 `useEffect`가 있었습니다. 3. **의도치 않은 폼 초기화** 사용자가 "저장" 버튼을 누르면 API 요청을 위해 loading 상태가 변하게 되고, 이로 인해 부모 컴포넌트가 재렌더링됩니다. 이때 `defaultValues`가 새로운 참조값으로 생성되면서 `EventForm`의 `reset`이 실행되어 사용자가 입력한 값들이 서버 응답(에러 모달 등)을 보기도 전에 사라지는 현상이 발생했습니다. --------- Co-authored-by: jun-0411 <jun411@snu.ac.kr>
### 📝 작업 내용 - 기존에는 헤더와 `authbox` 페이지에서 항상 진입 직전 url을 저장하였는데, 이벤트와 관련된 페이지에서만 url을 저장하도록 로직을 수정했습니다. - 다음과 같은 경우 원하지 않는 페이지로 리다이렉트가 될 가능성이 있어 방어 로직을 추가했습니다.(완벽하게 방어는 실패했습니다...) - eventmain(1번 이벤트) -> 헤더 눌러서 로그인창 진입 -> 다시 기존 페이지로 돌아감 -> 홈페이지로 이동 -> eventmain(2번 이벤트) -> 홈페이지 -> 홈페이지에서 헤더 누르고 로그인 -> 로그인 성공 - 위와 같은 경우 로그인 성공 이후 1번 이벤트 페이지로 이동하는 현상을 막기 위해 홈페이지에서 헤더를 누르고 로그인/회원가입을 한 경우와 헤더의 모이밍 로고를 클릭해서 홈페이지로 돌아간 경우 redirecturl을 삭제하도록 로직을 수정했습니다. ### 📸 스크린샷 (선택) ### 🚀 리뷰 요구사항 (선택) - 다음 3가지 경우는 여전히 로그인 성공 이후 1번 이벤트로 리다이렉트됩니다. - 홈페이지에서 헤더를 누르지 않고, 박스 내부의 **이미 계정이 있나요? 로그인** 버튼을 눌러서 로그인 한 경우 - 홈페이지로 이동할 때 뒤로가기를 이용해서 이벤트 페이지에서 나간 경우 - 강제로 `/login`에 접근해서 로그인한 경우 - 이런 특이 케이스를 막기 위해 **전역 감시자**를 도입하는 것을 ai가 추천했는데, 현재 회원가입 페이지와 홈페이지가 통합되어 있어 도입이 어렵습니다. - 전역 감시자는, `redirectUrl` 이 있을 때 url을 검사하여 `/event`, `/login`, `/sign-up`, `/auth`가 아니면 항상 `redirectUrl`을 삭제하는 방식으로 작동합니다. - 현재 회원가입 페이지가 홈페이지와 통합되어있기 때문에, eventmain -> 헤더 눌러서 회원가입 -> 전역 감시자에 의해 url 삭제 와 같은 현상이 벌어집니다. - 추후 홈페이지와 회원가입 페이지를 분리한다면, 전역 감시자를 도입하는 것이 엣지 케이스 방어에 더 효율적일 것 같습니다.
### 📝 작업 내용 - 신청 마감 여부에 관계없이 모집 시작 시간을 수정할 수 있도록 하였습니다. ### 📸 스크린샷 없음 ### 🚀 리뷰 요구사항 없음
### 📝 작업 내용 - 3월 28일 회의에서 논의된 바와 같이 랜딩 페이지와 회원가입 페이지, 로그인 페이지의 디자인을 수정하였습니다. - 랜딩 페이지와 회원가입 페이지를 분리하고, 회원가입 페이지와 로그인 페이지의 디자인을 통일하였습니다. ### 📸 스크린샷 <div> <img width="204" height="390" alt="랜딩 페이지 스크린샷" src="https://github.com/user-attachments/assets/4eda9123-ff5c-40fd-83c9-6cc6facd60f2" /> <img width="204" height="390" alt="로그인 페이지 스크린샷" src="https://github.com/user-attachments/assets/44d48d04-ffa8-4ae4-9cee-e4b6094ebcc2" /> <img width="204" height="390" alt="회원가입 페이지 스크린샷" src="https://github.com/user-attachments/assets/d5477956-5948-4e35-bd80-14df79be8152" /> </div> ### 🚀 리뷰 요구사항 없음 --------- Co-authored-by: jun-0411 <jun411@snu.ac.kr>
### 📝 작업 내용 - API의 전역 timeout이 5초 -> 10초로 증가되었습니다. ### 📸 스크린샷 (선택) ### 🚀 리뷰 요구사항 (선택)
### 📝 작업 내용 - Vite를 최근 배포된 버전 8.0.3으로 상향하였습니다. [공식 문서의 안내](https://vite.dev/guide/migration)에 따라 이주를 진행하였습니다. - Vite 8 이주에 따라 리액트 플러그인도 지원 중단된 [`@vitejs/plugin-react-swc`](https://github.com/vitejs/vite-plugin-react-swc)에서 OXC 기반의 [`@vitejs/plugin-react`](https://github.com/vitejs/vite-plugin-react)로 변경하였습니다. - 그 밖에 아래의 변경이 있었습니다. - 패키지 매니저 Yarn의 버전을 4.13.0으로 상향하였습니다. - shadcn을 버전 4로 업그레이드하였습니다. - CD에 사용되는 `actions/checkout`과 `actions/setup-node`의 버전을 6으로 상향하였습니다. 기존에 사용하던 버전 4의 지원이 4월에 중단될 예정이기 때문입니다. - 린터가 `hooks/useIsInView.tsx` 파일을 무시하지 않도록 설정하고, 코드를 정리하였습니다. ### 📸 스크린샷 없음 ### 🚀 리뷰 요구사항 없음
### 📝 작업 내용 - Vite 개발 서버 프록시를 설정하였습니다. 이제, 개발 모드에서 API와 연결할 때 CORS 설정과 인증서를 신경 쓰지 않아도 됩니다. - 덤으로, 서버와의 통신이 있으면 터미널 창에 로그가 나타나도록 했습니다. - 랜딩 페이지에서, 로그인하지 않았을 때에도 계속해서 서버에 `/events/me`와 `registrations/me` 요청을 넣었습니다. 로그인하지 않은 경우에는 대시보드를 그릴 필요가 없으므로, 로그인했을 때만 서버에 요청을 넣도록 하였습니다. - 이외 콘솔에서 나타나는 경고를 수정하기 위해, 다음을 수정하였습니다. - 모달이 나타났을 때 자동으로 초점이 모달로 이동하도록 설정했습니다. - SVG에서 `clip-path`로 적혀 있던 속성을 `clipPath`로 바꾸었습니다. ### 📸 스크린샷 <img width="508" height="315" alt="스크린샷 2026-04-04 17 22 07" src="https://github.com/user-attachments/assets/93a257a9-814a-4517-a778-407e1de095e7" /> ### 🚀 리뷰 요구사항 - 환경변수 `VITE_API_BASE_URL`이 `https://api.moiming.app`일 때와 `https://api.dev.moiming.app`일 때 서버 프록시가 잘 작동하고 있음을 확인했습니다. 서버 이전 후 재확인이 필요할 수도 있겠습니다. - `yarn dev`를 실행하면 서버와의 통신 로그가 터미널 창에 남도록 했습니다. 로그가 찍히는 것이 오히려 불편하다면, `vite.config.ts` 파일에서 이 설정을 지우셔도 좋습니다. --------- Co-authored-by: jun-0411 <jun411@snu.ac.kr>
### 📝 작업 내용 - 타임아웃을 (정말로!) 10초로 늘렸습니다. ### 📸 스크린샷 없음 ### 🚀 리뷰 요구사항 없음
### 📝 작업 내용 - 데스크탑 환경에서 스크롤바 디자인을 모바일 환경과 비슷하게 수정했습니다. - 헤더의 드롭다운 메뉴가 선택되면 스크롤바가 없어져 ui.가 깜빡이는 현상을 수정했습니다. 기존에는 드롭다운 메뉴가 활성화되면 메인 화면의 스크롤이 불가능했습니다. 드롭다운 메뉴가 활성화될 때도 메인 화면 스크롤이 가능하게 수정했습니다. ### 📸 스크린샷 (선택) ### 🚀 리뷰 요구사항 (선택) - 저번주에 담당했던 이슈라 우선적으로 처리했습니다. 이후 #150 이슈부터 처리하겠습니다.
### 📝 작업 내용 - `EventMain` 페이지에서 `host`상태일 때 footer가 본문을 가리는 현상을 수정했습니다. - 04/21 체크인 회의에서 합의한 의견대로 `host`상태에서 footer에서 보여지는 공유 링크를 삭제하고, 버튼 이름을 '공유 링크 복사하기'로 수정하였습니다. ### 📸 스크린샷 (선택) <img width="562" height="1001" alt="image" src="https://github.com/user-attachments/assets/a11ce399-eff3-40de-a321-cdff6d45ef86" /> ### 🚀 리뷰 요구사항 (선택) - 현재 모바일 환경에서 참여자 명단 부분 참여자 아이콘이 footer의 영향으로 반 정도 블러되어 보입니다. 최대 스크롤에서 본문이 블러되는 것이 불편하다면 `EventMain`의 150줄 코드 `<div className="flex flex-col pb-38 py-6">`에서 pb 값을 늘리면 됩니다. --------- Co-authored-by: Park Junyoung <bloomwayz@snu.ac.kr>
### 📝 작업 내용 - 새로운 일정을 만들 때, 사용자가 모임 시작일시를 입력하면 자동으로 신청 마감일시를 모임 시작일시로 설정합니다. - 다만, 사용자가 신청 마감을 수동으로 수정한 이력이 있다면 값을 유지합니다. - 다만, 수동 수정된 값이라도 신청 마감 > 모임 시작이 되어 제약 조건을 위반하면, 신청 마감 = 모임 시작으로 강제 조정합니다. - 이 과정에서 신청 마감 ≤ 신청 시작이 된다면 신청 시작일시를 max(지금, 마감일시 24시간 전)으로 자동 조정합니다. ### 📸 스크린샷 없음 ### 🚀 리뷰 요구사항 없음
### 📝 작업 내용 - 글로벌 모달 디자인을 피그마에 맞춰서 수정했습니다. - 기존에 모달을 호출할 때 스타일을 지정하는 부분을 모두 제거하여 모달 디자인을 통일했습니다. ### 📸 스크린샷 (선택) <img width="694" height="276" alt="image" src="https://github.com/user-attachments/assets/f12c8a95-6b26-4732-9556-26129723cd77" /> ### 🚀 리뷰 요구사항 (선택) - 피그마에 맞추어 모달 우측 상단에 'X'를 추가했는데, 약간 불필요한 기능처럼 느껴지기도 합니다. 추후 회의에서 의논해보면 좋을 것 같습니다. - 피그마를 보면 모달에서 "취소하기 - 신청유지하기" 순서와 "신청유지하기 - 취소하기" 순서가 혼용되어있습니다. 모달에 의해 행동을 하게되는 것이 우측 파란 버튼이 되어야 한다고 생각해서 "신청유지하기 - 취소하기"로 우선 통일해두었습니다. - 피그마 기준으로 "취소 - 저장" 이런 식으로 되어있는 버튼도 많은데, 버튼 문구를 "취소하기 - 저장하기" 등으로 통일하는 것이 좋아 보입니다. --------- Co-authored-by: PARK Junyoung <bloomwayz@snu.ac.kr>
### 📝 작업 내용
- `GET /api/events/me`와 `GET /api/events/{publicId}`의 바뀐 API 응답 형식을
적용하였습니다.
- 대시보드에서, 모임 인원 정보를 `0/60명 (대기자 0명)`과 같이 표시되도록 합니다.
- '내가 참여한 모임' 탭은 아직 적용되지 않은 상태입니다. registration 도메인에서도 API를 바꾸어야 했는데, 제가
그걸 백엔드 분들께 말씀드리는 걸 잊었네요…
### 📸 스크린샷
<img width="660" height="227" alt="스크린샷 2026-04-25 22 26 39"
src="https://github.com/user-attachments/assets/4c346857-92f8-4ef7-9505-d7d6b80faae1"
/>
### 📝 작업 내용 - `GET /api/registrations/me`의 바뀐 API 응답 형식을 적용하였습니다. - 대기자가 없는 경우 `(대기자 0명)`이라는 문구가 보이도록 했습니다. ### 📸 스크린샷 없음
### 📝 작업 내용 - 토큰이 만료되었을 때 의도하지 않은 모달이 나타나는 문제를 해결했습니다. - `TanStack Query(React Query)`를 기반으로 작동하는 api는 기본적으로 3번의 재시도를 수행하도록 설정되어있습니다. - `QueryClient `에 전역으로 `retry` 로직을 추가하여, 인증 관련 에러인 경우 즉시 재시도를 중단하도록 설정했습니다. - 추가로, apiClient에서 `error.message`가 `TOKEN_EXPIRED_LOCAL`이거나 `INVALID_TOKEN_FORMAT`인 경우 에러 모달을 호출하지 않도록 설정했습니다. ### 📸 스크린샷 (선택) ### 🚀 리뷰 요구사항 (선택) - 로컬에서 테스트해보았을 때는 문제가 없었지만, 실제 환경에서 다시 테스트를 진행해 보는 것이 좋을 것 같습니다. --------- Co-authored-by: Park Junyoung <bloomwayz@snu.ac.kr>
### 📝 작업 내용 - 기존에 로그인 토큰이 만료되어도, 최초 api 호출은 이루어지고 있어 그에 해당하는 백엔드의 '로그인이 필요합니다' 에러 모달이 나타나고 있었습니다. - 로그인 토큰이 만료가 되면, 프론트 내부에서 api 호출이 안되게 차단합니다. - 기존에 `hooks/useAutoLogout.ts` 내부에 '로그인 유지 시간이 만료되어 자동으로 로그아웃되었습니다.' 모달이 존재했는데, 이 모달은 페이지가 새로고침 되거나 탭을 이동할 때 작동한 것으로 추정됩니다.(이 로직은 유지했습니다) - `apiClient`에서 로그인 토큰 만료를 감지하고, api 호출을 취소한 후 위와 동일한 모달을 띄웁니다.(로컬에서 확인했을 때 이 두 로직이 중복되는 문제는 없었습니다) ### 📸 스크린샷 (선택) ### 🚀 리뷰 요구사항 (선택) - 이번에도 로컬에서는 잘 작동했는데.... 실제 dev 환경에서 어떨지 모르겠네요. - 만약 계속 문제가 발생하면 로컬에서 좀 더 정확하게 테스트해볼 수 있는 환경을 구축해보는 것도 고려해보면 좋을 것 같습니다.
…ent (#165) ### 📝 작업 내용 - 모임 생성·삭제 작업을 마치고 대시보드 화면으로 돌아왔을 때, 생성·삭제한 결과가 대시보드에 반영되지 않아 사용자 경험이 저해되는 문제가 있었습니다. 탠스택 쿼리가 5분에 한 번씩 캐시를 갱신하는 것이 문제인 것으로 파악하였습니다. - 이를 해결하기 위해, 모임을 생성하거나 삭제할 때 `myEvents` 캐시를 지우도록 했습니다. 그러면 대시보드를 로드할 때 가져올 캐시가 없으므로 항상 새로운 정보를 API에서 가져오게 됩니다. - 이 과정에서, 캐시 관리를 쉽게 하기 위해 `useEvent` 훅을 탠스택 쿼리의 `useMutation` 기반으로 다시 작성하였습니다. ### 📸 스크린샷 없음 ### 🚀 리뷰 요구사항 없음 --------- Co-authored-by: jun-0411 <jun411@snu.ac.kr>
### 📝 작업 내용 - 모임 참여를 취소할 때 '존재하지 않는 이벤트입니다.' 오류 모달이 나타나는 문제를 해결하였습니다. - `handleCancelEvent`는 참여를 취소한 후 `handleFetchDetail(id)`를 명시적으로 호출하는데, 이 함수 내부에서 삭제된 정보로 다시 조회하려 하면서 404 에러가 발생하고 있었습니다. - 또, 참여를 취소하는 과정에서 상태가 변경되면 `effectiveRegId`가 갱신되고 `handleFetchDetail`이 새롭게 생성됩니다. 이때 `EventMain.tsx`의 `useEffect`는 `handleFetchDetail`을 의존성으로 갖고 있기 때문에, `handleFetchDetail(id)`를 명시적으로 호출하지 않아도 페치가 일어납니다. - 따라서 `handleCancelEvent` 안의 `handleFetchDetail(id)` 호출을 제거하는 방식으로 문제를 해결하였습니다. - 모임 메인 화면에서, 내비게이션 바도 상태 배너도 없는 경우 상단 여백이 없다는 문제점이 있었습니다. 이를 해결하였습니다. ### 📸 스크린샷 <img width="306" height="584.5" alt="스크린샷 2026-05-16 21 57 52" src="https://github.com/user-attachments/assets/7ead1b77-856d-4a2f-a4d2-9aeb3f83049f" /> ### 🚀 리뷰 요구사항 없음
### 📝 작업 내용 - 로그인 사용자가 모임을 신청한 경우, 예약정보 전달 이메일이 나타나지 않는다는 문제가 있었습니다. - 표면적으로는 페이로드의 `viewer.reservationEmail` 필드가 `null`이라 발생하는 문제인데요, 명확한 원인은 백엔드 분들과 얘기를 해봐야 알 수 있을 것 같습니다. - 이번 PR에서는 임시방편으로, 예약정보 전달 이메일에 로그인된 사용자의 이메일이 보이도록 하였습니다. 로그인한 사용자가 자신의 것이 아닌 이메일로 모임을 신청하는 방법이 존재하는지는 모르겠습니다만, 그런 통로가 발견된다면 추가 수정이 필요할 듯합니다. ### 📸 스크린샷 <img width="306" height="584.5" alt="스크린샷 2026-05-16 22 38 04" src="https://github.com/user-attachments/assets/a6eeacbf-6371-4c98-a920-83207717fda8" /> ### 🚀 리뷰 요구사항 없음
### 📝 작업 내용
- 로그인 유저와 비로그인 유저가 접근할 수 있는 페이지에 제한을 두어, 적절하지 않은 페이지로 이동할 경우 즉시 리다이렉트
되도록 수정했습니다.
- `PrivateRoute`를 이용해서, `/profile`, `/new-event`, `/event/:id/edit` 페이지에
비로그인 유저가 접근할 경우 즉시 `/login` 로그인페이지로 이동합니다.
`/event/:id`와 `/event/:id/register`는 게스트 조회 및 신청을 위해 예외로 두었습니다.
- `PublicOnlyRoute`를 이용해서, `/login`, `/sign-up`, `/auth/verify`,
`/auth/callback/:provider` 페이지에 로그인 유저가 접근한 경우 즉시 `/` 랜딩페이지로 이동합니다.
### 📸 스크린샷 (선택)
### 🚀 리뷰 요구사항 (선택)
### 알림 없는 리다이렉트
현재 두 로직 모두 사용자에게 별다른 알림을 띄우지 않고, 즉시 리다이렉트를 실행합니다.
이를 위해서 접근 거부시 `toast.error('로그인이 필요합니다.')` 등의 토스트 알림을 띄우는 것을 고려해보았는데,
기존에 존재하는 로그인 토큰 만료 모달과 중복해서 나타날 위험이 있을 것 같아 반려했습니다.
다음과 같은 3가지 방안을 고려해보았는데, 어떻게 생각하시나요?
1. 로그인 토큰 만료 모달과 중복되더라도 리다이렉트시 토스트 알림을 표시
2. 로그인 토큰 만료 모달 삭제하고, 이번 작업에서 접근제한+리다이렉트시 토스트(or 모달) 표시로 통일
3. 이번 작업의 알림 없이 리다이렉트 실행을 유지
## 로그인 토큰 만료 모달과 중복
기존의 로그인 토큰 만료 모달에서 `취소`와 `다시 로그인하기` 버튼이 생성되고 `취소`를 누르면, 기존 페이지, `다시
로그인하기`를 누르면 `/login`으로 이동합니다.
그런데, 이번 작업을 도입하면 로그인 토큰 만료 모달이 나타날 때 적절하지 않은 페이지였다면, 그 즉시
`PrivateRoute`가 작동하여 `/login`으로 리다이렉트되고(알림 없이), 배경이 로그인 페이지로 바뀐 상태에서 로그인
토큰 만료 모달이 나타납니다.
`취소`를 누르면 기존 페이지가 아닌 `/login`에서 이동이 일어나지 않는 것으로 처리가 되고, 만약 `다시 로그인하기`를
누르면 `/login` 페이지에서 한 번 더 새로고침이 발생합니다.
뭔가 말하다 보니 로그인 토큰 만료 모달이 만악의 근원 같은 느낌도 드는데.... 어떻게 생각하시나요?
(사실 기존 로직을 그대로 유지해도 사용성에서 큰 문제는 없을 것 같기도 합니다 ex)event/@ 페이지같이 적절한 페이지를
보던 도중 로그인 토큰이 만료가 되면, 그럴때는 모달의 `취소`와 `다시 로그인하기`가 의도대로 작동하고, 아예 없애면 이런 경우
문제가 발생할지도...?)
### 📝 작업 내용 - `EventForm` 컴포넌트 가장 아래에 24px의 여백을 주었습니다. ### 📸 스크린샷 - 아래는 iPhone SE의 화면 크기를 기준으로 한 것입니다. <img width="373" height="661" alt="스크린샷 2026-05-30 19 55 55" src="https://github.com/user-attachments/assets/ea8106b2-87cc-4574-8992-666828d7141d" /> ### 🚀 리뷰 요구사항 없음
### 📝 작업 내용
앱 내 전반적으로 적절하지 않은 문구를 수정했습니다.
- 모임 상세 정보 문구 변경 (`EventMain.tsx`)
- 체크박스 라벨: 모임 내용 텍스트 함께 복사하기 -> 모임 상세정보 함께 복사하기
- 복사 토스트 알림: 모임 내용이 포함되었습니다. -> 모임 상세정보가 포함되었습니다.
- 비밀번호 유효성 검사 문구 강화 (`SignUp.tsx`, `ProfileEdit.tsx`, `Login.tsx`)
- Placeholder: 8자 이상, 숫자 포함 -> 8자 이상, 영문, 숫자 포함
- 유효성 검사 텍스트: {...} 숫자 포함 -> {...} 영문, 숫자 포함
- 대기자 명단 하단 텍스트 분기 처리 (`Guests.tsx`)
- 무한 스크롤 하단에 노출되는 텍스트를 현재 활성화된 탭(`activeTab`)이 `WAITLISTED`인지에 따라 동적으로
변경하도록 처리했습니다.
- 적용 로직: `{activeTab === 'WAITLISTED' ? '마지막 대기자입니다.' : '마지막 참여자입니다.'}`
### 📸 스크린샷 (선택)
<img width="570" height="186" alt="스크린샷 2026-06-06 160855"
src="https://github.com/user-attachments/assets/11778908-4f2d-435a-a1ed-296461048f70"
/>
<img width="620" height="124" alt="스크린샷 2026-06-06 160933"
src="https://github.com/user-attachments/assets/5a8ebd73-b718-4d6b-a22a-4e0b34f81370"
/>
<img width="626" height="187" alt="스크린샷 2026-06-06 160939"
src="https://github.com/user-attachments/assets/c7b8fd47-02b1-413c-976f-d132d1e2492e"
/>
<img width="969" height="268" alt="스크린샷 2026-06-06 160903"
src="https://github.com/user-attachments/assets/ab4bf31f-afd6-467f-97f1-f8364ec47df8"
/>
### 🚀 리뷰 요구사항 (선택)
### 📝 작업 내용 - `EventEdit.tsx`에서 서버에 보낼 payload를 구성할 때, 빈 문자열인 경우 `undefined` 가 아닌 ''(빈 문자열)을 할당하도록 수정했습니다. - `NewEvent.tsx`에서도 비슷한 상황에서 `undefined`를 반환하지만, 일정 생성 시에는 현재 코드를 유지해도 괜찮을 것 같아 수정하지 않았습니다. - 기존 '미정' 등으로 표시되는 부분은 자바스크립트에서 `' '`(빈 문자열)도 `falsy`로 평가하여 문제가 없을 것으로 예상됩니다. - `EventForm.tsx`에서 1단계 유효성 검사 필드에 `location`/`description` 추가하고 `capacity` 삭제하였습니다. - 1단계 필드에서 `location`과 `description` 입력 폼 하단에 에러 메세지 ui를 출력하는 기능을 추가했습니다.(`description`는 확장성을 위해 추가했습니다. 현재는 특별한 유효성 검사를 실행하지 않습니다.) ### 📸 스크린샷 (선택) <img width="916" height="152" alt="image" src="https://github.com/user-attachments/assets/290843e2-614f-4b16-add6-8eb6b83d9f74" /> ### 🚀 리뷰 요구사항 (선택)
### 📝 작업 내용 - 지난 회의에서 논의된 대로, 일시 입력 필드의 디자인을 수정하였습니다. - `DateTimePicker`라는 이름의 컴포넌트를 새로 만들고, `EventForm`에 적용하였습니다. ### 📸 스크린샷 <img width="204" height="390" alt="스크린샷 2026-06-06 23 30 01" src="https://github.com/user-attachments/assets/3d5f4008-f3b9-452c-9623-457c0932e80e" /> <img width="204" height="390" alt="스크린샷 2026-06-06 23 30 06" src="https://github.com/user-attachments/assets/7d993245-b616-4a4c-a298-fae6dc6dc6c4" /> <img width="204" height="390" alt="스크린샷 2026-06-06 23 30 13" src="https://github.com/user-attachments/assets/5f9d0f9c-6e0e-4567-8494-9b25f381e07f" /> ### 🚀 리뷰 요구사항 없음
### 📝 작업 내용 - 배포 직전 마지막으로 리드미를 수정하였습니다. ### 📸 스크린샷 없음 ### 🚀 리뷰 요구사항 없음
### 📝 작업 내용 - 일정 설명란에서 줄바꿈이 적용되도록 수정하였습니다. ### 📸 스크린샷 없음 ### 🚀 리뷰 요구사항 없음 --------- Co-authored-by: jun-0411 <jun411@snu.ac.kr>
### 📝 작업 내용 - 사태를 수습하다가 이벤트 설명란 공백 설정 커밋을 날려먹어서… PR를 한 번 더 올립니다. - (1) 이 PR를 병합한 다음에, (2) `dev` → `main` 병합하고, 다시 (3) `main` → `dev` 병합하면 문제 없다고 합니다! ### 📸 스크린샷 없음 ### 🚀 리뷰 요구사항 없음
jun-0411
added a commit
that referenced
this pull request
Jun 9, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
📝 작업 내용
📸 스크린샷
없음
🚀 리뷰 요구사항
없음