홈 서버를 사용하다 보면 CPU와 RAM은 충분한데도 특정 서비스가 느리게 작동하는 상황을 경험할 수 있습니다. 저 역시 처음에는 서버가 느려지면 CPU나 메모리부터 확인했지만, 어느 순간 저장장치의 읽기와 쓰기 작업이 원인인 경우가 있다는 것을 알게 되었습니다. 특히 Docker로 여러 서비스를 운영하면서 데이터베이스와 개인 클라우드, 모니터링 프로그램 등을 함께 사용하면 저장장치에 동시에 여러 작업이 발생할 수 있습니다. 이때 알아두면 좋은 개념이 바로 디스크 I/O입니다. I/O는 Input과 Output의 약자로 저장장치에서 데이터를 읽고 쓰는 작업을 의미합니다. 이번 글에서는 홈 서버에서 디스크 I/O가 무엇인지 알아보고, 디스크 I/O가 높아지는 이유와 SSD와 HDD의 차이, 저장장치 성능을 확인할 때 알아두면 좋은 기본적인 내용까지 초보자의 관점에서 정리해 보겠습니다.
디스크 I/O란 무엇인가?
디스크 I/O는 저장장치와 컴퓨터 사이에서 데이터가 이동하는 작업을 의미합니다.
쉽게 말하면 저장장치에서 데이터를 읽어오는 작업과 데이터를 저장하는 작업이라고 생각하면 됩니다.
파일을 열거나 프로그램을 실행하고 데이터를 저장하는 과정에서도 저장장치에 읽기와 쓰기 작업이 발생합니다.
홈 서버에서는 운영체제가 필요한 파일을 읽는 것부터 Docker 컨테이너가 데이터를 저장하는 것까지 다양한 작업이 동시에 발생할 수 있습니다.
따라서 CPU 사용량이 높지 않더라도 저장장치에서 처리해야 할 작업이 많으면 서버의 반응이 느려질 수 있습니다.
CPU와 디스크 I/O는 어떻게 다를까?
CPU와 디스크는 서버에서 서로 다른 역할을 담당합니다.
CPU는 데이터를 계산하고 프로그램의 명령을 처리하는 역할을 합니다.
반면 저장장치는 데이터를 읽고 쓰는 역할을 담당합니다.
예를 들어 어떤 프로그램이 대량의 데이터를 읽어서 계산해야 한다면 CPU와 저장장치가 모두 사용됩니다.
이때 CPU 성능이 충분하더라도 저장장치에서 데이터를 빠르게 전달하지 못하면 전체 작업이 느려질 수 있습니다.
그래서 서버 성능을 확인할 때 CPU 사용량만 보는 것은 충분하지 않습니다.
CPU와 RAM뿐만 아니라 저장장치의 I/O 상태도 함께 확인해야 서버에서 발생하는 문제를 더 정확하게 파악할 수 있습니다.
디스크 I/O가 높으면 어떤 문제가 발생할까?
디스크 I/O가 지나치게 높아지면 서버에서 실행되는 프로그램의 반응이 느려질 수 있습니다.
특히 저장장치에 데이터를 자주 읽고 쓰는 서비스에서 이러한 영향을 체감할 수 있습니다.
예를 들어 데이터베이스가 많은 데이터를 처리하거나 여러 파일을 동시에 읽고 쓰는 상황에서는 저장장치에 많은 작업이 발생합니다.
이때 다른 서비스가 저장장치를 사용하려고 하면 작업이 순서를 기다려야 할 수도 있습니다.
결과적으로 CPU 사용량은 높지 않은데 프로그램이 느리게 작동하는 상황이 나타날 수 있습니다.
HDD와 SSD의 차이가 중요한 이유
디스크 I/O를 이해할 때 HDD와 SSD의 차이도 함께 알아두는 것이 좋습니다.
HDD는 내부에서 회전하는 디스크와 읽기 장치를 이용해 데이터를 처리합니다.
반면 SSD는 반도체 메모리를 사용하기 때문에 HDD처럼 물리적으로 움직이는 부품이 없습니다.
일반적으로 SSD는 작은 데이터를 여러 번 읽고 쓰는 작업에서 빠른 응답성을 보여줍니다.
HDD는 대용량 데이터를 비교적 저렴한 비용으로 저장하는 데 장점이 있습니다.
따라서 홈 서버에서는 운영체제와 데이터베이스처럼 자주 접근하는 영역은 SSD에 배치하고, 대용량 파일은 HDD에 저장하는 방식도 고려할 수 있습니다.
순차 읽기와 랜덤 읽기의 차이
저장장치 성능을 알아보다 보면 순차 읽기와 랜덤 읽기라는 용어를 접하게 됩니다.
순차 읽기는 데이터를 일정한 순서대로 연속해서 읽는 작업입니다.
큰 파일 하나를 처음부터 끝까지 읽는 상황을 생각하면 이해하기 쉽습니다.
반면 랜덤 읽기는 저장장치의 여러 위치에 흩어진 데이터를 필요에 따라 읽는 작업입니다.
작은 파일을 여러 위치에서 반복적으로 읽는 상황에서는 랜덤 접근 성능이 중요할 수 있습니다.
홈 서버에서 사용하는 프로그램의 종류에 따라 필요한 저장장치 성능도 달라질 수 있기 때문에 단순한 최대 전송속도만 보고 저장장치를 선택하는 것은 적절하지 않습니다.
순차 쓰기와 랜덤 쓰기도 중요하다
데이터를 저장장치에 기록하는 작업은 쓰기라고 합니다.
큰 파일을 한 번에 저장하는 작업은 순차 쓰기와 관련이 있고, 작은 데이터를 여러 위치에 반복해서 기록하는 작업은 랜덤 쓰기와 관련이 있습니다.
예를 들어 대용량 동영상 파일을 저장하는 작업과 데이터베이스가 작은 정보를 계속 변경하는 작업은 저장장치에 서로 다른 형태의 부하를 발생시킬 수 있습니다.
따라서 홈 서버에서 저장장치를 선택할 때는 단순히 파일을 얼마나 빠르게 복사할 수 있는지만 생각하지 말고 어떤 서비스에서 사용할 것인지도 고려하는 것이 좋습니다.
데이터베이스는 디스크 I/O와 밀접하다
MariaDB나 PostgreSQL 같은 데이터베이스는 저장장치와 밀접한 관계가 있습니다.
데이터베이스는 데이터를 저장하고 필요할 때 읽어오는 작업을 반복하기 때문입니다.
서비스 규모가 작다면 일반적인 저장장치에서도 충분히 사용할 수 있지만, 데이터가 많아지고 동시에 처리해야 하는 요청이 증가하면 저장장치의 성능이 중요해질 수 있습니다.
특히 데이터베이스와 여러 Docker 서비스를 하나의 HDD에서 동시에 운영하면 저장장치에 여러 작업이 몰릴 수 있습니다.
이런 환경에서는 데이터베이스 영역을 SSD에 배치하는 것이 도움이 될 수 있습니다.
Docker도 디스크 I/O를 발생시킨다
Docker를 사용한다고 해서 저장장치 사용량이 없는 것은 아닙니다.
컨테이너를 실행하는 과정에서 프로그램 파일을 읽고 서비스에서 생성하는 데이터를 저장할 수 있습니다.
로그가 계속 생성되는 서비스도 있고 데이터베이스처럼 지속적으로 데이터를 변경하는 프로그램도 있습니다.
여러 컨테이너가 동시에 데이터를 읽고 쓰면 하나의 저장장치에 여러 작업이 발생할 수 있습니다.
따라서 Docker 서비스를 많이 운영한다면 어떤 컨테이너가 저장장치를 많이 사용하는지 확인하는 것이 좋습니다.
로그 파일도 저장장치를 사용한다
홈 서버를 장기간 운영하면 서비스 로그가 계속 쌓일 수 있습니다.
로그는 문제가 발생했을 때 원인을 찾는 데 중요한 자료이지만, 관리하지 않으면 저장공간을 차지할 수 있습니다.
특히 특정 프로그램에서 지나치게 많은 로그를 생성하면 저장장치에 지속적인 쓰기 작업이 발생할 수도 있습니다.
따라서 로그의 저장 위치와 보관 기간을 적절하게 관리하는 것이 좋습니다.
로그를 무조건 삭제하기보다 필요한 기간 동안 보관하고 불필요하게 쌓이지 않도록 관리하는 것이 중요합니다.
백업 작업은 디스크 I/O를 크게 사용할 수 있다
홈 서버에서 정기적으로 백업을 수행하면 백업이 실행되는 시간에 저장장치 사용량이 증가할 수 있습니다.
많은 파일을 읽어서 다른 저장장치에 기록하기 때문입니다.
특히 서버에 대용량 사진이나 동영상이 많이 저장되어 있다면 백업 작업이 상당한 디스크 작업을 발생시킬 수 있습니다.
이런 상황에서 다른 서비스를 동시에 이용하면 서버의 반응 속도가 평소보다 느려질 수 있습니다.
따라서 백업을 자동으로 설정할 때는 서버를 많이 사용하지 않는 시간대에 실행하도록 계획하는 것도 하나의 방법입니다.
저장장치 하나에 여러 서비스를 몰아넣으면 어떻게 될까?
홈 서버를 처음 구축할 때는 SSD나 HDD 하나에 모든 서비스를 설치하는 것이 편리합니다.
서비스가 많지 않다면 큰 문제가 없을 수도 있습니다.
하지만 데이터베이스, 개인 클라우드, 모니터링 시스템, 파일 저장 서비스 등을 모두 하나의 HDD에서 운영하면 동시에 많은 읽기와 쓰기 작업이 발생할 수 있습니다.
이때 특정 서비스가 저장장치를 많이 사용하는 순간 다른 서비스의 응답 속도에도 영향을 줄 수 있습니다.
따라서 서버 규모가 커지면 서비스의 성격에 따라 저장장치를 분리하는 방법을 고려할 수 있습니다.
SSD를 활용하면 좋은 서비스
SSD는 일반적으로 빠른 응답성이 필요한 서비스에 활용하기 좋습니다.
운영체제와 Docker 자체를 SSD에 설치하고 자주 사용하는 서비스의 데이터를 SSD에 배치하는 방법이 있습니다.
특히 데이터베이스처럼 작은 데이터를 자주 읽고 쓰는 서비스는 SSD의 장점을 활용할 수 있습니다.
다만 모든 데이터를 SSD에 저장해야 한다는 의미는 아닙니다.
사진이나 영상처럼 대용량 데이터를 장기간 저장하는 경우에는 비용과 용량을 고려해 HDD를 함께 사용하는 것이 현실적일 수 있습니다.
HDD는 대용량 데이터 저장에 유리하다
HDD는 비교적 저렴한 비용으로 큰 저장공간을 확보할 수 있다는 장점이 있습니다.
개인 클라우드에 사진과 동영상이 계속 쌓이거나 백업 데이터를 많이 보관해야 한다면 HDD가 유용할 수 있습니다.
다만 여러 서비스를 동시에 실행하면서 HDD에 데이터베이스와 대용량 파일을 함께 저장하면 디스크 I/O가 증가할 수 있습니다.
따라서 HDD는 대용량 데이터 저장용으로 활용하고 자주 접근하는 서비스 데이터는 SSD에 배치하는 방식이 도움이 될 수 있습니다.
디스크 I/O가 높은지 어떻게 확인할까?
홈 서버의 디스크 I/O 상태를 확인하려면 운영체제에서 제공하는 시스템 모니터링 기능을 사용할 수 있습니다.
현재 디스크 사용량과 읽기·쓰기 작업량, 저장장치의 반응 상태 등을 확인할 수 있습니다.
Docker 환경이라면 특정 컨테이너가 얼마나 많은 데이터를 읽고 쓰는지도 확인할 수 있습니다.
모니터링 시스템을 구성해 두었다면 일정 기간 동안 디스크 사용량의 변화를 확인하는 것도 좋습니다.
특히 문제가 발생한 시간대의 기록을 살펴보면 어떤 서비스가 저장장치를 많이 사용했는지 추적하는 데 도움이 됩니다.
디스크 사용량과 디스크 I/O는 다르다
여기서 주의해야 할 부분이 있습니다.
저장장치의 용량이 얼마나 남아 있는지와 디스크 I/O가 얼마나 발생하는지는 서로 다른 개념입니다.
예를 들어 2TB HDD에 500GB만 저장되어 있어도 특정 순간에 많은 데이터를 읽고 쓰면 디스크 I/O가 높을 수 있습니다.
반대로 저장공간이 거의 가득 차 있더라도 현재 읽기와 쓰기 작업이 많지 않다면 I/O 자체는 낮을 수 있습니다.
따라서 서버의 저장장치를 관리할 때는 남은 용량과 I/O 상태를 각각 확인해야 합니다.
디스크 I/O가 높다고 바로 저장장치를 교체할 필요는 없다
디스크 I/O가 높다고 해서 무조건 저장장치의 성능이 부족한 것은 아닙니다.
현재 실행 중인 작업 자체가 많은 데이터를 처리하고 있을 수도 있습니다.
예를 들어 대규모 백업이 실행 중이라면 일정 시간 동안 높은 I/O가 발생하는 것이 자연스러울 수 있습니다.
먼저 어떤 프로그램이 저장장치를 사용하고 있는지 확인하고 해당 작업이 정상적인지 판단해야 합니다.
불필요한 작업 때문에 I/O가 발생하는 것이라면 서비스를 조정하는 것만으로도 문제가 해결될 수 있습니다.
디스크 I/O를 줄이는 기본적인 방법
디스크 I/O를 줄이기 위해서는 먼저 불필요한 읽기와 쓰기 작업을 확인해야 합니다.
사용하지 않는 서비스가 계속 실행되고 있다면 정리하는 것을 고려할 수 있습니다.
로그가 지나치게 많이 생성되고 있다면 보관 정책을 점검합니다.
백업 작업은 서버 사용량이 적은 시간에 실행하도록 조정할 수 있습니다.
자주 사용하는 서비스의 데이터가 성능이 낮은 HDD에 집중되어 있다면 SSD로 이동하는 방법도 고려할 수 있습니다.
중요한 것은 무조건 I/O를 줄이는 것이 아니라 필요한 작업은 유지하면서 불필요한 부하를 줄이는 것입니다.
저장장치를 선택할 때 숫자만 보면 안 되는 이유
SSD나 HDD를 비교하다 보면 읽기 속도와 쓰기 속도 같은 숫자를 먼저 확인하게 됩니다.
하지만 실제 홈 서버 성능은 사용하는 프로그램과 데이터 형태에 따라 달라질 수 있습니다.
대용량 파일을 주로 다룬다면 순차적인 읽기와 쓰기 성능이 중요할 수 있습니다.
작은 데이터를 반복적으로 처리하는 서비스라면 랜덤 접근 성능과 응답 시간이 더 중요할 수 있습니다.
따라서 저장장치의 최대 속도만 비교하기보다 자신의 서버에서 어떤 작업이 주로 발생하는지 생각하는 것이 좋습니다.
홈 서버 디스크 I/O 관리에서 중요한 것
홈 서버에서 디스크 I/O를 관리할 때는 몇 가지 기본적인 원칙을 기억하면 좋습니다.
먼저 저장장치의 남은 용량과 I/O 상태를 구분해서 확인합니다.
그다음 어떤 서비스가 읽기와 쓰기를 많이 발생시키는지 확인합니다.
데이터베이스나 자주 사용하는 서비스는 필요하다면 SSD에 배치합니다.
대용량 파일과 백업 데이터는 HDD를 활용할 수 있습니다.
그리고 로그와 백업 작업이 불필요하게 저장장치에 부담을 주고 있지는 않은지도 확인합니다.
이러한 기본적인 관리만으로도 저장장치 때문에 발생하는 문제를 어느 정도 예방할 수 있습니다.
마무리
홈 서버를 처음 운영할 때는 CPU와 RAM만 확인하면 서버 성능을 충분히 파악할 수 있다고 생각하기 쉽지만, 실제로 여러 서비스를 운영하다 보면 저장장치의 읽기와 쓰기 작업도 상당히 중요하다는 것을 알게 됩니다. 특히 Docker와 데이터베이스, 개인 클라우드, 백업 시스템을 함께 운영하면 하나의 저장장치에 여러 작업이 동시에 발생할 수 있습니다. 이때 CPU 사용량은 높지 않은데 서비스가 느려지는 상황이 나타날 수 있으며, 이런 경우 디스크 I/O를 확인해 보는 것이 도움이 됩니다. SSD는 운영체제와 데이터베이스처럼 자주 접근하는 영역에 활용하고 HDD는 사진이나 영상, 백업처럼 대용량 데이터를 저장하는 용도로 활용하면 효율적인 구성을 만들 수 있습니다. 물론 모든 홈 서버가 여러 개의 저장장치를 필요로 하는 것은 아닙니다. 처음에는 하나의 저장장치로 시작하고 실제 사용량과 서비스의 특성을 확인하면서 필요한 시점에 저장장치를 추가해도 충분합니다. 무엇보다 중요한 것은 저장장치의 속도만 비교하는 것이 아니라 서버에서 어떤 데이터가 얼마나 자주 읽히고 쓰이는지 이해하는 것입니다. 이러한 구조를 알고 있으면 앞으로 홈 서버의 성능이 느려졌을 때 CPU나 RAM뿐만 아니라 디스크 I/O까지 함께 확인하면서 보다 정확하게 원인을 찾을 수 있습니다.