AWS CloudFront를 접근하지 못하는 이슈, Get 방식만 적용되고 다른 방식은 통신이 적용되지 않는 이슈, Session에 값이 들어가지 않는 이슈 등 CloudFront를 사용하며 여러 이슈들을 만났었는데 그 이슈들의 해결과정을 정리하려 합니다.
1. AWS CloudFront 이슈1 - 502 접근 불가 이슈
문제 상황: googling을 통해 똑같이 적용을 했음에도 불구하고, CloudFront에 접속할 수 없다는 에러가 발생하였습니다.
해결 과정: Cookie 방문 기록 초기화 후 어느정도 해결하였으나 특정 페이지의 접근이 불가능한 에러가 여전히 있었습니다. 그래서 f12를 눌러보니 CloudFront가 https로 접근하려고 하는 것을 확인하였습니다.
그래서 환경설정을 수정하기 위해 원본 편집에 들어가 "뷰어 일치"라고 되어있던 부분을 "HTTP만 해당"으로 수정하여문제를 해결하였습니다.
2. AWS CloudFront 이슈2 - 403 HTTP request method 에러
문제상황: 하지만 그럼에도 불구하고 여전히 403 오류가 났습니다.
해결과정: HTTP request method를 모두 적용하지 않았다는 사실을 알게 되었습니다. 그래서 아래와 같이 설정정보를 수정해 문제를 해결하였습니다.
3. AWS CloudFront 이슈3 - redirect시 url 차이로 접근 불가한 이슈
문제상황: 스프링의 return "redirect:/" 코드가 8080 포트를 포함하지 않아 접근하지 못하는 문제가 발생하였습니다. spring 서버는 8080으로 열어두었는데 80포트로 redirect가 되니 발생한 문제였습니다.
해결과정: 이에 return "redirect:8080" 으로 해보았으나, 아래와 같이 url이 차이가 났고 여전히 문제를 해결하지 못하였습니다.
해결방법1: 절대경로로 redirect
절대 경로로 변환해 문제를 해결하였습니다. 하지만 CloudFront의 캐시 때문에 수정 사항이 변경되지 않아 무척이나 애를 먹었습니다. 이를 해결하는 과정에서 CloudFront는 캐시를 꽤 오랜 시간 가지고 있기때문에, 수정사항이 발생할 때마다 invalidate를 해주어야한다는 사실을 알게 되었습니다.
해결방법2: port forwarding이라는 것을 알게 되어 굳이 8080로 접속하지 않고도 접속할 수 있도록 리눅스에서 포트 포워딩을 설정하였습니다. url이 다르게 반환되는 것은 CloudFront에서는 내부적으로 8080 포트로 접속하기 때문에(?) 스프링 부트에서 redirect할 때는 8080을 제외한 origin domain만을 바탕으로 redirect 했기 때문입니다. 그래서 포트포워딩을 통해 포트를 맞춰줌으로써 문제를 해결하였습니다.
아래는 포트포워딩이 정상적으로 되었는지 확인했던 내용입니다.
그러나 이렇게 하니 80포트로 접속이 안되었고, 이에 EC2 인바운드 규칙에 80포트가 열려있지 않아서 발생한 이슈라는 사실을 깨닫고 EC2의 인바운드 규칙을 수정해 문제를 해결하였습니다.
4. AWS CloudFront 이슈4 - 로그아웃 redirect시 origin domain으로 redirect 하는 이슈
문제상황: 다른 redirect는 잘 동작하는데 로그아웃 부분에서만 redirect 시 origin domain으로 redirect 되어 CloudFront 적용 및 Route53을 통한 도메인 적용이 안되는 이슈가 발생하였습니다. 추가적으로 origin domain의 서버가 노출된다는 점에서 무언가 잘못되었다는 판단을 하였습니다.
해결과정:
1. CloudFront에서 뭔가 이슈가 있는 줄 알고 CloudFront를 삭제해보기도 하고 설정정보를 변경해 보았으나 해결하지 못하였습니다.
2. redirect 주소를 다른 곳으로 바꾸어도 변경이 안되는 등 이해하지 못할 현상들이 발생했습니다. 그러다 controller에서 받는 url을 /logouts로 바꾸었는데 정상작동하는 것을 알게되었습니다.
원인: Spring security에서 /login /logout 에 관한 어떤 작업을 수행하는데 이 때문에 제가 작성한 코드가 동작하지 않는 것이었습니다. 따라서 Controller의 코드를 아래와 같이 수정하여 문제를 해결할 수 있었습니다.
4. AWS CloudFront 결과
'IT > 디버깅' 카테고리의 다른 글
[디버깅] Database may be already in use 에러 해결 (0) | 2023.03.26 |
---|---|
[디버깅] SpringRunner.class 인식 오류 해결하기 (0) | 2023.03.16 |
[Spring] 윈도우 터미널에서 gradlew test 에러 해결 (0) | 2022.10.31 |
[디버깅] h2 콘솔에 테이블이 안보이는 원인 해결 (1) | 2022.09.26 |
[Spring] how to get selected option value by requestParam in spring thymeleaf (0) | 2022.09.02 |