두숟갈 스터디 - 12

무엇을 공부했나요?

Two scoops of Django 17장 REST API 이용하기를 제가 요약 발표를 맡게됐습니다. 남홍님과의 가위바위보 게임에서 패배를 하였지요. 남홍님의 재치있는 줄 글을 몹시 기대하신 분(저 포함)들을 실망시켜 송구합니다. 열심히 가위바위보 실력을 키우도록 하겠습니다!

내용이 요약하기에 모호한 부분이 다소 존재하는 것 같아서 일전에 호성님께서 말씀하신 DRF Authentication에 대한 내용을 정리했습니다. 하지만 Django Rest Framework 개념을 이용했고 또 자바스크립트를 적용하여 백엔드와 통신하는 부분까지, 책의 내용을 반영하려고 노력했습니다.

views
남홍님께서 후기 작성을 독려해주시며 '현주님의 발표를 즐겁게 듣고 있는 중'의 사진을 협찬해주셨습니다.

Authentication

DRF(django rest framework)의 Authentication은 뷰의 시작, 사용 권한이 수행되기 전에 실행되며, 인증 성공시 request.user 및 request.auth를 설정한다.

기본 인증 스키마는 settings에서 DEFAULT_AUTHENTICATION_CLASSES를 사용하여 설정할 수 있다.

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        [... 여러 종류의 인증 스키마]
    )
}

Authentication APIView에 적용하기

CBV(Class)

APIView에서 authentication_classes를 통해 튜플 형태의 단위별 Authentication을 설정할 수 있다.

class ExampleView(APIView):
	# 첫 번째 인증 클래스는 응답 유형을 결정할 때 사용한다.
    authentication_classes = (SessionAuthentication, BasicAuthentication)
    permission_classes = (IsAuthenticated,)
    
    def get(self, request):
    	[...]

FBV(Function)

또는 @api_view 데코레이터를 통해 FBV에서 설정할 수도 있다.

@api_view(['GET'])
@authentication_classes((SessionAuthentication, BasicAuthentication))
@permission_classes((IsAuthenticated,))
def example_view(request):
	[...]

API Reference

심화 학습

협업할 때 CharField 마이그레이션 팁

Two Scoops of Django의 권장 사항인 내용으로 CharField blank=True 옵션만 주고 null=True 옵션은 지양하라는 내용이 있었는데요. 상용 서비스되고 있는 사이트 데이터베이스에서 레코드가 약 20만인 테이블에 새로운 CharField를 추가하려고 할 때, blank=True 옵션만 준 채로 마이그레이션을 하게되면 시간이 20초 정도 걸린다고 합니다. 하지만 마이그레이션을 하는 20초 사이에 테이블은 Lock이 걸려서 그 사이에 레코드를 추가하려는 사용자가 있다면, 이는 큰 문제가 될 수도 있을텐데요.

따라서 이를 해결하기 위한 팁을 현주님께서 설명해주셨습니다. 우선 null=True 옵션을 주면, 공백 값을 할당하지 않아도 되기 때문에 생성시간도 단축되고 테이블에 Lock도 안 걸립니다. 그리고나서 null=True 옵션을 부분 제거하고 blank=True 옵션만 있는 채로 다시 마이그레이션을 하게되면, 사고를 예방하고 CharField에 blank=True 옵션만 주게되는 일석이조의 결과를 얻을 수 있다고 합니다.

아마존 VPC 콘솔을 사용하여 VPC와 VPN 연결 생성

views
그림으로 설명해주시는 호성님, 그래도 어렵다...

어땠나요?

저는 신입 개발자 지망생이자 외부인으로서 두숟갈 스터디에 8장부터 참여하고 있습니다. 혼자 프로젝트를 진행하면서 모르는 부분 혹은 고민되는 부분에 대해서 모두가 진심으로 답변해주셔서 늘 감사함을 느끼고 있습니다. 개발 경험이 오래됐음에도 불구하고 끊임없이 학습에 정진하시는 개발자분들을 보고 느끼는 점 또한 참으로 많습니다.

어플리케이션 개발 외의 개념을 다룰 때면 항상 어려움을 느끼고 부담을 가지고 있었는데, 심화학습에서 선배 개발자분들의 백엔드 개발자라면 알아야 할 필수 개념에 대해서 자세히, 친절하게 설명해주셔서 언제나 도움을 받고 있습니다. 이번 심화 학습 시간에서 협업할 때 데이터베이스 마이그레이션 시 주의해야할 점, 기타 유용한 팁, Local과 인터넷 세계의 접점, VPN 등에 대한 내용을 듣고 좋은 지식을 배울 수 있었습니다. 이러한 내용이 쌓이고 쌓여 훗날 저도 다른 개발자들께 좋은 지식을 나눠줄 수 있는 날이 오기를 기대합니다.