<aside> 💡
이 대화는 클라우드 서비스, 특히 AWS와 관련된 다양한 개념과 서비스 설정에 대한 자세한 설명을 담고 있습니다. 주요 내용을 요약하면 다음과 같습니다:
- 클라우드 서비스 기초:
- 인터넷 연결과 네트워크 환경의 중요성에 대한 설명.
- VPC(Virtual Private Cloud) 설정과 그 중요성에 대한 논의.
- AWS 서비스의 기본적인 지식과 구성 요소에 대한 설명.
- AWS 서비스 구성:
- VPC 생성 및 설정에 관한 자세한 논의.
- 서브넷, 라우팅 테이블, 네트워크 연결 등의 구성 요소에 대한 설명.
- AWS 서비스에서의 보안 그룹 설정과 포트 관리에 대한 논의.
- ECS(Elastic Container Service)와 ECR(Elastic Container Registry) 활용:
- ECS 클러스터 생성 및 관리 방법에 대한 설명.
- 도커 이미지와 ECS 서비스를 연결하는 과정에 대한 자세한 논의.
- ECR을 사용하여 도커 이미지를 관리하고 배포하는 방법에 대한 설명.
- 네트워크와 데이터베이스 설정:
- AWS에서의 네트워크 설정과 데이터베이스 연결에 대한 상세한 논의.
- 프라이빗과 퍼블릭 네트워크 환경 설정에 대한 설명.
- AWS 데이터베이스 서비스와 그 설정에 대한 설명.
- CI/CD(Continuous Integration/Continuous Delivery) 구현:
- AWS에서 CI/CD 파이프라인을 설정하는 방법에 대한 논의.
- 도커, ECS, ECR을 활용한 지속적인 통합과 배포 프로세스에 대한 설명.
이 대화는 AWS의 기본적인 구성 요소부터 고급 서비스 설정까지 다루며, 클라우드 서비스 환경에서의 네트워크, 보안, 데이터베이스 관리 및 애플리케이션 배포에 대한 심층적인 토론을 제공합니다.
</aside>
클라우드 서비스 구성 및 이해
클라우드 서비스를 구성하려면, 무엇을 구성해야 할까?
집에서 서버를 만든다고 생각해보자. 그럼 우선, 컴퓨터 본체도 중요하지만,
인터넷 모뎀, 그리고 공유기가 있어야 컴퓨터가 서버 역할을 할 수 있다.
여기서, 네트워크 환경 자체를 VPC 라고 부른다.
그럼 이제, 그래픽 프로젝트의 AWS 환경을 살펴보자.
앞서 말한 VPC가 있고, 그리고 VPC 안에 두 개의 AZ(가용영역, 데이터센터)가 있다.
AZ를 두 개를 두는 이유는, 서버를 안정적으로 관리하기 위해서라고 일단은 이해하자.
Subnet
AZ 안에는, 서브넷을 둘 수 있는데,
서브넷은 크게 두 가지 유형으로 나눌 수 있다.
- Public 서브넷
- 외부에서 IP 주소를 통해 접근할 수 있는 네트워크 영역이다.
- 외부 인터넷과 직접 통신할 수 있는 리소스들이 배치된다.
- 예를 들어, 웹 서버나 로드 밸런서들이 여기 속할 수 있다.
- Private 서브넷
- 외부에서 직접적인 IP 접근이 허용되지 않는 네트워크 영역이다.
- 데이터베이스, 백엔드 서버 등과 같이 외부 노출을 막고자 하는 중요한 리소스들을 배치한다.
- Private 서브넷에 있는 자원에 접근하려면, Public 서브넷에 위치한 Gateway, 로드밸런서를 통해야 한다.
만약 User가 Private 서브넷에 위치한 자원에 접근하고자 한다?
그렇다면 Public 서브넷을 경유하는 방식을 사용한다. 여기서는,
- Public에 위치한 ALB라는 로드밸런서를 통해서 사용자의 요청을 받는다.
- 해당 요청은 NAT Gateway를 통해 Private Subnet과 통신된다.
Route53
가장 바깥쪽에 있는 Route53의 경우, DNS(도메인을 IP로 변환해주는 서비스)이다.
ECS
ECS에 대해 알아보자. 앞서 말했듯, ECS는 k8s같은 오케스트레이션 툴로,
도커 이미지를 EC2에 띄워서 EC2를 오토 스케일링 해주는 서비스이다.
확장, 배포, 업데이트 까지 모두 자동으로 관리해준다.
EC2의 인스턴스 배치와 보안 설정
EC2는 Private subnet에 배치시킨다. 외부 사용자가 접근하려면, ALB를 사용해야 한다.
어떤 특정 포트만 API 서버 포트로 활용하고 나머지는 다 차단할 의도이기 때문이다.
Private에 놓기 때문에, 사용자가 이에 접근하려고 한다면?
- ALB라는, Public에 존재하는 로드밸런서를 통해서 사용자의 요청을 받게 되고(라우팅),
- 그 요청은 NAT Gateway를 통해 Private subnet과 통신된다.
- ALB → NAT Gateway → EC2 구조를 가진다고 이해하면 된다.
Private Subnet 안에서, 외부와 통신하는 방법은?
이제 컴퓨터 입장에서 생각을 해보자.
API 서버는 각각 EC2이다.
EC2가, 예를 들어 외부에서 Docker와 같은 것들을 다운로드 받아야 하는데, 현재 Private subnet 안에 배치되어 있다. 그럼 어떻게 외부와 통신할 수 있을까?
- 앞서 말한, NAT Gateway가 존재하는데, NAT Gateway를 통해 Outbound를 진행한다.
- 대신 Outbound만 진행되며, Inbound의 경우는 애초에 Private Subnet이라 찾을 수 없다.
네트워크 구성 시 보안 그룹에 대하여
보안 그룹이란? VPC 내에서 데이터 송수신이 일어날 때, 포트에 대한 제약을 거는 것이다.
Inbound 규칙: 특정 API 서버에 Inbound 포트로 80번 포트만 열겠다는 설정,
Outbound 규칙: Aurora에서 Outbound 포트로 3360 포트만 열겠다는 설정 등.
개발계 AWS 설정에 대해서..
- RDS를 사용할 것인가? or EC2에 Aurora, MongoDB, Redis 등을 모조리 띄울 것인가?
- EC2를 사용할 경우, Private를 만들고 NAT Gateway와 ALB를 걸어줄 것인가? or 그냥 Public을 사용해서 비용을 절감할 것인가?
- Aurora를 쓸 것인가? 아니면 그냥 MySQL을 사용할 것인가?
- DB의 파워는 어떻게 정해줄 것인가?
- 0.5 CPU, 1GB RAM, 20GB Storage
번외) Private Subnet 내부 EC2에 Inbound 트래픽을 허용하는 방법
- Bastion Host
- VPN
AWS의 Cloud Formation이란?
인프라를 코드로 정의하고 자동화하는 데 사용되는 AWS의 서비스
주요 기능들은 다음과 같다.
- Infrastructure as Code
- 서버, 네트워크, 기타 AWS 리소스들을 코드로 정의할 수 있다.
- 이 코드는 ‘템플릿’으로, JSON 또는 YAML로 작성된다.
- 스택
- CF에서는 템플릿에 정의된 리소스 집합을 스택 이라고 한다.
- 스택을 통해 여러 AWS 리소스를 그룹화하고, 하나의 단위로 관리할 수 있다.
- 템플릿
- AWS 리소스를 생성하고 구성하기 위한 방식을 제공한다.
- AWS 리소스와 그 속성, 관계 등이 명시된다.
- 자동화 및 재사용성
- 인프라를 빠르게 배포하고, 반복적으로 재사용할 수 있다.
- 환경을 일관되게 유지하고, 수동 작업에 의한 오류를 줄일 수 있게 해준다.
- 업데이트와 롤백
- 템플릿을 수정하고 스택을 업데이트하면, CF가 변경사항을 자동으로 적용한다.
- 필요한 경우, 이전 상태로 롤백하는 것도 가능하다.
- 자원 종속성 관리
- 리소스 간 종속성을 관리하여, 리소스가 올바른 순서로 생성, 업데이트, 삭제된다.
- 통합 및 확장성
- 다른 AWS 서비스, 그리고 사용자 정의 리소스나 서드파티 리소스와도 함께 사용될 수 있다.
'Software Development' 카테고리의 다른 글
JPA와 @Entity 어노테이션 이해하기 (0) | 2024.01.05 |
---|---|
[협업] 사이드 프로젝트에서 프론트와 백엔드가 협업하는 방법 (1) | 2024.01.03 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!