좀 많이 큰일이 벌어졌다. 다른 instance를 삭제해야하는데 실수로 instance를 삭제한 것인데 해놓은 배포들이 날라갔지만 그래도 5분 정도만 멘탈이 흔들리고 다시 마음을 잡았다.
이번 기회에 ubuntu 에서 RHEL(red hat enterprise linux)와 비슷한 amazon linux 를 써볼 예정이다.
Amazon Linux 2023을 선택한 이유
실무에서는 안정성과 호환성이 검증된 Red Hat 계열의 OS를 많이 사용한다. Amazon Linux 2023은 AWS 환경에 완벽히 최적화되어 있으면서도 Red Hat 계열의 표준 패키지 관리자(DNF/YUM) 및 시스템 관리 방식(systemd)을 따르고 있어, 실무형 서버 운영 환경을 학습하기에 매우 적합하다고 해서 선택했다.
LVM(Logical Volume Manager)을 사용하는 이유
서버를 운영하다 보면 디스크 용량을 늘려야 하는 상황이 발생한다. 기존의 일반적인 파티션 방식을 사용하면 디스크 증설 시 서버를 중단하고 파티션을 재조정해야 하는 불편함이 있다.
하지만 LVM을 도입하면 다음과 같은 강력한 이점이 있다!
- 무중단 볼륨 확장 (Online Expansion): 서버의 다운타임 없이 AWS 콘솔에서 볼륨 크기를 늘리고, 동적으로 OS 레벨에서 즉시 확장할 수 있다.
- 스토리지 결합의 유연성: 여러 개의 분리된 디스크 공간을 묶어서 하나의 큰 볼륨으로 관리할 수 있다.
스왑(Swap) 메모리 구성의 필요성
Spring Boot 등 JVM 기반의 애플리케이션을 구동할 때나, 대용량 데이터를 처리할 때 순간적으로 메모리 사용량이 급증할 수 있다. 이때 물리 메모리가 부족해지면 OS가 프로세스를 강제 종료(OOM, Out of Memory)시키는 현상이 발생한다.
저번 EC2에서 이걸 경험해 봤기 때문에 잊지 않고 설정을 해줬다.
- OOM 방지: 스왑 메모리를 설정해 두면 물리 메모리가 부족할 때 디스크의 일부 공간을 메모리처럼 사용하여 서버가 다운되는 현상을 막아준다.
- 커널 튜닝 (swappiness): 기본 설정된 스왑 선호도를 10 정도로 낮춰, 실제 물리 메모리가 부족할 때만 스왑을 사용하도록 최적화할 수 있다.
뿐만 아니라
sudo sysctl -w vm.swappiness=10
이것은 커널 스왑 선호도(swappiness) 튜닝이다. 기본값이 60인데 이것을 10으로 낮췄다.
기본적으로 메모리의 40% 정도 찰 때까지 쓰지마라 인데 이것을 90% 정도 찰 때까지 스왑을 쓰지말라는 것이다. 즉 실제 물리 메모리가 부족할 때만 스왑을 사용하도록 최적화했다고 볼 수 있다.
위의 swappiness 설정을 건드림으로써 메모리 부족으로 인한 프로세스 강제 종료 (OOM)를 막았다고 볼 수 있다.
I/O 성능을 위한 커널 파라미터 튜닝
sudo sysctl -w vm.dirty_background_ratio=5
sudo sysctl -w vm.dirty_ratio=15
이 2개의 설정은 대용량 파일 쓰기 작업 시 시스템이 멈추는 프리징(Freeze) 현상을 미리 예방해준다.
첫 번째 설정은 더티 페이지(Dirty Page, 메모리에는 변경되었으나 아직 디스크에는 쓰여지지 않은 데이터)가 전체 물리 메모리의 5%에 도달하면, 백그라운드 프로세스가 디스크 쓰기 작업을 조용히 시작한다는 의미이다.
-> 쓰기 작업을 미리미리 조금씩 처리해 두는 효과가 있다. I/O 부하를 분산하여 대용량 데이터 처리나 로그 작성 시 한 번에 I/O가 몰려 병목이 생기는 것을 막아준다.
두 번째 설정은 더티 페이지가 전체 물리 메모리의 15%에 도달하면, 데이터를 생성하는 애플리케이션 프로세스가 디스크 쓰기 작업을 직접 처리(Blocking)하느라 대기하는 상태가 된다는 것이다.
시스템 메모리가 더티 페이지로 가득 차서 시스템 전체가 멈추는 프리징 현상을 방지하고 dirty_background_ratio와 간격을 좁게 설정하여, 백그라운드에서 미처 다 처리하지 못한 I/O가 있더라도 애플리케이션 레벨에서 I/O를 제어하도록 하여 시스템 안정성을 높이는 것이다.
'Project > Afternote' 카테고리의 다른 글
| [DB 리팩터링] 데이터 무결성을 위한 스키마 분리 및 Native SQL 기반 마이그레이션 (0) | 2026.04.26 |
|---|---|
| [CDN] S3 presigned URL에서 CDN 도메인 전환하기 (0) | 2026.04.12 |
| [Github Action] CI/CD 적용기 (0) | 2026.04.05 |
| [VPC/EC2/RDS] 인프라 적용기 (0) | 2026.03.29 |
| [트러블슈팅] OCP 위반 코드 수정 (0) | 2026.03.22 |