Https 기본
HTTPS란
HTTPS는 Hypertext Transfer Protocol Secure의 약자로 HTTP 프로토콜에 SSL이 추가된 프로토콜이다.
기존 HTTP는 데이터를 암호화하지 않고 전송하기 때문에 중간에서 데이터가 노출될 수 있다.
반면 HTTPS는 SSL을 이용해 데이터를 암호화하여 전송하므로 보안성이 높다.
HTTPS를 사용하려면 SSL 인증서가 필요하다.
인증서는 신뢰 기관을 통해 발급받아야 하며 일반적으로 비용이 발생한다.
이후 발급받은 인증서를 웹 서버에 적용하고 HTTP 요청을 HTTPS로 리다이렉션하도록 설정해야 한다.
AWS 환경에서는 CloudFront를 사용하면 이러한 과정을 비교적 간편하게 구성할 수 있다.
CloudFront를 이용한 HTTPS 구성
client는 서버에 HTTPS 프로토콜로 요청을 보낸다.
여기서 중요한 점은 외부 인터넷 구간에서는 HTTPS를 사용하지만
CloudFront 뒤쪽 내부 네트워크에서는 HTTP 통신을 사용할 수 있다는 점이다.
즉 외부에서 들어오는 요청만 HTTPS로 암호화하고 이후 Private 네트워크 구간에서는 HTTP를 사용할 수 있다.
이 방식의 장점은 EC2나 S3에 별도로 HTTPS 인증서를 설치하지 않아도 된다는 것이다.
필요하다면 CloudFront와 ALB를 연결하여 백엔드까지 HTTPS를 유지하도록 구성할 수도 있다.
HTTPS 통신에는 SSL 인증서가 필요하며 AWS에서는 ACM 서비스를 통해 인증서를 발급한다.
CloudFront와 연동하여 사용하는 인증서는 무료로 제공된다.
DNS
DNS는 Domain Name System의 약자로
사람이 이해하기 쉬운 도메인 이름을 컴퓨터가 이해하는 IP 주소로 변환해주는 시스템이다.
예를 들어 www.amazon.com과 같은 도메인 이름을 192.0.2.44와 같은 IP 주소로 변환해준다.
인터넷 통신은 실제로 IP 주소를 기반으로 이루어지므로
사용자가 naver.com과 같은 문자열을 입력하면 이를 IP 주소로 변환하는 과정이 반드시 필요하다.
이 역할을 수행하는 것이 DNS이다.
DNS 기본 동작 흐름
1. 사용자가 브라우저에 haedal.com을 입력한다.
2. DNS 서버에서 해당 도메인에 연결된 IP 주소를 조회한다.
3. 조회된 IP 주소를 사용자 PC에 전달한다.
4. 사용자는 해당 IP 주소로 서버에 접속하고 서버는 웹 페이지를 응답한다.
이 과정이 매우 빠르게 이루어지기 때문에 사용자는 단순히 도메인을 입력하는 것처럼 느끼게 된다.
DNS 상세 동작 순서
ex) www.naver.com을 입력하는 경우
1. 브라우저는 먼저 PC에 설정된 Local DNS 서버에 www.naver.com의 IP 주소를 요청한다.
2. Local DNS에 해당 정보가 캐시되어 있다면 즉시 IP를 반환한다.
3. 캐시가 없다면 Root DNS 서버에 질의한다.
4. Root DNS는 .com을 관리하는 TLD DNS 서버 정보를 반환한다.
5. Local DNS는 TLD DNS 서버에 다시 질의한다.
6. TLD DNS 서버는 naver.com의 Authoritative DNS 서버 정보를 반환한다.
7. Authoritative DNS 서버는 www.naver.com의 실제 IP 주소를 응답한다.
8. Local DNS는 해당 IP를 캐싱한 뒤 사용자에게 전달한다.
이처럼 여러 단계를 거쳐 최종 IP를 찾아가는 과정을 통해 웹 페이지에 접속하게 된다.
Recursive Query와 Iterative Query
Recursive Query는 Local DNS 서버가 최종 결과를 얻을 때까지 다른 DNS 서버에 대신 질의하여 결과를 가져오는 방식이다.
Iterative Query는 DNS 서버가 다음에 질의해야 할 서버 정보를 알려주고 질의를 반복하는 방식이다.
이미 캐시에 IP 정보가 있다면 이러한 과정은 생략된다.
DNS Record
DNS Record는 도메인에 대한 처리 방식을 정의하는 설정 정보다.
DNS 서버에는 도메인과 IP 주소의 관계가 레코드 형태로 저장된다.
DNS 레코드 종류
| 종류 | 설명 |
|---|---|
| A | 도메인과 IP 주소를 직접 연결 |
| CNAME | 도메인을 다른 도메인에 별칭으로 연결 |
| NS | 해당 도메인을 관리하는 네임서버 정보 |
| SOA | 도메인의 시작 및 관리 정보 |
A 레코드
A 레코드는 도메인 이름을 IP 주소와 직접 매핑한다.
domain.com을 111.222.333.444에 연결하는 방식이다.
A 레코드는 반드시 1:1일 필요는 없으며 설정에 따라 1:N 또는 N:1 구조도 가능하다.
장점은 한 번의 조회로 바로 IP를 알 수 있어 빠르다는 점이다.
단점은 서버 IP가 변경되면 레코드를 수정해야 한다는 점이다.
CNAME 레코드
CNAME은 특정 도메인을 다른 도메인에 연결하는 방식이다.
domain22.com을 domain.com에 연결하면 최종적으로는 domain.com의 A 레코드를 통해 IP를 조회하게 된다.
CNAME은 반드시 도메인을 대상으로 하며 IP 주소를 직접 설정할 수 없다.
장점은 IP 변경 시 A 레코드만 수정하면 되어 관리가 편리하다는 점이다.
단점은 실제 IP를 얻기까지 여러 번 조회가 발생할 수 있다는 점이다.
A 레코드와 CNAME
A 레코드는 직접 IP를 가리키므로 조회 속도가 빠르다. 하지만 IP가 변경되면 직접 수정해야 한다.
CNAME은 다른 도메인을 참조하므로 관리가 유연하다. 하지만 조회 단계가 추가될 수 있다.
따라서 환경에 따라 적절한 방식을 선택해야 한다.
NS 레코드
NS 레코드는 특정 도메인을 어떤 네임서버가 관리하는지 나타낸다.
dal.com을 특정 업체에서 구매했다면 해당 업체의 네임서버가 NS 레코드에 등록된다.
DNS 서버가 직접 정보를 찾지 못할 경우 NS 레코드에 정의된 서버에 질의하게 된다.
TTL은 DNS 정보가 캐시에 저장되는 시간을 의미한다.
SOA 레코드
SOA는 Start of Authority의 약자로, 해당 도메인에 대한 권한과 관리 정보를 담고 있다.
기본 네임서버 정보, 관리자 이메일, 버전 번호, 갱신 주기 등의 정보가 포함된다.
SOA 레코드는 도메인당 하나만 존재한다.
Secondary Name Server는 일정 주기마다 Primary Name Server에 SOA 정보를 확인하고
Serial 값이 변경되었으면 데이터를 갱신한다.
Route 53
Route 53은 AWS에서 제공하는 DNS 서비스이다.
도메인 등록, 레코드 관리, 헬스 체크, 트래픽 라우팅 정책 설정 등을 통합적으로 제공한다.
AWS 환경에서 CloudFront, ALB, EC2, S3와 함께 사용하면 도메인과 인프라를 효율적으로 연결할 수 있다.
Reference
