새소식

기술스택 및 알쓸신잡

[CS 지식] CPU, RAM, SSD, HDD....스왑 메모리는 뭐야?

  • -

TODO list

  • 전체적인 개념 비유
  • CPU 이론
  • RAM 이론
  • SSD, HDD 비교

서론

이번에는 잠깐 기초중에 기초 CS 지식인 CPU, RAM, SSD, HDD,

더 나아가서 스왑 메모리와 스왑 메모리 설정하는 방법까지 설명하고자한다.

실제로 GCP, AWS와 같은 클라우드 서비스를 사용하지 않고, 자신의 노트북, PC로만 개발을 하는 경우에는 CPU, 메모리 성능이 부족하다고 느끼기 어렵다.

현대의 대부분의 대학생들, 특히 SW 전공 학부생들은 아무리 낮아도 4코어 CPU, 8기가의 메모리, 256기가 SSD가 달린 노트북을 구매하기 때문에 학부 수준의 과제, 프로젝트를 수행하는데에는 큰 무리 없이 수행되는 경우가 많다.

(그나마 게임이 끊긴다고 느껴도 그냥 노트북 사양이 낮다고 생각할 뿐 CPU, 메모리 때문이라고 생각하는 일반인은 거의 없으니...)

하지만 실제로 내 돈을 내고 서버를 임대하여 사용하는 경우, 최대한 저렴한 비용으로 내 프로젝트를 운영하기 위한 최적의 머신 구성을 고민하게 되고, 실제로 가상머신의 리소스가 부족하여 서버가 터지는걸 몇 번 경험하다보면 그제서야 컴퓨팅 리소스의 필요성에 대해 이해할 수 있게 된다.


1. 전체적인 개념 비유

그럼 CPU, RAM, SSD, HDD가 뭘까?

개인적으로 생각했을 때, 밥을 빨리 먹어야하는 상황에서

CPU는 입

RAM은 식탁

SSD는 식탁 옆에 있는 냉장고

HDD는 지하 식품 창고

의 역할을 한다고 생각하면 편하다.

먼저 RAM은 식탁이다. 내가 먹을 반찬들을 올려놓을 수 있는 식탁.
그럼 RAM의 용량이 높으면? 먹을 반찬들을 많이 올려놓을 수 있다는 것이다.

다음으로 SSD는 식탁 바로 옆에 있는 냉장고이다.
식탁 바로 옆에 있으니, 내가 먹을 반찬들을 빠르게 꺼내서 식탁에 바로 올려놓을 수 있다.

그럼 지하 식품 창고인 HDD는?
지하까지 내려가서 반찬을 가져와야하니, 시간이 오래걸린다. 다만 저장 용량은 크다.

마지막으로 CPU는 입의 개수라고 생각하자.
CPU코어가 4개면 입이 4개, CPU 코어가 8코어면 입이 8개로,
코어가 크면 클수록 많은 반찬과 밥을 빠르게 먹어치울 수 있다.

이제 이걸 SW 프로그램으로 비유해보자.

간단한 비유로, 판다스로 CSV파일을 불러와서 데이터프레임으로 만들고 머신러닝 모델을 학습시킨다고 가정해보자.

먼저 CSV는 SSD나 HDD에 저장되어있을 것이다.
이때 저장소가 SSD인 경우는 로드되는 속도가 빠르고, HDD인 경우는 비교적 느릴 것이다.

다음으로 CSV를 파이썬 프로그램에서 판다스 객체로 불러오는 순간, 그 객체는 RAM에 올라가서 연산되기를 기다린다.
이때 RAM이 처리할 수 있는 용량보다 데이터프레임이 크다면 그 프로그램은 터진다... (out of memory 에러가 날 것)

마지막으로 머신러닝 모델을 학습시키면, CPU 연산을 통해 머신러닝 모델이 학습된다.
이때 CPU가 많을수록 연산 속도는 빨라진다.

이제 각 컴퓨팅 리소스의 역할은 이해했으니, 각 장치의 개념적 이론을 공부해보자.


2. CPU 개념

CPU(Central Processing Unit)는 컴퓨터의 두뇌라고 불리는데, 앞서 말했듯 입의 개수라고 비유할 수 있다.

2.1 CPU의 구성요소

CPU의 핵심 구성요소는 다음과 같다:

  • 코어: 독립적인 명령어 처리 유닛으로, 현대 CPU에는 여러 개 들어있다 (입의 개수)
  • ALU(Arithmetic Logic Unit): 코어 내부에 위치하며 실제 계산을 담당하는 부분. 덧셈, 뺄셈 같은 산술 연산과 AND, OR, NOT 같은 논리 연산을 수행한다.
  • 제어 장치(Control Unit): 명령어를 해석하고 실행 순서를 제어하는 부분
  • 레지스터: CPU 내부에 있는 가장 빠른 임시 저장소로, 연산 중인 데이터를 임시 보관한다
  • 캐시 메모리: 자주 쓰는 데이터를 RAM에서 가져와 임시 저장하는 고속 저장소. L1, L2, L3 등 여러 계층으로 구성되며 속도와 용량이 다르다

2.2 코어와 스레드

앞서 코어를 '입의 개수'라고 표현했는데, 현대의 CPU들은 하이퍼스레딩이라는 기술을 통해 하나의 코어가 두 개의 작업을 동시에 처리할 수 있다.

예를 들어 8코어 16스레드 CPU는 8개의 입이 있지만, 각각의 입이 두 가지 일을 동시에 처리할 수 있다고 생각하면 된다.
(한 입으로 밥도 먹고 반찬도 씹기!)

물론 완전히 독립적인 두 개의 코어보다는 효율이 떨어지지만, 하나의 물리적 코어로 두 가지 작업을 동시에 처리할 수 있어 비용 대비 성능은 좋다.

2.3 클럭 속도와 인스턴스 타입

CPU 클럭 속도는 초당 처리할 수 있는 연산 주기를 의미한다. 보통 GHz(기가헤르츠)로 표시되는데, 예를 들어 3.5GHz는 1초에 35억 번의 연산 주기를 처리할 수 있다는 뜻이다.

클라우드 서버(GCP, AWS 등)를 구축할 때는 CPU 클럭 속도를 직접 선택하기보다는 인스턴스 타입이나 패밀리를 통해 간접적으로 선택하게 된다. 예를 들어:

  • 컴퓨팅 최적화 인스턴스(AWS의 C 시리즈, GCP의 C2): 코어당 성능(클럭 속도)이 높아 단일 스레드 성능이 중요한 작업에 적합
  • 범용 인스턴스(AWS의 T/M 시리즈, GCP의 N 시리즈): 균형 잡힌 성능 제공
  • 메모리 최적화 인스턴스(AWS의 R 시리즈, GCP의 M 시리즈): CPU보다 RAM이 중요한 작업에 적합


"여러 작업을 동시에 처리해야 하는가?" -> 코어수가 많은 인스턴스
"단일 작업을 빠르게 처리해야 하는가?" -> 컴퓨팅 최적화 인스턴스
를 선택하면 된다.
(사실 필자는 범용 인스턴스로 대부분 해결한다.)

3. RAM 이론

앞서 RAM을 식탁이라고 표현했는데, 정확히는 Random Access Memory의 약자로, 컴퓨터가 현재 작업 중인 데이터를 임시로 저장하는 장소다.

3.1 RAM의 역할

RAM은 CPU가 빠르게 접근해야 하는 데이터를 저장한다. 예를 들어:

  • 실행 중인 프로그램 (Chrome, Excel 등)
  • 열려있는 파일들
  • 운영체제 자원

RAM의 특징은 전원이 꺼지면 저장된 데이터가 모두 사라진다는 것이다. 식탁 위의 음식을 다 치우는 것처럼!

3.2 RAM 속도와 종류

RAM 속도는 보통 MHz로 표시된다. 예를 들어 DDR4-3200은 3200MHz, 즉 초당 32억 번의 데이터 전송이 가능하다는 뜻이다.

RAM 종류는 크게:

  • DDR4: 현재 가장 보편적
  • DDR5: 최신 세대, 더 빠르지만 비쌈
  • LPDDR: 저전력 RAM, 노트북과 모바일 기기에 주로 사용

3.3 RAM 용량 선택하기

본인이 클라우드 서비스를 사용하면서 느낀 건데, RAM 용량이 부족하면 프로그램이 터진다. 용량이 넘쳐서 문제가 생기는 경우는 거의 없고, 부족해서 문제가 생기는 경우가 대부분이다.

대략적인 RAM 사용량 가이드:

  • 8GB: 일반적인 웹 서핑, 문서 작업
  • 16GB: 가벼운 게임, 디자인 작업
  • 32GB 이상: 가상화, 대규모 데이터 처리, 고사양 게임, 영상 편집

특히 데이터 처리할 때는 RAM 용량이 정말 중요하다. 16GB 메모리로 20GB 데이터 처리하려고 하면? 그냥 안 된다. 물리적으로 불가능하다.
(스왑 메모리는 조금 있다가...)


4. SSD, HDD 비교

이제 저장장치에 대해 알아보자. 앞서 비유했듯이 SSD는 식탁 옆 냉장고, HDD는 지하 창고에 비유할 수 있다.

4.1 HDD (Hard Disk Drive)

HDD는 자기 디스크를 고속으로 회전시켜 데이터를 읽고 쓰는 기계식 저장장치다.

장점:

  • 용량 대비 가격이 저렴함 (1TB에 약 5만원 정도)
  • 대용량 저장에 적합 (현재 20TB 이상도 있음)

단점:

  • 물리적으로 회전하는 디스크가 있어 속도가 느림
  • 충격에 약함
  • 소음과 열이 발생
  • 전력 소모가 비교적 큼

4.2 SSD (Solid State Drive)

SSD는 반도체 메모리를 사용해 데이터를 저장하는 전자식 저장장치다.

장점:

  • 매우 빠른 읽기/쓰기 속도 (HDD의 5-10배)
  • 무소음, 저발열
  • 충격에 강함
  • 전력 소모가 적음

단점:

  • HDD보다 용량 대비 가격이 비쌈 (점점 차이가 줄어들고 있긴 함)
  • 수명이 제한적 (쓰기 횟수에 제한이 있음)

본인이 HDD에서 SSD로 바꿔본 경험을 말하자면, 체감상 컴퓨터가 새것처럼 빨라진다.


5. 스왑 메모리 (Swap Memory)

이제 본격적으로 스왑 메모리에 대해 알아보자.

5.1 스왑 메모리란?

스왑 메모리는 RAM이 부족할 때 HDD나 SSD의 일부를 RAM처럼 사용하는 기술이다. 앞서 말한 비유를 계속 사용하자면, 식탁에 더 이상 음식을 놓을 공간이 없을 때 옆 조리대를 식탁처럼 사용하는 것과 비슷하다.

물론 조리대(스왑)에 놓인 음식은 식탁(RAM)에 있는 것보다 먹기(접근하기) 불편하고 시간도 더 걸린다.

5.2 스왑 메모리가 필요한 이유

RAM은 비싸다! 특히 클라우드 환경에서 RAM을 늘리는 건 비용이 많이 든다. 그래서 RAM이 부족할 때 임시방편으로 스왑 메모리를 사용한다.

주요 용도:

  • 메모리 부족 상황 대처: 프로그램이 터지는 것보다는 느려도 돌아가는게 낫다
  • 비활성 데이터 저장: 당장 사용하지 않는 데이터는 스왑으로 옮겨 RAM 공간 확보
  • 최대 메모리 효율: 시스템 전체 가용 메모리 증가

5.3 스왑 메모리의 단점

스왑 메모리는 만능이 아니다:

  • 속도 저하: RAM보다 100-1000배 느림
  • 디스크 수명 단축: SSD의 경우 과도한 쓰기로 수명 감소 가능
  • 시스템 응답성 저하: 스왑 사용 중에는 전체 시스템이 느려질 수 있음

그래서 스왑은 비상용이라고 생각하는 게 좋다. 평소에는 RAM으로 충분히 돌아가야 하고, 가끔 부하가 심할 때만 스왑이 활성화되는 게 이상적이다.

5.4 리눅스에서 스왑 메모리 설정하기

이제 실제로 리눅스에서 스왑 메모리를 설정하는 방법을 알아보자.

스왑 메모리는 두 가지 방법으로 설정할 수 있다:

  1. 스왑 파티션 사용: 디스크의 특정 파티션을 스왑용으로 할당
  2. 스왑 파일 사용: 파일 시스템 내에 스왑 파일 생성

여기서는 스왑 파일 방식을 설명하겠다. (더 간단하고 유연함)

5.4.1 스크립트를 활용한 스왑 파일 설정

아래 스크립트를 사용하면 손쉽게 스왑 파일을 설정할 수 있다:

#!/bin/bash
# 현재 스왑 사용량 확인
SWAP_USED=$(free | awk '/Swap/{print $3}')

# 스왑 파일이 이미 존재하고 사용 중인지 확인
if [ -f /swapfile ]; then
    if [ $SWAP_USED -gt 0 ]; then
        echo "경고: 현재 스왑 메모리가 사용 중입니다 ($SWAP_USED bytes 사용 중)"
        echo "스왑 메모리가 사용 중일 때 제거하면 시스템이 불안정해질 수 있습니다"
        read -p "계속 진행하시겠습니까? (y/N): " confirm
        if [[ "$confirm" != "y" && "$confirm" != "Y" ]]; then
            echo "스크립트를 중단합니다"
            exit 1
        fi
    fi
    echo "기존 스왑 파일 제거 중..."
    sudo swapoff /swapfile
    sudo rm /swapfile
fi

# 8GB 스왑 파일 생성
echo "8GB 스왑 파일 생성 중..."
sudo fallocate -l 8G /swapfile
if [ $? -ne 0 ]; then
    echo "스왑 파일 생성 실패"
    exit 1
fi
# 권한 설정
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 현재 스왑 상태 확인
echo "현재 스왑 상태:"
swapon --show
# /etc/fstab에 스왑 설정 추가
if ! grep -q '^/swapfile' /etc/fstab; then
    echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
fi
# swappiness 설정
sudo sed -i '/vm.swappiness/d' /etc/sysctl.conf
echo "vm.swappiness=80" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
echo "스왑 설정이 완료되었습니다."
echo "시스템 재시작 후에도 스왑이 자동으로 활성화됩니다."

이 스크립트는 다음과 같은 작업을 수행한다:

  1. 기존 스왑 파일이 있으면 제거
  2. 8GB 크기의 새 스왑 파일 생성
  3. 스왑 파일 권한 설정 및 활성화
  4. 시스템 재부팅 후에도 자동으로 스왑이 활성화되도록 설정
  5. swappiness 값을 80으로 설정 (적극적인 스왑 사용)

5.4.2 수동으로 스왑 설정하기

스크립트가 부담스럽다면 아래 명령어들을 하나씩 실행해도 된다:

# 현재 스왑 상태 확인
sudo swapon --show

# 스왑 파일 생성 (예: 4GB 스왑 파일)
sudo fallocate -l 4G /swapfile

# 권한 설정 (보안상 중요)
sudo chmod 600 /swapfile

# 스왑 파일로 포맷
sudo mkswap /swapfile

# 스왑 활성화
sudo swapon /swapfile

# /etc/fstab에 추가해 부팅 시 자동 활성화
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

5.4.3 스왑 설정 최적화하기

스왑의 사용 방식은 swappiness 값으로 조절할 수 있다:

# 현재 swappiness 값 확인
cat /proc/sys/vm/swappiness

# 임시로 swappiness 값 변경 (예: 10으로 설정)
sudo sysctl vm.swappiness=10

# 영구적으로 변경
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf

swappiness 값의 의미:

  • 0-10: 최소한으로만 스왑 사용 (서버에 권장)
  • 10-60: 적당히 스왑 사용
  • 60-100: 적극적으로 스왑 사용 (RAM이 매우 제한적인 환경)

5.4.4 스왑 크기 권장사항

스왑 크기는 RAM 크기와 시스템 용도에 따라 다르지만, 일반적인 가이드라인은:

  • RAM < 2GB: RAM의 2배
  • 2GB < RAM < 8GB: RAM과 동일
  • RAM > 8GB: RAM의 절반 (최소 4GB)

하지만, 물론 정답은 없다. 자신의 상황에 맞춰 스왑파일의 크기를 조정해야한다.
(속도보다 일단 저렴하게 돌아가는게 중요하면 스왑파일을 크게 만들어야지 뭐 어떡해...)


6. 마치며

지금까지 컴퓨터의 핵심 구성요소인 CPU, RAM, 저장장치(SSD/HDD), 그리고 스왑 메모리에 대해 알아봤다.

처음에 비유했던 것처럼:

  • CPU: 입 (처리 능력)
  • RAM: 식탁 (작업 공간)
  • SSD/HDD: 냉장고/창고 (저장 공간)
  • 스왑: 조리대 (비상용 작업 공간)

이들의 관계와 역할을 이해하면 컴퓨터나 서버의 성능을 예측하고, 필요에 맞게 최적화하는 데 큰 도움이 된다.

내 경험상, 처음에는 약간 넉넉하게 리소스를 잡고 실제 사용량을 모니터링한 후 점점 최적화하는 것이 좋다. 그래야 갑자기 서버가 터지는 당황스러운 상황을 피할 수 있다.

간략하지만 CS 기초 지식 중 하드웨어 부분에 대해 다뤄봤다. 다음에는 또 다른 CS 지식을 다뤄보도록 하겠다.

ㄱㅊㅁ_ㅇㅈ

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.