본문 바로가기
  • Seizure But Okay Developer
강의 | 대외활동 | 개인플젝/마스크 재고 관리_개인플젝

마스크 재고 관리 프로젝트 - 4 (Full AWS)

by Sky_Developer 2020. 4. 3.

개요

바이러스가 만연한 현재에 개발자로써 주변사람들을 도울 수 있는 방법이 없을까 고민을 하다가, 마스크 재고를 알려주는 사이트를 만들어야 겠다 결심하였고 프로젝트에 대해 정리하는 글을 작성하였습니다.

 

프로젝트 글은 총 5편으로 나뉘어 작성될 예정이며 이번 글은 Full AWS 서버세팅에 대한 내용을 담습니다.

 

목차

  • Full AWS로만 세팅하기
  • 작업 목록
    • Route 53 으로 도메인 연결하기
    • ACM 으로 SSL 인증서 만들기
    • 로드밸런서 생성하여 인스턴스와 연결하기

 

Full AWS로만 세팅하기

서버 세팅은 AWS로만 구성해서 할 수도 있고 일부는 직접 작업할 수도 있다. 이번 글에는 AWS로만 구성하여 작업하는 것에 대해 설명한다.

 

작업 목록

마스크 재고 서비스를 위해 AWS에서 작업해야할 목록은 다음과 같았다.

  • Route 53 으로 도메인 연결하기
  • ACM 으로 SSL 인증서 만들기
  • ALB 생성하여 인스턴스와 연결하기

 

Route 53 으로 도메인 연결하기

Route 53 도메인 등록하기

Route 53 서비스를 들어가서 왼쪽 배너 중 호스팅 영역을 클릭한다. 그리고 호스팅 영역 생성버튼을 클릭한다.

 

화면 오른쪽 측면에 입력창이 아래와 같이 뜰 것이다.

  • 도메인 이름 - (호스트 이름 없이)도메인 이름만 입력
  • 설명 - 호스팅 영역에 대한 설명 기입 (생략 가능)
  • 유형 - 퍼블릭 호스팅 영역 으로 선택

이 후 하단의 생성버튼을 클릭하여 생성하자

 

이제 아래와 같이 Hosted Zone이 생성되었다. Hosted Zone을 생성하면 항상 두 개의 리소스 레코드가 생성되는데 이들은 필수적인 레코드들이다.

 

 

이 중 '유형' 에 NS라고 표시된 것은 Nameserver(네임서버)를 의미하고 '값' 은 우리가 구입한 도메인이 사용하게 될 총 4개의 네임서버들이다. 이 4개의 네임서버들은 사용자가 도메인으로 접속을 했을 때 도메인 IP 주소를 찾아서 반환한다.

'유형' 에서 SOA는 권한 게시 정보를 의미한다.

 

그리고 이름에 mydomain.com처럼 맨 끝에 .(점)이 붙어 있는데 이는 오타가 아니라 원래 도메인을 표현할 때는 맨 끝에 점을 붙이게 돼있다. 우리가 흔히 보는 도메인들은 이를 생략한 것뿐이다. 이처럼 뒤에 점이 붙은 도메인들을 루트 네임 서버라고 부르는데 생략하는 이유는 다음과 같다.

 

점이 붙었다는 것은 뒤에 붙는 어떤 이름이 있다는 것이다.

  • mydomain.com.이름
    (이름에 해당하는 부분이 루트 네임 서버)

그러나 도메인은 계층적이고 루트 네임 서버는 도메인의 공통적으로 적용되는 부분이기 때문에 이름은 없다 그러므로 .(점)도 불필요하게 표현하지 않으려고 생략하는 것이다.

 

4개의 네임서버들을 도메인을 구입한 사이트에서 등록을 해줘야 한다.

 

(goDaddy 사이트를 기준으로 설명합니다)

goDaddy에서 아래 화면과 같이 생긴 DNS 관리 페이지로 들어온다.

도메인을 구매하고 처음 설정에 들어갔다면 Records 부분에 A 레코드, CNAME 등의 설정값이 나타나있을 것이다. (저는 예전에 Nameservers 에 주소 등록을 해서 Records 가 가려진 상태입니다)

Nameserver 섹션에서 Change 버튼을 누른다.

 

Route 53에서 생성된 총 4개의 네임서버를 등록한다. 도메인은 상단 입력창에 IP 주소는 하단 입력창에 적는다.

 

그런데 네임서버 도메인만 알 뿐 네임서버 IP 주소는 모르는 상태이다. 이 때는 직접 ping을 날려주면서 IP 주소를 알아낼 수 밖에 없다 (goDaddy에서 2019년도 말부터 사용자가 직접 IP 주소를 입력하도록 바꾼 것 같다)

 

아래 그림 처럼 cmd 창에서 `ping 네임서버 도메인 주소` 를 입력해 IP 주소를 알아내자. 그리고 이를 goDaddy 사이트에 입력한다.

 

4개의 네임서버에 대해 모두 등록한 뒤 저장을 누른다. 저장을 누르고 나면 DNS 관리 화면에서 Records 부분이 갑자기 사라질 것인데 이는 레코드 관리를 AWS에서 하도록 설정했기 때문이다. 동작에는 전혀 지장없으며 네임서버를 초기화하면 다시 뜬다. 설정이 완전이 될 때까진 대략 5분정도 소요되는데 사용자마다 시간은 상이할 수 있다.

 

이렇게 네임서버에 도메인을 등록하는 작업이 완료됬다. 이제 네임서버에 등록한 도메인과 서버를 연결할 것이다.

 

도메인과 서버 연결하기

Route 53 화면으로 돌아와서 맨 처음에 추가한 Hosted Zone 에 들어가 레코드 세트 생성 버튼을 클릭한다. 새로 추가할 레코드 유형은 A - IPv4 이다.

 

 

A 레코드라고 하는데, 도메인(또는 호스트 네임이 붙은 도메인)과 도메인을 호스팅하는 컴퓨터의 IP 주소를 매핑해준다. 이를 통해 사용자가 인터넷 주소창에서 도메인 이름을 쳤을 때 이와 매핑된 IP 주소로 변환이 되면서 웹 사이트에 접근할 수 있게 된다. A 레코드의 A는 Address를 의미한다

 

다음과 같이 세팅한다.

  1. 우선 루트 도메인에 대해 세팅을 해주기 위해서 이름 부분은 생략한다.
  2. TTL(Time to Live) 는 캐시를 의미하는데, DNS 서버가 A 레코드로 지정한 값을 얼마나 기억하고 있을지를 설정하는 부분이다. IP 주소가 자주 바뀐다면 TTL을 짧게, 자주 바뀌지 않는다면 길게 설정하는게 좋다.
  3. 값에는 인스턴스의 public IP를 입력해준다. public IP는 EC2 인스턴스 설명란에서 확인할 수 있다.

 

마지막으로 또 다른 레코드를 생성한다. 유형은 CNAME 으로 지정한다. 

 

CNAME은 Canonical Name의 약자로 정식 이름이라는 뜻이다. 우리가 구입한 도메인 주소와 인스턴스 DNS 주소와 매핑해주는 역할을 한다.

 

 

다음과 같이 세팅한다.

  1. 이름에는 www 를 입력한다. 이를 통해 mydomain.com 또는 www.mydomain.com 을 통해 접근할 수 있다
  2. TTL은 A 레코드에서 언급한 것과 비슷하다. 적절히 설정해주거나 기본값을 사용한다.
  3. 값에는 인스턴스의 public DNS 주소를 입력해준다. public DNS는 인스턴스의 설명란에서 확인할 수 있다.

 

여기까지가 Route 53을 세팅하는 과정이었고 이제 ACM을 통해서 SSL 인증서를 만들자.

 

Notice

이 후의 작업은 위에서 만든 A 레코드과 CNAME 레코드를 대체하는 작업이므로 https 적용을 원치 않으시는 분들은 이 단계까지만 진행하시길 권합니다.

 

ACM 으로 SSL 인증서 만들기

AWS Certificate Manager 서비스로 들어와서 '인증서 요청' 버튼을 클릭한다. 이 후 옵션 중 '공인 인증서 요청'을 클릭하고 다음으로 진행한다.

 

1단계 : 도메인 이름 추가 섹션에서 *.도메인이름 과 같이 입력해준다. 이렇게 함으로서 www 또는 다른 호스트 네임이 붙은 모든 도메인들에 대해 https 설정을 적용할 수 있다. '다음'을 클릭한다.

 

2단계 : 옵션에서 DNS 검증을 클릭하고 '다음'을 클릭한다.

 

3단계 : 태그는 지정해도 되고 안해도 되는 선택사항이다. 인증서를 구별할 수 있는 '키'와 '값'을 입력해주고 '검토'를 클릭한다.

 

4단계 : 도메인 이름이 잘 입력되었는지 확인하고 '확인 및 요청' 버튼을 클릭한다.

 

5단계 : 마지막 단계로 왔을 때 인증서의 상태가 '검증 보류'라고 뜰텐데, 아래 화면 처럼 Route 53 에서 레코드 생성 버튼을 클릭해준다.

 

 

이 후 뜨는 'Route 53 에서 레코드 생성' 팝업에서 '생성' 버튼을 눌러 작업을 완료해주자. 인증서 발급에는 대략 5분 정도가 걸렸다. 인증서는 인스턴스에 쓰이는 것이 아니라 로드 밸런서에 사용되기 때문에 로드 밸런서를 또 만들어줘야 한다.

 

로드 밸런서 생성하여 인스턴스와 연결하기

EC2 인스턴스 서비스에 들어와 로드 밸런서 탭을 클릭한다. 이 후 '로드 밸런서' 생성 버튼을 누른다.

 

이 후 로드 밸런서를 선택할 수 있는 화면이 아래와 같이 뜬다.

보통 로드 밸런서를 설치할 때 Application Load Balancer 을 추천하지만 이는 인스턴스가 2개이상이여야 제대로 동작한다. (인스턴스가 하나인데 ALB를 사용하려고 하면 '2개 이상의 서브넷을 지정해야 합니다' 라는 오류가 뜸)

 

인스턴스가 하나인 경우 맨 오른쪽의 Classic Load Balancer를 사용할 수 있다. 맨 오른쪽에 있는 Classic Load Balancer를 생성하자.

 

1단계로 들어오는데 로드 밸런서 프로토콜을 생성할 수 있다. 이 때 앞서 만든 인증서를 적용하기 위해 HTTPS 프로토콜을 하나 추가해주고 '다음' 버튼을 누른다

 

2단계 보안 그룹 할당에서는 기존 인스턴스에서 사용하고 있는 보안그룹을 사용해도 되고, 새로 만들수도 있다. 새로 만들 필요는 없고 기존에 사용하던 것을 선택 후 '다음' 버튼을 누르자

 

3단계 보안 설정 구성에서 '인증서 유형'을 'ACM에서 인증서 선택' 을 클릭하고 만들었던 인증서를 선택해준다. 암호선택은 '사전 정의 보안 정책'을 권하며 원하는 보안 정책을 선택하면 된다.

4단계 상태 검사 구성은 로드 밸런서에서 인스턴스의 상태를 체크하기 위한 설정이다.

Ping 프로토콜은 HTTP 또는 HTTPS 로 해도 되지만 보통 HTTP로 하고 Ping 포트 또한 따로 설정하지 않았다면 기본 포트 값을 그대로 사용하자.

Ping 경로는 웹 사이트에 접근했을 때 보여주는 초기 페이지 파일이름을 앞에 /(슬래쉬)와 같이 입력한다. ex) /index.html

 

5단계 EC2 인스턴스 추가에서 인스턴스를 선택해주고 '다음' 버튼을 누른다

 

6단계 태그는 지정해도 되고 안해도 되는 선택사항이다. 생성에서 로드 밸런서를 구별할 수 있는 '키'와 '값'을 입력해주고 '검토 및 생성' 버튼을 클릭한다.

 

이전까지 입력한 값들이 제대로 입력되었는지 한번 더 확인을 하고 '생성' 버튼을 클릭하자. 

 

마지막으로 로드 밸런서에 인증서를 적용해주고 Route 53에 새로운 레코드를 추가하는 것만 남았다.

 

로드 밸런서에 인증서 적용

처음 로드 밸런서를 생성하기 위해 들어온 페이지를 보면 새로운 로드 밸런서가 생성된 것을 볼 수 있다. 여기서 리스너 탭을 클릭하고 HTTPS 프로토콜의 SSL 인증서 부분에 변경을 클릭하자.

 

인증서를 선택하는 창에서 인증서 유형을 'ACM에서 인증서 선택' 옵션을 선택하고 인증서에서 만들었던 인증서를 선택하고 저장을 한다.

 

Route 53에서 레코드 추가

도메인에 https를 적용할 때 호스트네임 안 붙은 상태(mydomain.com)와 호스트네임 붙은 상태(www.mydomain.com) 둘 다 적용할 것이다. 로드밸런서의 설명 탭을 클릭한 뒤 DNS 이름 부분을 복사한다

 

 

다시 Route 53으로 가서 기존 Hosted Zone으로 들어간 다음 새로운 record set을 추가한다. 각각 A record와 CNAME record를 추가할 것이다. 이 때 기존의 추가했던 A record set과 CNAME record set을 삭제해야 record set 생성 시 중복오류가 발생하지 않는다.

 

새로운 record set을 생성하고 유형은 A - IPv4 주소 로 한다. 그리고 별칭사용을 '예' 로 체크한 뒤 위에서 추가했던 로드 밸런서를 선택해주고 생성버튼을 누른다.

 

 

 

그리고 새로운 record set 을 생성해준다음 이름은 www, 값은 아까 로드 밸런서에서 복사했던 DNS 이름 값을 붙여넣고 생성한다

 

이제 AWS 를 통한 웹 서버 세팅이 모두 마무리 되었다. Route 53에서 작업한 DNS 설정이 적용되는 데 약 5분정도 소요되니 그 후에 주소창에서 https 를 붙이고 도메인에 접속을 하면 잘 되는 것을 확인할 수 있다.

 

 

여기까지가 마스크 재고 프로젝트과 관련된 Full AWS로 서버세팅하는 작업이었고, 다음 글에는 일부만 AWS로 세팅하는 방법에 관하여 다뤄보겠습니다. 감사합니다.

 

출처

https://stackoverflow.com/questions/27336657/does-it-make-sense-to-have-an-amazon-elastic-load-balancer-with-just-one-ec2-ins

https://opentutorials.org/course/608/3058

http://makebct.net/aws-%EC%99%B8%EB%B6%80-%EB%8F%84%EB%A9%94%EC%9D%B8-%EC%97%B0%EA%B2%B0-%EB%B0%A9%EB%B2%95-1/?cat=989/

https://www.godaddy.com/community/Managing-Domains/Change-nameserver-what-ip-address-to-enter/m-p/152013#M29433

https://travis.media/how-to-find-your-godaddy-nameserver-ip-address/

https://velog.io/@minholee_93/AWS-Route-53-DNS-%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-8lk40vfqt4

https://velog.io/@minholee_93/AWS-ELB-SSL-%EC%9D%B8%EC%A6%9D%EC%84%9C-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0-mfk4dpjrd6

https://brunch.co.kr/@skykamja24/287

https://cloud.hosting.kr/aws-certificate-manageracm/

https://support.dnsimple.com/articles/a-record/

 

댓글