1. 도입배경
1) 로컬 환경의 문제점
- 처음에는 로컬 환경에서 Docker Compose를 활용해 프로젝트를 운영했습니다. 하지만 몇 가지 문제점이 발생했습니다:
- 로컬 개발 환 환경의 한계: 로컬 시스템 자원을 활용하다 보니 확장성에서 제약이 발생했습니다. 특히, 사용량이 증가할 때 인프라 확장이 어려워졌습니다.
- 확장성과 유연성 부족 : 트래픽 증가에 효과적으로 대응하기 어려웠습니다. 트래픽이 몰릴때 서버를 증설하거나, 구성 변경이 필요한 경우, 시간과 노력이 많이 소요되어 비효율적이었습니다.
- 로드 밸런싱 문제 : 특정시간에 트랙픽 증가시, 효율적으로 분산 처리할 수 있는 로드 밸런싱 솔루션이 필요했지만, 로컬 환경에서는 이를 구현하기에 기술적, 물리적 제약이 있었습니다.
- 이러한 문제를 해결하기 위해 AWS EC2로의 이전을 결정했습니다. EC2를 활용하면 확장성, 유연성, 안정성을 확보할 수 있으며, AWS의 다양한 서비스(예: 로드 밸런서, 모니터링 도구)와의 연동을 통해 효율적인 클라우드 환경을 구성할 수 있습니다.
2) 왜 EC2인가?
- AWS EC2(Elastic Compute Cloud)는 클라우드 컴퓨팅을 위한 인프라 서비스로, 다음과 같은 강점 때문에 선택하게 되었습니다:
- 유연한 확장성과 비용 절감 (Auto Scaling): 트래픽 증가 시 인스턴스를 자동으로 추가(Scale Out)하고, 트래픽 감소 시 인스턴스를 줄이는(Scale In) Auto Scaling 기능을 통해, 사용량에 따라 유연하게 확장 및 축소할 수 있습니다. 이를 통해 리소스를 효율적으로 활용하고 비용을 절감할 수 있습니다.
- 부하 분산 및 가용성 향상 (Load Balancing) : Elastic Load Balancer를 통해 클라이언트의 요청을 여러 EC2 인스턴스로 분산함으로써, 각 인스턴스의 부하를 낮추고 시스템의 가용성과 안정성을 높일 수 있습니다.
- 비용 효율성: 필요한 리소스만 사용하고 필요하지 않을 때는 인스턴스를 중지할 수 있어, 클라우드 비용을 최적화할 수 있습니다.
- AWS 생태계와의 통합 : EC2는 AWS의 다양한 서비스와 원활하게 연동됩니다. 예를 들어, RDS와 쉽게 연결하여 데이터베이스를 관리하거나, VPC를 활용해 Inbound와 Outbound 트래픽을 세밀하게 제어할 수 있습니다. 이를 통해 백엔드 서비스와 Redis 같은 캐시 서버를 안전하고 안정적으로 운영할 수 있습니다.
2. 설계
1) 공통
- 서버 운영 시스템으로는 Ubuntu를 사용합니다. Ubuntu는 경량화된 리눅스 배포판으로, 서버 환경에 적합한 성능을 제공합니다.
- 애플리케이션 배포는 Docker Compose를 사용하여 수행하며, 각 인스턴스의 환경 변수는
.env
파일을 통해 안전하게 전달됩니다. - Frontend와 Backend 인스턴스는 미리 구축된 Docker 이미지를 Docker Hub에 등록하여 사용합니다.
- 서버 설정을 위해, SSH 접속을 위해 인바운드 22번 포트를 개방합니다.
2) Frontend Instance
- In Bound 규칙 : 클라이언트 접속을 위해 80(HTTP), 443(HTTPS) 포트를 개방합니다.
- Out Bound 규칙 : Backend Instance 통신을 위해 8081 포트를 개방합니다.
- Elastic Ip : EC2는 재부팅시 Public Ip가 초기화 되므로, 클라이언트의 원활한 접근을 위해 Elastic IP를 할당받습니다.
3) Backend Instance
- In Bound 규칙 : Frontend Instance 통신을 위해 8081 포트를 개방합니다.
- Out Bound 규칙 : Redis, RDS 인스턴스와 연결하기위해 6379,6380,3306(MySQL 기본값) 포트를 개방합니다.
4) Redis Instance
- In Bound 규칙 : Backend Instance 통신을 위해 8081 포트를 개방합니다.
- Out Bound 규칙 :Redis 인스턴스는 외부와의 연결이 필요하지 않으므로, 아웃바운드 포트는 닫습니다..
5) RDS
- MySQL DB입니다.
- In Bound : Backend Instance 통신을 위해 8081 포트를 개방합니다.
'AWS > EC2' 카테고리의 다른 글
[EC2] Load Balancer 기반 Auto Scaling 구현 (1) 도입배경, 이론 (2) | 2024.11.21 |
---|---|
[EC2] EC2 Auto Scaling Group 적용 (3) - 오토스케일링 테스트 (0) | 2024.11.20 |
[EC2] EC2 Auto Scaling Group 적용 (2) - 시스템 구축 (1) | 2024.11.19 |
[EC2] EC2 Auto Scaling Group 적용 (1) - 도입배경, 이론 (0) | 2024.11.19 |
[EC2] AWS EC2 프로젝트 배포 (2) - Backend, Frontend, Redis 인스턴스 설정 및 Docker Compos배포 (0) | 2024.11.18 |