Skip to content

Conversation

@kimdohoon2
Copy link
Collaborator

@kimdohoon2 kimdohoon2 commented Dec 7, 2024

요구사항

기본

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

심화

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

사진

FireShot Capture 205 -  - localhost
FireShot Capture 206 -  - localhost
FireShot Capture 207 -  - localhost
FireShot Capture 209 -  - localhost

멘토에게

  • 너무 햇갈려서 주석을 많이 달았습니다! 양해부탁드립니다ㅜㅜ
  • 공통 컴퍼넌트로 CommonForm을 만들어서 조건부 렌더링으로 회원가입과 로그인을 만들었는데 이렇게 설계하는게 맞는지 궁금합니다!
  • 메인페이지에서도 MainCard로 비슷해보이는 레이아웃들을 하나로 관리하긴 했는데 이것도 잘 설계한게 맞는지 궁급합니다.
  • 셀프 코드 리뷰를 통해 질문 이어가겠습니다.

@kimdohoon2 kimdohoon2 added 매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다. 미완성🫠 죄송합니다.. labels Dec 7, 2024
@baeggmin
Copy link
Collaborator

아직 구현 전이신거죠? 구현 완료되면 태그 부탁드려요~

@kimdohoon2
Copy link
Collaborator Author

아직 구현 전이신거죠? 구현 완료되면 태그 부탁드려요~

@baeggmin 너무 늦게 완성이 되어서 죄송합니다ㅜㅜ심화 제외하고 구현완료해서 리뷰 해주셔도 좋을거 같습니다!

@kimdohoon2
Copy link
Collaborator Author

@baeggmin 구현완료 했습니다!

@kimdohoon2 kimdohoon2 removed the 미완성🫠 죄송합니다.. label Dec 10, 2024
Copy link
Collaborator

@baeggmin baeggmin left a comment

Choose a reason for hiding this comment

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

고생하셨습니다~!
로그인/회원가입 로직은 기본적으로 잘 작성해주셨네요!
다음 단계에서는 로그인 상태를 전역 상태로 관리하는 방법에 대해 찾아보시면 좋을 것 같습니다💪

import { useRouter } from "next/navigation";
import { signup, login } from "../api/api";

export default function CommonForm({ type }: AuthFormProps) {
Copy link
Collaborator

Choose a reason for hiding this comment

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

중복되는 부분을 공통 컴포넌트화 하시려 한 것 같은데요, 이 영역은 오히려 분리해서 작성하는게 유지보수 측면에서 더 낫지 않을까 싶네요..🤔
하나의 컴포넌트에 로그인과 회원가입 모두 다루려고 하다보니 state 가 많아져 가독성이 떨어지고, handleSubmit 라는 하나의 함수 안에서 분기처리를 하게되면 나중에 더 복잡한 로직이 추가되었을 때 점점 더 읽기 어려운 코드가 될 것 같아요.
차라리 공통된 로직 부분을 custom hook 으로 분리해보시는건 어떨까요? email, password, showPassword 등의 로직은 훅으로 빼서 재사용하게 만들면 좋을 것 같습니다.

const [showRePassword, setShowRePassword] = useState(false);
const router = useRouter();

useEffect(() => {}, [email, nickname, password, repassword]);
Copy link
Collaborator

Choose a reason for hiding this comment

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

이 줄은 왜 필요한건가요?? 실수로 넣으신거겠죵?

const [isOpen, setIsOpen] = useState(false);
const router = useRouter();

useEffect(() => {
Copy link
Collaborator

Choose a reason for hiding this comment

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

멘토링 시간에 언급드렸듯이 client component 에서 localstorage 에 접근할 때 간헐적으로 undefined 에러가 날 수 있습니다.
이를 방지하기 위해 localStorage 가 undeifned 인지 확인하는 조건 하나가 추가되면 좋을 것 같네요.

import Image from "next/image";
import { Mcard } from "../type/type";

export default function MainCard({
Copy link
Collaborator

Choose a reason for hiding this comment

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

공통 컴포넌트 잘 만들어주셨네요! 👍

nickname: string;
};
}

Copy link
Collaborator

Choose a reason for hiding this comment

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

공용으로 사용하는 인터페이스&타입을 하나의 파일에서 관리하는건 좋은 방법이긴 하지만, 기능별 or 페이지별 colocation 을 지켜주는 것도 중요합니다. 지금은 프로젝트에서 사용되는 모든 공용 인터페이스가 한 파일에 있다보니, 타입을 확인할때마다 파일을 널뛰기 하며 움직여야해서 조금 불편해질 수 있을 것 같아요.
Mcard 의 경우에는 MainCard 컴포넌트에 선언해두는게 더 관리하기 쉬울 것 같네용.

@baeggmin baeggmin merged commit 470c5f6 into codeit-bootcamp-frontend:Next-김도훈 Dec 10, 2024
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.

2 participants