코드 위의 하루 (A Day on the Code)

마이페이지 구현기 🧑‍💻 | JWT 기반 사용자 정보 조회 & 수정 본문

🗂️ Docverse

마이페이지 구현기 🧑‍💻 | JWT 기반 사용자 정보 조회 & 수정

code.with.siyeon 2025. 5. 25. 19:47

✅ 기능 개요

Docverse 프로젝트에서 사용자의 마이페이지를 구현하였습니다. JWT 인증을 통해 로그인된 사용자만 자신의 정보를 조회(GET) 하고, 수정(PATCH) 할 수 있는 기능입니다.


🛠️ 구현한 기능

  1. 조회 (GET /api/users/mypage/):
    • 사용자 id, email, nickname, profile_image, introduction, date_joined 등을 반환합니다.
    • 인증된 사용자만 접근 가능하도록 IsAuthenticated 권한 사용.
  2. 수정 (PATCH /api/users/mypage/):
    • 사용자는 nickname, profile_image, introduction 값을 수정할 수 있습니다.
    • UserUpdateSerializer를 통해 partial update 처리.

🔍 핵심 코드 설명

views.py

class MyPageView(APIView):
    permission_classes = [IsAuthenticated]

    def get(self, request):
        serializer = UserDetailSerializer(request.user)
        return Response(serializer.data)

    def patch(self, request):
        serializer = UserUpdateSerializer(request.user, data=request.data, partial=True)
        if serializer.is_valid():
            serializer.save()
            return Response({'message': '정보가 수정되었습니다.'})
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

urls.py

 
path('mypage/', MyPageView.as_view(), name='mypage'),

🧩 오류 해결 과정 (간단 정리)

  • 처음에는 PATCH 요청이 405 오류를 반환 → 원인: views.py에서 put만 정의되어 있었고 patch 메서드가 없었음.
  • Thunder Client에서 PATCH 요청 확인 → PATCH 메서드 추가 후 정상 응답(200 OK) 확인됨.
  • JWT 토큰이 만료되어 "Token is expired" 오류가 발생했지만, /api/auth/token/refresh/로 재발급 받아 해결.

✨ 느낀 점

이 기능을 구현하면서, 단순한 정보 조회를 넘어서 권한 설정, 응답 포맷 통일, JWT 인증 흐름까지 함께 고민하게 되었다. 특히 APIView 클래스 기반의 뷰를 사용하며 partial=True의 의미를 명확히 이해할 수 있었고, RESTful API 설계와 클라이언트 테스트 방법에 대한 실전 경험이 많이 쌓였다.