문제 상황
현재 설정에 따르면 다른 주소(http://ssafy11front.com - 프론트엔드)에서 다른 서버(http://ssafy11back.com - 백엔드)로 요청을 보내면서 CORS(Cross-Origin Resource Sharing) 오류가 발생할 수 있습니다. 브라우저는 보안상의 이유로, 주소나 포트가 다른 서버 간의 요청을 제한하여 CORS 오류를 일으킵니다.
해결 방법
- 서버에서 CORS 헤더 허용 설정하기
- 백엔드 서버에서 특정 출처(origin)를 허용하도록 Access-Control-Allow-Origin 헤더를 설정하여 CORS 오류를 해결할 수 있습니다. 모든 출처를 허용하려면 *를 지정할 수 있고, 특정 도메인만 허용하려면 해당 도메인 주소를 명시하면 됩니다.
Access-Control-Allow-Origin: http://ssafy11front.com - 필요한 경우 Access-Control-Allow-Methods와 Access-Control-Allow-Headers 등을 설정해 요청 메서드와 허용하는 헤더를 지정할 수 있습니다.
- 백엔드 서버에서 특정 출처(origin)를 허용하도록 Access-Control-Allow-Origin 헤더를 설정하여 CORS 오류를 해결할 수 있습니다. 모든 출처를 허용하려면 *를 지정할 수 있고, 특정 도메인만 허용하려면 해당 도메인 주소를 명시하면 됩니다.
- 리버스 프록시 사용
- 리버스 프록시를 통해 CORS 오류를 피할 수 있습니다. 프론트엔드에서 example.com으로 요청을 보내면 실제로는 example.com/api로 전달되도록 설정할 수 있습니다. 이렇게 하면 리버스 프록시가 요청을 다른 도커 컨테이너로 전달하고 응답을 받아와 같은 도메인으로 보이게 되므로, 포트 문제도 발생하지 않습니다.
- 특히 MSA(Microservices Architecture)로 설계된 환경에서 각 서비스에 라우팅이 필요하기 때문에 Nginx와 같은 리버스 프록시를 사용하면 각 서비스의 접근을 쉽게 관리할 수 있습니다.
Nginx를 이용한 리버스 프록시 설정 예시
Nginx를 사용하여 리버스 프록시를 설정할 수 있습니다:
server {
listen 80;
server_name https://ssafy11s.com;
location /api {
proxy_pass http://backend.ssafy11s.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
이 설정으로 example.com/api로 들어오는 요청이 backend.example.com으로 전달됩니다. 동일한 도메인을 통해 요청을 보내기 때문에 CORS 문제가 발생하지 않습니다.
프론트엔드 요청 예시
리버스 프록시가 설정된 상태에서 프론트엔드에서 아래와 같은 방식으로 요청을 보내면 됩니다:
fetch('/api/user', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ value: inputValue }),
})
.then(response => response.json())
.then(data => {
console.log('Success:', data);
})
.catch(error => {
console.error('Error:', error);
});
이 방식으로 별도의 baseURL 설정 없이도 요청이 원활하게 이루어집니다.
'backend > CICD' 카테고리의 다른 글
Mixed Content 에러 해결 (0) | 2024.08.01 |
---|---|
JWT 인증을 nginx에서 처리하기 위한 방법 lua (2) | 2024.07.31 |
배포자동화 CI/CD AWS EC2, Git Action, Docker (0) | 2023.05.17 |