Skip to content

Conversation

@asksa1256
Copy link
Collaborator

요구사항

기본

  • 유효한 정보를 입력하고 스웨거 명세된 “/auth/signUp”으로 POST 요청해서 
성공 응답을 받으면 회원가입이 완료됩니다.
  • 회원가입이 완료되면 “/login”로 이동합니다.
  • 회원가입 페이지에 접근시 로컬 스토리지에 accessToken이 있는 경우 ‘/’ 페이지로 이동합니다.
  • 회원가입을 성공한 정보를 입력하고 스웨거 명세된 “/auth/signIn”으로 POST 요청을 하면 로그인이 완료됩니다.
  • 로그인이 완료되면 로컬 스토리지에 accessToken을 저장하고 “/” 로 이동합니다.
  • 로그인/회원가입 페이지에 접근시 로컬 스토리지에 accessToken이 있는 경우 ‘/’ 페이지로 이동합니다.
  • 로컬 스토리지에 accessToken이 있는 경우 상단바 ‘로그인’ 버튼이 판다 이미지로 바뀝니다.

심화

  • 로그인, 회원가입 기능에 react-hook-form을 활용해봅니다.

주요 변경사항

  • react+ts로 작업되어있던 판다마켓 로그인, 회원가입, 랜딩 페이지를 next+ts로 마이그레이션 (pages router 사용)
  • 로그인, 회원가입 api 요청에 react query 적용
  • 토큰을 쿠키로 저장하여 관리 및 요청에 사용
    • 요구사항에는 로컬스토리지에 토큰을 저장하라고 나와있는데, api routes와 미들웨어 사용법을 익혀보고 싶어서 쿠키를 사용해봤습니다.
  • vercel로 배포

배포 링크

https://panda-fesd.vercel.app/

스크린샷

로그인, 회원가입 (리액트 훅 폼)

회원가입-required 회원가입-비밀번호불일치 회원가입-사용중인이메일 회원가입-유효값입력 로그인-required 로그인유효성검사 로그인실패

로그인/로그아웃

로그인

로그인후-쿠키 로그인후-로컬스토리지

로그아웃

로그아웃-쿠키 로그아웃-로컬스토리지

멘토에게

  • 추가된 파일이 많아서 리뷰 필요한 부분에 따로 코멘트 남겨보겠습니다!
  • 셀프 코드 리뷰를 통해 질문 이어가겠습니다.

withyj-codeit and others added 30 commits November 6, 2023 16:09
@asksa1256 asksa1256 changed the base branch from Next-이상달 to React-이상달 August 18, 2025 10:31
Copy link
Collaborator Author

@asksa1256 asksa1256 Aug 18, 2025

Choose a reason for hiding this comment

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

쿠키 기반 인증 시스템을 구현하다보니 페이지 리디렉션을 서버에서 처리해줄 수 있을 것 같아서 next 미들웨어를 사용해봤습니다.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

next.js 서버를 이용한 인증을 구현해보고 싶어서 api 핸들러로 로그인, 회원가입, 로그아웃 함수들을 만들어 사용했습니다.
그런데 실제로는 토큰을 웹 스토리지에서만 관리하는 경우가 많다고 들어서, 이렇게 토큰을 쿠키로 저장하는 방식도 쓰이는 편인지 궁금합니다.

Copy link
Collaborator

Choose a reason for hiding this comment

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

일반적으로, 인증 인가와 관련된 부분은 백엔드 파트와 조율된 방식에 맞춰서 작성하는 편입니다.

지금처럼 여러가지 방식을 경험하기위해 코드를 작성해보는 시도는 아주 좋습니다 👍

Copy link
Collaborator

@addiescode-sj addiescode-sj left a comment

Choose a reason for hiding this comment

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

기존 리액트 앱을 마이그레이션하며 작업하기 쉽지 않았을텐데, 고생 많으셨습니다 👍

한번에 보기엔 변경사항이 많아서,
보면서 설계/개선점에 대한 피드백과 궁금해하셨던 질문에 대한 답변 위주로 리뷰 드려봤어요!

보시고 더 궁금한 점 생기면 코멘트 달아주세요!

주요 리뷰 포인트

  • 이미지 관련 Props type 분리하고 재사용하기
  • loading에 관련된 옵션 타입 좁히기
  • 페이지/ 콘텐츠 특성에 맞는 data fetching & 캐싱 전략 적용해보기
  • useMutation 콜백과 mutate 함수 콜백을 사용 목적에 따라 구분해 활용하기
  • layout별 컴포넌트 분리하기
  • 토큰 관리 방식에 대한 피드백

Comment on lines 43 to 48
err.response?.data?.message ||
"로그인에 실패했습니다. 이메일과 비밀번호를 확인해주세요."
);
} else {
alert("알 수 없는 에러가 발생했습니다.");
}
Copy link
Collaborator

Choose a reason for hiding this comment

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

useMutation의 onError는 컴포넌트 생명 주기와 무관하게 항상 실행됩니다.
따라서, 여기서 사용하는 콜백함수들은 mutation 과정에 필수적이면서도 UI 종속적이지 않은, 좀 더 전역적인 처리를 할때 쓰는걸 권장합니다 (쿼리 즉시 무효화와 같은 작업).

이렇게 사용자 피드백을 주는 처리의 경우 컴포넌트 생명 주기에 맞추어 처리해주는게 좋겠죠?

해당 콜백을 사용하기보다는 mutation.mutate 콜백에서 처리해줍시다 :)

Copy link
Collaborator

Choose a reason for hiding this comment

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

일반적으로, 인증 인가와 관련된 부분은 백엔드 파트와 조율된 방식에 맞춰서 작성하는 편입니다.

지금처럼 여러가지 방식을 경험하기위해 코드를 작성해보는 시도는 아주 좋습니다 👍

@asksa1256 asksa1256 added the 매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다. label Sep 17, 2025
@addiescode-sj addiescode-sj merged commit 15c2cc0 into codeit-bootcamp-frontend:React-이상달 Sep 18, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants