13년차의 서버실

서버, 인프라, 홈랩 기술 블로그

[태그:] NVMe SSD

  • [Linux] NVMe SSD 환경 파일 시스템 벤치마크: ext4, XFS, Btrfs, ZFS 성능 비교

    [Linux] NVMe SSD 환경 파일 시스템 벤치마크: ext4, XFS, Btrfs, ZFS 성능 비교

    [Linux] NVMe SSD 환경 파일 시스템 벤치마크: ext4, XFS, Btrfs, ZFS 성능 비교

    NVMe SSD 리눅스 파일 시스템 조합, 이거 생각보다 성능 차이가 꽤 크게 나더라고요. 저도 홈랩에서 VM 스토리지랑 컨테이너 볼륨을 굴리면서 처음엔 그냥 ext4로 통일했었는데, 실제로 써보니까 워크로드(작업 부하)에 따라 XFS가 더 편한 경우도 있고, Btrfs나 ZFS처럼 기능이 많은 파일 시스템이 운영 안정성 면에서 더 낫다고 느낀 순간도 있었습니다. 그래서 이번 글에서는 NVMe SSD 환경 리눅스 파일 시스템을 기준으로, ext4 성능, XFS 성능, Btrfs 성능, ZFS 성능을 어떻게 비교해야 하는지, 그리고 파일 시스템 벤치마크를 할 때 어떤 함정을 피해야 하는지 정리해보겠습니다.

    중요한 포인트부터 말씀드리면, 벤치마크 숫자 하나만 보고 파일 시스템을 고르면 나중에 꼭 후회합니다. 순차 읽기/쓰기만 빠르다고 끝이 아니거든요. 메타데이터(파일 정보) 처리, 작은 파일 다량 생성, 스냅샷(시점 복사), 압축, 복구 편의성까지 같이 봐야 합니다. 여기서 제일 중요한 건 벤치마크는 숫자 놀이가 아니라 운영 시나리오 검증이어야 한다는 거예요.

    NVMe SSD 위에서 여러 리눅스 파일 시스템이 서로 다른 특성과 워크로드를 가지는 모습을 한눈에 보여주는 개요 이미지입니다.

    1. 왜 NVMe SSD에서는 파일 시스템 선택이 더 중요할까요?

    예전 SATA SSD 시절에도 파일 시스템 차이는 있었지만, NVMe SSD로 오면 대기 시간(지연 시간)이 낮아지고 병렬 처리 성능이 올라가면서 병목이 더 위로 올라옵니다. 쉽게 말해, 디스크가 느려서 묻히던 차이가 파일 시스템 계층에서 더 잘 드러난다는 뜻입니다.

    • ext4: 기본기가 탄탄하고 범용성이 좋습니다.
    • XFS: 큰 파일, 병렬 I/O, 서버 워크로드에서 자주 거론됩니다.
    • Btrfs: 스냅샷과 서브볼륨(하위 볼륨)이 강점입니다.
    • ZFS: 데이터 무결성(데이터 정확성)과 고급 기능이 강력하지만 메모리 사용과 운영 복잡도도 같이 따라옵니다.

    실제로 써보니까, VM 이미지처럼 큰 파일을 연속으로 다루는 환경과, CI 캐시나 컨테이너 레이어처럼 작은 파일이 쏟아지는 환경은 체감이 완전히 다르더라고요. 그래서 NVMe SSD 리눅스 파일 시스템 비교는 단순 평균이 아니라 시나리오별 해석이 핵심입니다.

    2. ext4, XFS, Btrfs, ZFS를 쉽게 정리해보면

    저도 처음엔 헷갈렸는데, 이렇게 보면 좀 편합니다.

    파일 시스템 성격 강점 주의할 점
    ext4 표준형 안정적, 관리 쉬움, 범용성 좋음 고급 스냅샷 기능은 별도 계층 필요
    XFS 병렬 처리형 큰 파일, 높은 동시성, 서버 환경 적합 작은 파일/특정 메타데이터 패턴은 직접 검증 필요
    Btrfs 기능 통합형 스냅샷, 압축, 서브볼륨 CoW(Copy-on-Write) 특성 이해 필요
    ZFS 무결성 중심형 체크섬, 스냅샷, 압축, 관리 기능 풍부 메모리와 운영 방식 이해가 필요, 리눅스 기본 내장 FS는 아님

    ext4 성능은 대체로 예측 가능하고 무난한 편입니다. 반면 XFS 성능은 병렬 쓰기나 대용량 파일 위주에서 장점이 보이는 경우가 많고요. Btrfs 성능은 기능을 많이 켜는 대신 워크로드에 따라 편차가 생길 수 있습니다. ZFS 성능도 압축, recordsize, ARC(메모리 캐시) 설정에 영향을 꽤 받습니다.

    3. 벤치마크 전에 꼭 정해야 할 테스트 원칙

    여기서 삽질을 가장 많이 합니다 ㅎㅎ 저도 예전에 캐시를 비우는 절차 없이 돌렸다가 결과가 너무 예쁘게 나와서 좋아했는데, 다시 보니까 거의 메모리 테스트였던 적이 있거든요.

    1. 같은 NVMe SSD, 같은 파티션 크기, 같은 커널(운영체제 핵심) 환경에서 비교합니다.
    2. 가능하면 파일 시스템마다 새로 생성한 빈 볼륨에서 시작합니다.
    3. 순차 읽기/쓰기와 랜덤 읽기/쓰기, 둘 다 측정합니다.
    4. 작은 파일 메타데이터 성능과 큰 파일 처리 성능을 분리해서 봅니다.
    5. 압축, CoW, atime 같은 옵션은 켠 상태와 끈 상태를 구분합니다.
    6. 최소 2~3회 반복 실행해서 편차를 확인합니다.

    벤치마크 도구는 보통 fio를 많이 씁니다. 이유는 간단합니다. 블록 크기, 큐 깊이, 동시 작업 수를 세밀하게 조절할 수 있어서 실제 서버 부하에 가깝게 흉내 내기 좋거든요.

    4. NVMe SSD 리눅스 파일 시스템 벤치마크 실전 준비

    아래 예시는 테스트 디바이스를 별도 디스크 또는 실험용 파티션으로 가정합니다. 운영 중인 루트 파일 시스템에 바로 적용하면 위험합니다. 반드시 테스트 환경에서 진행하세요.

    4-1. 테스트 장치 확인

    lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT,MODEL
    nvme list
    

    먼저 대상 NVMe 장치를 정확히 확인합니다. 장치명을 잘못 잡으면 진짜 눈물 납니다. 저도 예전에 테스트한다고 했다가 다른 디스크를 지울 뻔했었네요.

    4-2. 파일 시스템 생성 예시

    # ext4
    sudo mkfs.ext4 /dev/nvme1n1p1
    
    # XFS
    sudo mkfs.xfs -f /dev/nvme1n1p1
    
    # Btrfs
    sudo mkfs.btrfs -f /dev/nvme1n1p1
    
    # ZFS는 별도 풀(pool) 생성 방식 사용
    sudo zpool create benchpool /dev/nvme1n1p1
    sudo zfs create benchpool/testfs
    

    ZFS는 ext4, XFS, Btrfs처럼 단순 mkfs 흐름과는 좀 다릅니다. 처음엔 이게 뭔가 싶었는데, ZFS는 파일 시스템만 따로 보는 게 아니라 스토리지 관리 계층까지 같이 보는 구조라서 그렇습니다.

    4-3. 마운트 옵션 예시

    # ext4
    sudo mount -o noatime /dev/nvme1n1p1 /mnt/bench
    
    # XFS
    sudo mount -o noatime /dev/nvme1n1p1 /mnt/bench
    
    # Btrfs
    sudo mount -o noatime,compress=zstd /dev/nvme1n1p1 /mnt/bench
    
    # ZFS
    sudo zfs set atime=off benchpool/testfs
    sudo zfs set compression=lz4 benchpool/testfs
    

    noatime은 접근 시간(access time) 갱신을 줄여서 불필요한 쓰기를 줄이는 데 도움이 됩니다. 다만 환경에 따라 기본값이나 운영 정책이 다를 수 있으니 무조건 정답은 아닙니다.

    NVMe SSD 리눅스 파일 시스템 벤치마크 구성도

    벤치마크 대상 NVMe SSD, 마운트 포인트, fio 테스트 흐름을 단계별로 보여주는 실전 구성 이미지입니다.

    4-4. fio 벤치마크 스크립트 예시

    cat > fio-randread.fio <<'EOF'
    [global]
    ioengine=libaio
    direct=1
    runtime=60
    time_based=1
    group_reporting=1
    filename=/mnt/bench/testfile.bin
    size=8G
    
    [randread-4k]
    bs=4k
    rw=randread
    iodepth=32
    numjobs=4
    EOF
    
    fio fio-randread.fio
    
    cat > fio-seqwrite.fio <<'EOF'
    [global]
    ioengine=libaio
    direct=1
    runtime=60
    time_based=1
    group_reporting=1
    filename=/mnt/bench/testfile.bin
    size=8G
    
    [seqwrite-1m]
    bs=1m
    rw=write
    iodepth=32
    numjobs=1
    EOF
    
    fio fio-seqwrite.fio
    

    여기서 4K 랜덤 읽기는 작은 I/O가 많은 데이터베이스나 VM 메타데이터 패턴을 보는 데 좋고, 1M 순차 쓰기는 큰 파일 복사나 백업 이미지 생성 같은 상황을 가정하기 좋습니다.

    5. 파일 시스템별로 벤치마크 해석 포인트가 다릅니다

    같은 fio 결과라도 읽는 법이 다릅니다. 숫자만 보지 말고 특성까지 같이 봐야 합니다.

    • ext4: 전반적으로 균형이 좋고, 기본 설정에서도 큰 이슈 없이 결과가 나오는 편입니다.
    • XFS: 동시성(동시에 여러 작업 처리)과 대용량 파일 흐름에서 강점을 기대할 수 있습니다.
    • Btrfs: 압축과 스냅샷은 장점이지만, CoW 특성 때문에 일부 쓰기 패턴은 결과를 따로 봐야 합니다.
    • ZFS: recordsize, compression, ARC 같은 설정이 결과에 영향을 주므로 기본값만 보고 단정하면 안 됩니다.

    실제로 써보니까 Btrfs와 ZFS는 기능이 성능 결과에 직접 개입합니다. 그래서 기능을 끈 상태, 켠 상태를 분리해서 비교하는 게 맞더라고요. 예를 들어 압축이 켜졌다고 무조건 느려지는 게 아니라, CPU 여유가 있고 데이터 압축률이 괜찮으면 오히려 체감 I/O가 줄어드는 경우도 있습니다.

    6. ⚠️ 제가 실제로 겪었던 트러블슈팅 포인트

    이 섹션은 진짜 중요합니다. 벤치마크는 잘못하면 재현성(다시 해도 비슷한 결과가 나오는 성질)이 박살 나거든요.

    6-1. 페이지 캐시 때문에 결과가 이상하게 잘 나올 때

    첫 실행보다 두 번째 실행이 비정상적으로 빠르면 페이지 캐시를 의심해야 합니다. direct I/O를 써도 워크로드에 따라 캐시 영향이 완전히 사라지지 않는 경우가 있어서, 테스트 순서와 파일 초기화 상태를 일정하게 맞추는 게 중요합니다.

    6-2. Btrfs의 CoW가 로그/DB 파일에 불리할 때

    작은 랜덤 업데이트가 많은 파일은 CoW 특성 때문에 쓰기 증폭(실제 기록량 증가)이 체감될 수 있습니다. 이런 경우는 파일 단위 NOCOW 설정 같은 운영 전략을 별도로 검토합니다. 다만 이건 워크로드 의존성이 커서, 무조건 끄는 식으로 접근하면 또 다른 장점을 놓칠 수 있습니다.

    6-3. ZFS는 메모리와 설정을 같이 봐야 합니다

    ZFS는 데이터 무결성과 관리 기능이 강력한 대신, 메모리 캐시 활용이 중요한 편입니다. ARC가 잘 동작하는 환경과 그렇지 않은 환경의 체감 차이가 꽤 있습니다. 저도 처음엔 “왜 이렇게 다르지?” 했었는데, 결국 테스트 장비 메모리 구성과 dataset 속성 차이였더라고요.

    6-4. discard/TRIM 처리 방식 차이

    온라인 discard를 바로 걸지, 주기적으로 fstrim을 돌릴지는 배포판과 운영 정책에 따라 다를 수 있습니다. 벤치마크 중에는 이 배경 작업이 개입하지 않게 관리하는 게 좋습니다.

    6-5. 압축 옵션은 공정하게 맞춰야 합니다

    Btrfs나 ZFS에서 압축을 켠 상태와 ext4/XFS 기본 상태를 그대로 비교하면, 그건 “파일 시스템 비교”이면서 동시에 “기능 켠 상태 비교”가 됩니다. 글의 목적에 따라 비교 기준을 명확히 나눠야 합니다.

    Btrfs와 ZFS 옵션이 NVMe SSD 성능에 미치는 영향 이미지

    CoW, 압축, 캐시, TRIM 같은 요소가 벤치마크 결과를 흔드는 원인을 설명하는 트러블슈팅 이미지입니다.

    7. 검증과 결과 정리: 숫자보다 패턴을 보세요

    이번 글에서는 의도적으로 특정 수치를 단정해서 넣지 않았습니다. NVMe SSD 모델, 커널, 마운트 옵션, 메모리 용량, 테스트 데이터 특성에 따라 결과가 꽤 달라지기 때문입니다. 대신 일반적으로 많이 보는 해석 패턴을 정리해보면 아래와 같습니다.

    비교 항목 자주 관찰되는 경향 체크할 포인트
    순차 읽기/쓰기 ext4, XFS가 단순 구성에서 무난한 결과를 내기 쉬움 대용량 파일 위주인지 확인
    랜덤 4K 옵션과 큐 깊이에 따라 차이가 크게 남 DB/VM 패턴과 유사한지 확인
    메타데이터 작업 파일 생성/삭제/rename 패턴에서 차이가 드러남 작은 파일 수가 많은지 확인
    스냅샷/압축 Btrfs, ZFS가 기능상 이점이 큼 성능과 운영 편의성 함께 평가
    운영 단순성 ext4가 가장 익숙하고 단순한 편 장애 대응 경험도 고려

    검증 명령은 이런 식으로 같이 보시면 됩니다.

    fio fio-randread.fio
    fio fio-seqwrite.fio
    iostst -x 1
    vmstat 1
    mount | grep /mnt/bench
    

    iostat로 장치 사용률과 대기 시간을 보고, vmstat로 메모리와 시스템 상태를 같이 봅니다. 벤치마크 결과 파일만 보는 것보다 훨씬 해석이 쉬워집니다. 드디어 됐다! 싶은 순간이 여기서 오는데, 사실 이때부터가 진짜 시작입니다. 왜 빨랐는지, 왜 느렸는지를 설명할 수 있어야 하거든요.

    8. 그래서 어떤 파일 시스템을 고르면 좋을까요?

    정답은 하나가 아닙니다. 제가 직접 해보니 용도별로 이렇게 접근하는 게 현실적이었습니다.

    1. 범용 서버, 운영 단순성 우선: ext4
    2. 대용량 파일, 병렬 I/O, 로그성 서버: XFS 검토
    3. 스냅샷, 서브볼륨, 유연한 관리: Btrfs 검토
    4. 무결성, 스냅샷, 압축, 스토리지 통합 관리: ZFS 검토

    혹시 이런 경험 있으신가요? 벤치마크만 보면 A가 빨랐는데, 운영해보니 B가 훨씬 편했던 경우요. 이게 진짜 자주 일어납니다. 그래서 파일 시스템 벤치마크는 최종 결론이 아니라 의사결정 재료로 보는 게 맞습니다.

    체크리스트도 남겨보겠습니다.

    • 내 워크로드는 작은 파일 위주인가, 큰 파일 위주인가
    • 스냅샷이 꼭 필요한가
    • 압축으로 얻을 이점이 있는가
    • 복구와 운영 난이도를 감당할 수 있는가
    • 팀이 익숙한 파일 시스템인가
    NVMe SSD 리눅스 파일 시스템 선택 기준 비교 이미지

    워크로드별로 ext4, XFS, Btrfs, ZFS 중 어떤 선택이 어울리는지 요약한 비교 인포그래픽입니다.

    9. 마무리: 성능 비교보다 더 중요한 것

    NVMe SSD 리눅스 파일 시스템을 비교할 때 가장 중요한 건, “누가 더 빠르냐”보다 “내 환경에서 어떤 특성이 더 맞느냐”입니다. ext4 성능, XFS 성능, Btrfs 성능, ZFS 성능은 모두 의미가 있지만, 그 숫자는 설정과 부하에 따라 달라집니다. 반면 운영 편의성, 복구 경험, 스냅샷 전략, 백업 체계는 생각보다 오래 갑니다.

    저는 요즘도 홈랩에서 새 워크로드를 올릴 때 먼저 fio로 최소한의 패턴 검증부터 합니다. 한 번 해두면 감이 생기고, 다음에는 훨씬 덜 헤매게 되더라고요. 다음 글에서는 fio 결과를 읽는 법, 그리고 VM/컨테이너/DB별로 어떤 테스트 프로파일을 써야 하는지를 따로 정리해볼 예정입니다. 이전 글에서 다룬 스토리지 모니터링 내용과 함께 보시면 더 이해가 쉬우실 겁니다.

    정리 FAQ

    Q1. NVMe SSD에서는 무조건 XFS가 빠른가요?

    아닙니다. 워크로드에 따라 ext4가 더 무난하거나, 기능 요구 때문에 Btrfs나 ZFS가 더 적합할 수 있습니다.

    Q2. Btrfs나 ZFS는 느리기만 한가요?

    그렇게 단순하지 않습니다. 압축, 스냅샷, 무결성 같은 기능 가치까지 같이 봐야 합니다. 일부 상황에서는 운영 효율이 더 큰 장점이 됩니다.

    Q3. 벤치마크는 어떤 도구부터 시작하면 될까요?

    대부분의 경우 fio부터 시작하시면 됩니다. 순차/랜덤, 블록 크기, 큐 깊이를 조절해 실제 부하와 비슷하게 맞추기 좋습니다.

    Q4. 결과가 매번 다르게 나오는데 정상인가요?

    어느 정도는 정상입니다. 캐시, 백그라운드 작업, SSD 상태, 테스트 순서가 영향을 줄 수 있으니 조건을 최대한 통제해야 합니다.

  • [Game] 라즈베리 파이 5 마인크래프트 서버 구축: 저전력 게임 호스팅 완전 가이드

    [Game] 라즈베리 파이 5 마인크래프트 서버 구축: 저전력 게임 호스팅 완전 가이드

    🚀 13년차 서버실: 라즈베리 파이 5로 마인크래프트 서버 구축하기

    안녕하세요, 13년차 인프라 엔지니어 13년차의 서버실 주인장입니다. 홈랩(Homelab)에서 이것저것 직접 실험해보고 구축해보는 재미, 특히 저전력으로 나만의 서버를 만드는 게 저의 낙이거든요. 요즘 라즈베리 파이 5(Raspberry Pi 5)가 새로 나왔다는 소식에, 이걸로 마인크래프트 서버를 돌려보면 어떨까 하는 생각이 들었습니다. 예전 파이들은 성능이 좀 아쉬웠는데, 이번 5세대는 꽤 쓸만하다고 하더라고요? 그래서 출시되자마자 바로 달려들었죠. 오늘 저와 함께 라즈베리 파이 5 마인크래프트 서버를 구축하면서 저전력 게임 서버의 매력에 푹 빠져보시죠!

    라즈베리 파이 5를 활용한 마인크래프트 서버의 전체 아키텍처를 보여주는 다이어그램

    라즈베리 파이 5를 활용한 마인크래프트 서버의 전체 아키텍처를 시각화한 다이어그램입니다. 클라이언트, 라즈베리 파이, 인터넷 연결 등을 보여줍니다.

    💡 왜 라즈베리 파이 5일까요? 저전력의 매력

    마인크래프트 서버를 돌리려면 사실 고사양 PC가 제일 좋죠. 근데 24시간 내내 돌리자니 전기세가 부담스러워요. 저도 처음엔 전력 소모 때문에 PC 서버 운영을 망설였거든요. 그래서 저전력 게임 서버를 찾게 되는데, 이때 라즈베리 파이(Raspberry Pi)가 아주 좋은 선택지거든요. 특히 이번 라즈베리 파이 5 서버는 라즈베리 파이 4 대비 CPU 성능이 2~3배, GPU 성능은 2배 이상 향상됐어요. PCIe 2.0을 지원하니 NVMe SSD 부팅도 가능하고, 덕분에 디스크 I/O 병목도 확 줄어들었죠.

    마인크래프트 서버는 CPU와 RAM, 그리고 디스크 I/O가 생명이거든요. 이 모든 면에서 라즈베리 파이 5는 정말 멋진 발전을 이뤘어요. 제가 직접 써보니까 이전 라즈베리 파이와는 차원이 달라요. 이 작은 녀석에서 나오는 성능이 정말 놀랍더라고요.

    라즈베리 파이 5 주요 특징 (마인크래프트 서버 관점)

    • 향상된 CPU: Broadcom BCM2712 쿼드코어 Cortex-A76 (2.4GHz) – 멀티코어 성능이 중요한 마인크래프트에 유리해요.
    • 넉넉한 RAM: 4GB 또는 8GB LPDDR4X – 동시에 접속하는 플레이어가 많아질수록 RAM의 중요성이 커지죠.
    • PCIe 2.0 지원: NVMe SSD를 연결하여 빠른 디스크 I/O를 확보할 수 있어요. 맵 로딩이나 청크(Chunk) 생성 시 랙(Lag)이 현저히 줄어들죠.
    • 저전력 소모: 고성능 데스크톱 대비 훨씬 낮은 전력으로 24/7 운영이 가능해요.

    🛠️ 라즈베리 파이 5 마인크래프트 서버 구축 실전 가이드

    자, 이제 본격적으로 나만의 마인크래프트 서버 호스팅 환경을 만들어볼 시간입니다. 제가 직접 삽질하면서 얻은 노하우를 단계별로 자세히 알려드릴게요.

    1단계: 라즈베리 파이 OS (64비트) 설치

    가장 먼저 할 일은 라즈베리 파이 5에 OS를 설치하는 거예요. 마인크래프트는 64비트 환경에서 훨씬 잘 돌거든요. 그래서 <code>Raspberry Pi OS (64-bit)를 선택하는 게 정답이에요.

    1. Raspberry Pi Imager를 다운로드하여 설치합니다.
    2. Imager를 실행하고, ‘CHOOSE OS’에서 Raspberry Pi OS (64-bit)를 선택합니다.
    3. ‘CHOOSE STORAGE’에서 사용할 MicroSD 카드 또는 NVMe SSD를 선택합니다. (개인적으로는 NVMe SSD를 강력 추천해요! 성능 차이가 정말 엄청 크거든요.)
    4. 톱니바퀴 아이콘을 클릭하여 SSH 활성화, 사용자 계정 설정, Wi-Fi 설정 등을 미리 해두면 초기 설정이 훨씬 편합니다.
    5. ‘WRITE’ 버튼을 눌러 OS를 이미지에 기록합니다.

    2단계: Java Development Kit (JDK) 설치

    마인크래프트 서버는 자바(Java) 기반이거든요. OpenJDK를 깔면 되는데, 저는 OpenJDK 17을 주로 써요. 안정적이고 성능도 좋더라고요.

    
    sudo apt update && sudo apt upgrade -y
    sudo apt install openjdk-17-jre-headless -y
    

    설치 후에는 다음 명령어로 자바가 제대로 설치됐는지 확인하세요.

    
    java -version
    

    3단계: 마인크래프트 서버 소프트웨어 선택 및 다운로드

    바닐라 서버도 괜찮지만, 성능과 확장성을 생각하면 PaperMC가 훨씬 낫거든요. PaperMC는 Spigot 기반이라 성능 최적화가 진짜 잘 되어 있어요. 라즈베리 파이처럼 리소스가 한정된 환경에는 정말 제격이죠.

    1. 서버 파일을 저장할 디렉터리를 만듭니다.
      
      mkdir ~/minecraft_server
      cd ~/minecraft_server
      
    2. PaperMC 웹사이트에서 원하는 마인크래프트 버전의 .jar 파일을 다운로드합니다. 예를 들어, 1.20.4 버전의 최신 빌드를 다운로드하려면 다음과 같이 합니다.
      (참고: 아래 URL의 <MINECRAFT_VERSION>과 <BUILD_NUMBER>는 최신 정보로 변경해야 합니다. PaperMC 웹사이트에서 확인해주세요!)
    
    wget https://api.papermc.io/v2/projects/paper/versions/1.20.4/builds/514/downloads/paper-1.20.4-514.jar -O paper.jar
    

    4단계: 서버 초기 설정 (EULA 동의 및 기본 설정)

    서버 파일을 다운로드했으면, 이제 초기 설정을 해줘야 해요. 처음 서버를 실행하면 eula.txt 파일이 생성되는데, 여기에 EULA(End User License Agreement) 동의를 해줘야 합니다.

    1. 먼저 서버를 한번 실행해서 초기 파일을 생성합니다.
      (여기서는 테스트용으로 RAM을 1GB만 할당했습니다.)
    2. 
      java -Xmx1024M -Xms1024M -jar paper.jar nogui
      
    3. 실행 후 오류 메시지와 함께 서버가 종료될 겁니다. eula.txt 파일이 생성되었는지 확인하세요.
    4. eula.txt 파일을 열어 eula=false를 eula=true로 변경합니다.
    5. 
      nano eula.txt
      
    6. server.properties 파일도 열어서 기본적인 서버 설정을 해주세요. 여기서 중요한 포인트! 라즈베리 파이 같은 저전력 환경에서는 view-distance(시야 거리)를 낮게 설정하는 게 좋아요. 기본값인 10~12는 부담스러울 수 있으니, 6~8 정도로 조절해보세요.
    7. 
      # server.properties 예시
      motd=Welcome to 13-Year Server Room's RPi5 Minecraft Server!
      max-players=5
      difficulty=easy
      game-mode=survival
      view-distance=7
      # 그 외 다양한 설정은 필요에 따라 조절하세요.
      
    라즈베리 파이 5 마인크래프트 서버의 핵심 설정 파일인 server.properties와 Systemd 서비스 파일 예시

    실제 라즈베리 파이 5에 설정된 마인크래프트 서버의 server.properties 파일과 Systemd 서비스 파일의 일부를 보여주는 스크린샷입니다.

    5단계: Systemd 서비스로 자동 실행 설정

    서버를 재부팅해도 마인크래프트 서버가 자동으로 실행되도록 systemd 서비스를 등록해봅시다. 13년차 엔지니어로서는 이런 자동화 설정이 기본 중의 기본이라고 생각해요.

    1. 서비스 파일을 생성합니다.
    2. 
      sudo nano /etc/systemd/system/minecraft.service
      
    3. 아래 내용을 붙여넣고 저장합니다. (User와 WorkingDirectory는 본인의 환경에 맞게 수정하세요. 저는 pi 유저를 사용했습니다.)
      (ExecStart의 -Xmx, -Xms 값은 라즈베리 파이의 RAM 용량에 맞춰 조절해주세요. 4GB 모델이라면 -Xmx2G 정도가 적당하고, 8GB 모델이라면 -Xmx4G까지도 고려해볼 수 있습니다.)
    4. 
      [Unit]
      Description=Minecraft Server
      After=network.target
      
      [Service]
      User=pi
      WorkingDirectory=/home/pi/minecraft_server
      ExecStart=/usr/bin/java -Xmx2G -Xms1G -jar paper.jar nogui
      ExecStop=/usr/bin/pkill -9 -f "java -jar paper.jar"
      Restart=on-failure
      
      [Install]
      WantedBy=multi-user.target
      
    5. systemd 설정을 리로드하고, 서비스를 활성화 및 시작합니다.
    6. 
      sudo systemctl daemon-reload
      sudo systemctl enable minecraft
      sudo systemctl start minecraft
      
    7. 서비스 상태를 확인해서 제대로 실행되는지 봅시다.
    8. 
      sudo systemctl status minecraft
      

    ⚠️ 삽질 경험 공유: 트러블슈팅과 최적화 팁

    제가 처음부터 완벽하게 성공했겠어요? ㅎㅎ 몇 번의 삽질 끝에 얻은 귀한 경험을 공유합니다. 혹시 비슷한 문제에 부딪히셨다면 이 팁들이 도움이 될 거예요.

    1. Out of Memory (OOM) 오류 해결

    가장 흔하게 겪는 문제가 바로 OOM(Out of Memory) 오류예요. java -Xmx 옵션이 중요해요. 라즈베리 파이 5는 4GB나 8GB RAM 모델이 있는데, OS와 다른 백그라운드 프로세스를 고려해서 넉넉하게 할당하되, 너무 많이 할당하면 시스템 전체가 불안정해질 수 있습니다. 4GB 모델이라면 2GB, 8GB 모델이라면 3~4GB 정도가 적절하더군요. top이나 htop 명령어로 메모리 사용량을 실시간으로 확인하면서 최적의 값을 찾아보세요.

    2. 네트워크 포트 포워딩 (Port Forwarding)

    서버를 구축했는데 외부에서 접속이 안 된다면? 십중팔구 포트 포워딩 문제거든요. 마인크래프트 기본 포트인 25565를 라우터 설정에서 라즈베리 파이의 내부 IP로 포워딩해줘야 해요. 라우터마다 설정이 다르니까 매뉴얼을 찾아보거나 제조사 웹사이트에서 확인하세요.

    만약 공인 IP가 없다면 ngrok 같은 터널링 서비스를 쓰거나 VPN을 구축해서 우회할 수도 있어요.

    3. 디스크 I/O 최적화: NVMe SSD 활용

    이건 정말 꿀팁이에요! 라즈베리 파이 5는 PCIe 2.0을 지원해서 NVMe SSD를 연결할 수 있어요. 마인크래프트는 맵 데이터를 계속 읽고 쓰거든요. MicroSD 카드보다 NVMe SSD를 쓰면 랙이 정말 많이 줄어들어요. 제가 직접 써보니까 체감 성능이 확 달라지더라고요. MicroSD 카드는 쓰기 수명도 짧아서 장기 운영에는 진짜 안 맞아요. 그래서 NVMe SSD는 선택이 아니라 필수라고 봐요.

    4. server.properties 추가 최적화

    server.properties에는 view-distance 말고도 성능에 영향을 주는 설정들이 많아요. 예를 들어, max-tick-time, spawn-monsters, spawn-animals 같은 걸 조절해서 불필요한 부하를 줄 수 있죠. 특히 spawn-monsters나 spawn-animals를 false로 꺼두면 몹 스폰으로 인한 CPU 부하를 확 줄 수 있어요. 친구들과 조용히 건축만 하려면 이 옵션들을 꺼두는 게 정답이에요.

    ✅ 서버 접속 및 성능 확인

    이제 모든 설정이 끝났으니, 마인크래프트 클라이언트에서 우리가 만든 서버에 접속해볼 시간이에요!

    1. 마인크래프트 클라이언트를 실행합니다.
    2. ‘멀티플레이어(Multiplayer)’ -> ‘서버 추가(Add Server)’를 클릭합니다.
    3. 서버 주소에 라즈베리 파이의 내부 IP 주소(예: 192.168.1.100) 또는 외부에서 접속할 경우 공인 IP 주소나 도메인을 입력합니다.
    4. 서버에 접속하여 잘 작동하는지 확인합니다.

    서버가 잘 돌아가는지 확인하면서, SSH로 라즈베리 파이에 접속해서 top이나 htop으로 CPU, RAM 사용량을 봅시다. 플레이어 수에 따라 리소스가 어떻게 변하는지 보는 것도 꽤 재미있거든요.

    마인크래프트 클라이언트에서 라즈베리 파이 5 마인크래프트 서버에 성공적으로 접속하여 플레이하는 게임 화면

    마인크래프트 게임 클라이언트에서 성공적으로 라즈베리 파이 5 서버에 접속하여 플레이 중인 화면입니다.

    💡 정리하며: 라즈베리 파이 5, 홈랩의 새로운 가능성

    오늘 우리는 라즈베리 파이 5 마인크래프트 서버를 성공적으로 만들어봤어요. 13년차 엔지니어로서 직접 해보니, 이번 라즈베리 파이 5는 정말 홈랩에서 다양한 가능성을 열어주는 친구 같더라고요. 저전력으로 24시간 내 게임 서버를 돌릴 수 있다는 게 정말 매력적이잖아요.

    📝 오늘 배운 점

    • 라즈베리 파이 5의 성능으로 마인크래프트 서버 운영이 훨씬 쾌적해졌어요. 특히 NVMe SSD는 디스크 I/O 성능을 정말 크게 끌어올려주더라고요.
    • systemd 서비스 자동화는 서버 관리의 필수 요소예요. 재부팅 후에도 자동으로 서버가 올라오는 편리함은 정말 좋아요!
    • 저전력 환경에서는 server.properties의 view-distance 같은 설정을 튜닝해서 최적의 성능을 찾아야 해요.
    • 트러블슈팅 과정은 언제나 새로운 배움의 기회예요. 저도 OOM 오류나 포트 포워딩으로 삽질 좀 했거든요.

    다음번에는 이 서버에 백업 시스템을 구축하거나, Prometheus와 Grafana로 모니터링 시스템을 붙여보는 내용으로 돌아올게요. 여러분의 홈랩에 라즈베리 파이 5가 새로운 활력을 불어넣길 바라요! 😉

    라즈베리 파이 5 마인크래프트 서버 구축의 주요 장점과 단점을 시각적으로 요약한 인포그래픽

    라즈베리 파이 5 마인크래프트 서버 구축의 주요 장점과 단점을 요약한 인포그래픽입니다.

  • [Game] 스팀덱 SSD 업그레이드 가이드: 성능 향상 및 저장 공간 확장

    스팀덱 SSD 업그레이드, 왜 고민하게 됐냐면요

    스팀덱(Steam Deck)을 처음 받았을 때 64GB 모델이었거든요. 처음엔 ‘뭐, 게임 몇 개만 넣으면 되지’라고 생각했는데… 현실은 달랐습니다. 엘든 링 하나만 깔아도 60GB 가까이 먹더라고요. 결국 저도 스팀덱 SSD 업그레이드를 결심하게 됐습니다.

    사실 인프라 엔지니어로 13년을 일하면서 서버 스토리지 교체는 수도 없이 해봤지만, 이렇게 작은 폼팩터의 기기를 분해하는 건 또 다른 긴장감이 있더라고요. 근데 막상 해보니까 생각보다 훨씬 할 만했습니다. 이 글에서는 제가 직접 해본 경험을 바탕으로 스팀덱 저장 공간 확장 방법과 주의사항을 솔직하게 공유해 드릴게요.

    스팀덱 내부 구조 개요 — M.2 2230 SSD 슬롯 위치와 주요 부품 배치를 한눈에 확인할 수 있습니다.

    스팀덱 SSD 업그레이드 전에 알아야 할 기본 개념

    스팀덱에 들어가는 SSD 규격

    스팀덱은 M.2 2230 규격의 NVMe SSD를 사용합니다. 여기서 ‘2230’은 폭 22mm, 길이 30mm를 의미해요. 일반 PC에서 많이 쓰는 2280(길이 80mm)보다 훨씬 짧은 사이즈거든요. 이게 중요한 이유는, 아무 NVMe SSD나 사다 꽂으면 안 된다는 뜻이라서요.

    쉽게 말해서, 스팀덱 SSD 교체를 위해 구매할 때는 반드시 M.2 2230 NVMe 제품인지 확인해야 합니다. 2280짜리를 사면 물리적으로 안 들어가요. 저도 처음에 이걸 몰라서 한 번 잘못 주문할 뻔했습니다 ㅎㅎ.

    스팀덱 모델별 기본 저장 용량

    모델 기본 저장 용량 SSD 타입 비고
    Steam Deck 64GB 64GB eMMC NVMe가 아님, 교체 가능하나 성능 차이 큼
    Steam Deck 256GB 256GB NVMe SSD M.2 2230 NVMe
    Steam Deck 512GB 512GB NVMe SSD M.2 2230 NVMe, 강화 유리

    ⚠️ 중요 포인트: 64GB 모델은 eMMC 방식으로 NVMe와 인터페이스 자체가 다릅니다. 물리적으로 M.2 슬롯에 NVMe SSD를 꽂는 건 가능하지만, 기술적으로 다소 복잡한 부분이 있으니 이 글에서는 256GB/512GB 모델 기준으로 설명드릴게요.

    스팀덱 SSD 업그레이드 준비물 체크리스트

    업그레이드 전에 미리 준비해두면 작업이 훨씬 수월합니다. 제가 처음 할 때 드라이버 하나 없어서 작업 중간에 멈춘 적 있거든요. 미리 다 챙겨두세요.

    • ✅ M.2 2230 NVMe SSD (교체할 새 SSD)
    • ✅ Phillips #0 드라이버 (십자 드라이버, 작은 사이즈)
    • ✅ 플라스틱 픽(Pick) 또는 스패저(Spudger) (기기 열 때 사용, 금속 도구는 기판 손상 위험)
    • ✅ USB 드라이브 (8GB 이상, 복구 이미지 담을 용도)
    • ✅ MicroSD 카드 또는 외장 스토리지 (데이터 백업용)
    • ✅ 정전기 방지 손목 밴드 (선택 사항이지만 강력 권장)
    • ✅ 밝은 조명과 넓은 작업 공간

    💡 팁: iFixit 같은 수리 도구 키트를 하나 사두면 두고두고 씁니다. 스팀덱뿐 아니라 다른 기기 수리할 때도 유용하거든요.

    스팀덱 SSD 업그레이드 단계별 가이드

    1단계: 데이터 백업

    이거 절대 건너뛰면 안 됩니다. 저도 인프라 엔지니어지만 백업 없이 작업하다가 한 번 날린 적 있어요. 그때의 허무함이란… 스팀덱은 게임 저장 데이터를 Steam Cloud에 자동 동기화해주는 경우가 많지만, 모든 게임이 그런 건 아니거든요.

    1. 스팀 설정 → 클라우드 → Steam Cloud 동기화 확인
    2. 클라우드 미지원 게임은 저장 파일을 MicroSD나 외부 저장소로 수동 복사
    3. 저장 파일 위치: /home/deck/.local/share/Steam/userdata/
    # 스팀덱 데스크탑 모드에서 터미널 열고 저장 파일 백업
    cp -r /home/deck/.local/share/Steam/userdata/ /run/media/mmcblk0p1/backup_userdata/
    
    # 백업 완료 확인
    ls /run/media/mmcblk0p1/backup_userdata/

    2단계: SteamOS 복구 이미지 준비

    SSD를 교체하면 운영체제(SteamOS)도 새로 설치해야 합니다. Valve에서 공식 복구 이미지를 제공하고 있으니까 미리 USB에 담아두세요.

    1. Valve 공식 웹사이트에서 Steam Deck Recovery Image 다운로드
    2. Rufus(Windows) 또는 balenaEtcher를 사용해 USB에 이미지 굽기
    3. USB는 스팀덱에 연결할 수 있도록 USB-C 허브 또는 USB-C 변환 어댑터 준비

    3단계: 스팀덱 분해

    드디어 본격적인 분해입니다. 여기서 침착하게 하는 게 중요해요. 서두르다가 나사 망가뜨리면 그날 작업은 그냥 끝이거든요.

    1. 배터리 완전 방전 또는 전원 완전 차단 — 작업 전 전원을 끄고 잠시 기다립니다
    2. 뒷면 나사 8개 제거 — Phillips #0 드라이버 사용. 모서리 4개와 중앙부 4개
    3. 플라스틱 픽으로 뒷면 커버 분리 — 아랫부분부터 천천히 틈을 벌리며 진행. 금속 도구 절대 사용 금지
    4. 배터리 커넥터 분리 — 안전을 위해 메인보드의 배터리 커넥터를 먼저 뽑습니다
    5. SSD 실드 나사 제거 — SSD를 덮고 있는 금속 실드의 나사를 제거
    6. 기존 SSD 제거 — SSD 고정 나사 1개를 풀고 비스듬히 들어올려 제거
    7. 새 SSD 장착 — 새 M.2 2230 SSD를 슬롯에 비스듬히 삽입 후 눌러서 고정 나사 조임
    8. 역순으로 조립

    ⚠️ 주의: 나사를 너무 세게 조이면 나사산이 망가집니다. 손으로 돌리다가 저항감이 느껴지면 그 정도면 충분해요.

    스팀덱 분해 과정 — 뒷면 커버 제거부터 M.2 2230 SSD 슬롯 접근까지의 단계별 모습입니다.

    4단계: SteamOS 재설치

    조립이 끝났으면 이제 OS를 설치할 차례입니다. 새 SSD는 당연히 비어있으니까요.

    1. 스팀덱에 복구 USB를 USB-C 허브로 연결
    2. 볼륨 다운(-) 버튼을 누른 채로 전원 버튼 누르기 → 부트 메뉴 진입
    3. USB 드라이브 선택해서 부팅
    4. 복구 화면에서 “Reimage Steam Deck” 선택
    5. 설치 완료까지 기다리기 (약 10~20분 소요)
    6. 재부팅 후 초기 설정 진행

    드디어 됐다! 싶은 순간이 여기서 오더라고요. 새 SSD에 깔끔하게 SteamOS가 올라오는 거 보면 진짜 뿌듯합니다 🎉

    5단계: 백업 데이터 복원

    OS 설치 후 Steam에 로그인하면 클라우드 저장 게임들은 자동으로 복원됩니다. 수동으로 백업해둔 저장 파일은 아래처럼 복원하면 돼요.

    # 데스크탑 모드 터미널에서 백업 파일 복원
    cp -r /run/media/mmcblk0p1/backup_userdata/ /home/deck/.local/share/Steam/userdata/
    
    # 권한 설정
    chown -R deck:deck /home/deck/.local/share/Steam/userdata/

    ⚠️ 실제로 겪은 트러블슈팅

    제가 처음 스팀덱 SSD 업그레이드할 때 몇 가지 삽질을 했습니다. 여러분은 같은 실수 반복하지 마시라고 공유드려요.

    문제 1: 뒷면 커버가 안 열려요

    처음에 픽을 너무 세게 밀어서 커버 클립 하나를 부러뜨렸습니다. 스팀덱 뒷면 커버는 클립으로 고정되어 있는데, 나사를 다 풀었다고 바로 확 열면 안 됩니다. 아랫부분(충전 포트 쪽)부터 천천히, 조금씩 틈을 벌려가며 진행해야 해요. 픽을 밀기보다 비틀어주는 느낌으로요.

    문제 2: 부팅이 안 돼요

    SSD 장착 후 전원을 켰는데 아무것도 안 뜨는 경우가 있습니다. 대부분 SSD가 완전히 슬롯에 안 꽂힌 경우예요. 다시 분해해서 SSD를 한 번 뺐다가 확실히 눌러서 다시 꽂아보세요. 저도 이 증상으로 한 번 더 분해했습니다 ㅎㅎ.

    문제 3: 복구 USB가 인식이 안 돼요

    USB 드라이브 포맷 문제일 수 있습니다. Rufus나 balenaEtcher로 다시 구워보세요. 또한 USB-C 허브의 호환성 문제도 있을 수 있으니 다른 허브나 어댑터를 시도해보는 것도 방법입니다.

    스팀덱 SSD 업그레이드 후 성능 향상 체감

    스팀덱 성능 향상 측면에서 솔직하게 말씀드리면, 게임 플레이 자체의 FPS가 극적으로 올라가지는 않습니다. GPU나 CPU가 바뀐 게 아니니까요. 하지만 체감되는 부분은 분명히 있습니다.

    • ✅ 게임 로딩 시간 단축: 특히 eMMC에서 NVMe로 바꾼 경우 확실히 빠릅니다
    • ✅ 저장 공간 여유: 더 많은 게임을 설치할 수 있는 건 당연하고, 삭제/재설치 반복 스트레스에서 해방
    • ✅ 셰이더 컴파일 시간 감소: 일부 게임에서 체감 가능
    • ✅ OS 반응성 향상: 데스크탑 모드에서 전반적으로 더 쾌적

    스팀덱 SSD 업그레이드 전후 로딩 시간 비교 — NVMe SSD로 교체 후 게임 로딩 속도가 개선되는 것을 확인할 수 있습니다.

    MicroSD 카드 vs SSD 업그레이드, 뭐가 나을까?

    사실 저장 공간만 늘리고 싶다면 MicroSD 카드로도 해결이 됩니다. 비용도 훨씬 저렴하고요. 그럼 굳이 스팀덱 SSD 업그레이드를 해야 할까요?

    구분 MicroSD 확장 SSD 업그레이드
    비용 상대적으로 저렴 상대적으로 고가
    난이도 매우 쉬움 (그냥 꽂으면 됨) 분해 필요, 중간 난이도
    속도 NVMe 대비 느림 빠름
    안정성 카드 분실/손상 위험 내장이라 안정적
    OS 설치 가능 불가 (게임 저장만) 가능
    보증 영향 없음 보증 영향 가능성 있음

    💡 제 추천은 이렇습니다: 저장 공간만 필요하면 MicroSD, 성능과 안정성까지 원하면 SSD 업그레이드. 저는 두 가지를 병행해서 SSD에는 자주 하는 게임, MicroSD에는 가끔 하는 게임을 넣어두는 방식으로 쓰고 있습니다.

    자주 묻는 질문 (FAQ)

    Q. 스팀덱 SSD 업그레이드하면 보증이 사라지나요?

    Valve는 공식적으로 사용자의 수리 및 업그레이드를 지지하는 입장이고, iFixit과 파트너십도 맺고 있습니다. 다만 업그레이드 과정에서 다른 부품이 손상되면 그 부분은 보증 처리가 어려울 수 있으니 신중하게 진행하세요.

    Q. 어떤 M.2 2230 SSD를 사야 하나요?

    시중에서 판매되는 M.2 2230 NVMe SSD 중 검증된 제품들을 선택하시면 됩니다. 구매 전 스팀덱 커뮤니티(Reddit r/SteamDeck 등)에서 호환성 확인 후 구매하시는 걸 추천합니다. 용량은 512GB 이상을 권장합니다.

    Q. 기존 SSD 데이터를 새 SSD로 그대로 복사할 수 있나요?

    가능은 합니다. USB-C 허브와 M.2 외장 케이스를 이용해 클론(Clone) 작업을 할 수 있어요. 다만 SteamOS를 새로 설치하는 게 더 깔끔하고 문제도 적더라고요. 저는 그냥 새로 설치하는 걸 선호합니다.

    Q. 분해 중 배터리 커넥터를 꼭 뽑아야 하나요?

    네, 꼭 뽑아야 합니다. 배터리가 연결된 상태에서 작업하면 쇼트 위험이 있습니다. 안전 제일이에요.

    스팀덱 SSD 업그레이드 가이드 요약 인포그래픽 — 준비물, 작업 단계, 주의사항을 한눈에 정리했습니다.

    마무리하며

    스팀덱 SSD 업그레이드, 처음엔 겁이 나는 게 사실입니다. 저도 그랬거든요. 근데 막상 해보면 생각보다 어렵지 않아요. 침착하게 단계별로 따라가면 충분히 할 수 있습니다.

    핵심만 다시 정리하면:

    1. 반드시 M.2 2230 NVMe 규격 확인
    2. 작업 전 데이터 백업과 복구 USB 준비는 필수
    3. 분해는 천천히, 플라스틱 도구로
    4. SSD 교체 후 SteamOS 복구 이미지로 재설치
    5. 저장 공간만 필요하면 MicroSD 병행도 좋은 선택

    다음 글에서는 스팀덱 데스크탑 모드 활용법과 외부 디스플레이 연결로 PC처럼 쓰는 방법을 다룰 예정이에요. 스팀덱을 더 잘 활용하고 싶으신 분들께 도움이 될 것 같습니다.

    궁금한 점 있으시면 댓글로 남겨주세요. 제가 경험한 범위 내에서 최대한 답변드릴게요 😊