[AWS] Load Balancer를 사용해서 EC2를 HTTPS로 배포하기

박진우·2023년 9월 13일
4
post-thumbnail

시작하기에 앞서...

프런트엔드 팀원과 프로젝트를 협업하면서 EC2를 활용하여 배포를 완료하였습니다.
프런트엔드와 백엔드를 배포하고 이제 테스트를 진행하려 하는데...

이럴수가... 예상치 못한 에러 발생...🥺
원인을 확인한 결과, 프런트엔드는 헤로쿠를 활용하여 배포하였으므로 https로 배포가 되지만 EC2로 배포를 하였을 땐 http로 배포가 되므로 충돌이 나게 되는 것이었습니다...!

발생한 문제를 해결하고자 방법을 찾아내었으니, Load Balancer를 사용하여 http로 가는 요청을 https로 우회하는 방법이었습니다.

따라서, 이번 포스팅에서는 Load Balancer를 사용하는 과정을 기록하고자 합니다!

(찍어놓은 사진이 없어서 동일한 에러 사진을 가져왔습니다. / 출처 : https://east-star.tistory.com/20)


1. Amazon Route 53으로 도메인 발급

https 배포를 위해선 도메인 발급이 선행되어야합니다.
외부에서 도메인을 구매하면 비교적 저렴하게 구할 수 있지만, 연동성에서 우월하다는 점과 안정성을 고려하여 Amazon Route 53을 선택하게 되었습니다.

먼저 도메인을 등록하는 작업을 수행합니다.

Route 53 > 등록된 도메인 > 도메인 등록 메뉴로 들어가서 '도메인 검색'을 수행합니다.
사용 가능하다면, 검색 결과에 요금과 활성화된 선택 메뉴가 보이게 됩니다.

저는 프로젝트 이름과 관련지어 도메인을 생성하였습니다.


도메인을 성공적으로 구매하였다면, 호스팅 영역을 생성해야 합니다.
'도메인 이름'에 방금 전 발급한 도메인을 작성하고, '유형'은 상황에 맞게 설정하시면 됩니다.


도메인을 성공적으로 생성하셨다면, 호스팅 영역 > 발급받은 도메인 > 레코드 생성 에서 추가 작업을 해야합니다!
루트 도메인에 EC2 인스턴스를 연결해야 하므로 레코드 이름은 작성하지 않고 값에 EC2의 탄력적 IP를 입력합니다.

이제 https를 사용하기 위해 인증서를 발급받도록 합시다!📑


2. AWS Certificate Manager(ACM)으로 인증서 발급



위 사진과 같이, https를 사용하기 위해선 해당 도메인에 대한 인증서가 필요합니다.
따라서, AWS Certificate Manager서비스를 통해 인증서를 발급받아야 합니다!


'인증서 요청'에서 첫번째 선택사항은 간단히 패스


이제 인증서 요청을 위해 인증서가 필요한 도메인을 '도메인 이름'항목에 기입합니다.
만약 추가로 인증서가 필요한 도메인이 있다면 추가해주시면 되는데...

나중에 다시 언급하겠지만, 루트 도메인만 작성해주시면 인증에 문제가 발생할 수 있습니다!
https 우회를 위해 로드밸런서를 생성한 후 Route 53에서 추가적인 레코드를 생성해야 하는데, 루트 도메인만 인증서에 넣게되면 문제가 발생해요...😢
(이 문제때문에 정말 많이 당황했답니다😫)

따라서, 작성할 레코드에 맞게 다른 이름을 추가해주도록 해요!
저는 api로 시작하는 레코드로 생성할 예정이어서 해당 이름도 추가를 해줬답니다😎


완성><


3. Elastic Load Balancer 생성 및 적용

자 이제 마지막으로, Load Balancer를 생성해야 합니다!
EC2 좌측 메뉴 하단에 보시면 찾을 수 있어요😃!


첫 시작은 로드 밸런서 유형을 선택하셔야 합니다.
우리는 http 요청을 https로 우회하고자 하는 것이니 첫번째 유형인 Application Load Balancer를 선택하도록 해요!

Application Load Balancer 작동 방식(슬쩍🫣) 보고가실게요!

자 이제 생성 과정을 살펴보도록 하겠습니다!

로드 밸런서 이름 원하는대로 지어주시구요!

VPC는 기본으로 넘기신 후에 매핑 리전을 선택해주셔야 하는데요,
리전은 두 개 이상 선택할 수 있으며, 반드시 EC2 인스턴스의 리전이 포함되어있어야 합니다! (정말 중요해요!)


보안 그룹은 EC2 인스턴스에서 사용하시는 것 그대로 선택하시면 됩니다!


다음으로는 리스너 및 라우팅을 설정해주셔야 하는데요,
HTTP, HTTPS 두개를 각각 생성해주셔야 합니다. (HTTPS는 443으로 포트 맞춰주세요!)

그런데 뭔가 빠져있죠...? 바로 대상 그룹을 만들어줘야 하는데요!
입력 라인 바로 아래 있는 대상 그룹 생성을 눌러 만들어보도록 하죠!


인스턴스가 기본적으로 선택되어 있습니다! 일단 넘어가구요!


대상 그룹 이름을 지정하고, 아래 부분은 다 기본으로 남겨두셔도 괜찮습니다!


보안 정책도 권장 맞춰주시구요,
앞서 생성했던 ACM을 선택해주시면 됩니다!


그리고 바로 생성한 대상그룹 적용해버리기!!
이제 그대로 생성 마무리 해주시면 됩니다🤗


완성 ><


4. 레코드 추가 생성

그런데 아직 남은 작업이 있었죠...!
앞서 퍼블릭 인증서를 만들 때, 추가적인 레코드를 만들어야 하므로 추가적인 도메인 이름을 작성했었죠!
이제 그 레코드를 생성해보고자 합니다😀

Route 53에서 생성했던 호스팅 영역을 선택해주시구요...!

바로 레코드 생성!!


레코드 이름은 앞서 작성했던대로 api 기입해주었구요,
별칭 체크 후에 Application/Classic Load Balancer에 대한 별칭선택해주시고,
리전은 앞서서와 동일하게 EC2 인스턴스와 같은 리전!!
그리고 방금 생성했던 로드 밸런서도 선택해줄게요😆

이렇게 모든 과정을 마무리했습니다!!!

성공적으로 요청을 처리하는 모습...! 감격의 눈물...!🥹


글을 마치며...

협업을 하면서 참 많은 것을 배운다고 느끼는 요즘, 또 하나의 위기를 해결하기위해 새로운 기술을 사용해보게 되었습니다.
이전까지 많은 시험에도 떨어져보고, 자존감이 떨어지고 있던 와중에 개발을 하면서 이런 경험을 하는 순간들로 인해 하루하루 새로움과 즐거움을 얻으며 나아갈 힘을 얻게 되는 느낌입니다.

앞으로 개발하면서 경험할 흥미로운 미래들을 상상하면서 열심히 임하겠습니다 👏

profile
꾸준히 한 발씩 발전해나가는 모습을 기록합니다.

4개의 댓글

comment-user-thumbnail
2023년 9월 17일

잘 읽고갑니다 화이팅 !!!

1개의 답글
comment-user-thumbnail
2023년 9월 25일

회원님 글이 참 가독성이 좋아 또 보러 왔습니다
파일 처리 관련 글도 보고 싶네요
빠른 업로드 바랍니다

1개의 답글