Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[4주차 기본/심화/생각 과제] 🍁 로그인/회원가입 #4

Open
wants to merge 23 commits into
base: main
Choose a base branch
from

Conversation

namdaeun
Copy link
Contributor

@namdaeun namdaeun commented Nov 16, 2023

🌱 기본 조건

  • .env 파일 사용하기

🧩 기본 과제

[ 로그인 페이지 ]

  1. 로그인
    • 아이디와 비밀번호 입력후 로그인 버튼을 눌렀을시 성공하면 /mypage/:userId 로 넘어갑니다. (여기서 userId는 로그인 성공시 반환 받은 사용자의 id)
  2. 회원가입 이동
    • 회원가입을 누르면 /signup으로 이동합니다.

[ 회원가입 페이지 ]

  1. 중복체크 버튼

    • ID 중복체크를 하지 않은 경우 검정색입니다.
    • ID 중복체크 결과 중복인 경우 빨간색입니다.
    • ID 중복체크 결과 중복이 아닌 경우 초록색입니다.
  2. 회원가입 버튼

    • 다음의 경우에 비활성화 됩니다.
    • ID, 비밀번호, 닉네임 중 비어있는 input이 있는 경우
    • 중복체크를 하지 않은 경우
    • 중복체크의 결과가 중복인 경우
    • 회원가입 성공시 /login 으로 이동합니다.

[ 마이 페이지 ]

  1. 마이 페이지
    • /mypage/:userId 의 userId를 이용해 회원 정보를 조회합니다.
    • 로그아웃 버튼을 누르면 /login으로 이동합니다.

🌠 심화 과제

[ 로그인 페이지 ]

  1. 토스트
    • createPortal을 이용합니다.
    • 로그인 실패시 response의 message를 동적으로 받아 토스트를 띄웁니다.

[ 회원가입 페이지 ]

  1. 비밀번호 확인

    • 회원가입 버튼 활성화를 위해서는 비밀번호와 비밀번호 확인 일치 조건까지 만족해야 합니다.
  2. 중복체크

    • 중복체크 후 ID 값을 변경하면 중복체크가 되지 않은 상태(색은 검정색)로 돌아갑니다.

생각과제

  • API 통신에 대하여
  • 로딩 / 에러 처리를 하는 방법에는 어떤 것들이 있을까?
  • 패칭 라이브러리란 무엇이고 어떤 것들이 있을까?
  • 패칭 라이브러리를 쓰는 이유는 무엇일까?

💎 PR Point

  • 여러 사람들의 코드를 참고해서 작성했어요! 다른 과제도 그랬지만 이번에 특히 많이 배울 수 있었습니다.
  • signup이나 login이나 겹치는 코드가 보이는데 이걸 어떻게 리팩토링할지 모르겠어요.. 로직 분리에 대해 많은 피드백 부탁드려요🥲

🥺 소요 시간, 어려웠던 점

  • 20h
  • 400번대 에러...ㅎㅎ 하지만 에러 정리 해놨으니 앞으론 덜 헤매길 바랄 뿐입니다...
  • 항상 구조분해할당에서 어려움을 겪는 것 같아요 (이게 왜 안되지? 하다보면 이유가 60퍼센트는 구조분해할당이었네요..)

Q) 중복 체크 부분이나 버튼은 재사용성을 높이기 위해 따로 다른 파일로 빼는 게 좋을까요?

🌈 구현 결과물

  • 회원가입(버튼)
default.mov
  • 회원가입, 로그인
default.mov
  • 로그아웃(버튼)
default.mov
  • 토스트
default.mov

Copy link

@hoeun0723 hoeun0723 left a comment

Choose a reason for hiding this comment

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

볼때마다 코드가 너무 깔끔해서 술술 읽히는거 같아요 :)
이번 코드 너무 완벽합니다..

@kj9470
Copy link

kj9470 commented Nov 29, 2023

울 다은이 머싯당용가리~

Copy link
Member

@ljh0608 ljh0608 left a comment

Choose a reason for hiding this comment

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

늦어서 정말 죄송합니다.. 코드 보고 다은이가 얼마나 성장했는지 바로 느껴진다 ㅎㅎ 고생 많았어 금잔디 또 모이자!!!

Comment on lines +4 to +13
width: 23rem;
height: 25rem;
background-color: var(--color-bg);
border-radius: 1rem;
display: inline-block;
flex-direction: column;
box-shadow: 12px 15px 63px -1px rgba(0,0,0,0.81);
-webkit-box-shadow: 12px 15px 63px -1px rgba(0,0,0,0.81);
-moz-box-shadow: 12px 15px 63px -1px rgba(0,0,0,0.81);
`;
Copy link
Member

Choose a reason for hiding this comment

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

p4) shadow까지 넣어주고 세심하게 신경쓴게 보인다!! good~!

Comment on lines +21 to +25
}).then((response) => {
setUsername(response.data.username);
setNickname(response.data.nickname);
console.log("✨🔥성공🔥✨");

Copy link
Member

Choose a reason for hiding this comment

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

p4) then을 사용한 이유가 궁금해! try 에서는 성공하면 바로 변수에 담아서 set함수 사용가능하지 않나??

Copy link
Contributor Author

@namdaeun namdaeun Dec 21, 2023

Choose a reason for hiding this comment

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

get이 성공한 경우에만 set하도록 저렇게 적었어요!..흠 then을 사용하지 않으면 get에 성공한 값을 어떻게 불러올 수 있나요,,??

Comment on lines +50 to +51
let inputID = document.querySelector(".id-input").value;

Copy link
Member

Choose a reason for hiding this comment

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

p3) 혹시 이부분은 왜 querySelector를 사용한건지 궁금해! id value를 가져올 땐 지금 상태관리를 하고 있어서 username으로도 사용가능할 것 같아서

Copy link
Contributor Author

Choose a reason for hiding this comment

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

코드를 다시 살펴보니 필요 없을 것 같아 보이네!!!
짚어줘서 고마워☺️

Comment on lines +74 to +86
const onChangePasswordConfirm = useCallback(
(e) => {
const passwordConfirmCurrent = e.target.value
if (password === passwordConfirmCurrent) {
console.log('✅비밀번호 일치✅');
setIsPasswordConfirm(true)
} else {
console.log('🚨비밀번호 불일치🚨');
setIsPasswordConfirm(false)
}
},
[password]
)
Copy link
Member

Choose a reason for hiding this comment

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

p2) useCallback을 감싸주는 것도 리소스가 들어가서 함수로직의 계산이 클 때만 사용해줘야하는걸로 알고 있어! 어떤 이유로 감싸줬는지 물어봐도 될까??

Copy link
Contributor Author

Choose a reason for hiding this comment

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

이전 과제에서 사용하지 못한 게 아쉽기도 하고 비밀번호 확인할 때에 있어서 불필요한 렌더링을 줄이고 싶어서 한 번 사용해봤어!
여기선 사용하지 않는 게 좋을까?

Copy link
Member

Choose a reason for hiding this comment

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

띠용

Copy link
Contributor Author

Choose a reason for hiding this comment

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

띠용

이이게 뭐지 수정하겠습니다!

Comment on lines +32 to +42
*Server State: 서버로부터 받아오는 state(e.g. 비동기 로직을 통해 세팅하는 state)
- redux에 server state를 같이 관리하게 되면서 store가 점점 비대해지고, 관심사의 분리가 어렵게 되는 문제들이 발생할 수 있다.
- 또한 DB에 있는 자료들을 프론트에서 렌더링하기 위해 임시적으로 redux store에 자료들을 보관하는 용도인데, 시간이 지날수록 실제 DB의 자료와 redux store에 보관된 자료들의 일관성이 깨질 수 있다.
-> 패칭 라이브러리가 데이터의 일관성 유지를 대신 수행해준다.

- 간편한 비동기 데이터 요청
- 상태관리 및 업데이트 용이
- 캐싱과 최적화
- 로딩, 오류 처리
- 서버사이드렌더링(SSR)과의 호환

Copy link
Member

Choose a reason for hiding this comment

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

완전 핵심을 잘 공부했네 웹잼때 react query드가자~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants