> Posts > 보기

32. 우분투 운영 환경에서의 캐시 설정 전략

서버 운영의 성능 최적화 단계에서 가장 적은 비용으로 최대의 효과를 낼 수 있는 영역이 바로 캐시(Cache) 관리입니다. 데이터를 메모리에 임시로 저장하여 디스크 I/O 부하를 줄이고 응답 속도를 비약적으로 상승시키는 캐시 전략은 고가용성 서비스의 필수 요건입니다. 오늘은 우분투 환경에서 실무적으로 반드시 챙겨야 할 시스템 및 애플리케이션 레벨의 캐시 설정 전략을 상세히 알아보겠습니다.


#리눅스 #우분투 #캐시설정 #성능최적화 #서버운영 #Redis #Memcached #시스템관리 #IT실무 #커널파라미터

1. 리눅스 커널 수준의 페이지 캐시(Page Cache) 이해

1. 리눅스 커널 수준의 페이지 캐시(Page Cache) 이해

우분투를 포함한 모든 리눅스 시스템은 남는 메모리를 페이지 캐시로 활용하여 디스크 읽기 성능을 높입니다. 하지만 때로는 캐시가 너무 많이 쌓여 정작 애플리케이션이 사용할 메모리가 부족해지는 상황이 발생하기도 합니다.

캐시 사용량 확인하기 실무에서 가장 먼저 확인해야 할 것은 현재 메모리 배분 상태입니다.

Bash

free -h

결과 값 중 buff/cache 항목이 시스템이 활용 중인 캐시 영역입니다.

캐시 강제 비우기 (주의 필요) 테스트 환경이나 특정 상황에서 캐시를 초기화해야 할 때 사용합니다.

Bash

# 페이지 캐시만 비우기
sync; echo 1 > /proc/sys/vm/drop_caches

# 디렉터리 엔트리 및 아이노드 캐시 비우기
sync; echo 2 > /proc/sys/vm/drop_caches

# 전체 캐시 비우기
sync; echo 3 > /proc/sys/vm/drop_caches

2. 커널 파라미터를 통한 캐시 전략 최적화

실무 서버 운영 시 sysctl 설정을 통해 캐시가 메모리에서 디스크로 기록되는 방식(Swap)을 조정하는 것이 매우 중요합니다.

Swappiness 설정 swappiness는 메모리가 부족할 때 캐시를 비울지, 아니면 스왑 영역(디스크)을 사용할지 결정하는 비율입니다. 데이터베이스 서버 등 메모리 성능이 중요한 서버는 이 값을 낮게 설정하는 것이 유리합니다.

Bash

# 현재 설정 확인 (기본값 보통 60)
cat /proc/sys/vm/swappiness

# 실무 추천값 (10~20)으로 임시 변경
sudo sysctl vm.swappiness=10

# 영구 반영을 위해 /etc/sysctl.conf 수정
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf

3. 고성능 인메모리 캐시: Redis와 Memcached 활용

운영 환경에서 애플리케이션 응답 속도를 높이기 위해 가장 많이 도입하는 전략은 별도의 인메모리 데이터 구조 저장소를 구축하는 것입니다.

Redis 설치 및 실무 설정 Redis는 다양한 데이터 타입을 지원하며 영속성(Persistence) 옵션을 제공하여 대중적으로 사용됩니다.

Bash

sudo apt update
sudo apt install redis-server -y

Redis 메모리 한도 설정 (중요) 메모리가 꽉 차서 시스템이 멈추는 것을 방지하기 위해 최대 메모리 사용량을 반드시 제한해야 합니다. /etc/redis/redis.conf 파일을 수정합니다.

코드 스니펫

maxmemory 2gb
maxmemory-policy allkeys-lru

allkeys-lru 정책은 메모리가 부족할 때 가장 오랫동안 사용되지 않은 데이터를 삭제하여 공간을 확보합니다.

4. 웹 서버 레벨의 캐시 전략 (Nginx 예시)

우분투 위에서 운영되는 웹 서버(Nginx) 자체에서도 정적 파일에 대한 캐시를 설정하여 백엔드 부하를 줄일 수 있습니다.

Nginx 브라우저 캐시 설정 이미지, JS, CSS 파일에 대한 캐시 기간을 설정하여 사용자 경험을 개선합니다.

Nginx

location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 30d;
    add_header Cache-Control "public, no-transform";
}

FastCGI 캐시 구성 PHP 등 동적 컨텐츠의 결과를 캐싱하여 서버 리소스를 획기적으로 절약합니다.

Nginx

fastcgi_cache_path /var/run/nginx-cache levels=1:2 keys_zone=MYAPP:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";

5. APT 패키지 매니저 캐시 관리

서버 운영을 지속하다 보면 업데이트 과정에서 다운로드된 패키지 파일들이 디스크 용량을 차지하게 됩니다. 이를 주기적으로 정리해 주는 것도 운영 관리의 일부입니다.

패키지 캐시 정리

Bash

# 오래된 패키지 아카이브 삭제
sudo apt-get autoclean

# 모든 패키지 캐시 삭제
sudo apt-get clean

6. 실무 적용 요약 및 결론

캐시 전략의 핵심은 '균형'입니다. 메모리 자원은 한정되어 있으므로 커널의 Swappiness를 조정하여 불필요한 디스크 I/O를 억제하고, Redis와 같은 전용 도구를 통해 빈번하게 조회되는 데이터를 메모리 상단에 배치하는 것이 고성능 서버 운영의 지름길입니다. 오늘 공유해 드린 명령어와 설정들을 여러분의 운영 환경에 맞춰 조금씩 튜닝해 보시기 바랍니다.


[함께 보면 좋은 루젠소프트 서비스] 루젠VPN은 비즈니스에 최적화된 고정 IP 서비스를 제공하며, 루젠호스팅은 안정적인 서버 인프라를 구축해 드립니다. 루젠VPN 바로가기: https://vpn.luzensoft.com | 루젠호스팅 바로가기: https://hosting.luzensoft.com

리눅스, 우분투, 캐시설정, 성능최적화, 서버운영, Redis, Memcached, 시스템관리, IT실무, 커널파라미터