여는 글
프로젝트 진행 중 배포한 리액트 쪽과 api테스트를 진행하기 위해서 프로젝트에 도메인 & https를 적용하였다.
(리액트가 배포될 때 https로 진행되기에 백엔드도 https로 진행해야 통신이 가능함)
문제는 https를 적용하고 나서부터 포스트맨으로는 잘 요청응답되는 api가
스웨거에서 테스트할 때는 정상 작동이 되지 않는 문제가 발생했다.
이 문제는 아주 간단한 문제였고,, 추후 또 같은 문제를 만날 때 해결할 수 있도록 기록해두려 이 글을 쓴다.
문제 인식
=> 포스트맨에서는 잘 작동되는게,, 아래 스웨거에서는 테스트가 안된다.
Curl
curl -X 'DELETE' \
'http://도메인/maruegg/delete_documents/' \
-H 'accept: application/json' \
-H 'X-CSRFToken: 4eBhidZYPn1Ilhlz8pKDMeE1JhoUkNsFs5DFyqHIa8ST'
Request URL
http://marueggllmserver.com/maruegg/delete_documents/
Server response
Code Details
Undocumented
TypeError: Load failed
Responses
=> 이런 식으로 오류가 뜬다.(502) -> 스웨거에서 api를 호출하면 죄다 오류가 뜸
문제가 발생한 원인
알고보니,,, 스웨거는 기본적으로 HTTP를 사용하도록 설정되어 있다는 것.
HTTPS를 사용하는 경우 스웨거가 올바르게 작동하려면 스웨거에서 제공하는 API 문서의 모든 URL이 HTTPS 프로토콜을 사용해야 한다. 스웨거는 API 문서에서 제공하는 엔드포인트 URL을 생성할 때 기본적으로 HTTP 프로토콜을 사용하지만 https로 적용함으로써 실제 서버가 HTTPS를 사용하도록 설정되어 있다면 불일치가 발생해, 클라이언트가 스웨거를 통해 API를 호출할 때 문제가 될 수 있다.
즉 스웨거 문서에서 생성된 URL이 HTTPS가 아니라 HTTP를 사용하기 때문에 보안 경고가 뜨거나 연결이 차단되는 등의 문제가 발생하는 것.
해결 방법은 간단했다.
해결방법
schema_view = get_schema_view(
openapi.Info(
title="MARU_EGG_LLM",
default_version='ver 2.0',
description="MARU_EGG_LLM 프로젝트 LLM 모델 사용을 위한 API",
terms_of_service="https://www.google.com/policies/terms/",
contact=openapi.Contact(email="이메일"),
license=openapi.License(name="mit"),
),
public=True,
permission_classes=[permissions.AllowAny],
url='https://도메인.com',
)
=> 다음과 같이 스웨거를 명시하는 urls.py에서 하단에 url을 요소로 우리의 도메인을 추가해 주면 문제가 해결된다.
=> 너무 잘 실행되는 모습!
자바 기반 스프링부트의 경우에는 아래의 참고문헌을 확인해보자
참고문헌
https://velog.io/@penrose_15/Swagger-HTTPS-설정-springdoc
'DJango' 카테고리의 다른 글
DJango - 특정 pdf페이지를 웹 페이지로 출력하기 (0) | 2024.07.24 |
---|---|
Django 프로젝트 goolge 로그인 구현하기 (0) | 2024.07.16 |
DJango프로젝트에 MySQL 연결하기 (0) | 2024.07.14 |
[AWS] RDS서비스로 MySQL DB생성 및 테스트까지-(free티어 설정으로 과금없이 안전하게 생성하고 사용해보자) (0) | 2024.07.13 |
[AWS 배포] DJango 프로젝트 AWS로 완벽하게 배포하기 (0) - 배포전 프로젝트 환경 세팅하기 (필수) (0) | 2024.07.09 |