프로젝트
📌 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() 로직 분리 등을 하나씩 다뤄나갈 예정입니다.