문제
AWS 프리 티어 환경에서 EC2 인스턴스(기본 1GB 메모리)를 사용 중, 스프링부트 애플리케이션 실행 시 메모리 부족으로 인해 성능이 저하되거나 애플리케이션이 비정상적으로 종료되는 문제가 발생.
해결 방안 분석
문제를 해결하기 위해 두 가지 방안을 고려:
- Swap 메모리 설정
- 장점:
- 비용 추가 없이 현재 인스턴스에서 메모리 부족 문제를 완화할 수 있음.
- 설정이 간단하고 빠르게 적용 가능.
- 단점:
- 디스크 기반으로 메모리를 확장하므로 I/O 성능 저하 발생 가능.
- 높은 트래픽 상황에서는 여전히 불안정할 수 있음.
- 설정 방법
- 장점:
- 인스턴스 업그레이드
- 장점:
- CPU와 메모리 모두 확장 가능, 애플리케이션의 안정성과 성능을 보장.
- Swap 설정 없이 물리적 리소스 증가로 I/O 병목 문제 해결.
- 단점:
- 프리 티어의 무료 범위를 벗어나 추가 비용이 발생.
- 인스턴스 업그레이드 및 재설정에 시간이 소요될 수 있음.
- 예상 비용:
- t2.micro(1GB 메모리)에서 t2.small(2GB 메모리)로 업그레이드 시 시간당 비용 증가.
- 장점:
#Swap 파일 생성 (128M * 16 = 2GB)
sudo dd if=/dev/zero of=/swapfile bs=128M count=16
# Swap 파일 권한 설정
sudo chmod 600 /swapfile
# Swap 파일 영역 설정
sudo mkswap /swapfile
# Swap 파일을 사용할 수 있도록 설정
sudo swapon /swapfile
# 활성화 상태 확인
sudo swapon -s
최종 선택
- 초기 개발 및 테스트 단계에서는 Swap 메모리 설정을 통해 비용을 최소화하고, 성능 문제를 임시로 해결.
- 추후 애플리케이션 사용량이 증가하거나 운영 환경으로 전환할 경우, 인스턴스 업그레이드를 통해 안정적인 운영 환경을 확보.
'PORTFOLIO > TECHNICAL DECISION-MAKING' 카테고리의 다른 글
[ACE Hand Wash - 기술적 의사 결정]코드 정리 대작전: 권한 확인 로직, 어디까지 분리해봤니? (0) | 2025.01.08 |
---|---|
[CodeChef - 기술적 의사 결정] Redis Sentinel 도입이 필요한 이유 (0) | 2025.01.06 |
[CodeChef - 기술적 의사 결정] Redis 도입이 필요한 이유 (0) | 2025.01.06 |
[CodeChef - 기술적 의사 결정] Docker Hub? AWS ECR? (0) | 2025.01.06 |
[CodeChef - 기술적 의사 결정] CI/CD 툴, Jenkins? Github Actions? (0) | 2025.01.06 |