인스타그램 백엔드 클론코딩을 하면서 알게된 로그인시 발생하는 예외의 대해서 정리하고자 한다.
본격적으로 들어가기전 예외와 에러의 차이에 대해서 알아보자. 에러란 문법에러를 말하며 주로 SyntaxError를 말한다. 예외는 문장이나 표현식이 문법적으로 옳다고 하더라도 실행중에 생기는 에러들을 예외(exception)라고 부른다.
>>> 10 * (1/0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
>>> 4 + spam*3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'spam' is not defined
>>> '2' + 2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Can't convert 'int' object to str implicitly
아이디를 이메일로 대체하여 이메일과 비밀번호를 이용한 로그인을 구현해보았다. httpie를 이용한 결과값을 보면서 예외처리한 코드이다.
class SignInView(View):
def post(self, request):
data = json.loads(request.body)
try:
email = data['email']
password = data['password']
if not User.objects.filter(email=email).exists():
return JsonResponse({'error': 'INVALID_USER'}, status=401)
if User.objects.get(email=email).password == password:
return JsonResponse({'message':'SUCCESS'}, status=200)
return JsonResponse({'error': 'INVALID_USER'}, status=401)
except KeyError:
return JsonResponse({'error': 'KEY_ERROR'}, status=400)
view를 위와 같이 작성하고 ID와 비밀번호가 아래와 같을 때 로그인 예외를 확인해보자.
아이디나 비밀번호 값이 빠져있을 때에는 잘못된 요청이라는 Bad Request가 발생한다. KEY_ERROR 를 일으키도록 예외처리를 하였다.


아이디를 잘못 입력했을 때라는건 해당 아이디를 사용하는 사용자가 없다는 뜻과 같다. 그러므로 잘 못된 아이디를 입력했을 때 DoesNotExist 예외가 발생하게 된다. INVALID_USER 예외를 일으키도록 했다.


비밀번호를 잘못입력했다는 것은 입력한 사용자의 이메일에 매치되는 비밀번호가 틀렸다는 뜻이다. 이도 아이디를 잘못 입력했을 때와 동일하게 INVALID_USER 예외를 일으키도록 했다.

