프로젝트를 진행하면서 봐왔던 Error들 정리

1. KeyError

  • 프론트엔드와 백엔드 통신과정은 보통 json형식으로 주고받는다.
    KeyError의 경우 json형식 통신과정에서 나타날수 있는 에러다.
    json 형식이란 key:value 형식으로 python에서는 딕셔너리 자료형이다.
    프론트엔드에서 백엔드 API에 json으로 데이터를 보내는데 둘사이의 key값이 다르다는 의미이다.

    KeyError가 뜬다면 프론트엔드,백엔드의 json데이터의 key값을 확인해봐라.

2. TypeError

  • TypeError의 경우 json형식 통신과정에서 나타날수 있는 에러다.
    다만 DB와 관련된 경우로 DB를 정의하는 models.py에서 IntegerField를 사용해서 DB에 integer타입만 들어와야하는데 string이 들어간다거나 할때 발생한다.

    TypeError가 발생한다면 json데이터의 type 확인하고 DB의 에서 desc쿼리를 확인하여 각 필드의 type을 살펴봐라

3. DataError

  • DataError의 경우 json형식 통신과정에서 나타날수 있는 에러다.
    다만 DB와 관련된 경우로 DB를 정의할때 각 필드에 옵션사항을 벗어나는 데이터가 들어갈때 발생한다.
    예를들면 CharField에 max_length옵션으로 10자만 넣도록 했으나 10자가 넘어가는 데이터가 들어갔을 경우 발생한다.
    이 에러는 상황에 따라 이용할수도있다.

    DataError가 발생한다면 models.py파일에서 DB field에 대한 정의를 확인하여 처리하라

4. json.decoder.JSONDecodeError

  • json.decoder.JSONDecodeError의 경우 json형식 통신과정에서 나타날수 있는 에러다.
    예를들면 json데이터를 받을때 json모듈로 받는과정에서 생기는 오류 value값에 내용은 string이지만 string처리를 안하고 보낸다거나 스트링을 보내야되는데 빈스트링("")이 아니라 아무것도 없이 키값만 보내거나 할때 등 발생한다. 이 오류는 여러가지 json모듈을 decode하는 과정에서 발생함으로 여러상황에서 발생함으로 정확한 요인을 찾아서 수정해야한다.

    json.decoder.JSONDecodeError가 발생한다면 json데이터의 value값을 잘 정의 했는지 살펴봐라

5. (models안의 클래스명).DoesNotExist

  • DoesNotExist에러는 json형식통신을 한뒤에 백엔드API에서 객체를 생성에서 발생하는 에러이다.
    Django에서는 보통 QuerySet으로 반환되는 ORM(ex. filter)을 사용할때는 데이터가 존재하지않을 땐 빈리스트로 반환되어 객체에 저장된다.
    하지만 바로 객체로 반환하는 ORM(ex. get)에서 DB에 데이터가 존재하지않을때에 객체형성이 되지않고 바로 에러가 나는데 이때 DoesNotExist에러가 뜬다.
    DoesNotExist가 발생하면 이것이 발생안하도록 로직을 수정하는 방법도있지만, 이 에러를 이용할 수도 있다.
    예를 들면 로그인과정에서 이메일값을 DB에서 조회하여 이메일이 존재하는지 확인을 할때 filter함수를 이용해 QuerySet을 가저와 빈리스트일경우 이메일이 없다고 반환할수도 있지만 get함수를 이용해 DoesNotExist에러가 발생하면 당연히 DB에 없으니 에러가 뜨는것임으로 이것을 이용해 이메일이 없다고 반환할 수도 있다.

DoesNotExist에러가 뜬다면 어떤 ORM에서 발생하는지 확인거나 사용하기위해 했다면 그뒤에 어떤식으로 처리해야될지 생각해 봐라.

6. jwt.exceptions.DecodeError

  • Django에서 인가에 있어서 token을 사용하는데 보통 pyjwt의 jwt모듈을 사용한다.
    token에는 여러 정보들을 담고있는데 그 정보들을 특정 알고리즘과 특정 key를 이용해 encoding을 하여 프론트엔드와 백엔드간 통신시에 주고받는다.
    그 주고받은 token을 인가할때 token을 DB서버와 비교를 해야되는데 비교할때는 다시 decoding을 하여 DB와 비교해야하는데 decoding자체를 할수없다는 에러가 jwt.exceptions.DecodeError 에러이다.
    물론 이 에러를 이용하여 위의 DoesNotExist에러처럼 이용할 수도있다.

jwt.exceptions.DecodeError발생할시 토큰을 headers에 정확히 담겼는지 아니면 의도적으로 담지않았다면 어떻게 처리해야될지 생각해 봐라.

(계속 발생시에 관련해서 공부하고 추가할예정)

profile
WEB Developer

0개의 댓글