[Line Amigos, Adios!] from a Dev's Perspective

Peter Oh·2020년 12월 27일
0

LineAmigoos

목록 보기
4/4
post-thumbnail

우리팀의 Backend는 승희님과 내가 담당했다.

일단 공통적으로 했던 부분을 회고해보면

Aquery를 활용한 모델링

🎈 테이블의 이름은 모두 소문자 복수형으로 맞춰주세요.

ex) products, categories, accounts, colors, ...

🎈 컬럼 이름은 줄여 쓰지 않고, 모두 풀어 씁니다.

ex ) img ( X ) / image ( O ), en_name ( X ) / english_name ( O )

🎈 테이블이 속한 기능(app)별로 컬러링을 해주면, 나중에도 알아보기가 훨씬 쉬워져요!
🎈 Nullable 하지 않은 변수에서는 Null 체크 빼주세요!

프로젝트 초기세팅에서 우리가 손봐야 할 곳은 다음의 파일들이 있다

  • gitignore.io
  • project_name / settings.py
  • project_name / urls.py
  • my_settings.py
  • app_name / models.py

자세한 방법은 이 곳을 참고!

<회원가입>

정규표현식을 이용한 validation

회원가입 로직을 상펴보면 크게 username 을 제외한 필드에서는 중복되는 값들이 의미가 없다

회원가입을 비롯해서, except 구분으로, 예상되는 에러들을 처리해주는 부분을 배워가는 것이 재밌다. 물론 예상치 못한 에러를 직면할 때는 당혹스러움이 더 크기도 하지만,

Model.DoesNotExist

암호화

<로그인 /

토큰 생성

가장 재미있게 했던 부분이다. 다른 부분들도 현업에서 현실적으로 적용되고 있는 기술들이지만, 토큰 시간을 설정해서


* utils.py 일부

try:
	if access_token:
        token_payload = jwt.decode(access_token, SECRET_KEY, ALGORITHM)
        user          = User.objects.get(id = token_payload["username"])
        request.user  = user
        return self.original_function(self, request, *args, **kwargs)
        
    return JsonResponse({'message': 'SIGNIN_REQUIRED'}, status = 401)

except jwt.DecodeError:
	return JsonResponse({'message': 'INVALID_USER'}, status = 401)

except jwt.ExpiredSignatureError: # 사건의 주범
	return JsonResposen({'message': 'TOKEN_EXPIRERD'}, status = 401)

except User.DoesNotExist:
	return JsonResponse({'message': "INVALID_USER"}, status = 401)

사건의 발단(a.k.a. 현업에서는?!)

utils.py에 토큰 만료시 생기는 에러인 jwt.ExpiredSignaturerErrorr 를 집어 넣었다. 토큰 인증이 만료되면 생길, 현실적인 에러라고 생각해서였다. 그러자 어김없이, 정확하신 멘토님의 피드백은, 어떤 의미의 에러인지 물어보셨다.

곰곰히 생각해보니, 토큰 생성시에 시간설정을 해주지 않았음을 깨달았다. 그렇게 시작된 토큰과의 동행.

토큰에 시간을 설정해주기 위해서는 payload를 설정해줘야 함을 알게되었다.

from datetime import datetime, timedelta

payload = {'username': user.id, 'exp': datetime.now() +timedelta(hours=2)}

위 코드를 살표보면, exp - 토큰 만료시각을 현실점(datetime.now()) 으로 부터 2시간 후 (timedelta(hours=2))로 설정해 주었다.

2시간은 너무 길다는 피드백을 받긴 했지만, 현업에서는 token에 어떤 정보들을 넣어주는지에 대해 관심이 생기고 공부할 수 있는 기회가 되어 작지만 뿌듯한 부분이다.

profile
def backend_engineer():

0개의 댓글