📌 Django OAuth 리팩토링 - 3편: 닉네임 중복 확인 API 구현

2025. 6. 13. 00:58·프로젝트

📌 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
'프로젝트' 카테고리의 다른 글
  • 📌 Django OAuth 리팩토링 - 5편: 닉네임 중복 확인 API 구현
  • 📌 Django OAuth 리팩토링 - 4편: OAuth 기반 회원가입 + 닉네임 설정 로직 리팩토링
  • 📌 Django OAuth 리팩토링 - 2편: OAuth Callback + JWT 쿠키 연동
  • 📌 Django OAuth 리팩토링 - 1편: secret.json → .env + OAuth API 리팩토링
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (802) N
      • Python (32)
      • 프로젝트 (115)
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (154)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (14)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    self-growth
    btsdischarge
    life reflection
    chinanightlife
    hotcoffeecase
    bts
    americanlaw
    youngprofessionals
    chatgpterror
    remittance
    college reunions
    btscomeback
    newpoliticalparty
    btsjungkook
    classaction
    americaparty
    뷔
    urbantrends
    gpterror
    global politics
    livebroadcast
    titaniumcase
    btsreunion
    lawsuitculture
    travel ban
    RM
    trumpmuskclash
    smartphonedurability
    homebartrend
    basalcellcarcinoma
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
📌 Django OAuth 리팩토링 - 3편: 닉네임 중복 확인 API 구현
상단으로

티스토리툴바