solyrion
EC2 Swap Memory 본문
상황
최근 토이 프로젝트를 진행하면서 FE, BE, 그리고 배포 환경 전반을 함께 공부하고 있습니다.
배포를 위해 인스턴스 종류를 고민하던 중, 프로젝트 규모가 작고 트래픽이 거의 없다는 점을 고려해 t3.micro 인스턴스를 선택했습니다.
처음에는 서버에서 직접 git clone으로 FE와 BE를 빌드했는데,
이 중 Spring 프로젝트 빌드가 계속 실패하는 문제가 발생했습니다.
로컬 환경에서는 정상적으로 빌드되었기 때문에, 원인을 서버의 성능 부족으로 판단했습니다.
그래서 로컬에서 빌드 후 .jar 파일만 서버로 전송하는 방식으로 배포 방법을 변경했고,
이로써 빌드 문제는 해결되었습니다.
하지만 바로 이어서 또 다른 문제가 발생했습니다.
바로 FE와 BE 서버를 동시에 백그라운드로 실행할 수 없는 문제였습니다.
메모리 체크
free 명령어를 사용해보니
free
이미 스프링 서버 백그라운드 실행만으로도 많은 RAM 용량을 사용하고 있었습니다.
Scale-up
아주 간단한 해결 방법은 그냥 서버 사양 업그레이드(Scale-Up)를 하는 것입니다.
AWS에서 쉽게 설정을 변경할 수 있습니다.
문제는 지금은 업그레이드해도 사양이 낮다 보니 비용적인 부분에서 문제는 없지만
추후에도 매번 막힐 때마다 사양 업그레이드로 해결하기에는 여러 가지 이유로 한계가 있을 것 같다고 판단하고 해결 방법을 찾아봤습니다.
Swap Memory
Swap은 RAM이 부족할 때 디스크 공간 일부를 임시 메모리처럼 사용하는 기능입니다.
OS의 가상메모리, swap이랑 비슷한 방식이라고 생각할 수 있습니다.
Swap 파일 메모리 할당
현재 제 인스턴스 기준(t3.micro) RAM 사양이 1GB이기 때문에
128M * 16 = 2048, 2GB로 swap 파일을 생성했습니다.
sudo dd if=/dev/zero of=/swapfile bs=128M count=16
- dd: 블록 단위로 파일을 복사하거나 파일 변환을 할 수 있는 명령어
- if: 지정한 파일을 입력 대상으로 설정
- of: 지정한 파일을 출력 대상으로 설정
- bs: 한 번에 변환 작업 가능한 바이트 크기
- count: 지정한 블록 수만큼 복사
용량을 늘리고 싶으면 count를 증가시키면 됩니다.
(일반적으로 RAM이 2GB 이하라면 RAM의 2배, 4GB 이상이라면 RAM과 동일하거나 조금 작게 설정하는 것이 효율적이라고 합니다.)
Swap 파일 권한 설정
읽기 쓰기가 가능하도록 권한을 변경해 줍니다.
sudo chmod 600 /swapfile
Swap 공간 생성
mkswap 명령어를 통해 Swap 공간을 생성해 줍니다.
sudo mkswap /swapfile
swapson 명령어를 통해 정상적으로 동작했는지 확인할 수 있습니다
sudo swapon -s
Filename Type Size Used Priority
/swapfile file 2097148 0 -2
free
이제 free 명령어를 사용해 보면 정상적으로 할당이 된 것을 볼 수 있습니다.

추가 설정
swap은 인스턴스 서버가 재부팅하면 사라지게 됩니다.
자동 활성화를 하기 위해서는 fstab 파일을 열어서 추가 설정을 해줘야 합니다.
sudo vi /etc/fstab
/swapfile swap swap defaults 0 0
비활성화
스왑 영역을 비활성화하려면 swapoff 명령어를 사용하면 됩니다.
sudo swapoff -a
정리
Swap을 통해 FE, BE 서버 둘 다 백그라운드 실행에 성공했습니다.
이렇게만 보면 RAM 용량을 굳이 업그레이드할 필요가 없네?라고 생각할 수도 있지만,
EC2나 일반 인스턴스에서 설정한 swap 공간은 “OS의 swap”과 동작 방식은 같지만, 성능은 훨씬 낮습니다.
비교
| 항목 | 속도(대략) | 비고 |
| RAM (메모리) | 수십 GB/s | 나노초(ns) 단위 접근 |
| NVMe SSD 기반 Swap | 수백 MB/s ~ 수 GB/s | 약 1000배 느림 |
| EBS(EC2의 일반 SSD) | 수십~수백 MB/s | 네트워크 기반 I/O라 추가 지연 |
| HDD 기반 Swap | 수 MB/s | 사실상 unusable 수준 |
보면 성능 차이가 많이 나는 것을 볼 수 있습니다.
정리하면, Swap은 메모리 부족으로 인한 프로세스 종료(OOM)를 막는 안전장치일 뿐, 성능 개선책으로 쓰기엔 한계가 있습니다.
💡 결론: 임시방편으로 사용하되, 근본 해결은 메모리 관리나 인스턴스 업그레이드로