Django Instagram - Sign In

jinatra·2021년 8월 26일
0

Django

목록 보기
5/9
post-thumbnail

Django Instagram - Sign In


Sign In View 작성

회원가입을 담당할 SignUpView를 만들었으니, 이제 로그인을 담당할 SignInView를 만들어볼 차례다.

회원가입 시 로그인 시 사용할 id를 만들지 않았으므로 이메일이 id를 담당한다고 친다면, 로그인에 필요한 데이터는 emailpassword 두개일 것이다.


1차 코딩

기본적인 로직은 아래와 같다.

  • (개인적으로) 헷갈리지 않고 변수간 관계를 공부하기 위해 입력받을 emailpassword 데이터에 각각 변수명을 부여
  • 이메일은 Sign In과 동일하게 DB 안에 존재하는지 여부만 확인
  • 존재한다면 바로 다음 if문으로 넘어가 해당 객체의 비밀번호와 입력 비밀번호가 일치하는지 확인
  • 일치한다면 로그인 성공

보기엔 큰 문제가 없어보여 POSTMAN을 이용하여 몇번의 확인 절차를 거쳤다.


회원가입된 유저의 경우

정상 출력 확인


이메일이 틀린 유저의 경우

정상 출력 확인


비밀번호가 틀린 유저의 경우

정상 출력 확인


KeyError 확인

뭔가가 잘못됐다.

예외구문으로 KeyError 자체를 설정했기에 KeyError 메세지가 떠야하는데 출력이 되지 않았다.


KeyError 출력 오류 원인

다른건 다 됐는데 왜 except문에서만 에러가 생기는지 의아해 이리저리 고민을 해보았다.
MDN도 찾아보고 여러 블로그도 찾아보고 지인에게 물어보기도 하고..

결론은 예외처리에 사용하는 try except 문에 대한 내 이해가 부족했던 탓이었다.

결과부터 얘기하자면, 아래와 같이 코드를 고치면 정상적으로 KeyError 메세지가 출력이 된다.

입력받는 데이터 변수를 try문 안에 대입을 해줘야한다.

예외처리에 대한 파이썬 MDN의 설명을 보자.

except문은 try문을 돌릴때, 우리가 예외처리로 설정해둔게 발생할 '때만' except블록이 수행된다.

즉 예외처리문 자체가 하나의 작은 박스라고 보면 되는데, 박스 안에 어떤 변수를 사용할 지 지정을 안해줬으니 except문이 잡아내지 못하고 서버가 터진 것이다.

위와 같이 설정을 해두고 KeyError를 준다면?

KeyError에 대해 설정해뒀던 except문이 정상적으로 작동되는 것을 볼 수 있다.


SignUpView 수정

혹시나 해서 앞에 만들었던 SignUpView를 확인해보았다.

역시나 변수가 잘못된 위치에 있다..
만들어만 두고 KeyError 메시지가 정상 출력되는지 확인을 안했던것 같다.

호다닥 아래와 같이 수정 완료


마무리

SignInView를 직접 만들어보았고, 잘못 코딩된 것에 대한 수정을 잘 마쳤다.
다음엔 Bcrypt를 이용한 비밀번호 암호화와 JWT를 이용한 토큰 생성에 대한 과정을 복습을 할 예정이다.





Take Away

꼼꼼한 디버깅의 중요성

SignInView를 짜보며 KeyError 출력 오류를 잡아냈었다.
사실 KeyError를 제외한 다른 오류들은 정상 출력되는 것을 보며 안심했었는데 역시 끝까지 해봐야하는거 같다.
결국 끝까지 디버깅을 하지 않았던 SignUpView 버그도 뒤늦게 발견하여 수정을 했던걸 생각하면, 한번 할 때 꼼꼼히 해야한다는 것을 다시 한 번 깨닫게 되었다.


예외처리

KeyError 출력 오류를 잡아내며 예외처리문에 대해 다시한번 공부하고, 부족했던 부분을 알아낼 수 있었다.
try except문에 작은 boundary가 펼쳐져있다고 지금은 생각하고 있는데, 이게 맞는지, 또 동일한 실수를 다음에도 반복하지는 않을지 조금은 걱정이 된다.
뭐 여러번 실수하다보면 자연스레 몸이 깨닫게 되겠지..





참고
https://wikidocs.net/30
https://docs.python.org/ko/3/tutorial/errors.html
https://velog.io/@jinatra/Django-인스타그램-연습-1#마무리

profile
으악

0개의 댓글