현재 진행중인 사이드 프로젝트에 기본적인 구현들은 모두 구현되었다. (하루일과
, 게시판
은 구현 후 배포 완료)
물론 더 추가해야 될 게 많긴 하다 .. 😅
아무튼 이제는 슬슬 이력서도 뿌려야하니까 외부에서도 접속이 가능하게 만들어야 했다. (지금까지는 개인 IP로만 접속이 가능하게 했다.)
외부에서 접속할 때 http
로 접속하면 안전하지 않은 url
이라고 뜨다보니 아무래도 별로인 것 같아서, 빠르게 http
를 https
로 바꿔야겠다고 생각했다.
let's encrypt
랑AWS
중에 고민을 했으나AWS
를 적용하기로 했다.이유는
let's encrypt
는 전에 해본 경험도 있고,Cloud
시대에 맞춰서AWS
서비스를 써보면서 공부를 해야겠다고 생각했다. (다행히 프리티어 사용중이면Route53
이랑Certificate Manager
,ELB
사용시에 큰 비용이 따로 들지 않는다고 해서 사용하기로 한 것도 있다.)
구글에 검색하면 나오는 블로그를 참고하여, AWS Route 53
, AWS Certificate Manager
, AWS ELB
를 사용해서 https
를 적용했다.
분명 순서대로 다 잘 따라했으는데도 불구하고 자꾸 https
적용이 안되고 자꾸 http
로 연결이 되었다.
무언가 잘못되었음을 인지했고, 이때부터 불안감이 엄습했다. (불안감의 원인으로는 지금까지 여러번 네트워크 관련된 이슈를 만날때마다 제대로 이슈 대응하는게 어려웠고, 특히나 AWS와 관련된 네트워크 이슈는 정말 문제 찾기가 어려웠 경험만 있어서 더 불안했다.)
정말 엄청나게 특이한 케이스를 제외하면 AWS가 잘못되었을리는 없으므로, 내가 잘못세팅했을 것이라 생각하고 여러개의 다른 블로그 글들을 다시 처음부터 읽어보며 내가 무엇을 잘못했는지 확인하기 시작했다.
블로그 글을 한 4~5개 읽으며 깨달은 건 나는 분명히 하라는대로 다 했고, 나 빼고 블로그 작성자분들은 다 정상적으로 된다는 것이었다.
결국 스스로 결론 내리기로는 내가 잘못한건 없다고 판단했고 다른 이슈가 있을 것이라 생각했다.
네트워크니까 결국 잘못연결된 부분이 있을 것이고 그 부분을 찾아서 해결을 하면 될 것이라고 생각하고 문제 점들을 하나 하나 확인하기로 했다.
지금 도대체 어디서부터 문제인지 모르므로, 중간쯤을 잘라서 이분탐색으로 문제를 확인하기로 했다.
중간쯤에 해당하는 부분으로 적당한 부분은 이번에 설정한 AWS ELB
로 판단했다.
지금 http
로 뜨는게 AWS ELB
를 타고 가서 http
로 뜨는 것인지 아니면 그냥 도메인 주소가 EC2 public IP
로 연결이 되어서 http
로 뜨는 것인지를 확인하기로 했다.
그래서 AWS ELB
의 도메인 주소를 찾아서 직접 해당 주소로 접근을 해봤다.
AWS ELB
로 연결을 하니 https
로 정상적으로 접근이 되고, http
로 연결시에 리다이렉트까지 정상적이었다. 물론 인증서는 도메인 주소가 다르므로 인증받지 못한 사이트
라고 뜨기는 한다.
역시나 AWS 설정 부분은 문제가 없었다. AWS ELB
부터는 정상적이므로 AWS ELB
까지만 연결이 된다면 이 문제도 끝날 것이라 판단했다.
여기까지 오자 가장 먼저 든 생각은 네임서버의 반영 시간이었다. 아무래도 가비아를 쓰다가 AWS Route 53
으로 바꾸고나서, 가비아에 새로 AWS 네임서버를 등록했는데 이게 반영되는데 시간이 오래 걸리는게 아닐까? 라고 추측이 되었다.
그래서 실제로 DNS 서버에 내 도메인 주소로 쿼리를 던졌을 때 무슨 IP를 주는지 확인하기로 했다.
cmd
나 bash
에서 nslookup
명령어를 사용하면 DNS에서 무슨 IP를 주는지 확인 할 수 있다. (예시로 naver.com 을 던져봤다.)
기대하면서 내 도메인 주소를 던져보니, 역시나 아직 반영이 되지 않아서 그런지 기존에 가비아에 등록했던 EC2의 pulic IP
를 주는 것이었다.
2시간의 고생이 드디어 끝을 내리는구나 싶어서 정말 기뻤다.
반영이 되기까지 마음 편하게 기다리다가, 다시 주소를 던져보니 이번엔 찾을 수 없다고 나왔다.
그러나 실제로 내 도메인에 접속을 해보면 AWS ELB
에 잘 연결이 되었는지 제대로 https
로 접속이 가능했다.
DNS 서버
에는 내 도메인에 대해서 등록이 되어있지 않아서 그렇다.AWS ELB
도메인 주소를 요청하면 값을 잘 받아온다.DNS 서버
에 없다면, 다른 도메인 서버를 통해서 내 도메인에 대한 값을 받아오는 것 같았다.nslookup
을 사용할 때 도메인 주소 뒤에 DNS 서버 주소를 넣으면 해당 도메인 서버를 통해서 쿼리를 요청할 수 있다.구글 DNS 서버 (8.8.8.8)
로 요청을 보내봤더니, 역시나 제대로 값을 받아왔다.https
를 적용하고 나서, api 요청들이 가끔씩 pending
이 걸리고 제대로 요청이 가지 않았다. (자꾸 그러는것도 아니고 한번씩만 발생해서 문제의 원인에 대해서 감을 잡지 못했다.)GET
요청은 정상적인데, POST
요청에만 해당 문제가 발생한다는 것을 깨달았다.https
적용한다고 찾아보던 블로그 내용 중에 AWS ELB
에서 http
요청을 https
로 리다이렉트할 때, http redirect (Http status 301)
을 사용하면 Http Method
가 모두 GET
으로 바뀐다고 적혀있던 내용이 생각이 났다.axios
요청에 대해서 프로토콜을 http
로 해놨었다.Token
이 expired
됐을 때 자동으로 refresh token
를 하게 되는데, 해당 요청은 POST
요청이라서 http
로 요청이 가면 redirect
때문에 GET
요청이 되고 GET
요청으로 정의된 refresh token
api는 없으므로 pending
이후에 TimeOut이 발생했다.
axios
의 요청 프로토콜을https
로 변경하고 나니까 모두 정상적으로 동작이 되었다.
해당 이슈 해결에 대한 출처 : EC2에 HTTPS 적용하기 # 리다이렉션 주의사항