프로젝트

📌 Django OAuth 리팩토링 - 1편: secret.json → .env + OAuth API 리팩토링

Chansman 2025. 6. 13. 00:47

📌 Django OAuth 리팩토링 - 1편: secret.json → .env + OAuth API 리팩토링


🔧 프로젝트 설정 환경 개선

✅ 기존 문제

  • secret.json을 통해 민감 정보를 관리했으나, 버전 관리에 취약하고 배포/개발 환경 분리 어려움

🔄 개선 작업

  • python-dotenv를 이용해 .env.env.local 방식으로 전환
  • .env에는 운영환경용, .env.local에는 개발용 설정 분리 관리
  • base.py에서 아래 순서로 로드:
  • load_dotenv(BASE_DIR / ".env") load_dotenv(BASE_DIR / ".env.local", override=True)
  • 🔒 NAVER_CLIENT_ID, GITHUB_SECRET 등 OAuth 관련 설정도 모두 환경변수로 이동

🌍 배포/로컬 구분 환경 구성

  • DJANGO_ENV 변수로 production / development 설정
  • DB_HOST는 로컬: localhost, 배포: my-db 등으로 구분 적용

🪄 OAuth 기능 리팩토링

✅ 기존 방식 문제

  • form 기반 HTML 페이지에서 닉네임을 입력받음
  • 비동기 요청 불가능 & SPA/모바일에 부적합

🔧 개선 방식

  • APIView 또는 @api_view + serializer 기반으로 API 리팩토링
  • 닉네임 생성 및 중복 체크 API 2개로 분리

🔹 /oauth/nickname/ (POST)

  • OAuth 로그인 후 이메일로 가입되지 않은 경우 닉네임 설정 API 호출
  • 닉네임과 이메일을 이용해 CustomUser 생성

🔹 /oauth/nickname/check/ (GET)

  • 쿼리 파라미터로 닉네임을 받아 중복 여부 확인
  • 응답: { is_available: True/False }

🔹 /oauth/check-nickname/ (POST)

  • POST 방식 Swagger 테스트용 API
  • 내부 로직은 위 GET과 동일

🧩 Swagger 문서화까지 완성

  • drf-spectacular 사용
  • @extend_schema 데코레이터 활용해 query parameter, 응답 예시, 설명 추가
  • 닉네임 중복 확인 GET/POST API 모두 swagger UI에 명확히 표현

🛠 리팩토링 전후 비교 요약

항목리팩토링 전리팩토링 후

보안정보 secret.json .env 환경변수
닉네임 처리 HTML form 기반 REST API (serializer)
API 문서화 없음 Swagger 자동 문서화
SPA 대응성 ❌ 불가능 ✅ 완전 대응

📌 다음 편 예고

2편에서는 OAuth callback 이후 회원가입 프로세스를 JWT + 쿠키 기반 인증으로 개선하는 내용을 다룹니다.

👉 다음 시리즈부터는 OAuth 콜백 처리 리팩토링, JWT 토큰 세팅 및 login() 로직 분리 등을 하나씩 다뤄나갈 예정입니다.