회원가입을 담당할 SignUpView
를 만들었으니, 이제 로그인을 담당할 SignInView
를 만들어볼 차례다.
회원가입 시 로그인 시 사용할 id를 만들지 않았으므로 이메일이 id를 담당한다고 친다면, 로그인에 필요한 데이터는 email
과 password
두개일 것이다.
기본적인 로직은 아래와 같다.
email
과 password
데이터에 각각 변수명을 부여보기엔 큰 문제가 없어보여 POSTMAN을 이용하여 몇번의 확인 절차를 거쳤다.
정상 출력 확인
정상 출력 확인
정상 출력 확인
뭔가가 잘못됐다.
예외구문으로 KeyError
자체를 설정했기에 KeyError
메세지가 떠야하는데 출력이 되지 않았다.
다른건 다 됐는데 왜 except
문에서만 에러가 생기는지 의아해 이리저리 고민을 해보았다.
MDN도 찾아보고 여러 블로그도 찾아보고 지인에게 물어보기도 하고..
결론은 예외처리에 사용하는 try except
문에 대한 내 이해가 부족했던 탓이었다.
결과부터 얘기하자면, 아래와 같이 코드를 고치면 정상적으로 KeyError
메세지가 출력이 된다.
입력받는 데이터 변수를 try
문 안에 대입을 해줘야한다.
예외처리에 대한 파이썬 MDN의 설명을 보자.
except
문은 try
문을 돌릴때, 우리가 예외처리로 설정해둔게 발생할 '때만' except
블록이 수행된다.
즉 예외처리문 자체가 하나의 작은 박스라고 보면 되는데, 박스 안에 어떤 변수를 사용할 지 지정을 안해줬으니 except
문이 잡아내지 못하고 서버가 터진 것이다.
위와 같이 설정을 해두고 KeyError
를 준다면?
KeyError에 대해 설정해뒀던 except
문이 정상적으로 작동되는 것을 볼 수 있다.
혹시나 해서 앞에 만들었던 SignUpView를 확인해보았다.
역시나 변수가 잘못된 위치에 있다..
만들어만 두고 KeyError
메시지가 정상 출력되는지 확인을 안했던것 같다.
호다닥 아래와 같이 수정 완료
SignInView
를 직접 만들어보았고, 잘못 코딩된 것에 대한 수정을 잘 마쳤다.
다음엔 Bcrypt를 이용한 비밀번호 암호화와 JWT를 이용한 토큰 생성에 대한 과정을 복습을 할 예정이다.
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#마무리