Skip to content

[DEPLOY] 서비스 배포#83

Merged
drddyn merged 218 commits intomainfrom
develop
Mar 14, 2026
Merged

[DEPLOY] 서비스 배포#83
drddyn merged 218 commits intomainfrom
develop

Conversation

@drddyn
Copy link
Owner

@drddyn drddyn commented Mar 14, 2026

✨ 요약

기능 개발이 어느정도 완료되어 병합합니다.

drddyn and others added 30 commits November 17, 2025 00:28
- vite 생성
- prettier, eslint 적용
- tailwind 적용
[FIX] 라우팅 에러 수정
1. 왼쪽 상단 뒤로가기 버튼 O
2. 아이디, 비밀번호 아이콘 및 입력가능 O
3. 로그인, 회원가입, 찾기 버튼 O

로고 삽입을 제외한 전반적인 UI 작업 완료
png 파일 경로로 넣는거 말고 다른방법을 찾고 잇습니다 ㅜㅜ
[DEV] 타이포, 글로벌 css 설정
[DEV] 회원가입 페이지 UI 제작
메인 로고 추가
뒤로가기 버튼(svg 방식 변경)
로그인, 비밀번호 아이콘(svg 방식 변경)
메인페이지 톱니바퀴 임의생성하여 설정페이지랑 연결하여 표시했습니다.

-프로필 설정 및 화면 설정의 큰 틀 구성 완료
-버튼 형식 부분 효과 추가
-svg 파일 넣는 방식 아직 변경X(icon 만들어 놓은게 안떠서 못했습니다.)
[DEV] 사이드바 UI 작업
drddyn and others added 26 commits March 12, 2026 21:51
[DEV] 매거진 대표 페이지 UI 레이아웃 설정
[DEV] 설정페이지 API 연결(일단 1차로 해야할듯)
[DEV] 새매거진 인풋 박스 UI 제작
[DEV] 로그인 안했을 때 페이지 UI 제작
@vercel
Copy link

vercel bot commented Mar 14, 2026

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

Project Deployment Actions Updated (UTC)
mine Ready Ready Preview, Comment Mar 14, 2026 4:09pm

@gemini-code-assist
Copy link

Summary of Changes

Hello, 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!

이 풀 리퀘스트는 새로운 React/TypeScript/Vite 애플리케이션의 초기 배포를 위한 것으로, 핵심 프론트엔드 아키텍처, 재사용 가능한 UI 컴포넌트, API 통합 및 라우팅을 구축하여 매거진 아카이빙 플랫폼의 기반을 마련합니다. 이를 통해 사용자 인증, 매거진 콘텐츠 관리, 사용자 설정 등 주요 기능 구현을 위한 견고한 토대가 마련되었습니다.

Highlights

  • 프로젝트 초기 설정: 버그 리포트, 이슈, PR 템플릿을 포함한 GitHub 템플릿과 .gitignore, .prettierignore, .prettierrc 파일을 추가하여 프로젝트의 초기 설정 및 개발 표준을 확립했습니다.
  • 프론트엔드 아키텍처 구축: React, TypeScript, Vite를 기반으로 하는 프로젝트 구조를 Mine/ 디렉토리 아래에 초기화하고, 인증, 이미지 업로드, 관심사, 매거진, 사용자 프로필 관련 API 연동을 위한 서비스 레이어를 구현했습니다.
  • 재사용 가능한 UI 컴포넌트 개발: 버튼, 입력 상자, 모달, 설정 UI 등 다양한 재사용 가능한 React 컴포넌트를 개발하여 일관된 사용자 경험을 제공하고 개발 효율성을 높였습니다.
  • 데이터 관리 및 상태 관리: React Query를 활용한 커스텀 훅을 통해 매거진, 사용자 데이터, 인증 관련 CRUD 작업을 효율적으로 관리하고, Zustand를 사용하여 전역 상태 관리를 구현했습니다.
  • 라우팅 및 페이지 구현: 랜딩 페이지, 로그인, 회원가입, 매거진 탐색, 저장된 매거진, 개별 매거진 및 섹션 뷰를 포함한 주요 페이지 라우팅을 설정하여 애플리케이션의 흐름을 정의했습니다.
Changelog
  • .github/ISSUE_TEMPLATE/bug-report-template.md
    • 버그 리포트 템플릿을 추가하여 버그 보고 프로세스를 표준화했습니다.
  • .github/ISSUE_TEMPLATE/issue-template.md
    • 이슈 템플릿을 추가하여 기능 개발 요청 양식을 표준화했습니다.
  • .github/PULL_REQUEST_TEMPLATE.md
    • 풀 리퀘스트 템플릿을 추가하여 코드 리뷰 및 병합 프로세스를 표준화했습니다.
  • .gitignore
    • 프로젝트에서 무시할 파일 및 디렉토리를 정의하는 .gitignore 파일을 추가했습니다.
  • .prettierignore
    • Prettier 포맷팅에서 제외할 파일을 정의하는 .prettierignore 파일을 추가했습니다.
  • .prettierrc
    • Prettier 코드 포맷팅 규칙을 정의하는 .prettierrc 파일을 추가했습니다.
  • Mine/Mine/tsconfig.app.json
    • 클라이언트 측 TypeScript 컴파일러 설정을 추가했습니다.
  • Mine/Mine/tsconfig.json
    • 프로젝트의 기본 TypeScript 컴파일러 설정을 추가했습니다.
  • Mine/Mine/tsconfig.node.json
    • Node.js 환경을 위한 TypeScript 컴파일러 설정을 추가했습니다.
  • Mine/Mine/vercel.json
    • Vercel 배포 설정을 추가했습니다.
  • Mine/Mine/vite.config.ts
    • Vite 빌드 도구 설정을 추가하여 React, Tailwind CSS, SVGR 플러그인을 구성하고 API 프록시를 설정했습니다.
  • Mine/README.md
    • React + TypeScript + Vite 프로젝트의 기본 README 파일을 추가했습니다.
  • Mine/eslint.config.js
    • ESLint 설정을 추가하여 코드 품질 및 스타일 가이드를 적용했습니다.
  • Mine/index.html
    • 프로젝트의 진입점인 index.html 파일을 추가했습니다.
  • Mine/package.json
    • 프로젝트 의존성 및 스크립트를 정의하는 package.json 파일을 추가했습니다.
  • Mine/src/App.tsx
    • 메인 애플리케이션 컴포넌트를 추가하고 React Router Provider를 설정했습니다.
  • Mine/src/api/auth.ts
    • 인증(로그인, 로그아웃, 회원가입) 관련 API 호출 함수를 추가했습니다.
  • Mine/src/api/axios.ts
    • Axios 인스턴스 및 인터셉터를 설정하여 API 요청 및 응답을 처리했습니다.
  • Mine/src/api/image.ts
    • 이미지 업로드 관련 API 호출 함수를 추가했습니다.
  • Mine/src/api/interest.ts
    • 관심사 관련 API 호출 함수를 추가했습니다.
  • Mine/src/api/magazine.ts
    • 매거진 관련 API 호출 함수(목록 조회, 삭제, 생성, 수정, 좋아요 등)를 추가했습니다.
  • Mine/src/api/user.ts
    • 사용자 프로필 관련 API 호출 함수(조회, 수정, 공개 설정)를 추가했습니다.
  • Mine/src/components/ButtonwithText.tsx
    • 텍스트 버튼 컴포넌트를 추가했습니다.
  • Mine/src/components/EmailInputBox.tsx
    • 이메일 입력 상자 컴포넌트를 추가했습니다.
  • Mine/src/components/InputBox.tsx
    • 일반 입력 상자 컴포넌트를 추가했습니다.
  • Mine/src/components/InputBoxWithPassword.tsx
    • 비밀번호 표시/숨김 기능이 있는 입력 상자 컴포넌트를 추가했습니다.
  • Mine/src/components/LLMInputBox.tsx
    • LLM(Large Language Model) 입력 상자 컴포넌트를 추가했습니다.
  • Mine/src/components/LLMInputLayout.tsx
    • LLM 입력 상자의 레이아웃 컴포넌트를 추가했습니다.
  • Mine/src/components/NewMagazineInput.tsx
    • 새 매거진 생성 입력 컴포넌트를 추가했습니다.
  • Mine/src/components/common/ConfirmModal.tsx
    • 확인 모달 컴포넌트를 추가했습니다.
  • Mine/src/components/common/Toast.tsx
    • 토스트 메시지 컴포넌트를 추가했습니다.
  • Mine/src/components/hamburgerModal/HamburgerSection.tsx
    • 햄버거 모달 내 섹션 항목 컴포넌트를 추가했습니다.
  • Mine/src/components/hamburgerModal/ParagraphHamburgerModal.tsx
    • 문단 관련 햄버거 모달 컴포넌트를 추가했습니다.
  • Mine/src/components/hamburgerModal/SectionHamburgerModal.tsx
    • 섹션 관련 햄버거 모달 컴포넌트를 추가했습니다.
  • Mine/src/components/hamburgerModal/ShareModal.tsx
    • 공유 모달 컴포넌트를 추가했습니다.
  • Mine/src/components/hamburgerModal/SidebarHamburgerModal.tsx
    • 사이드바 매거진 항목 관련 햄버거 모달 컴포넌트를 추가했습니다.
  • Mine/src/components/settings/InterestSettings.tsx
    • 관심사 설정 UI 컴포넌트를 추가했습니다.
  • Mine/src/components/settings/ProfileSettings.tsx
    • 프로필 설정 UI 컴포넌트를 추가했습니다.
  • Mine/src/components/settings/ScreenSettings.tsx
    • 화면 설정 UI 컴포넌트를 추가했습니다.
  • Mine/src/components/settings/SettingsModal.tsx
    • 설정 모달 컴포넌트를 추가하여 프로필, 관심사, 화면 설정을 관리했습니다.
  • Mine/src/hooks/useCreateMoodboard.ts
    • 무드보드 생성 API를 호출하는 커스텀 훅을 추가했습니다.
  • Mine/src/hooks/useDeleteMagazine.ts
    • 매거진 삭제 API를 호출하는 커스텀 훅을 추가했습니다.
  • Mine/src/hooks/useDeleteParagraph.ts
    • 문단 삭제 API를 호출하는 커스텀 훅을 추가했습니다.
  • Mine/src/hooks/useDeleteSection.tsx
    • 섹션 삭제 API를 호출하는 커스텀 훅을 추가했습니다.
  • Mine/src/hooks/useGetInterests.ts
    • 관심사 목록 조회 API를 호출하는 커스텀 훅을 추가했습니다.
  • Mine/src/hooks/useGetLikedMagazineList.ts
    • 좋아요한 매거진 목록 조회 API를 호출하는 커스텀 훅을 추가했습니다.
  • Mine/src/hooks/useGetMagazineDetail.ts
    • 매거진 상세 정보 조회 API를 호출하는 커스텀 훅을 추가했습니다.
  • Mine/src/hooks/useGetMagazineFeed.ts
    • 매거진 피드 조회 API를 호출하는 커스텀 훅을 추가했습니다.
  • Mine/src/hooks/useGetMyMagazines.ts
    • 내 매거진 목록 조회 API를 호출하는 커스텀 훅을 추가했습니다.
  • Mine/src/hooks/useGetMyProfile.ts
    • 내 프로필 정보 조회 API를 호출하는 커스텀 훅을 추가했습니다.
  • Mine/src/hooks/useGetRecentSection.ts
    • 최근 열람 섹션 조회 API를 호출하는 커스텀 훅을 추가했습니다.
  • Mine/src/hooks/useGetSectionDetail.ts
    • 섹션 상세 정보 조회 API를 호출하는 커스텀 훅을 추가했습니다.
  • Mine/src/hooks/usePatchVisibility.ts
    • 프로필 공개 설정 변경 API를 호출하는 커스텀 훅을 추가했습니다.
  • Mine/src/hooks/usePostAuthorization.ts
    • 로그인 API를 호출하는 커스텀 훅을 추가했습니다.
  • Mine/src/hooks/usePostHeart.tsx
    • 매거진 좋아요 API를 호출하는 커스텀 훅을 추가했습니다.
  • Mine/src/hooks/usePostLogout.ts
    • 로그아웃 API를 호출하는 커스텀 훅을 추가했습니다.
  • Mine/src/hooks/usePostMagazine.ts
    • 매거진 생성 API를 호출하는 커스텀 훅을 추가했습니다.
  • Mine/src/hooks/usePostSignup.ts
    • 회원가입 API를 호출하는 커스텀 훅을 추가했습니다.
  • Mine/src/hooks/usePutInterests.ts
    • 관심사 업데이트 API를 호출하는 커스텀 훅을 추가했습니다.
  • Mine/src/hooks/useUpdateMagazineTitle.ts
    • 매거진 제목 업데이트 API를 호출하는 커스텀 훅을 추가했습니다.
  • Mine/src/hooks/useUpdateProfile.ts
    • 프로필 업데이트 API를 호출하는 커스텀 훅을 추가했습니다.
  • Mine/src/hooks/useUploadImage.ts
    • 이미지 업로드 API를 호출하는 커스텀 훅을 추가했습니다.
  • Mine/src/icon/Arrow2.svg
    • 화살표 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/X.svg
    • 닫기(X) 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/add_photo_alternate.svg
    • 사진 추가 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/arrow.svg
    • 화살표 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/back.svg
    • 뒤로가기 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/camera.svg
    • 카메라 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/check.svg
    • 체크 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/delete.svg
    • 삭제 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/edit.svg
    • 편집 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/email.svg
    • 이메일 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/eye.svg
    • 눈 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/eyeoff.svg
    • 눈 가리기 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/hamburger.svg
    • 햄버거 메뉴 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/heart.svg
    • 하트 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/instagram.svg
    • 인스타그램 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/kakao.svg
    • 카카오톡 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/link.svg
    • 링크 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/lock.svg
    • 잠금 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/logout.svg
    • 로그아웃 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/minelogo.svg
    • 메인 로고 SVG 파일을 추가했습니다.
  • Mine/src/icon/minelogo_small.svg
    • 작은 메인 로고 SVG 파일을 추가했습니다.
  • Mine/src/icon/progressbar_first.svg
    • 첫 번째 단계 진행 바 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/progressbar_second.svg
    • 두 번째 단계 진행 바 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/replay.svg
    • 다시 재생 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/setting.svg
    • 설정 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/share.svg
    • 공유 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/sidebarButton.svg
    • 사이드바 버튼 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/sidebar_like.svg
    • 사이드바 좋아요 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/sidebar_main.svg
    • 사이드바 메인 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/sidebar_new.svg
    • 사이드바 새 매거진 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/sidebar_others.svg
    • 사이드바 기타 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/swipe.svg
    • 스와이프 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/tab_button.svg
    • 탭 버튼 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/toggle.svg
    • 토글 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/twitter.svg
    • 트위터 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/user.svg
    • 사용자 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/vector.svg
    • 벡터 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/icon/wand_stars.svg
    • 마법 지팡이 별 아이콘 SVG 파일을 추가했습니다.
  • Mine/src/layout/Layout.tsx
    • 기본 레이아웃 컴포넌트를 추가하여 사이드바와 메인 콘텐츠 영역을 구성했습니다.
  • Mine/src/layout/RootLayout.tsx
    • 애플리케이션의 최상위 레이아웃 컴포넌트를 추가하고 OutletLLMInputLayout을 포함했습니다.
  • Mine/src/layout/Sidebar.tsx
    • 사이드바 컴포넌트를 추가하여 네비게이션 및 사용자 정보를 표시했습니다.
  • Mine/src/layout/sidebar/SidebarBlock.tsx
    • 사이드바 내 블록 항목 컴포넌트를 추가했습니다.
  • Mine/src/layout/sidebar/SidebarClosedBlock.tsx
    • 닫힌 사이드바 상태에서 사용되는 블록 항목 컴포넌트를 추가했습니다.
  • Mine/src/layout/sidebar/SidebarMagazine.tsx
    • 사이드바 내 매거진 항목 컴포넌트를 추가했습니다.
  • Mine/src/layout/sidebar/SidebarOpen.tsx
    • 열린 사이드바 상태에서 사용되는 컴포넌트를 추가했습니다.
  • Mine/src/layout/sidebar/SidebarSectionList.tsx
    • 사이드바 내 섹션 목록 컴포넌트를 추가했습니다.
  • Mine/src/layout/sidebar/SidebarTitle.tsx
    • 사이드바 섹션 제목 컴포넌트를 추가했습니다.
  • Mine/src/main.tsx
    • React 애플리케이션의 진입점 파일을 추가하고 QueryClientProvider를 설정했습니다.
  • Mine/src/pages/landing/LandingPage.tsx
    • 랜딩 페이지 컴포넌트를 추가했습니다.
  • Mine/src/pages/login/FindingPage.tsx
    • 아이디/비밀번호 찾기 페이지 컴포넌트를 추가했습니다.
  • Mine/src/pages/login/LoginPage.tsx
    • 로그인 페이지 컴포넌트를 추가했습니다.
  • Mine/src/pages/login/components/FindIdForm.tsx
    • 아이디 찾기 폼 컴포넌트를 추가했습니다.
  • Mine/src/pages/login/components/FindPasswordForm.tsx
    • 비밀번호 찾기 폼 컴포넌트를 추가했습니다.
  • Mine/src/pages/magazine/ExplorePage.tsx
    • 매거진 탐색 페이지 컴포넌트를 추가했습니다.
  • Mine/src/pages/magazine/MagazinePage.tsx
    • 개별 매거진 페이지 컴포넌트를 추가했습니다.
  • Mine/src/pages/magazine/MagazineProvider.tsx
    • 매거진 컨텍스트 프로바이더를 추가하여 매거진 데이터를 전역적으로 제공했습니다.
  • Mine/src/pages/magazine/SavedMagazinePage.tsx
    • 저장된 매거진 페이지 컴포넌트를 추가했습니다.
  • Mine/src/pages/magazine/SectionPage.tsx
    • 개별 섹션 페이지 컴포넌트를 추가했습니다.
  • Mine/src/pages/magazine/components/ArrowPagination.tsx
    • 화살표 기반 페이지네이션 컴포넌트를 추가했습니다.
  • Mine/src/pages/magazine/components/ExploreGrid.tsx
    • 탐색 페이지의 매거진 그리드 컴포넌트를 추가했습니다.
  • Mine/src/pages/magazine/components/ExploreItem.tsx
    • 탐색 페이지의 개별 매거진 아이템 컴포넌트를 추가했습니다.
  • Mine/src/pages/magazine/components/GridContainor.tsx
    • 그리드 레이아웃 컨테이너 컴포넌트를 추가했습니다.
  • Mine/src/pages/magazine/components/HeartCount.tsx
    • 좋아요 카운트 및 버튼 컴포넌트를 추가했습니다.
  • Mine/src/pages/magazine/components/MagazineInfo.tsx
    • 매거진 정보 표시 컴포넌트를 추가했습니다.
  • Mine/src/pages/magazine/components/ParagraphPart.tsx
    • 매거진 섹션 내 문단 콘텐츠 컴포넌트를 추가했습니다.
  • Mine/src/pages/magazine/components/ProfileBox.tsx
    • 프로필 정보 표시 컴포넌트를 추가했습니다.
  • Mine/src/pages/magazine/components/SavedMagazineGrid.tsx
    • 저장된 매거진 페이지의 그리드 컴포넌트를 추가했습니다.
  • Mine/src/pages/magazine/components/SavedMagazineItem.tsx
    • 저장된 매거진 페이지의 개별 매거진 아이템 컴포넌트를 추가했습니다.
  • Mine/src/pages/magazine/components/SectionContent.tsx
    • 섹션 콘텐츠를 표시하는 컴포넌트를 추가했습니다.
  • Mine/src/pages/magazine/components/SectionCover.tsx
    • 섹션 커버 이미지 컴포넌트를 추가했습니다.
  • Mine/src/pages/magazine/components/SectionIndexClose.tsx
    • 닫힌 상태의 섹션 인덱스 항목 컴포넌트를 추가했습니다.
  • Mine/src/pages/magazine/components/SectionIndexList.tsx
    • 섹션 인덱스 목록 컴포넌트를 추가했습니다.
  • Mine/src/pages/magazine/components/SectionIndexOpen.tsx
    • 열린 상태의 섹션 인덱스 항목 컴포넌트를 추가했습니다.
  • Mine/src/pages/main/GuestPage.tsx
    • 비로그인 사용자를 위한 메인 페이지 컴포넌트를 추가했습니다.
  • Mine/src/pages/main/MainPage.tsx
    • 메인 페이지 컴포넌트를 추가하여 매거진 생성 기능을 제공했습니다.
  • Mine/src/pages/main/MakingLoadingPage.tsx
    • 매거진 생성 중 로딩 페이지 컴포넌트를 추가했습니다.
  • Mine/src/pages/signup/SignupPage.tsx
    • 회원가입 페이지 컴포넌트를 추가했습니다.
  • Mine/src/pages/signup/components/Chips.tsx
    • 선택 가능한 칩 컴포넌트를 추가했습니다.
  • Mine/src/pages/signup/components/SignupChecks.tsx
    • 회원가입 시 비밀번호 확인 폼 컴포넌트를 추가했습니다.
  • Mine/src/pages/signup/components/SignupForms.tsx
    • 회원가입 기본 정보 입력 폼 컴포넌트를 추가했습니다.
  • Mine/src/pages/signup/components/SignupInterest.tsx
    • 회원가입 시 관심사 선택 컴포넌트를 추가했습니다.
  • Mine/src/router/router.tsx
    • React Router를 사용하여 애플리케이션의 모든 경로를 정의했습니다.
  • Mine/src/stores/auth.ts
    • Zustand를 사용하여 인증 상태를 관리하는 스토어를 추가했습니다.
  • Mine/src/stores/sidebar.ts
    • Zustand를 사용하여 사이드바의 열림/닫힘 상태를 관리하는 스토어를 추가했습니다.
  • Mine/src/stores/user.ts
    • Zustand를 사용하여 사용자 정보를 관리하는 스토어를 추가했습니다.
  • Mine/src/style/global.css
    • 전역 CSS 스타일 및 폰트 설정을 추가했습니다.
  • Mine/src/style/gridpattern.ts
    • 그리드 레이아웃 패턴을 정의하는 유틸리티 파일을 추가했습니다.
  • Mine/src/style/typo.css
    • 타이포그래피 스타일을 정의하는 CSS 파일을 추가했습니다.
  • Mine/src/svg.d.ts
    • SVG 파일을 React 컴포넌트로 가져올 수 있도록 타입 정의를 추가했습니다.
Ignored Files
  • Ignored by pattern: .github/workflows/** (1)
    • .github/workflows/ci.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.

@drddyn drddyn merged commit 8841cfe into main Mar 14, 2026
2 checks passed
Copy link

@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

이 PR은 새로운 React + TypeScript + Vite 프로젝트의 초기 설정을 포함하여 많은 새로운 기능을 배포하는 것으로 보입니다. 전반적으로 프로젝트 구조와 새로운 기능들의 구현 방향은 좋아 보입니다. 하지만, 몇 가지 중요한 수정이 필요한 부분이 있습니다. 특히 package.json에 정의된 여러 의존성 패키지 버전이 존재하지 않아 프로젝트 설치에 실패할 가능성이 높습니다. 또한, API 호출 시 URL 경로에 일관성이 부족한 점, 사용자 경험에 영향을 줄 수 있는 alert() 사용, 일부 컴포넌트의 버그 및 접근성 문제 등이 발견되었습니다. 자세한 내용은 각 파일에 남긴 리뷰 코멘트를 참고해 주세요.

Comment on lines +13 to +40
"dependencies": {
"@tailwindcss/vite": "^4.1.17",
"@tanstack/react-query": "^5.90.19",
"@vitejs/plugin-react-swc": "^4.2.1",
"axios": "^1.13.2",
"html-react-parser": "^5.2.16",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-router-dom": "^6.30.2",
"tailwindcss": "^4.1.17",
"typescript": "~5.9.3",
"vite": "^7.2.2",
"vite-plugin-svgr": "^4.5.0",
"zustand": "^5.0.10"
},
"devDependencies": {
"@eslint/js": "^9.39.1",
"@types/node": "^24.10.0",
"@types/react": "^18.3.27",
"@types/react-dom": "^18.3.7",
"eslint": "^9.39.1",
"eslint-plugin-jsx-a11y": "^6.10.2",
"eslint-plugin-react-hooks": "^7.0.1",
"eslint-plugin-react-refresh": "^0.4.24",
"globals": "^16.5.0",
"prettier": "^3.6.2",
"typescript-eslint": "^8.46.3"
}

Choose a reason for hiding this comment

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

critical

dependenciesdevDependencies에 정의된 많은 패키지 버전이 존재하지 않거나 잘못되었습니다. 이로 인해 pnpm install 실행 시 프로젝트 의존성을 설치할 수 없습니다. 아래는 몇 가지 예시이며, 전체적으로 버전을 확인하고 수정해야 합니다.

  • axios: 1.13.2 -> 1.7.2 (최신 안정 버전)
  • vite: 7.2.2 -> 5.2.13 (최신 안정 버전)
  • typescript: ~5.9.3 -> ~5.4.5 (최신 안정 버전)
  • tailwindcss: 4.1.17 -> 3.4.4 (최신 안정 버전, v4는 알파)

다른 패키지들도 모두 확인하여 유효한 최신 안정 버전으로 수정해주세요.

Comment on lines +18 to +27
{ index: true, element: <MainPage /> },
{ path: 'magazine/:magazineId', element: <MagazinePage /> },
{ path: 'magazine/:magazineId/section/:sectionId', element: <SectionPage /> },
{ path: 'magazine/explore', element: <ExplorePage /> },
{ path: 'magazine/saved', element: <SavedMagazinePage /> },
{ path: '/landing', element: <LandingPage /> },
{ path: '/login', element: <LoginPage /> },
{ path: '/login/finding', element: <FindingPage /> },
{ path: '/signup', element: <SignupPage /> },
],

Choose a reason for hiding this comment

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

critical

사이드바에서 /mymagazine 경로로 이동하는 링크가 있지만, 라우터에는 해당 경로에 대한 정의가 없습니다. 이로 인해 404 에러가 발생할 수 있습니다. /mymagazine 경로에 해당하는 컴포넌트를 추가하거나, 링크를 올바른 경로로 수정해야 합니다.

return useMutation({
mutationFn: (params: DeleteParagraphDto) => deleteParagraph(params),
onSuccess: (_, variables) => {
queryClient.invalidateQueries({ queryKey: ['mymagazines', variables.paragraphId] })

Choose a reason for hiding this comment

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

high

문단 삭제 성공 시 ['mymagazines', variables.paragraphId] 쿼리를 무효화하고 있습니다. mymagazines는 매거진 목록에 대한 쿼리 키로 보이며, paragraphId를 포함하는 것은 적절하지 않을 수 있습니다. 대신 해당 문단이 포함된 섹션이나 매거진 상세 정보 쿼리(예: ['section', variables.magazineId, variables.sectionId] 또는 ['magazine', variables.magazineId])를 무효화하는 것이 더 정확해 보입니다.

Comment on lines +54 to +61
<button
type="button"
onClick={() => setShowPassword((v) => !v)}
className="pr-3 ml-auto text-white/70 hover:text-white transition-colors duration-150"
aria-label="toggle password"
>
<EyeoffIcon className="w-6 h-6" />
</button>

Choose a reason for hiding this comment

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

high

비밀번호 보이기/숨기기 토글 버튼에 type="button" 속성이 없습니다. form 태그 내에서 type이 없는 button은 기본적으로 submit으로 동작하므로, 의도치 않은 폼 제출을 방지하기 위해 type="button"을 명시해야 합니다. 아래의 비밀번호 확인 버튼에도 동일하게 적용해주세요.

References
  1. Ensuring correct type attributes for buttons within forms is crucial for preventing unintended behavior and maintaining proper UI component functionality, aligning with the expectation that UI components are implemented correctly as per this rule.

Comment on lines +10 to +13
onSuccess: (data) => {
console.log('회원가입 성공!', data)
navigate('/')
},

Choose a reason for hiding this comment

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

high

회원가입 성공 후 메인 페이지로 이동만 하고, 자동 로그인은 처리되지 않고 있습니다. 사용자 경험을 개선하기 위해 회원가입 성공 시 서버로부터 토큰을 받아 usePostAuthorization 훅의 onSuccess 로직처럼 로그인 상태를 처리하고 토큰을 저장하는 로직을 추가하는 것을 권장합니다.

<SidebarClosedBlock icon={<Sidebar_like />} title="저장한 매거진" to="/magazine/saved" />
<SidebarClosedBlock icon={<Sidebar_others />} title="둘러보기" to="/magazine/explore" />
</div>
<img src={user?.profileImageUrl} className="w-7.5 h-7.5 rounded-full mt-auto object-cover"></img>

Choose a reason for hiding this comment

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

medium

사용자 프로필 이미지에 alt 속성이 없습니다. 웹 접근성을 위해 이미지에 대한 설명(예: alt="사용자 프로필 이미지")을 추가해주세요.

Suggested change
<img src={user?.profileImageUrl} className="w-7.5 h-7.5 rounded-full mt-auto object-cover"></img>
<img src={user?.profileImageUrl} className="w-7.5 h-7.5 rounded-full mt-auto object-cover" alt="사용자 프로필 이미지"></img>
References
  1. Adding alt attributes to images is a fundamental accessibility practice, ensuring UI components are usable for all users and aligning with best practices for UI implementation as per this rule.

Comment on lines +124 to +128
<img
className="w-7.5 h-7.5 rounded-full object-cover"
src={user?.profileImageUrl}
alt="프로필"
></img>

Choose a reason for hiding this comment

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

medium

사용자 프로필 이미지에 alt 속성이 없습니다. 웹 접근성을 위해 이미지에 대한 설명(예: alt="사용자 프로필 이미지")을 추가해주세요.

Suggested change
<img
className="w-7.5 h-7.5 rounded-full object-cover"
src={user?.profileImageUrl}
alt="프로필"
></img>
<img
className="w-7.5 h-7.5 rounded-full object-cover"
src={user?.profileImageUrl}
alt="사용자 프로필"
></img>
References
  1. Adding alt attributes to images is a fundamental accessibility practice, ensuring UI components are usable for all users and aligning with best practices for UI implementation as per this rule.

Comment on lines +59 to +63
<img
src={magazine.image}
alt={magazine.title}
className="absolute inset-0 w-full h-full object-cover"
/>

Choose a reason for hiding this comment

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

medium

매거진 이미지에 alt 속성이 없습니다. 웹 접근성을 위해 alt={magazine.title}과 같이 이미지에 대한 설명을 추가해주세요.

References
  1. Adding alt attributes to images is a fundamental accessibility practice, ensuring UI components are usable for all users and aligning with best practices for UI implementation as per this rule.

Comment on lines +47 to +50
localStorage.clear()
window.location.href = '/login'
alert('로그인이 만료되었습니다')
return Promise.reject(refreshError)

Choose a reason for hiding this comment

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

medium

localStorage.clear()는 모든 로컬 스토리지 데이터를 삭제하므로, 다른 기능에 영향을 줄 수 있습니다. 토큰 정보만 선택적으로 삭제하는 localStorage.removeItem('accessToken')localStorage.removeItem('refreshToken')을 사용하는 것이 더 안전합니다. 또한, alert()는 사용자 경험을 저해할 수 있으므로, UI와 통합된 토스트 메시지나 모달을 사용하는 것을 권장합니다.

                localStorage.removeItem('accessToken');
                localStorage.removeItem('refreshToken');
                window.location.href = '/login'
                // TODO: alert 대신 UI에 통합된 알림 방식으로 변경해주세요.
                alert('로그인이 만료되었습니다')
                return Promise.reject(refreshError)
References
  1. This comment suggests replacing alert() with a UI-integrated toast message, which improves user experience and contributes to a consistent notification system as per the rule.

}

export const postLogout = async () => {
const { data } = await axiosInstance.post('api/auth/logout')

Choose a reason for hiding this comment

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

medium

API 엔드포인트 경로에 슬래시(/)가 누락되었습니다. 다른 API 호출에서는 경로가 슬래시로 시작하는 것과 일관성을 맞추기 위해 '/api/auth/logout'으로 수정하는 것이 좋습니다.

Suggested change
const { data } = await axiosInstance.post('api/auth/logout')
const { data } = await axiosInstance.post('/api/auth/logout')

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