1. HTTP
http는 Hyper Transfer Protocol의 줄임말로써, 주로 HTML 문서, 이미지, 비디오 및 기타 콘텐츠를 전송하는 데 사용됩니다. 그리고 특별한 보안 장치가 없기 때문에, 누군가가 http의 네트워크 신호를 훔쳐갈 수 있습니다. 이러한 문제를 고치기 위해서 https를 사용하게 됩니다.
2. HTTPS
https는 SSL위에 http를 위에 올려서 통신한다고 생각하면 됩니다. 서버가 클라이언트에게 SSL/TLS 인증서를 제공합니다. 이 인증서는 서버의 신원을 증명하고, 클라이언트가 서버를 신뢰할 수 있는지를 확인할 수 있도록 합니다. 이후에는 클라이언트와 서버는 세션 키(Session Key)를 생성하고 교환 및 데이터를 암호화하여 통신하게 됩니다.
3. Route53 - Domain 인증 및 등록
도메인을 사는 방법은 주로 가비아와 AWS의 Route53에서 사는 방법이 있는데, 둘 다 방식은 비슷합니다. 저는 AWS에서 구매했습니다. 제가 구매한 도메인 이름을 mydomain.com
이라고 가정하고 진행하겠습니다.
우선 Route53에 들어와서 호스팅 영역 생성
을 눌러줍니다.
그다음 도메인을 입력하고 다른 설정은 그대로 유지한 채 호스팅 영역 생성을 누릅니다.
생성된 호스팅 영역에 들어가면 아래와 같이 확인할 수 있습니다. 그중 NS(네임 서버)를 눌러줍니다. 처음 생성하였다면, NS와 SOA만 존재합니다. 오른쪽에 NS로 시작하는 4개의 값을 구매한 도메인 네임 서버에 넣어줍니다. 중요한 것은 AWS의 호스팅 영역의 NS를 등록된 도메인의 NS에 넣어주셔야 합니다.
가비아의 경우에는 가비아 홈페이지에서 My 가비아 -> 본인이 구매한 도메인의 관리 버튼 -> 네임서버 설정 버튼 -> 1차 ~ 4차까지 위의 4개의 주소를 순서대로 넣어주시면 됩니다.
AWS의 경우에는 Route53 -> 등록된 도메인 -> mydomain.com -> 작업 -> 이름 서버 편집 -> 4개의 칸에 복사하여 넣어주시면 됩니다.
다시 호스팅 영역으로 돌아와서 레코드 생성
을 눌러줍니다.
아래 레코드 이름에 subdomain이 있는데, 빈 칸으로 진행하시면 http://mydomain.com
으로 연결되고, 서브 도메인에 www 를 넣어주면 http://www.mydomain.com
으로 들어가집니다. 다. 그리고 아래 값에는 연결하려는 EC2의 퍼블릭 IPv4 주소를 넣어줍니다. 마지막으로 DNS-Checker에 들어가서 도메인이 전파되었는지 확인할 수 있습니다.
4. AWS Certificate Manager - 인증서 발급
퍼블릭 인증서 요청을 합니다.
*.mydomain.com
은 *가 와일드카드입니다. 즉, api.mydomain.com / my.mydomain.com
등 도메인 앞에 어떠한 글자가 붙어도 허용한다는 뜻입니다. 단, mydomain.com
으로 이용하실 거면 아래와 같이 하나 더 추가하셔야 합니다.
저는 이미 발급받은 상태이기 때문에, 성공이 나왔지만, 처음 발급하셨다면, Route 53에서 레코드 생성을 눌러 레코드를 생성해 줍니다. 그리고 Route53의 호스팅 영역에 가서 CNAME이 생긴 것을 확인해 줍니다. 인증서가 발급되는 시간이 최대 2시간까지 걸릴 수 있다고 합니다. (보통 10~30분 사이에 나옵니다.) 만약, 1시간이 지나도 발급되지 않는다면, 과정 중에서 실수한 것이 있는지 확인해 주세요.
5. EC2 - Target Group
EC2 왼쪽 아래에 로드밸런싱 > 대상 그룹으로 들어와서 대상 그룹 생성을 눌러줍니다.
저희는 EC2 인스턴스에 https를 적용할 것이므로 인스턴스를 선택합니다. 그리고 아래 HTTP 포트번호는 본인이 사용하는 ServerPort를 넣어주시면 됩니다. 만약 8080 포트를 사용한다면 8080으로 넣어주셔야 합니다.
상태 검사 부분은 무시해도 되는 부분이지만 본인의 경로 그리고 끝에 health-check으로 GetMapping을 받아주신 다음에 "OK"가 리턴되게 해 주시면 됩니다. EC2와 제대로 연결이 되었는지 포트가 맞는지 확인할 수 있는 역할입니다.
6. EC2 - Load Balancer
이제 마지막입니다!! 지금까지 이 로드 밸런서를 위해서 설정한 것입니다. 로드 밸런서를 들어가기에 앞서 어떻게 진행되는지는 아래와 같습니다.
로드 밸런서 생성
을 눌러줍니다.
아래 Application Load Balancer를 생성해 줍니다.
로드 밸런서 이름은 양식대로 원하시는 대로 지어주시면 됩니다. Internet-facing, IPv4로 를 설정해 줍니다.
네트워크에서 VPC는 EC2에서 사용하는 vpc를 연결해 줍니다. 그리고 가용 영역은 EC2가 포함되어 있는 영역을 넣어주세요. EC2의 가용 영역은 EC2 인스턴스에 들어가셔서 네트워킹을 눌러주시면 나옵니다. 귀찮으시면, 그냥 4개 다 넣으셔도 무관합니다.
보안 그룹은 EC2에서 적용된 보안 그룹을 사용합니다. 단, https, http, server에 대한 포트가 열려 있어야 합니다. 이때, IPv4, IPv6 모두 열어주세요. 만약 서버를 여러 개 사용하신다면, 여러 개의 서버 포트를 열어주세요.
예를 들어서 내가 8080, 8888 포트 2개를 쓰고 있는 EC2 일 때, 보안 그룹에서는 80, 443, 8080, 8888 모두 IPv4, IPv6를 열어주셔야 합니다.
리스너 및 라우팅에는 80 포트와 443 포트를 열어줍니다. mydomain.com 은 기본적으로 http://mydomain.com:80 이므로, 이를 받아주는 80 포트를 열어줍니다. 그리고 이후 규칙에서 http는 https로 리다이렉팅 시킬 것이므로 https://mydomain.com:443으로 들어올 때, 받을 수 있는 https 포트를 열어줍니다. 그리고 대상 그룹은 이전에 생성한 Target Group으로 해줍니다.
인증서는 이전에 ACM에서 만들었던, 인증서를 넣어줍니다. 나머지 설정은 그대로 둔 채로 로드 밸런서를 생성합니다.
7. EC2 - Load Balancer, 리스너 규칙
만약 포트를 1개만 사용하신다면, 8번으로 넘어가시면 됩니다.
만약 한 EC2에 2개 이상의 서버를 사용하여 ServerPort를 2개 이상 쓰신다면, 5번 TargetGroup 생성으로 넘어가셔서 ServerPort에 맞는 TargetGroup을 추가로 생성해 주세요.
Load Balancer의 HTTP:80 리스너에 들어와서 리스너 규칙에서 규칙 추가
를 눌러줍니다.
규칙 조건 정의에서 조건 추가를 누릅니다.
아래와 같이 경로를 이용해서 모든 경로에 대해서 작용되게 해 줍니다. http://mydomain.com/*
를 https://mydomain.com/*
으로 리다이렉팅 시켜주는 규칙입니다.
규칙 작업 정의는 https URL로 리다이렉팅 되게 해 줍니다. 이제 HTTP 요청들은 모두 HTTPS로 리다이렉팅 됩니다.
HTTPS:443 리스너에서도 각 포트에 맞는 규칙을 추가해 줄 겁니다. 조건 추가를 누릅니다.
아래와 같이 이번에 적용시킬 서버의 api에 맞게 경로를 설정해 줍니다.
왜 이렇게 해야 하나면, A서버에서는 mydomain.com/api/*
으로 처리된다고 하고, mydomain.com/frontend/*
으로 처리된다고 하면, 둘의 경로를 구분하여 다르게 처리해야 하기 때문에, 경로를 넣어줘야 합니다. 만약, 하나의 서버만 운용한다면, \*
을 넣어준다고 해도 상관없습니다.
규칙 작업 정의에서는 이제 앞서 생성한 대상 그룹을 넣어줍니다.
대상그룹의 포트가 8080이라면, http://mydomain.com/myApiV1/*
은 https://mydomain.com/myApiV1/*
으로 리다이렉팅 된 후에 보안 절차를 밟은 뒤, http://EC2pulicIP:8080/myApiV1/*
으로 요청이 들어갑니다.
마찬가지로 https://mydomain.com/myApiV2/*
도 http://EC2pulicIP:8080/myApiV2/*
의 요청과 같은 요청을 합니다.
각 포트에 맞는 TargetGroup을 설정해 주면 됩니다.
8. Route53 - Domain 설정
하나의 프로젝트만 쓰신다면 마지막입니다!!
이전에 생성했던 A 레코드를 편집합니다. 혹은 새로 기존 A 레코드를 삭제하고 새로 생성해 주셔도 됩니다. 저는 api.mydomain.com으로 사용할 것이므로 앞에 api를 붙여주었습니다. 그리고 별칭을 눌러 아래와 같이 바꿔 주었습니다. 마지막으로 아래 가린 부분은 생성한 로드 밸런서를 넣어주시면 됩니다. 이제 health-check으로 통신을 하면 OK가 뜨는 것을 볼 수 있습니다. 수고하셨습니다.
제대로 요청이 됩니다. 모두 https 적용을 잘 마치시면 좋겠습니다!!
'개발자 공부 > 인프라 - AWS' 카테고리의 다른 글
[ CI/CD ] Github Actions + AWS CodeDeploy 를 활용한 CI/CD (feat. SpringBoot) (0) | 2024.08.16 |
---|