# Amazon Web Services를 통해 배운 클라우드 개념 정리

### 들어가면서

인프라에 대한 이해가 부족해서 [AWS TechCamp](https://aws.amazon.com/ko/events/seminars/aws-techcamp/) 강의를 통해 클라우드 서비스를 실습하면서 기본 개념을 학습해보았다. 내가 수강한 강의는 총 3가지로 다음과 같다.

1. **AWS 서버리스로 서버 고민 없이 웹 애플리케이션 구축하기**
    
2. **기초부터 배우는 AWS 핵심 서비스로 웹 애플리케이션 구축하기**
    
3. **Amazon ECS로 컨테이너 위에 웹 애플리케이션 구축하기**
    

[**그림으로 이해하는 AWS 구조와 기술** 책](https://www.yes24.com/product/goods/102368122)을 참고하여 새로 배운 개념을 정리해보고자 한다.

---

전체 그림을 그리기 위해서 사용자의 요청이 어떻게 처리되는지 예시를 들어보자.

### 사용자 요청 처리 흐름

1. 사용자가 **웹사이트 URL 입력**
    
2. **Route 53(DNS 서버)에서 라우팅 처리**
    
    * 해당 도메인의 로드밸런스 IP 주소 반환
        
3. **로드 밸런서에서** 여러 EC2 웹서버로 **트래픽 분산**
    
    * EC2와 로드밸런서가 위치한 VPC에서 트래픽 접근 제어 이루어짐
        
        * 보안 그룹 : HTTP/HTTPS(80/443번 포트) 요청만 허용
            
            * 특정 IP만 허용(예시 : 특정 국가)
                
        * 네트워크 ACL (Access Control List) : 서브넷 레벨에서 허용/차단 설정
            
            * 악의적인 IP 주소 차단
                
4. VPC에서 **허용된 요청이 EC2 인스턴스(웹서버)로 전달**
    
    1. 웹서버가 요청 처리
        
        1. 필요시 DB와 통신 : 같은 VPC 내부에서만 가능
            
        2. 정적 파일은 S3에서 가져오기
            
    2. 클라이언트로 응답 반환
        

---

이제 각 AWS 용어와 역할을 더 자세히 살펴보자.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1734875603176/5bc7ad55-8b26-48e7-9a92-029b4f44e7f4.png align="center")

### EC2 : 가상 웹 서버

* 웹 서버 : 클라이언트 HTTP 요청을 이해하고 응답을 처리하는 서버
    
    * 정적인 페이지 요청은 웹 서버 내부에서 처리하고, 동적인 페이지 요청은 AP 서버에서 처리한다.
        
    * 정적인 파일만 호스팅하려면 S3와 같은 정적 호스팅 서비스 사용 가능하다.
        
    * 대량 접근을 처리하기 위해서 여러 웹서버를 통해 다중화로 구성하는 게 일반적이다.
        
* 인스턴스 유형
    
    * CPU, 메모리, 장비 유형 어떤 걸 사용할 지 결정
        
    * 이미 만들어진 서버를 임대하는 것이 아니라서 하드웨어 구성과 OS의 조합을 탄력적으로 선택할 수 있다.
        

### 로드 밸런서란?

* 한 서버에 과부하 걸리지 않도록 사용자 요청을 분산 처리하도록 도와준다.
    

### S3 : 객체 스토리지 서비스

* **데이터를 객체 단위로 관리**한다.
    
* **전세계적으로 접근 가능한 스토리지 서비스**라서 VPC에 종속되지 않고, 독립적으로 동작한다. 따라서 브라우저에서 S3 URL 직접 열어서 이미지 확인 가능하다.
    
* **기능**
    
    * 웹 서버 기능
        
    * 쿼리 기능
        

### VPC (Virtual Private Cloud)

* **독립된 가상 네트워크 환경**
    
    * 서버를 인터넷에 직접 노출시키지 않고 프라이빗 네트워크 안에서 운영하여 보안 강화된 환경 제공한다.
        
    * 외부에서 접근 필요한 경우, 제한된 포트나 IP 주소를 통해 제어 가능하다.
        
* 네트워크 설계
    
    * 서브넷 : 설치할 네트워크의 범위
        
        * **퍼블릭 서브넷** : 인터넷 접근 필요한 웹 서버 배치
            
        * **프라이빗 서브넷**
            
            * 오직 내부 네트워크를 통해서만 접근 가능
                
            * 민감한 리소스인 데이터베이스 서버 배치
                
    * 라우팅 테이블
        
    * **게이트웨이**
        
        * 인터넷 게이트웨이 : 퍼블릭 서브넷에 있는 리소스가 요청과 응답 할 수 있도록 지원(양방향 통신)
            
        * NAT 게이트웨이 : 프라이빗 서브넷에 있는 리소스가 인터넷에 요청을 보내도록 허용하지만, 외부로부터 직접적인 접근은 차단(일방향 통신)
            
    * **접근 제어** : 웹서버만 데이터베이스 서버 접근하도록 제한하거나, 특정 IP에서만 외부 접근을 허용
        
        * **보안 그룹** : 트래픽 제어하는 방화벽 역할
            
            * 모든 트래픽이 차단되고, 허용된 규칙만 적용
                
                * 웹서버(EC2) : 80번(HTTP), 443번(HTTPS) 포트만 허용
                    
                * 데이터 베이스(RDS) : 특정 IP나 웹 서버에서만 접근 허용
                    
        * **네트워크 접근 제어 목록 (ACL)**
            
            * VPC의 서브넷 레벨에서 트래픽 제어하는 추가 보안 레이어
                
* 비용 효율성 증가 : VPC 내의 데이터 전송은 클라우드 내에서 이루어지기 때문에 외부 네트워크 비용 감소한다.
    

### Route 53 : DNS 서비스

* **도메인 이름을 IP 주소로 변환하여 트래픽을 라우팅**한다.
    
* 라우팅 방식
    
    * 라운드 로빈 : 트래픽을 여러 리소스에 고르게 분배
        
    * 지연 시간 기반 라우팅 : 사용자와 가장 가까운 서버로 요청 보냄
        

### 마무리

VPC, EC2를 통해 네트워크 분리, 보안 규칙 등 클라우드 인프라 관련 기초 내용을 배울 수 있었다. 다음에는 강의 내용을 복습하면서 EC2를 활용해 웹 애플리케이션을 배포해볼 계획이다. 인프라에 관심 있으신 분이라면, 초보자도 쉽게 따라하면서 배울 수 있는 **AWS TechCamp** 추천하고 싶다. 강의 수강하면 50달러 크레딧도 제공해서 더욱 좋았다. 그리고, 실습한 이후에는 사용되지 않는 리소스가 남아 추가 비용 발생하지 않도록 두 번 확인하길 추천한다. 나는 이전 실습에서 리소스 삭제를 누락해 추가 비용을 지불해야 했던 소중한 경험을 통해 확실히 배웠다.
