Notice
Recent Posts
Recent Comments
코드 위의 하루 (A Day on the Code)
마이페이지 구현기 🧑💻 | JWT 기반 사용자 정보 조회 & 수정 본문
✅ 기능 개요
Docverse 프로젝트에서 사용자의 마이페이지를 구현하였습니다. JWT 인증을 통해 로그인된 사용자만 자신의 정보를 조회(GET) 하고, 수정(PATCH) 할 수 있는 기능입니다.
🛠️ 구현한 기능
- 조회 (GET /api/users/mypage/):
- 사용자 id, email, nickname, profile_image, introduction, date_joined 등을 반환합니다.
- 인증된 사용자만 접근 가능하도록 IsAuthenticated 권한 사용.
- 수정 (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 설계와 클라이언트 테스트 방법에 대한 실전 경험이 많이 쌓였다.
'🗂️ Docverse' 카테고리의 다른 글
🐬팀원이 동일한 데이터베이스를 쓸 수 있도록, 덤프 파일을 만들기까지 (0) | 2025.05.29 |
---|---|
🧪 Docverse 기능 테스트 로그: 회원가입 → 로그인 → 마이페이지까지 (0) | 2025.05.25 |
🔐 비밀번호 보안의 핵심, '솔트(Salt)' 완전 정복 가이드 (2) | 2025.05.20 |
🛠️ 로그인 기능 구현 (JWT 기반) + 멘탈 탈곡기 체험 (0) | 2025.05.17 |
📁 프로젝트 문서 정리하기 – 실무에서 바로 쓰는 정리 루틴 (0) | 2025.05.15 |