본문 바로가기
배포

[DevOps] 초기 클라우드 서버(OCI) 최적화: 속도와 안정성 3단계 튜닝 (BBR, Swap, ulimit)

by mangji12 2025. 12. 15.

클라우드 인스턴스(OCI, AWS EC2 등)를 처음 생성하고 그대로 사용하면, 생각보다 네트워크 속도가 느리거나 트래픽이 몰렸을 때 서버가 쉽게 뻗을 수 있다. 특히 FastAPI나 Django 같은 백엔드 서비스를, 그것도 도커(Docker) 기반으로 운영할 계획이라면 초기 OS 튜닝은 필수다.

오늘 진행한 리눅스 서버의 필수 최적화 3가지(TCP BBR, File Descriptor, Swap) 설정을 정리한다.


1. 네트워크 속도 최적화: TCP BBR 적용

기본 리눅스 커널은 CUBIC이라는 혼잡 제어 알고리즘을 사용한다. 이는 패킷 유실(Packet Loss)이 발생하면 전송 속도를 급격히 줄이는 방식이라, 해외망이나 무선 환경에서 제 속도를 내지 못한다. 이를 구글이 개발한 대역폭 기반의 BBR(Bottleneck Bandwidth and RTT) 알고리즘으로 변경하여 네트워크 대역폭을 100% 활용하도록 설정했다.

 

적용 방법: /etc/sysctl.conf 파일을 열어 아래 설정을 추가한다.

# /etc/sysctl.conf
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

 

설정 후 적용 및 확인:

sudo sysctl -p  # 설정 로드
sysctl net.ipv4.tcp_congestion_control # 결과가 'bbr'로 나오는지 확인

효과: 패킷 손실이 있는 환경에서도 전송 속도가 일정하게 유지되어, 외부 접속 및 API 응답 속도가 체감되게 향상됨.


2. 동시 접속자 제한 해제: File Descriptor (ulimit) 증가

리눅스는 모든 네트워크 연결(Socket)을 '파일'로 취급한다. 기본 설정(ulimit -n)은 보통 1024로 되어 있는데, 이는 채팅 서버나 웹 서버를 운영하기엔 턱없이 부족하다. 동시 접속자가 조금만 몰려도 Too many open files 에러를 뿜으며 서버가 멈출 수 있다.

이를 65535까지 늘려 고부하 상황에 대비했다.

 

적용 방법: /etc/security/limits.conf 파일을 수정하여 영구적으로 적용한다.

# /etc/security/limits.conf 하단에 추가
* hard nofile 65535
* soft nofile 65535

주의: 설정 후 재로그인(세션 재접속) 해야 적용된다. ulimit -n 명령어로 65535가 나오는지 반드시 확인.


3. 서버 셧다운 방지: Swap 메모리 할당 (4GB)

OCI 무료 인스턴스나 저사양 클라우드는 RAM 용량이 적다. 무거운 빌드 작업이나 도커 컨테이너가 메모리를 과하게 점유하면, OOM Killer(Out Of Memory Killer)가 나타나 핵심 프로세스를 강제로 죽여버린다. 이를 방지하기 위해 디스크의 일부를 RAM처럼 사용하는 Swap 공간을 4GB 확보했다..

 

적용 방법:

# 1. 4GB 파일 생성
sudo fallocate -l 4G /swapfile

# 2. 권한 설정 및 Swap 활성화
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

# 3. 재부팅 후에도 유지되도록 fstab 등록
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
확인: free -h 명령어 입력 시 Swap 영역에 4.0Gi가 잡혀있는지 확인.

마무리

이제 서버라는 땅을 단단하게 다졌다.

  1. BBR로 고속도로를 뚫었고,
  2. ulimit으로 톨게이트를 확장했으며,
  3. Swap으로 비상 주차장까지 마련했다.

이 위에서 Docker를 활용해 각 서비스를 격리하여 배포할 준비가 완료되었다.

반응형

'배포' 카테고리의 다른 글

젠킨스 환경 구축  (0) 2025.11.24