Notice
Recent Posts
Recent Comments
코드 위의 하루 (A Day on the Code)
🔐 Docverse – UserSerializer & 회원가입 API 구현 본문
1. 구현 목적
사용자 회원가입 기능은 Docverse 플랫폼의 기초 진입 지점입니다.
안전한 사용자 등록과 이메일 중복 방지, 비밀번호 보안 처리, 에러 응답을 고려하여 설계했습니다.
2. 기능 흐름
[프론트엔드]
↓ 이름, 이메일, 비밀번호 입력
↓ POST /signup
[백엔드 - Django]
→ UserSerializer로 데이터 검증
→ 비밀번호 set_password()로 해시처리
→ DB에 저장
→ 성공 메시지 응답
↓ 이름, 이메일, 비밀번호 입력
↓ POST /signup
[백엔드 - Django]
→ UserSerializer로 데이터 검증
→ 비밀번호 set_password()로 해시처리
→ DB에 저장
→ 성공 메시지 응답
3. 시리얼라이저 정의
📁 users/serializers.py
from rest_framework import serializers
from .models import User
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['id', 'username', 'email', 'password']
extra_kwargs = {
'password': {'write_only': True}
}
def create(self, validated_data):
user = User(
username=validated_data['username'],
email=validated_data['email']
)
user.set_password(validated_data['password']) # 해시 처리
user.save()
return user
✅ 비밀번호는 평문으로 저장하지 않고 set_password()로 암호화
✅ extra_kwargs['password'] = write_only 설정으로 응답에 비밀번호 포함 안되도록 처리
4. API View 정의
📁 users/views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .serializers import UserSerializer
class SignupView(APIView):
def post(self, request):
serializer = UserSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response({'message': '회원가입이 완료되었습니다.'}, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
✅ serializer.is_valid()로 유효성 검사 → 통과 시 저장, 실패 시 에러 반환
📎 이메일 중복 체크는 모델에서 unique=True로 처리되어 있음
5. URL 연결
📁 users/urls.py
from django.urls import path
from .views import SignupView
urlpatterns = [
path('signup/', SignupView.as_view(), name='signup'),
]
📁 config/urls.py
from django.urls import path, include
urlpatterns = [
path('api/', include('users.urls')),
]
📎 /api/signup/으로 POST 요청 시 회원가입 처리됨
6. 테스트 및 결과 확인
- Postman이나 Swagger로 POST 요청 확인
- 정상 응답 예시:
{
"message": "회원가입이 완료되었습니다."
}
7. 문제 해결 & 회고
비밀번호 평문 저장 | set_password() 누락 | create() override에서 해시 처리 |
응답에 비밀번호 포함 | 기본 시리얼라이저 설정 | extra_kwargs 설정으로 write_only 처리 |
이메일 중복 오류 | 중복 허용 상태 | models.py에서 email = unique=True로 수정 |
비밀번호 보안 처리와 응답 보안 설정 등 보안에 대한 고려가 특히 중요했던 기능이었습니다.
Django REST framework의 serializer.is_valid()와 save() 흐름을 정확히 이해하게 되었고,
에러 응답 구조 설계에 대해 고민하는 계기가 되었습니다.
'🗂️ Docverse' 카테고리의 다른 글
🛠️ 로그인 기능 구현 (JWT 기반) + 멘탈 탈곡기 체험 (0) | 2025.05.17 |
---|---|
📁 프로젝트 문서 정리하기 – 실무에서 바로 쓰는 정리 루틴 (0) | 2025.05.15 |
🐝 Docverse 프로젝트 Git 사용기 (0) | 2025.05.11 |
🛠 Docverse – 데이터베이스 구축 과정 정리 (백엔드 포트폴리오) (0) | 2025.05.11 |
💡 Docverse – 개발 협업 플랫폼 프로젝트 소개 (2) | 2025.05.11 |