Project serializer

MMM._.MMM·2025년 1월 6일

Django와 DRF로 구현하는 강력한 사용자 인증 시스템

오늘은 Django와 Django Rest Framework(DRF)를 사용하여 구현한 강력하고 유연한 사용자 인증 시스템에 대해 자세히 알아보겠습니다. 이 시스템은 현대적인 웹 애플리케이션에 필수적인 다양한 인증 기능을 포함하고 있습니다.

주요 기능 소개

우리가 구현한 인증 시스템은 다음과 같은 핵심 기능을 제공합니다

* 사용자 회원가입
* 이메일/비밀번호 로그인
* 카카오 소셜 로그인
* 로그아웃
* 비밀번호 재설정

1. 사용자 회원가입 (UserRegistrationView)

회원가입은 모든 인증 시스템의 시작점입니다. 우리의 UserRegistrationView는 사용자 정보를 안전하게 저장하고, JWT 토큰을 즉시 발급하여 원활한 사용자 경험을 제공합니다.


class UserRegistrationView(generics.CreateAPIView):
    queryset = CustomUser.objects.all()
    serializer_class = RegisterSerializer
    permission_classes = [AllowAny]
    authentication_classes = []

    @extend_schema(
        summary="사용자 회원가입",
        description="새로운 사용자 계정을 생성하고 JWT TOKEN 발급 (비밀번호는 8자 이상 20자 이하)",
        # ... (스키마 정의)
    )
    def create(self, request, *args, **kwargs):
        # ... (구현 내용)

이 뷰는 RegisterSerializer를 사용하여 입력 데이터의 유효성을 검사합니다. 비밀번호 정책(8-20자)을 강제하여 보안을 강화하고, 이메일 중복 검사를 수행하여 데이터 무결성을 유지합니다. 성공적으로 회원가입이 완료되면, 사용자는 즉시 로그인 상태가 되어 서비스를 이용할 수 있습니다.

2. 사용자 로그인 (UserLoginView)

로그인 기능은 UserLoginView에서 구현됩니다. 이 뷰는 사용자 인증을 처리하고 JWT 토큰을 발급합니다.

class UserLoginView(APIView):
    permission_classes = [AllowAny]
    authentication_classes = []

    @extend_schema(
        summary="사용자 로그인",
        description="사용자 인증 및 JWT 토큰 발급",
        # ... (스키마 정의)
    )
    def post(self, request):
        # ... (구현 내용)

LoginSerializer를 사용하여 이메일과 비밀번호의 유효성을 검사하고, 인증에 성공하면 JWT 토큰을 발급합니다. 이 토큰은 이후의 인증된 요청에 사용됩니다.

3. 카카오 소셜 로그인 (KakaoLoginView, KakaoCallbackView)

소셜 로그인은 현대 웹 서비스의 필수 기능입니다. 우리 시스템은 카카오 로그인을 지원합니다.

class KakaoLoginView(APIView):
    # ... (구현 내용)

class KakaoCallbackView(APIView):
    # ... (구현 내용)

KakaoLoginView는 카카오 인증 URL을 제공하고, KakaoCallbackView는 인증 후 콜백을 처리합니다. 카카오 API를 통해 사용자 정보를 받아와 새 계정을 생성하거나 기존 계정과 연동합니다.

4. 로그아웃 (LogoutView)

안전한 로그아웃은 보안에 중요합니다. LogoutView는 사용자의 리프레시 토큰을 무효화하여 안전한 로그아웃을 보장합니다.

class LogoutView(APIView):
    authentication_classes = [JWTAuthentication]

    @extend_schema(
        summary="사용자 로그아웃",
        description="사용자의 리프레시 토큰을 무효화합니다.",
        responses={200: OpenApiTypes.OBJECT}
    )
    def post(self, request):
        # ... (구현 내용)

5. 비밀번호 재설정 (RequestPasswordResetView, SetNewPasswordView)

사용자가 비밀번호를 잊어버렸을 때 안전하게 재설정할 수 있는 기능은 필수적입니다.


class RequestPasswordResetView(APIView):
    # ... (구현 내용)

class SetNewPasswordView(APIView):
    # ... (구현 내용)

RequestPasswordResetView는 비밀번호 재설정 이메일을 발송하고, SetNewPasswordView는 새 비밀번호를 안전하게 설정합니다. 토큰 기반의 인증을 사용하여 보안을 강화했습니다.

보안 및 사용자 경험 개선

이 인증 시스템은 다음과 같은 보안 및 사용자 경험 개선 사항을 포함하고 있습니다
1. JWT 토큰 사용: 서버의 상태를 유지하지 않는 JWT 토큰을 사용하여 확장성을 높였습니다.
2. 비밀번호 정책: 강력한 비밀번호 정책을 적용하여 사용자 계정의 보안을 강화했습니다.
3. 소셜 로그인: 카카오 로그인을 통해 사용자의 편의성을 높였습니다.
4. 안전한 비밀번호 재설정: 이메일 기반의 안전한 비밀번호 재설정 프로세스를 구현했습니다.
5. API 문서화: drf-spectacular를 사용하여 자동화된 API 문서를 제공합니다.

결론

이 Django와 DRF 기반의 인증 시스템은 현대적인 웹 애플리케이션에 필요한 모든 핵심 인증 기능을 제공합니다. 보안성, 확장성, 사용자 경험을 모두 고려하여 설계되었으며, 실제 프로덕션 환경에서 바로 사용할 수 있는 수준의 기능을 제공 할 수 있을겁니다.
사용자들에게 안전하고 편리한 인증 경험을 제공할 수 있고 추가적인 기능이나 커스터마이징이 필요하다면, 이 코드를 기반으로 확장해 나가면 됩니다.

profile
아....평화롭게 오카네모찌 되고JOB다...

0개의 댓글