HTTP는 Hyper Transfer Protocol의 줄임말입니다. 간단하게 표현하자면 서버와 클라이언트가 통신하는데 정해놓은 규약이라고 생각하면 편할 것 같습니다.
HTTP 통신은 특별한 보안이 존재하지 않습니다. 예를 들어서 어떤 사람이 악의를 가지고 HTTP의 네트워크 신호를 약탈한다면 해당 통신내용이 외부에 드러나게 됩니다. 해당 통신 사용자의 개인정보나 중요한 보안이 그대로 드러나기 때문에 이러한 문제점을 고쳐야겠지요
HTTP는 전송계층의 TCP위에서 동작합니다. 여기서 SSL(Secure Sockets Layer)이라는 보안계층이 전송계층 위에 올라갑니다. HTTPS는 SSL위에 HTTP를 얹어서 보안이 보장된 통신을 하는 프로토콜입니다.
더 자세한 내용은 구글링을 통해서 알아보셔도 좋을 것 같습니다.
이제 본격적으로 저희의 서비스를 HTTPS로 연결하는 방법에 대해 알아보도록 하겠습니다.
도메인을 구매하는 방법은 다음과 같습니다. 혹시나 설명이 부족한 경우 밑의 링크를 참고하면 좋을 것 같습니다.
route 53 → 좌측 등록된 도메인 → 도메인 등록
결제가 완료되면 route 53 대시보드로 이동해서 위 사진처럼 확인할 수 있습니다.
※ AWS가 아닌 다른곳에서 도메인을 구매했다면 aws route53에 도메인을 등록해야 하지만 AWS에서 직접 구매하면 별도로 등록해줄 필요가 없습니다. (다른곳에서 도메인을 구입한 경우는 다른 블로그를 참조하면 좋을 것 같습니다.)
Certificate Manager로 이동
인증서 요청
퍼블릭 인증서 (디폴트)
발급받은 도메인 이름을 넣어주고, 검증 방법은 route53에서 구매한 경우 dns검증을 해줍니다.
이후 요청 클릭
해당 인증서를 클릭해줍니다.
도메인에 대한 소유권이 있는지 검증하는 과정으로, Route 53에서 레코드 생성 버튼을 클릭합니다.
route 53을 통해 도메인을 구매했기 때문에 자동으로 설정이 되므로, 바로 생성 버튼을 누르면 됩니다.
인증서 발급 끝
ALB를 세팅하기 전에, 요청을 분산시켜줄 그룹이 필요합니다. 생성한 EC2 인스턴스들이 들어갈 그룹이고 로드밸런서가 그룹별로 요청을 분산시켜줍니다.
그룹에 포함할 인스턴스 선택 후 include as pending below 클릭후 완료 ec2 인스턴스 한대라 로드밸런싱이 의미가 없지만, https 프로토콜 적용을 위해서 로드밸런싱을 적용하는 것입니다.
AWS에서 인증서를 발급받은 도메인을 사용하기 위해서는 로드밸런서를 이용해야 합니다.
ALB란 Applcation Load Balancer으로 ELB(Elastic Load Balancer)라고도 부릅니다.
로드 밸런서란 간단히 이야기 하면, 여러 서버가 띄워져 있을 때 , 클라이언트로 부터 인입되는
요청을 로드밸런서 한곳에서 모두 요청을 받고, 각 서버에게 분배해주는 서버를 의미합니다.
ALB는 각 그룹별로 요청을 분산해주고, 각 가용역역에 있는 ALB 노드가 각 인스턴스들에게 요청을 분산 시켜줍니다.
ec2 대시보드에서 좌측 하단 로드밸런서 탭 → 생성
이름 빼고 나머지는 기본 설정으로 합니다.
가용영역에 대한 내용은 다른 분 블로그에서 학습하시면 좋을 것 같습니다.
총 4개의 가용역역이 있는데, 두개 이상 선택을 권장해서 두개의 가용영역을 설정합니다.
※ 가용영역 설정 시 인스턴스의 가용영역을 포함시켜야 합니다.
ec2랑 같은 보안그룹을 설정합니다. (별도로 만들어도 되지만 별도로 만든다면 ec2의 보안그룹에 alb의 보안그룹을 추가해줍니다.)
ALB가 활성화 상태가 되고 target group에 가보면 Unhealthy 상태입니다.
서버가 살아있는지 여부에 대해 판단하기 위한 지표인데 실제 서버는 살아있으므로 넘어가도록 합니다.
이제 생성한 ALB와, 구매한 도메인을 연결하는 과정입니다.
레코드 생성을 클릭
위의 과정을 거치면 해당 인스턴스에 HTTPS가 적용 된것을 확인할 수 있습니다.
추가적으로 HTTP -> HTTPS 리다이렉션을 적용을 추천하는데 제가 작성한 블로그를 참고하면 좋을 것 같습니다.
리액트랑 스프링 부트를 같이 배포할 때
스프링 부트에 위에 작업을 그대로 적용시켜도 될까요??
마지막에 말씀하신 http -> https 리다이렉션 작업은 프론트에서 nginx로 따로 설정해주면 스프링부트 ec2 서버에서는 따로 적용시켜줄 필요 없는것이 맞을까요??