📌 Django OAuth 리팩토링 - 3편: 닉네임 중복 확인 API 구현
✅ OAuth 최초 가입 시 닉네임 입력이 필요하다면
✅ 사용자가 입력한 닉네임이 이미 있는지 미리 확인하는 기능도 함께 제공!
🔍 1. 닉네임 중복 확인 API 구조
📌 목적
- 닉네임은 유일해야 하므로 중복 검증 필수
- 사용자는 닉네임 입력 → 실시간 중복 확인 요청으로 UX 개선
⚙️ 2. 시리얼라이저 구현 (serializers.py)
class NicknameCheckSerializer(serializers.Serializer):
nickname = serializers.CharField()
def validate_nickname(self, value):
if User.objects.filter(nickname=value).exists():
raise serializers.ValidationError("이미 사용 중인 닉네임입니다.")
return value
✔️ validate_nickname() → DB에서 존재 여부 체크 후 에러 메시지 반환
🌐 3. API 뷰 구현 (oauth_views.py)
🔹 GET 방식 (쿼리 파라미터)
@extend_schema(
parameters=[
OpenApiParameter(name="nickname", required=True, type=OpenApiTypes.STR,
location=OpenApiParameter.QUERY, description="중복 확인할 닉네임")
],
responses={200: OpenApiResponse(
description="사용 가능 여부 응답",
examples=[
{"name": "사용 가능", "value": {"is_available": True}},
{"name": "사용 불가", "value": {"is_available": False, "detail": "이미 사용 중인 닉네임입니다."}}
]
)},
summary="닉네임 중복 확인 (GET)",
description="닉네임이 사용 가능한지 GET 요청으로 확인합니다.",
)
@api_view(['GET'])
def check_nickname_get(request):
serializer = NicknameCheckSerializer(data=request.query_params)
if serializer.is_valid():
return Response({'is_available': True}, status=status.HTTP_200_OK)
return Response(
{
'is_available': False,
'detail': serializer.errors.get('nickname', ['유효하지 않은 요청입니다.'])[0]
},
status=status.HTTP_200_OK
)
🔸 POST 방식 (폼 데이터)
@extend_schema(
request=NicknameCheckSerializer,
responses={200: None},
summary="닉네임 중복 확인 (POST)",
description="닉네임이 사용 가능한지 POST 요청으로 확인합니다."
)
@api_view(['POST'])
def check_nickname_post(request):
serializer = NicknameCheckSerializer(data=request.data)
if serializer.is_valid():
return Response({"available": True}, status=status.HTTP_200_OK)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
🔧 4. URL 연결 (oauth_urls.py)
urlpatterns += [
path('nickname/check/', check_nickname_get), # GET 기반
path('nickname/check-post/', check_nickname_post), # POST 기반
]
🧪 Swagger 문서 테스트
- /oauth/nickname/check/ → GET → ?nickname=xxx
- /oauth/nickname/check-post/ → POST → { "nickname": "xxx" }
✔️ 둘 다 스펙타큘러 문서에 잘 반영됨
✔️ 자동 예제 + 응답 구조까지 Swagger에서 확인 가능!
✅ 완료!
닉네임 중복 확인까지 모두 Swagger 문서에 잘 통합된 상태야.
다음 시리즈로 넘어갈 준비가 되었다면 **"다음"**이라고 입력해줘! 😎
'프로젝트' 카테고리의 다른 글
📌 Django OAuth 리팩토링 - 5편: 닉네임 중복 확인 API 구현 (0) | 2025.06.13 |
---|---|
📌 Django OAuth 리팩토링 - 4편: OAuth 기반 회원가입 + 닉네임 설정 로직 리팩토링 (0) | 2025.06.13 |
📌 Django OAuth 리팩토링 - 2편: OAuth Callback + JWT 쿠키 연동 (0) | 2025.06.13 |
📌 Django OAuth 리팩토링 - 1편: secret.json → .env + OAuth API 리팩토링 (0) | 2025.06.13 |
🚀 Django 프로젝트 GitHub Actions CI/CD 구축 시 문제 해결기 (with PostgreSQL, Redis) (0) | 2025.06.11 |