13년차의 서버실

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

[작성자:] admin

  • [Synology NAS] 데이터 복구 및 백업 전략: Hyper Backup과 Snapshot Replication 완벽 가이드

    [Synology NAS] 데이터 복구 및 백업 전략: Hyper Backup과 Snapshot Replication 완벽 가이드

    데이터 날린 그날, 저는 진짜 멘붕이었습니다

    몇 년 전 일인데요, 홈랩에서 운영하던 Synology NAS의 볼륨 하나가 갑자기 마운트가 안 되는 상황이 생겼습니다. 당시 저는 DSM(DiskStation Manager) 업데이트를 막 마친 참이었는데, 재부팅 후 볼륨 상태가 Degraded(저하됨)로 뜨더라고요. 식은땀이 났죠. 그 볼륨에는 수년 치 사진 원본 파일이랑 업무용 스크립트들이 잔뜩 들어있었거든요.

    다행히 그때는 Hyper Backup으로 주기적으로 백업을 해두고 있었고, 결국 데이터는 복구했습니다. 근데 그 경험이 저한테는 엄청난 교훈이 됐어요. “백업은 있는데 복구 테스트를 한 번도 안 해봤다”는 게 얼마나 위험한 건지 그날 뼈저리게 깨달았습니다.

    오늘은 Synology NAS 데이터 복구를 실제로 어떻게 준비하고 실행하는지, 제가 직접 써보고 정착시킨 백업 전략을 공유해 드리려고 합니다. Hyper Backup과 Snapshot Replication(스냅샷 복제), 이 두 도구를 어떻게 조합해서 쓰는지가 핵심입니다.

    Synology NAS 백업 전략 아키텍처 — Hyper Backup과 Snapshot Replication 이중 구성 다이어그램

    ▲ Synology NAS의 이중 백업 전략 — Hyper Backup과 Snapshot Replication을 레이어로 구성한 전체 아키텍처 개요


    먼저 개념부터: 왜 두 가지 도구가 필요한가요?

    처음에 저도 “백업 하나면 되는 거 아냐?” 싶었는데, 실제로 써보니까 두 도구가 커버하는 영역이 완전히 달라요. 쉽게 설명해 드릴게요.

    Hyper Backup — 장거리 안전망

    Hyper Backup은 NAS의 데이터를 외부 대상(다른 NAS, 외장 드라이브, 클라우드 등)으로 증분 백업(Incremental Backup)하는 도구입니다. 변경된 파일만 백업해서 저장 공간을 효율적으로 씁니다.

    • 백업 대상: 폴더, 패키지, 시스템 설정까지 포함 가능
    • 보관 기간: 버전 관리로 특정 시점으로 되돌리기 가능
    • 대상 저장소: 로컬 드라이브, 원격 NAS, Amazon S3, Backblaze B2, Google Drive 등
    • 복구 단위: 파일 단위 또는 전체 백업 세트 복구

    쉽게 말해, 몇 주 전 상태로 돌아가야 할 때 쓰는 도구예요. 랜섬웨어에 감염됐는데 3주 전 파일이 필요할 때 같은 상황이죠.

    Snapshot Replication — 단거리 빠른 복원

    Snapshot Replication(스냅샷 복제)은 Btrfs 파일 시스템 기반의 볼륨/공유 폴더 스냅샷을 찍어두는 기능입니다. 운영 중인 상태를 그대로 순간 포착해두는 거죠.

    • 스냅샷 간격: 최소 5분 단위까지 설정 가능
    • 복구 속도: 거의 즉각적 (파일 시스템 레벨 작업)
    • 복구 단위: 공유 폴더 전체 또는 개별 파일
    • 전제 조건: Btrfs 파일 시스템으로 포맷된 볼륨 필요

    오늘 오전에 실수로 파일을 지웠는데 바로 되돌려야 할 때, 이게 훨씬 빠르고 편합니다. “어? 방금 지웠는데?” 싶을 때 쓰는 거죠.

    구분 Hyper Backup Snapshot Replication
    주요 용도 장기 보존, 외부 백업 빠른 단기 복원
    복구 속도 상대적으로 느림 (파일 복사) 매우 빠름 (메타데이터 조작)
    저장 위치 외부 대상 필수 동일 볼륨 내 가능
    파일 시스템 ext4, Btrfs 모두 지원 Btrfs 전용
    버전 관리 최대 수십~수백 버전 설정에 따라 수십 개
    재해 복구 강함 (오프사이트 가능) 약함 (NAS 자체 장애시 무력)

    이 둘을 조합하는 게 핵심입니다. 스냅샷은 빠른 일상 복원용, Hyper Backup은 재해(Disaster) 상황 대비용이에요.


    Snapshot Replication 설정하기 — 먼저 이걸 켜두세요

    스냅샷은 설정이 간단하고 효과가 즉각적이라서 먼저 세팅해 두는 걸 추천드려요. 단, 앞서 말씀드린 것처럼 Btrfs 파일 시스템이 전제입니다. DSM에서 볼륨 생성할 때 Btrfs를 선택했어야 해요. ext4로 만들어뒀다면 Snapshot Replication은 쓸 수 없어요 — 이거 처음에 모르고 삽질했었습니다 ㅎㅎ.

    1단계: Snapshot Replication 패키지 설치

    1. DSM 패키지 센터(Package Center)에서 “Snapshot Replication” 검색 후 설치
    2. 설치 완료 후 패키지를 실행

    2단계: 공유 폴더(Shared Folder) 스냅샷 활성화

    1. Snapshot Replication 앱 실행
    2. 좌측 메뉴에서 스냅샷(Snapshots) 선택
    3. 스냅샷을 활성화할 공유 폴더 선택
    4. 설정(Settings) 클릭 → 스케줄 탭으로 이동

    저는 아래처럼 스케줄을 구성해서 쓰고 있어요:

    # Snapshot Replication 권장 스케줄 예시
    # (DSM UI에서 설정하는 값 기준)
    
    스냅샷 간격: 매시간 (1시간마다)
    보관 정책 (Retention Policy):
      - 최근 24시간: 시간별 스냅샷 유지
      - 최근 30일: 일별 스냅샷 유지
      - 최근 12개월: 주별 스냅샷 유지
    
    앱 일관성(Application Consistency): 활성화 권장
    # → 데이터베이스 등 앱 실행 중에도 일관된 스냅샷 보장

    3단계: 사용자 셀프 서비스 복원 활성화

    이게 진짜 꿀기능인데요. 활성화해두면 일반 사용자도 Windows의 “이전 버전” 기능처럼 파일을 직접 복원할 수 있어요. 관리자한테 매번 요청 안 해도 되니까 가족이나 팀 구성원이 있는 환경에서 특히 편합니다.

    1. 공유 폴더 선택 → 설정 → 고급(Advanced) 탭
    2. “사용자가 이전 버전에 액세스할 수 있도록 허용” 체크
    3. SMB(Windows 파일 공유)로 접근 시 파일 우클릭 → “이전 버전” 탭에서 복원 가능
    Synology DSM Snapshot Replication 스케줄 및 보관 정책 설정 화면

    ▲ DSM의 Snapshot Replication 설정 화면 — 스케줄 간격과 보관 정책을 이렇게 구성하면 실수로 지운 파일도 빠르게 복원할 수 있습니다


    Hyper Backup 설정하기 — 진짜 백업은 이거예요

    Snapshot Replication은 NAS 자체가 고장나면 의미가 없어요. 진짜 재해 복구(Disaster Recovery)를 위해서는 반드시 오프사이트 백업(Off-site Backup)이 필요합니다. 저는 Hyper Backup으로 외부 NAS와 클라우드 두 곳에 백업을 보내고 있어요.

    1단계: 백업 대상 선택

    Hyper Backup이 지원하는 백업 대상은 다양합니다:

    • 로컬 폴더 및 USB 드라이브
    • 원격 NAS (rsync 또는 Synology 전용 프로토콜)
    • Amazon S3 및 S3 호환 스토리지 (Wasabi, MinIO 등)
    • Backblaze B2
    • Google Drive, Microsoft OneDrive, Dropbox
    • Azure Blob Storage

    저는 로컬 NAS → 외부 NAS(원격) + Backblaze B2(클라우드) 구조로 3-2-1 백업 전략을 구현하고 있어요.

    💡 3-2-1 백업 규칙: 데이터 3개 복사본, 2가지 다른 미디어, 1개는 오프사이트 보관. 백업의 황금 법칙입니다.

    2단계: Hyper Backup 작업 생성

    1. DSM 메인 메뉴 → Hyper Backup 실행
    2. 좌하단 + 버튼 → 데이터 백업 작업(Data Backup Task) 선택
    3. 백업 대상 유형 선택 (예: Synology C2, Amazon S3, 원격 NAS 등)
    4. 연결 정보 입력 후 다음

    3단계: 백업 폴더 및 애플리케이션 선택

    # Hyper Backup 백업 대상 선택 권장 항목
    
    [공유 폴더]
    ✅ photo          # 사진 폴더
    ✅ documents      # 문서 폴더  
    ✅ homes          # 사용자 홈 폴더
    ✅ docker         # Docker 볼륨 (있는 경우)
    
    [애플리케이션 (Application)]
    ✅ DSM 구성 (시스템 설정 백업)
    ✅ 사용 중인 패키지 설정들
    # 예: Surveillance Station, Note Station 등
    
    # 주의: Docker 컨테이너 데이터는
    # 볼륨 폴더 백업과 병행해야 합니다

    4단계: 스케줄 및 버전 보관 정책 설정

    # Hyper Backup 권장 설정 값
    
    백업 스케줄: 매일 새벽 3:00 AM
    # 시스템 부하가 적은 시간대 권장
    
    버전 보관 정책 (Smart Recycle):
      - 최근 1~7일: 매일 1개 버전 보관
      - 최근 1~4주: 매주 1개 버전 보관  
      - 최근 1~12개월: 매월 1개 버전 보관
    
    암호화(Encryption): 활성화 강력 권장
    # 클라우드 백업 시 특히 중요
    # ⚠️ 암호화 키 분실 시 복구 불가 — 반드시 키 별도 보관!
    
    알림(Notification): 이메일 또는 푸시 알림 설정
    # 백업 실패 즉시 인지하기 위해 필수

    ⚠️ 중요 경고: 암호화를 활성화했다면 암호화 키를 반드시 NAS 외부에 별도로 저장해두세요. 저도 이걸 USB에 인쇄해서 물리적으로 보관하고 있어요. NAS가 날아가면 키도 같이 날아가니까요.


    ⚠️ 실제로 겪은 문제들과 해결법

    이론은 이론이고, 실제로 써보면 별별 문제가 다 생기더라고요. 제가 삽질했던 것들 몇 가지 공유해 드릴게요.

    문제 1: Snapshot이 안 찍힌다 — ext4 볼륨이었던 것

    Snapshot Replication 설정해놨는데 스냅샷이 하나도 안 생기는 거예요. 알고 보니 해당 볼륨이 ext4로 포맷되어 있었던 거였습니다. Btrfs가 아니면 스냅샷 자체가 불가능해요. 이 경우엔 볼륨을 다시 만들어야 하는데, 그럼 데이터 마이그레이션이 필요합니다.

    💡 확인 방법: DSM → 저장소 관리자(Storage Manager) → 볼륨 선택 → 파일 시스템 항목 확인

    문제 2: Hyper Backup 작업이 자꾸 실패

    클라우드 백업이 며칠째 실패 알림이 오는 거예요. 로그를 보니 연결 타임아웃이었는데, 원인은 백업 데이터가 너무 커서 업로드 중간에 끊기는 거였습니다. 해결책은 두 가지였어요:

    1. 첫 백업은 최대한 대상 데이터를 줄인 상태에서 실행 (초기 풀 백업 완료 후 증분만 돌리기)
    2. 백업 시간대를 네트워크 사용량이 적은 새벽으로 변경

    문제 3: 복구 테스트 안 했다가 낭패

    이게 제일 중요한 교훈인데요. 백업은 있는데 복구가 안 되면 의미가 없잖아요. 저는 6개월 동안 Hyper Backup을 돌리면서 한 번도 복구 테스트를 안 했었어요. 그러다 실제 복구가 필요한 상황이 왔을 때 백업 파일이 손상되어 있는 걸 발견했습니다. 진짜 식은땀 났죠.

    지금은 분기에 한 번 복구 테스트를 캘린더에 넣어두고 반드시 실행합니다. 방법은 아래와 같아요:

    # Hyper Backup 복구 테스트 절차
    
    1. Hyper Backup Vault 또는 Hyper Backup Explorer 실행
       (백업 대상 NAS에 설치된 Vault, 또는 PC용 Explorer 사용)
    
    2. 백업 저장소 연결 → 특정 날짜 버전 선택
    
    3. 테스트 폴더로 일부 파일 복원 시도
       예: /photo/2023 폴더 중 샘플 10개 파일
    
    4. 복원된 파일 무결성 확인
       - 파일이 정상적으로 열리는지
       - 파일 크기가 원본과 일치하는지
    
    5. DSM → Hyper Backup → 통계(Statistics)에서
       백업 무결성 검사(Backup Integrity Check) 실행
    Synology NAS 데이터 복구 화면 — Hyper Backup 날짜별 버전 선택 및 파일 복원 인터페이스

    ▲ Hyper Backup 복구 화면 — 날짜별 버전을 선택해 특정 시점의 파일을 복원할 수 있습니다. 분기 1회 복구 테스트를 꼭 해보세요


    실제 데이터 복구 시나리오별 대응법

    “어떤 상황에 뭘 써야 하나” 헷갈리실 것 같아서 시나리오별로 정리해 드릴게요.

    시나리오 A: 파일 실수로 삭제 (오늘 발생)

    1. Snapshot Replication 앱 실행
    2. 해당 공유 폴더 선택 → 찾아보기(Browse)
    3. 삭제 직전 시점의 스냅샷 선택
    4. 파일 선택 → 복원(Restore) 또는 다운로드

    ✅ 보통 1~2분 내로 해결됩니다.

    시나리오 B: 랜섬웨어 감염 (수일 전 파일 필요)

    1. 즉시 NAS 네트워크 연결 차단 (추가 감염 방지)
    2. Hyper Backup 실행 → 감염 이전 날짜 버전 선택
    3. 격리된 환경에 복원 후 파일 검증
    4. 볼륨 초기화 후 클린 복원

    ⚠️ 이때 스냅샷은 이미 랜섬웨어에 의해 오염됐을 가능성이 있어요. 반드시 외부 백업(Hyper Backup)에서 복원하세요.

    시나리오 C: NAS 하드웨어 완전 고장

    1. 새 NAS 또는 교체 NAS에 DSM 설치
    2. Hyper Backup 설치 후 백업 저장소 연결
    3. 전체 복원(Full Restore) 실행 — 시스템 설정 포함 복원 가능
    4. 패키지 설정까지 백업해뒀다면 거의 원상 복구 가능

    저는 이 시나리오를 실제로 겪었는데, DSM 설정까지 백업해둔 덕분에 새 NAS 세팅 시간이 정말 많이 줄었습니다. 처음엔 이게 되나 싶었는데 진짜 되더라고요 ㅎㅎ.


    제가 최종 정착한 백업 구성 — 참고하세요

    여러 번 바꾸고 다듬어서 지금은 이 구성으로 안정적으로 운영 중입니다:

    # 홈랩 NAS 백업 구성 (최종)
    
    [1레이어] Snapshot Replication
      - 대상: 모든 Btrfs 공유 폴더
      - 주기: 매시간
      - 보관: 24시간(시간별) + 30일(일별)
      - 목적: 빠른 파일 복원
    
    [2레이어] Hyper Backup → 외장 USB HDD
      - 주기: 매일 새벽 2:00 AM
      - 보관: Smart Recycle (월별 최대 12개월)
      - 암호화: 활성화
      - 목적: 로컬 오프사이트 복사본
    
    [3레이어] Hyper Backup → Backblaze B2
      - 주기: 매일 새벽 3:30 AM
      - 보관: Smart Recycle (월별 최대 12개월)
      - 암호화: 활성화
      - 목적: 클라우드 오프사이트 (화재/도난 대비)
    
    [검증]
      - 매주: 백업 완료 알림 이메일 확인
      - 분기: 실제 파일 복원 테스트
      - 연간: 전체 복구 시뮬레이션

    이 구성이면 3-2-1 백업 전략을 완전히 충족하고, 일상적인 실수부터 하드웨어 전체 고장까지 대부분의 시나리오에 대응할 수 있어요.

    3-2-1 백업 전략 인포그래픽 — Synology NAS 3단계 데이터 보호 구조 요약

    ▲ 3-2-1 백업 전략 요약 인포그래픽 — Snapshot, 로컬 외장드라이브, 클라우드를 조합한 3단계 보호 구조


    자주 묻는 질문 (FAQ)

    Q. Snapshot Replication은 용량을 많이 차지하나요?

    Btrfs의 Copy-on-Write(CoW) 특성 덕분에 변경된 블록만 추가 저장해요. 파일 변경이 적은 환경에서는 스냅샷 용량 증가가 미미합니다. 다만 파일 변경이 잦은 폴더(예: 다운로드 폴더)는 스냅샷 보관 수를 줄이는 게 좋아요.

    Q. Hyper Backup 초기 백업이 너무 오래 걸려요

    첫 풀 백업은 데이터 크기에 따라 며칠이 걸릴 수 있습니다. 처음엔 백업 대상 폴더를 최소화해서 시작하고, 이후 점진적으로 추가하는 방식을 추천드려요. 또는 USB HDD에 먼저 풀 백업 후 클라우드로 이관하는 방법도 있어요.

    Q. ext4 볼륨인데 스냅샷을 쓸 수 없나요?

    네, Snapshot Replication은 Btrfs 전용입니다. ext4 환경이라면 Hyper Backup만으로 백업 전략을 구성하시거나, 새 볼륨 생성 시 Btrfs를 선택하는 걸 권장드려요.

    Q. DSM 버전에 따라 기능 차이가 있나요?

    Hyper Backup과 Snapshot Replication은 DSM 6.x 이후 버전에서 안정적으로 지원됩니다. DSM 7.x에서 UI가 개선되고 일부 기능이 추가됐으니, 최신 DSM 유지를 권장합니다.


    마무리 — 백업은 있는 게 아니라 복구되는 게 중요합니다

    결국 제가 이 글에서 가장 강조하고 싶은 건 하나예요. “백업을 설정했다”는 것과 “복구할 수 있다”는 건 완전히 다른 얘기입니다. 저도 그 차이를 몸으로 배웠거든요.

    Synology NAS 데이터 복구를 위한 전략을 정리하면:

    • ✅ Snapshot Replication으로 빠른 일상 복원 레이어 구성
    • ✅ Hyper Backup으로 외부 오프사이트 백업 구성
    • ✅ 3-2-1 원칙 준수
    • ✅ 분기 1회 이상 실제 복구 테스트 반드시 실행
    • ✅ 백업 실패 알림 설정으로 문제 즉시 인지

    데이터가 날아가고 나서 후회하는 것만큼 억울한 게 없어요. 오늘 당장 복구 테스트 한 번 해보시는 걸 강력 추천드립니다. 생각보다 간단하고, 그 안도감은 진짜거든요. 🎉

    다음 글에서는 Synology NAS의 능동적 보안 설정 — 방화벽 규칙 구성과 2FA(이중 인증) 강화 방법을 다뤄볼 예정입니다. 백업 전략을 완성했다면 보안도 같이 챙겨야 하니까요. 이전 글에서는 Synology NAS 초기 세팅 가이드를 다뤘으니 참고해 보세요.

  • [3D Printer] 3D 프린터 출력 실패 원인 분석 및 해결: 흔한 문제와 트러블슈팅

    [3D Printer] 3D 프린터 출력 실패 원인 분석 및 해결: 흔한 문제와 트러블슈팅

    3D 프린터 출력 실패, 저도 처음엔 정말 많이 당했습니다

    홈랩에 3D 프린터를 들인 게 벌써 꽤 됐는데요, 솔직히 말하면 처음 몇 달은 성공보다 실패가 훨씬 많았습니다. 출력 도중 필라멘트가 허공에 뭉치고, 바닥에서 뜯겨 나가고, 노즐에서 아무것도 안 나오는 상황을 수도 없이 겪었거든요. 그때마다 ‘이게 뭔가 잘못된 건가’ 싶어서 포럼이며 유튜브며 닥치는 대로 찾아봤던 기억이 납니다.

    3D 프린터 출력 실패는 처음 접하는 분들에게는 정말 막막한 경험이에요. 슬라이서(Slicer) 설정, 필라멘트 특성, 프린터 하드웨어 상태까지 변수가 너무 많거든요. 그래서 오늘은 제가 직접 겪고 해결한 경험들을 바탕으로, 3D 프린터 출력 실패의 흔한 원인들과 트러블슈팅 방법을 정리해 드리려고 합니다. 같은 삽질은 반복하지 않으셨으면 해서요 😊

    3D 프린터 출력 실패 사례 모음 — 워핑, 층 분리, 스트링 등 다양한 출력물 불량 유형

    ▲ 3D 프린터에서 자주 발생하는 출력 실패 유형들 — 워핑, 층 분리, 스트링, 노즐 막힘 등 다양한 불량 사례


    3D 프린터 출력 실패, 왜 이렇게 종류가 많을까?

    쉽게 말해서, 3D 프린팅은 수백 개의 설정값이 동시에 맞아 떨어져야 제대로 되는 작업이에요. 온도, 속도, 레이어 높이, 필라멘트 습도, 베드(Bed) 레벨링 상태… 이 중에 하나라도 틀어지면 바로 출력물 불량으로 이어지거든요.

    FDM(Fused Deposition Modeling, 열가소성 수지를 녹여 층층이 쌓는 방식) 방식 프린터를 기준으로 말씀드리면, 3D 프린터 출력 실패 원인은 크게 다음 세 영역에서 발생합니다.

    • 하드웨어 문제: 노즐 막힘, 베드 레벨링 불량, 벨트 장력 이상 등
    • 슬라이서 설정 문제: 온도, 속도, 레트랙션(Retraction) 설정 오류 등
    • 필라멘트 문제: 흡습(습기 흡수), 품질 불량, 직경 불균일 등

    각 원인별로 어떻게 나타나고, 어떻게 해결하는지 하나씩 짚어볼게요.


    문제 1: 워핑(Warping) — 출력물이 베드에서 떠오른다

    워핑이란?

    워핑(Warping)은 출력물의 모서리나 바닥 부분이 베드에서 들뜨면서 뒤틀리는 현상이에요. 특히 ABS(Acrylonitrile Butadiene Styrene) 필라멘트를 쓸 때 정말 자주 발생하는 문제고, PLA(Polylactic Acid)도 대형 출력물에서는 꽤 나타나더라고요.

    제가 처음 ABS 출력을 시도했을 때 거의 매번 모서리가 들려서 출력물이 사다리꼴이 되는 참사를 겪었습니다 ㅎㅎ

    워핑 원인

    • 필라멘트 냉각 시 수축률이 높음 (특히 ABS)
    • 베드 온도가 낮거나 히팅 베드(Heated Bed)가 없는 경우
    • 첫 레이어(First Layer) 접착력 부족
    • 출력 환경의 급격한 온도 변화 (에어컨, 선풍기 바람 등)

    워핑 해결 방법

    1. 베드 온도 올리기: PLA는 55~65°C, ABS는 100~110°C 정도가 기준이에요. 낮으면 접착력이 떨어집니다.
    2. 베드 접착 보조제 사용: 유리 베드에 헤어스프레이를 얇게 뿌리거나, PEI(폴리에테르이미드) 시트를 붙이면 접착력이 확 올라가요. 저는 PEI 시트로 바꾸고 나서 워핑 문제가 거의 사라졌거든요.
    3. 브림(Brim) 또는 래프트(Raft) 추가: 슬라이서에서 브림(Brim, 출력물 주변에 납작한 테두리를 추가하는 기능)을 5~10mm 정도 설정하면 바닥 접착 면적이 늘어나서 훨씬 안정적입니다.
    4. 인클로저(Enclosure, 밀폐 공간) 사용: ABS라면 사실상 필수예요. 주변 온도를 일정하게 유지해줘야 수축을 줄일 수 있거든요.
    5. 쿨링 팬 속도 줄이기: 첫 몇 레이어는 쿨링 팬을 끄거나 낮춰서 급격한 냉각을 방지하세요.

    문제 2: 노즐 막힘(Clog) — 필라멘트가 안 나온다

    노즐 막힘 증상

    이건 정말 갑자기 찾아오는 문제예요. 잘 나오다가 갑자기 필라멘트가 안 나오거나, 가늘게 나오거나, 아예 멈춰버리는 거죠. 익스트루더(Extruder, 필라멘트를 밀어주는 장치) 쪽에서 딸깍딸깍 소리가 나면 노즐 막힘의 신호일 가능성이 높습니다.

    노즐 막힘 원인

    • 너무 낮은 출력 온도로 필라멘트가 충분히 녹지 않음
    • 이전 필라멘트 잔여물이 탄화되어 굳어버림
    • 필라멘트에 이물질 혼입
    • 히트 크리프(Heat Creep, 열이 콜드존까지 올라오는 현상)로 인한 막힘

    노즐 막힘 해결 방법

    1. 콜드 풀(Cold Pull) 시도: 노즐을 출력 온도(예: 200°C)까지 올린 뒤, 필라멘트를 수동으로 밀어 넣다가 90°C 정도로 내린 뒤 강하게 당겨 빼는 방법이에요. 이물질이 같이 딸려 나오는 경우가 많습니다. 저도 이 방법으로 꽤 많이 해결했어요.
    2. 니들(Needle)로 뚫기: 노즐 청소용 얇은 니들을 고온에서 찔러 넣어 막힌 부분을 뚫는 방법이에요. 단, 노즐 손상에 주의하셔야 합니다.
    3. 노즐 교체: 콜드 풀로도 안 되면 그냥 새 노즐로 바꾸는 게 속 편할 때도 있어요. 소모품이라 생각하시면 됩니다.
    4. 쿨링 팬 확인: 히트 크리프가 원인이라면 히트싱크(Heatsink) 쿨링 팬이 제대로 돌고 있는지 확인하세요. 팬이 죽으면 막힘이 반복됩니다.

    콜드 풀 단계 요약 (Marlin 펌웨어 콘솔 명령 기준)

    # 1. 노즐 온도를 출력 온도까지 올리기
    M104 S200  # 노즐 목표 온도 200도 설정
    M109 S200  # 온도 도달까지 대기
    
    # 2. 필라멘트 수동으로 밀어넣기 (약 20-30mm)
    M83        # 익스트루더 상대 좌표 모드
    G1 E30 F100  # 30mm 밀어넣기
    
    # 3. 온도를 90도로 낮추기
    M104 S90
    M109 S90  # 90도까지 냉각 대기
    
    # 4. 이 시점에서 필라멘트를 손으로 강하게 잡아당기기
    # (이물질이 같이 딸려 나옴)

    문제 3: 층 분리(Layer Separation / Delamination) — 레이어가 떨어진다

    3D 프린터 층 분리와 노즐 막힘으로 인한 출력 불량 비교 사진

    ▲ 층 분리(레이어 디라미네이션)와 노즐 막힘으로 인한 출력물 불량 사례 비교

    층 분리 증상과 원인

    층 분리(Layer Separation, 또는 Delamination이라고도 해요)는 출력 중간에 레이어끼리 제대로 붙지 않아 갈라지거나 벌어지는 현상입니다. 완성된 출력물을 손으로 잡아당기면 레이어 경계에서 뚝 떨어지기도 하죠.

    • 온도가 너무 낮음: 레이어 간 융합(Fusion)이 충분히 일어나지 않아요
    • 출력 속도가 너무 빠름: 이전 레이어가 충분히 녹아 붙기 전에 다음 레이어가 올라오는 경우
    • 레이어 높이가 너무 높음: 노즐 직경 대비 레이어 높이가 지나치게 높으면 접합력이 약해짐
    • 필라멘트 흡습: 습기를 머금은 필라멘트는 출력 품질이 전반적으로 나빠짐

    층 분리 해결 방법

    1. 노즐 온도 5~10°C 올리기: 먼저 온도를 조금씩 높여가며 테스트해 보세요. PLA 기준 195~215°C 범위에서 조정하시면 됩니다.
    2. 출력 속도 낮추기: 기본 속도의 70~80% 정도로 낮춰보세요. 느린 게 답일 때가 많습니다.
    3. 레이어 높이 재확인: 일반적으로 노즐 직경의 25~75% 범위가 권장이에요. 0.4mm 노즐이면 0.1~0.3mm 레이어 높이가 적당합니다.
    4. 필라멘트 건조: 흡습된 필라멘트는 식품 건조기나 전용 필라멘트 드라이어로 건조해 주세요. 저는 식품 건조기 65°C에서 4~6시간 돌리는 편이에요.

    문제 4: 스트링(Stringing) — 거미줄 같은 실이 생긴다

    스트링 현상이란?

    출력물 사이를 이동할 때 노즐에서 가는 실 같은 필라멘트가 흘러나와 거미줄처럼 붙어있는 현상이에요. 처음엔 이게 왜 생기는지 몰라서 한참 헤맸는데, 알고 보니 레트랙션(Retraction) 설정이 핵심이더라고요.

    스트링 해결 방법

    1. 레트랙션(Retraction) 거리/속도 조정: 레트랙션은 노즐이 이동할 때 필라멘트를 살짝 뒤로 당겨서 흘러내림을 방지하는 기능이에요. 보우든(Bowden) 방식은 4~7mm, 다이렉트 드라이브(Direct Drive) 방식은 0.5~2mm 정도가 일반적입니다.
    2. 출력 온도 낮추기: 온도가 높을수록 필라멘트 점도가 낮아져 흘러내리기 쉬워요. 5°C씩 낮춰가며 테스트해 보세요.
    3. 이동 속도 높이기: 이동 중에 빠르게 지나갈수록 실이 덜 생깁니다.
    4. Combing 모드 활성화: 슬라이서에서 이동 경로를 출력물 내부로만 설정하는 기능이에요. Cura 기준으로 ‘Combing Mode’를 ‘All’ 또는 ‘Within Infill’로 설정하면 외부에 스트링이 생기는 걸 많이 줄일 수 있습니다.

    Cura 슬라이서 스트링 관련 핵심 설정값 예시 (PLA 기준)

    # 레트랙션 설정
    retraction_enable: true
    retraction_amount: 5  # 보우든 방식 기준 (mm)
    retraction_speed: 45  # mm/s
    
    # 이동 설정
    speed_travel: 150  # mm/s
    combing_mode: "noskin"  # 외부 표면 제외 내부에서만 이동
    
    # 온도 설정
    material_print_temperature: 200  # °C (스트링 심하면 195로 낮추기)
    retraction_hop_enabled: false  # Z-hop은 스트링 줄이는 데 도움되기도 함

    문제 5: 그 외 흔한 출력물 불량 증상 정리

    위에서 다룬 것 외에도 자주 만나는 3D 프린터 출력 실패 증상들이 있어요. 표로 한 번에 정리해 드릴게요.

    증상 주요 원인 해결 방법
    언더 익스트루전
    (Under-extrusion, 재료 부족)
    온도 낮음, 속도 빠름, 노즐 부분 막힘 온도 올리기, 속도 줄이기, 익스트루션 멀티플라이어 조정
    오버 익스트루전
    (Over-extrusion, 재료 과다)
    익스트루션 멀티플라이어 높음, 필라멘트 직경 설정 오류 Flow Rate(플로우 레이트) 줄이기, 필라멘트 직경 실측 후 입력
    고스팅/링잉
    (Ghosting/Ringing, 표면 물결 무늬)
    출력 속도 과다, 벨트 장력 부족, 프레임 진동 속도 줄이기, 벨트 장력 조정, 가속도(Acceleration) 값 낮추기
    코끼리 발
    (Elephant’s Foot, 첫 레이어 퍼짐)
    베드와 노즐 간격 너무 좁음, 첫 레이어 온도 너무 높음 베드 레벨링 재조정, 라이브 Z 오프셋 미세 조정
    서포트 분리 불량
    (Support Removal 어려움)
    서포트 밀도 너무 높음, Z 거리 설정 부족 서포트 Z 거리 늘리기, 서포트 밀도 낮추기

    트러블슈팅 전에 꼭 확인해야 할 기본 점검 목록

    3D 프린터 트러블슈팅 기본 점검 항목 순서도 — 베드 레벨링, 필라멘트 건조, 노즐 점검 등

    ▲ 3D 프린터 출력 실패 시 체계적으로 점검해야 할 트러블슈팅 순서도

    문제가 생겼을 때 무작정 설정을 바꾸기 전에, 기본 점검부터 하는 게 훨씬 효율적이에요. 저도 초반에 설정만 만지다가 시간 다 날린 적이 한두 번이 아니거든요.

    1. ✅ 베드 레벨링 상태 확인: 베드와 노즐 간격이 균일한지 점검. 종이 한 장 두께(약 0.1mm) 정도가 기준이에요.
    2. ✅ 필라멘트 습도 상태 확인: 출력 중 ‘치직치직’ 소리가 나거나 기포가 보이면 흡습된 것입니다. 건조 필수!
    3. ✅ 노즐 온도 및 베드 온도 실제값 확인: 설정값과 실제 온도가 다를 수 있어요. 써모커플(Thermocouple) 이상이면 교체가 필요합니다.
    4. ✅ PTFE 튜브 상태 확인: 보우든 방식이라면 PTFE 튜브(테플론 튜브)가 노즐까지 제대로 닿아 있는지, 손상은 없는지 확인하세요.
    5. ✅ 슬라이서 설정 프리셋 확인: 다른 필라멘트 프로파일이 잘못 적용되진 않았는지 체크.
    6. ✅ 익스트루더 기어 마모 확인: 필라멘트를 잡아주는 기어가 마모되면 미끄러짐이 발생합니다.

    💡 팁: 새로운 필라멘트 브랜드나 소재로 처음 출력할 때는 항상 캘리브레이션 큐브(Calibration Cube) 같은 작은 테스트 출력물부터 시작하세요. 큰 출력물 중간에 실패하는 것만큼 시간 낭비가 없거든요.


    정리: 3D 프린터 출력 실패 원인별 빠른 해결 가이드

    3D 프린터 올바른 설정 출력 성공 사례와 설정 오류 출력 실패 사례 비교

    ▲ 동일한 모델을 올바른 설정으로 출력했을 때와 설정 오류로 출력했을 때의 결과물 비교

    지금까지 다룬 내용을 한 문장씩 요약해 드릴게요.

    • ⚠️ 워핑: 베드 온도 올리고, 브림 추가하고, 인클로저로 환경 안정화
    • ⚠️ 노즐 막힘: 콜드 풀 먼저 시도, 안 되면 노즐 교체
    • ⚠️ 층 분리: 온도 올리고, 속도 낮추고, 필라멘트 건조 확인
    • ⚠️ 스트링: 레트랙션 설정 최적화, 온도 낮추기, Combing 모드 활성화
    • ⚠️ 언더/오버 익스트루전: Flow Rate 캘리브레이션이 핵심

    3D 프린터 출력 실패는 처음엔 정말 좌절스럽지만, 원인을 하나씩 찾아가다 보면 어느 순간 패턴이 보이기 시작해요. 그때부터는 문제 생겨도 ‘아, 이거 이거구나’ 하고 바로 잡을 수 있게 되더라고요. 저도 그 과정을 거쳐왔거든요.

    다음 글에서는 슬라이서(Cura, PrusaSlicer) 기초 설정 가이드를 다뤄볼 예정이에요. 설정값이 너무 많아서 어디서부터 손대야 할지 모르겠다는 분들을 위해 정리해 드리려고 합니다. 필라멘트 소재별 캘리브레이션 방법도 이전 글에서 다루고 있으니 함께 참고하시면 도움이 될 거예요.

    궁금한 점이나 저와 다른 경험 있으신 분들은 댓글로 나눠주세요. 같이 해결하면 더 빠르니까요 🎉

  • [k8s] kubectl 플러그인 추천: 생산성을 높이는 필수 도구 활용법

    [k8s] kubectl 플러그인 추천: 생산성을 높이는 필수 도구 활용법

    kubectl만으로는 부족했던 날들

    쿠버네티스(Kubernetes)를 쓰다 보면 kubectl이 얼마나 강력한 도구인지 금방 느끼게 됩니다. 근데 동시에 “이걸 좀 더 편하게 할 수 없나?”라는 생각도 같이 오더라고요. 저도 처음 몇 년은 그냥 기본 kubectl에 alias 좀 걸어놓고 썼는데, 팀원이 플러그인 쓰는 걸 보고 나서 세상이 달라 보였습니다. 😅

    특히 여러 클러스터를 동시에 관리하거나, 네임스페이스를 자주 전환하거나, 파드 로그를 한꺼번에 봐야 할 때 기본 kubectl만으로는 손이 너무 많이 가거든요. 오늘은 제가 실제로 쓰고 있는 kubectl 플러그인들을 소개해 드리려 합니다. 생산성이 진짜로 달라지는 것들만 골랐으니 한번 같이 살펴봐요.

    krew를 중심으로 한 kubectl 플러그인 생태계 구조 다이어그램

    kubectl 플러그인 생태계 — krew를 중심으로 다양한 플러그인이 연결되는 구조. 기본 kubectl에서 플러그인을 통해 기능이 확장되는 흐름을 보여줍니다.

    krew란 뭔가요? kubectl 플러그인 패키지 매니저

    kubectl 플러그인 얘기를 하려면 먼저 krew를 알아야 합니다. 쉽게 말해, kubectl 플러그인을 위한 apt나 brew 같은 패키지 매니저예요. kubectl은 $PATH에 kubectl-플러그인이름 형태의 실행 파일이 있으면 자동으로 서브커맨드로 인식하는 구조거든요. krew는 이 kubectl 플러그인들을 설치·업데이트·삭제하는 걸 한 곳에서 관리해 줍니다.

    공식 플러그인 인덱스에 200개가 넘는 플러그인이 등록돼 있고, 커뮤니티에서 계속 새로운 게 올라오고 있어요. 저도 처음엔 “그냥 직접 바이너리 받으면 되는 거 아닌가?” 싶었는데, 여러 플러그인을 쓰다 보니 krew 없이는 못 살겠더라고요 ㅎㅎ.

    krew 설치 방법

    macOS/Linux 기준으로 설치 방법은 아래와 같습니다. 공식 문서에서 제공하는 방법 그대로예요.

    # krew 설치 (bash/zsh 기준)
    (
      set -x; cd "$(mktemp -d)" &&
      OS="$(uname | tr '[:upper:]' '[:lower:]')" &&
      ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(arm\)\(64\)\?.*/\1\2/' -e 's/aarch64$/arm64/')" &&
      KREW="krew-${OS}_${ARCH}" &&
      curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz" &&
      tar zxvf "${KREW}.tar.gz" &&
      ./${KREW} install krew
    )
    
    # PATH에 krew bin 추가 (~/.bashrc 또는 ~/.zshrc에 추가)
    export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
    
    # 설치 확인
    kubectl krew version

    설치 후 source ~/.zshrc 또는 터미널 재시작을 해줘야 PATH가 적용됩니다. 이 부분에서 한 번씩 헤매시는 분들이 있더라고요. ⚠️ PATH 적용 안 하면 플러그인이 인식 안 됩니다.

    꼭 써야 할 kubectl 플러그인 추천 목록

    이제 본론입니다. 제가 홈랩에서도, 실무에서도 실제로 쓰고 있는 플러그인들이에요. 설치 명령어와 기본 사용법을 같이 정리했습니다.

    1. kubectx / kubens — 컨텍스트·네임스페이스 전환의 끝판왕

    이게 없던 시절엔 어떻게 살았나 싶을 정도예요. kubectx는 클러스터 컨텍스트(context, 어느 클러스터에 연결할지 설정)를, kubens는 네임스페이스(namespace)를 빠르게 전환해 줍니다.

    # krew로 설치
    kubectl krew install ctx
    kubectl krew install ns
    
    # 컨텍스트 목록 보기 및 전환
    kubectl ctx                    # 목록 출력
    kubectl ctx my-production      # 프로덕션 클러스터로 전환
    kubectl ctx -                  # 이전 컨텍스트로 돌아가기
    
    # 네임스페이스 전환
    kubectl ns                     # 목록 출력
    kubectl ns kube-system         # kube-system으로 전환
    kubectl ns -                   # 이전 네임스페이스로 돌아가기

    특히 fzf(퍼지 검색 도구)가 설치돼 있으면 인터랙티브 선택 메뉴가 뜨는데, 이게 진짜 편합니다. 클러스터가 5개 넘어가면 이거 없이는 진짜 힘들어요.

    2. stern — 여러 파드 로그를 한 번에

    stern은 여러 파드의 로그를 동시에 스트리밍해주는 도구입니다. 기본 kubectl logs는 파드 하나밖에 못 보잖아요. 마이크로서비스 환경에서 여러 레플리카를 동시에 봐야 할 때 정말 유용해요.

    # krew로 설치
    kubectl krew install stern
    
    # 특정 레이블의 파드 로그 전부 보기
    kubectl stern -l app=my-api
    
    # 특정 네임스페이스에서 이름 패턴으로 필터링
    kubectl stern my-api -n production
    
    # 지난 1시간치 로그부터 보기
    kubectl stern my-api --since 1h
    
    # 특정 컨테이너만 보기
    kubectl stern my-api -c main-container

    색깔별로 파드를 구분해서 출력해 주기 때문에 어느 파드에서 에러가 났는지 한눈에 보입니다. 처음 써봤을 때 “이게 왜 기본이 아니지?” 싶었어요 🎉.

    3. kubectl-neat — YAML을 깔끔하게

    kubectl get pod my-pod -o yaml 해보신 적 있으시죠? 출력이 어마어마하게 길게 나오는데, 대부분은 쿠버네티스가 자동으로 붙인 메타데이터라 실제로 내가 설정한 내용 파악하기가 힘들어요. kubectl-neat는 이 불필요한 필드들을 걸러내서 깔끔한 YAML만 보여줍니다.

    # 설치
    kubectl krew install neat
    
    # 파드 YAML을 깔끔하게 출력
    kubectl get pod my-pod -o yaml | kubectl neat
    
    # 디플로이먼트도 동일하게 활용
    kubectl get deployment my-deploy -o yaml | kubectl neat
    
    # 파일로 저장해서 재활용
    kubectl get deployment my-deploy -o yaml | kubectl neat > deploy-clean.yaml

    기존 리소스를 백업하거나, 다른 환경에 옮겨 적용할 때 진짜 요긴합니다. 삽질 좀 줄여주는 고마운 플러그인이에요.

    4. kubectl-tree — 리소스 의존관계 트리로 보기

    kubectl-tree는 쿠버네티스 리소스의 오너십(ownerReference) 관계를 트리 형태로 시각화해 줍니다. 디플로이먼트 → 레플리카셋 → 파드로 이어지는 관계를 한 눈에 볼 수 있어요.

    # 설치
    kubectl krew install tree
    
    # 디플로이먼트 트리 보기
    kubectl tree deployment my-deploy
    
    # 예시 출력
    # NAMESPACE  NAME                                    READY  REASON  AGE
    # default    Deployment/my-deploy                    -              2d
    # default    └─ReplicaSet/my-deploy-7d6b9c8f5       -              2d
    # default      ├─Pod/my-deploy-7d6b9c8f5-abc12      True           2d
    # default      └─Pod/my-deploy-7d6b9c8f5-def34      True           2d

    Helm으로 배포한 차트가 어떤 리소스들을 만들었는지 파악할 때도 편리해요. 신입 엔지니어분들한테 쿠버네티스 리소스 구조 설명할 때도 이걸 보여주면 이해가 훨씬 빠르더라고요.

    5. kubectl-whoami — 현재 인증 정보 빠르게 확인

    여러 클러스터, 여러 서비스 어카운트를 쓰다 보면 “내가 지금 어느 권한으로 붙어 있지?” 헷갈릴 때가 있어요. kubectl-whoami가 딱 그럴 때 씁니다.

    # 설치
    kubectl krew install whoami
    
    # 현재 인증 주체 확인
    kubectl whoami
    # 출력 예시: system:serviceaccount:default:my-sa

    RBAC(역할 기반 접근 제어) 트러블슈팅할 때 제일 먼저 쓰는 명령어가 됐습니다. 간단하지만 정말 자주 쓰게 되더라고요.

    stern과 kubectx 등 kubectl 플러그인이 실행되는 터미널 화면

    kubectx, stern, kubectl-tree 등 주요 플러그인이 터미널에서 실행되는 모습. 각 플러그인의 출력 형식과 색상 구분이 실제 작업 환경에서 어떻게 보이는지 확인할 수 있습니다.

    6. kubectl-df-pv — PersistentVolume 용량 현황 한눈에

    kubectl-df-pv는 PersistentVolume(영구 볼륨)의 사용량을 Linux df 명령어처럼 보여줍니다. 스토리지 모니터링할 때 Grafana 대시보드까지 열기 귀찮을 때 바로 CLI에서 확인할 수 있어서 편해요.

    # 설치
    kubectl krew install df-pv
    
    # 전체 PV 사용량 확인
    kubectl df-pv
    
    # 예시 출력
    # PVC           NAMESPACE     POD           CAPACITY  USED    AVAILABLE  PERCENTUSED  IUSED  IFREE   PERCENTIUSED
    # data-pvc      production    my-db-0       50Gi      23Gi    27Gi       46%          ...    ...     ...

    데이터베이스 파드 볼륨이 가득 차서 장애 난 경험 한 번쯤 있으시죠? 이걸로 주기적으로 확인하는 습관 들이시면 좋습니다. 💡

    7. kubectl-images — 파드에서 쓰는 이미지 목록 확인

    보안 감사나 이미지 버전 관리할 때 클러스터 전체에서 어떤 컨테이너 이미지가 쓰이고 있는지 한 번에 보고 싶을 때가 있어요. kubectl-images가 딱 그 역할입니다.

    # 설치
    kubectl krew install images
    
    # 현재 네임스페이스의 모든 이미지 목록
    kubectl images
    
    # 특정 네임스페이스
    kubectl images -n production
    
    # 전체 네임스페이스
    kubectl images -A

    이미지 태그에 latest 쓴 파드 찾아내서 혼낼 때(?) 유용합니다 ㅎㅎ. 보안팀에서 취약 이미지 버전 쓰는 파드 찾을 때도 요긴하게 씁니다.

    ⚠️ 플러그인 쓸 때 주의사항과 삽질 경험

    좋은 것만 얘기하면 섭섭하죠. 실제로 겪은 문제들도 공유합니다.

    PATH 충돌 문제

    krew로 설치한 플러그인과 시스템에 직접 설치된 바이너리가 이름이 겹치면 예상치 못한 동작이 생길 수 있어요. 예를 들어 stern을 brew로도 설치하고 krew로도 설치한 경우가 그렇습니다. which kubectl-stern으로 어느 경로가 우선인지 확인하는 습관을 들이세요.

    플러그인 버전 업데이트 누락

    krew로 설치한 플러그인은 자동 업데이트가 안 됩니다. 주기적으로 아래 명령어 실행해 주세요.

    # 설치된 플러그인 목록 확인
    kubectl krew list
    
    # 전체 업데이트
    kubectl krew upgrade
    
    # krew 자체 업데이트
    kubectl krew update

    클러스터 권한 문제

    일부 플러그인은 클러스터 전체를 조회하는 ClusterRole 권한이 필요합니다. 제한된 권한의 kubeconfig로 쓰다가 에러 나는 경우가 있어요. ⚠️ 권한 오류가 나면 플러그인 문제가 아니라 RBAC 권한 문제일 가능성이 높습니다. kubectl auth can-i로 먼저 확인해보세요.

    # 특정 동작 권한 확인
    kubectl auth can-i list pods -A
    kubectl auth can-i get persistentvolumes
    krew를 통한 kubectl 플러그인 설치 및 관리 워크플로우 다이어그램

    krew를 통한 kubectl 플러그인 설치·업데이트·삭제 워크플로우. 플러그인 인덱스에서 검색하고, 설치 후 PATH를 통해 kubectl 서브커맨드로 동작하는 흐름입니다.

    플러그인 비교 정리표

    지금까지 소개한 플러그인을 한 눈에 비교해 봤습니다.

    플러그인 krew 설치명 주요 기능 추천 상황
    kubectx ctx 클러스터 컨텍스트 전환 멀티 클러스터 환경
    kubens ns 네임스페이스 전환 네임스페이스 자주 변경시
    stern stern 다중 파드 로그 스트리밍 마이크로서비스 디버깅
    kubectl-neat neat YAML 정리·간소화 리소스 백업·마이그레이션
    kubectl-tree tree 리소스 의존관계 시각화 Helm 배포 구조 파악
    kubectl-whoami whoami 현재 인증 주체 확인 RBAC 트러블슈팅
    kubectl-df-pv df-pv PV 용량 현황 조회 스토리지 모니터링
    kubectl-images images 사용 중인 이미지 목록 보안 감사·버전 관리

    ✅ 한 번에 설치하는 스크립트

    위에서 소개한 플러그인을 한 번에 설치하고 싶으시면 아래 스크립트 쓰시면 됩니다.

    #!/bin/bash
    # kubectl 필수 플러그인 일괄 설치
    
    PLUGINS=(
      ctx
      ns
      stern
      neat
      tree
      whoami
      df-pv
      images
    )
    
    # krew 인덱스 업데이트
    kubectl krew update
    
    # 플러그인 설치
    for plugin in "${PLUGINS[@]}"; do
      echo "Installing kubectl $plugin..."
      kubectl krew install "$plugin"
    done
    
    echo "\n✅ 모든 플러그인 설치 완료!"
    kubectl krew list

    자주 묻는 질문 (FAQ)

    Q. krew 없이도 플러그인 설치할 수 있나요?

    네, 가능합니다. 플러그인 바이너리를 직접 다운로드해서 kubectl-플러그인이름 형태로 이름 짓고 $PATH에 있는 디렉토리에 넣으면 됩니다. 다만 버전 관리가 번거로워서 krew를 쓰는 게 훨씬 편해요.

    Q. 플러그인이 kubectl 버전과 호환이 안 될 수도 있나요?

    드물지만 있습니다. 특히 쿠버네티스 API 버전이 크게 바뀌는 경우 플러그인이 업데이트되기 전까지 문제가 생길 수 있어요. kubectl krew upgrade로 최신 버전 유지하시고, 문제 생기면 해당 플러그인의 GitHub 이슈 트래커 확인해 보세요.

    Q. 회사 보안 정책상 외부 플러그인 설치가 어려운데요?

    이 경우엔 플러그인 소스코드를 직접 검토하고 내부 아티팩토리(Artifactory) 같은 내부 저장소를 통해 배포하는 방식을 쓰는 팀도 있어요. krew도 커스텀 인덱스를 지원하니 내부 인덱스를 구축하는 것도 방법입니다.

    kubectl 생산성 향상을 위한 필수 플러그인 8종 요약 인포그래픽

    kubectl 생산성을 높이는 필수 플러그인 8종 요약. 각 플러그인의 역할과 추천 상황을 한눈에 정리한 인포그래픽입니다.

    마무리 — CLI 환경도 투자할 가치가 있습니다

    사실 처음엔 “플러그인 설치하고 관리하는 것도 귀찮은 일 아닌가?” 싶었는데, 한 번 손에 익으면 그냥 기본 kubectl로 돌아가기가 싫어지더라고요. 특히 stern이랑 kubectx/kubens는 진짜 하루에도 수십 번씩 쓰고 있습니다.

    홈랩에서 먼저 익히고 실무에 가져가는 방식을 추천드려요. 처음부터 프로덕션 클러스터에서 새 도구 쓰다가 실수하면 곤란하니까요 😅. 오늘 소개한 플러그인들은 조회 위주라 부작용 걱정은 크게 안 하셔도 됩니다.

    다음 글에서는 kubectl 단축키 설정과 쉘 자동완성(shell completion) 세팅 방법을 다뤄볼 예정입니다. 플러그인이랑 함께 쓰면 생산성이 한 단계 더 올라가거든요. 기대해 주세요! 💡

    혹시 제가 소개 못 한 플러그인 중에 여러분이 즐겨 쓰는 게 있으면 댓글로 알려주세요. 저도 계속 배우는 중이라 좋은 도구 있으면 바로 써보고 싶습니다 🙂

  • [k8s] Longhorn 쿠버네티스 영구 스토리지 완벽 가이드: 설치부터 PV/PVC까지

    [k8s] Longhorn 쿠버네티스 영구 스토리지 완벽 가이드: 설치부터 PV/PVC까지

    목차

    파드가 죽으면 데이터도 같이 사라진다고요? 😱

    쿠버네티스 공부하다가 처음으로 맞닥뜨리는 벽 중 하나가 바로 스토리지(Storage) 문제거든요. 저도 처음에 홈랩에 k3s 클러스터 꾸려놓고 MySQL 파드 띄웠다가, 파드 재시작하니까 데이터가 싹 날아간 경험을 했었는데요. 그때 진짜 멘붕이었죠 ㅎㅎ

    쿠버네티스에서 파드(Pod)는 기본적으로 ephemeral(일시적인) 존재입니다. 파드가 죽고 다시 살아나면 컨테이너 내부 파일시스템은 초기화돼요. 그래서 데이터베이스나 파일 서버처럼 상태를 유지해야 하는 워크로드에는 반드시 영구 스토리지(Persistent Storage)가 필요하죠.

    근데 쿠버네티스 스토리지 설정이 처음엔 진짜 복잡하게 느껴지거든요. PV, PVC, StorageClass… 용어만 해도 헷갈리는데, 여기에 분산 스토리지까지 얹으면 더 막막하죠. 오늘은 제가 홈랩에서 직접 운영하면서 가장 만족스럽게 쓰고 있는 Longhorn을 소개해드리려고 합니다. Longhorn 설치부터 PV/PVC 관리까지 한 번에 정리해볼게요.

    Longhorn 분산 스토리지 쿠버네티스 아키텍처 다이어그램

    ▲ Longhorn의 전체 아키텍처: 쿠버네티스 클러스터 내에서 각 노드의 디스크를 묶어 분산 스토리지를 구성하는 방식을 보여줍니다.

    Longhorn이 뭔가요? — 쉽게 말하면 이런 겁니다

    Longhorn 핵심 개념 정리

    Longhorn은 CNCF(Cloud Native Computing Foundation) 프로젝트로 편입된 쿠버네티스 전용 분산 블록 스토리지(Distributed Block Storage) 솔루션이에요. Rancher Labs(현 SUSE)에서 만들었고, 오픈소스로 무료로 사용할 수 있습니다.

    쉽게 말해서, 클러스터에 있는 여러 노드의 디스크를 하나로 묶어서 마치 네트워크 스토리지처럼 쓸 수 있게 해주는 거예요. 그리고 데이터를 여러 노드에 복제(Replication)해서 노드 하나가 죽어도 데이터가 안전하게 보존되죠.

    제가 Longhorn을 선택한 이유는 딱 세 가지였어요:

    • 💡 웹 UI가 있다 — 대시보드에서 볼륨 상태를 한눈에 볼 수 있어요. 이게 진짜 편하더라고요.
    • 💡 설치가 간단하다 — Helm 차트나 kubectl 한 방으로 설치 가능
    • 💡 스냅샷/백업 기능 — Longhorn 볼륨 스냅샷이나 S3 백업 연동이 기본 탑재

    PV, PVC, StorageClass — 헷갈리는 개념 한번에 정리

    저도 처음엔 이 세 개 개념이 너무 헷갈렸는데요. 비유로 설명하면 이해가 쉬워요.

    개념 풀네임 비유 설명
    PV PersistentVolume 실제 창고 공간 관리자가 미리 만들어둔 실제 스토리지 리소스
    PVC PersistentVolumeClaim 창고 사용 신청서 사용자(파드)가 필요한 스토리지를 요청하는 오브젝트
    StorageClass StorageClass 창고 종류/등급 PV를 동적으로 생성하는 방법을 정의한 템플릿

    Longhorn을 설치하면 longhorn이라는 StorageClass가 자동으로 생성되고, PVC를 만들면 그에 맞는 PV가 자동으로 프로비저닝(Dynamic Provisioning)돼요. 직접 PV를 만들 필요가 없어서 진짜 편합니다.

    사전 준비 — 설치 전에 꼭 확인하세요 ⚠️

    노드 요구사항 체크리스트

    Longhorn 설치 전에 반드시 확인해야 할 것들이 있어요. 저도 처음에 이걸 빠뜨려서 삽질을 좀 했거든요 ㅎㅎ

    1. open-iscsi 패키지 설치 — 각 노드에 반드시 필요합니다
    2. NFSv4 클라이언트 — 백업 기능 사용 시 필요
    3. curl, findmnt, grep, awk, blkid, lsblk — 기본 유틸리티 확인
    4. 마운트 전파(Mount Propagation) — 컨테이너 런타임 설정 확인

    Longhorn 공식에서는 사전 체크 스크립트를 제공해줘요. 이걸 먼저 돌려보는 게 좋습니다:

    # Longhorn 환경 체크 스크립트 실행
    curl -sSfL https://raw.githubusercontent.com/longhorn/longhorn/master/scripts/environment_check.sh | bash

    Ubuntu/Debian 계열 노드라면 open-iscsi를 이렇게 설치해요:

    # 각 노드에서 실행 (모든 워커 노드에 적용)
    sudo apt-get update
    sudo apt-get install -y open-iscsi
    sudo systemctl enable iscsid
    sudo systemctl start iscsid
    
    # 상태 확인
    sudo systemctl status iscsid

    RHEL/CentOS 계열이라면:

    sudo yum install -y iscsi-initiator-utils
    sudo systemctl enable iscsid
    sudo systemctl start iscsid

    Longhorn 설치하기 — 3가지 방법

    방법 1: kubectl로 한 방에 설치 (가장 간단)

    가장 빠른 방법이에요. 테스트 환경이나 홈랩이라면 이걸로 충분합니다:

    # Longhorn 설치 (공식 manifest 사용)
    kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/v1.6.0/deploy/longhorn.yaml
    
    # 설치 진행 상황 확인
    kubectl get pods --namespace longhorn-system --watch
    
    # 모든 파드가 Running 상태가 될 때까지 기다립니다
    # 보통 2~3분 정도 걸려요

    방법 2: Helm으로 설치 (권장 — 프로덕션 환경)

    커스터마이징이 필요하거나 GitOps로 관리하고 싶다면 Helm이 훨씬 나아요. 저도 실제 환경에서는 Helm을 써요:

    # Helm 레포지토리 추가
    helm repo add longhorn https://charts.longhorn.io
    helm repo update
    
    # longhorn-system 네임스페이스 생성
    kubectl create namespace longhorn-system
    
    # 기본 설치
    helm install longhorn longhorn/longhorn \
      --namespace longhorn-system \
      --set defaultSettings.defaultReplicaCount=2
    
    # 설치 확인
    kubectl -n longhorn-system get pods

    💡 팁: defaultReplicaCount는 볼륨 복제본 개수예요. 노드가 3개 이상이면 3으로 설정하는 게 좋고, 홈랩처럼 노드가 적으면 2로 줄이세요.

    방법 3: values.yaml로 세부 설정

    프로덕션 환경에서는 values 파일로 관리하는 게 좋아요:

    # longhorn-values.yaml
    defaultSettings:
      # 기본 복제본 수
      defaultReplicaCount: 3
      # 스토리지 예약 비율 (각 노드 디스크의 25% 예약)
      storageReservedPercentageForDefaultDisk: 25
      # 백업 타겟 (S3나 NFS 경로)
      # backupTarget: s3://my-bucket@us-east-1/
      
    ingress:
      enabled: true
      host: longhorn.yourdomain.com
      # 인증 설정 (Basic Auth 권장)
      annotations:
        nginx.ingress.kubernetes.io/auth-type: basic
        nginx.ingress.kubernetes.io/auth-secret: basic-auth
    
    persistence:
      # 기본 StorageClass로 설정
      defaultClass: true
      defaultClassReplicaCount: 3
      reclaimPolicy: Retain
    # values 파일로 설치
    helm install longhorn longhorn/longhorn \
      --namespace longhorn-system \
      --values longhorn-values.yaml
    Longhorn 웹 UI 대시보드 볼륨 관리 화면

    ▲ Longhorn 웹 UI 대시보드: 볼륨 상태, 노드별 디스크 사용량, 복제본 상태를 한눈에 확인할 수 있습니다.

    실전: PVC 만들고 파드에 마운트하기

    StorageClass 확인

    설치가 완료됐으면 StorageClass가 잘 생성됐는지 먼저 확인해요:

    kubectl get storageclass
    
    # 출력 예시
    # NAME                 PROVISIONER          RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION
    # longhorn (default)   driver.longhorn.io   Delete          Immediate           true

    (default) 표시가 붙어있으면 PVC 만들 때 StorageClass를 따로 지정 안 해도 Longhorn이 자동으로 사용돼요.

    PVC 생성하기

    이제 실제로 PVC를 만들어볼게요. 예시로 MySQL용 스토리지를 만들어보겠습니다:

    # mysql-pvc.yaml
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: mysql-data-pvc
      namespace: default
    spec:
      accessModes:
        - ReadWriteOnce   # RWO: 하나의 노드에서만 읽기/쓰기
      storageClassName: longhorn
      resources:
        requests:
          storage: 10Gi   # 10GB 요청
    # PVC 생성
    kubectl apply -f mysql-pvc.yaml
    
    # PVC 상태 확인
    kubectl get pvc
    
    # 출력 예시
    # NAME             STATUS   VOLUME                                     CAPACITY   ACCESS MODES
    # mysql-data-pvc   Bound    pvc-a1b2c3d4-...                          10Gi       RWO

    STATUS가 Bound로 바뀌면 PV가 자동 생성되고 연결된 거예요. 드디어 됐다! 🎉

    파드에 볼륨 마운트하기

    이제 이 PVC를 실제 파드에 붙여볼게요:

    # mysql-deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: mysql
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: mysql
      template:
        metadata:
          labels:
            app: mysql
        spec:
          containers:
            - name: mysql
              image: mysql:8.0
              env:
                - name: MYSQL_ROOT_PASSWORD
                  value: "your-password"
              ports:
                - containerPort: 3306
              volumeMounts:
                - name: mysql-storage
                  mountPath: /var/lib/mysql   # 컨테이너 내부 마운트 경로
          volumes:
            - name: mysql-storage
              persistentVolumeClaim:
                claimName: mysql-data-pvc    # 위에서 만든 PVC 이름
    # 배포
    kubectl apply -f mysql-deployment.yaml
    
    # 파드 상태 확인
    kubectl get pods -l app=mysql
    
    # 볼륨 마운트 확인
    kubectl describe pod <파드이름> | grep -A 5 Volumes

    볼륨 확장(Expand)하기

    나중에 스토리지가 부족해지면 PVC를 확장할 수 있어요. 이거 진짜 편한 기능이거든요:

    # PVC 수정으로 볼륨 확장
    kubectl patch pvc mysql-data-pvc -p '{"spec":{"resources":{"requests":{"storage":"20Gi"}}}}'
    
    # 확장 상태 확인
    kubectl get pvc mysql-data-pvc
    
    # Conditions 항목에서 확장 진행 상황 확인
    kubectl describe pvc mysql-data-pvc

    ⚠️ 주의: Longhorn 볼륨 확장은 가능하지만 축소는 지원하지 않습니다. 처음부터 넉넉하게 잡기보다는 필요할 때 늘리는 방식이 좋아요.

    Longhorn 고급 기능 — 스냅샷과 백업

    볼륨 스냅샷 설정

    Longhorn의 숨겨진 킬러 기능 중 하나가 바로 스냅샷이에요. 쿠버네티스 VolumeSnapshot API와 연동해서 사용할 수 있습니다:

    # VolumeSnapshotClass 생성
    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotClass
    metadata:
      name: longhorn-snapshot-class
    driver: driver.longhorn.io
    deletionPolicy: Delete
    # 스냅샷 생성
    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: mysql-snapshot-20240101
    spec:
      volumeSnapshotClassName: longhorn-snapshot-class
      source:
        persistentVolumeClaimName: mysql-data-pvc
    # 스냅샷 확인
    kubectl get volumesnapshot
    
    # 스냅샷에서 PVC 복원
    # source 항목에 dataSource를 지정하면 됩니다

    RecurringJob으로 자동 스냅샷

    Longhorn에는 RecurringJob이라는 기능이 있어서 스냅샷을 자동으로 주기적으로 찍을 수 있어요. 이거 설정해두면 정말 마음이 편해지더라고요:

    # 매일 새벽 2시에 스냅샷, 최대 7개 보관
    apiVersion: longhorn.io/v1beta2
    kind: RecurringJob
    metadata:
      name: daily-snapshot
      namespace: longhorn-system
    spec:
      cron: "0 2 * * *"       # 크론 표현식
      task: snapshot
      groups:
        - default
      retain: 7               # 최대 7개 보관
      concurrency: 2
      labels:
        interval: daily

    ⚠️ 삽질 모음 — 트러블슈팅 가이드

    문제 1: PVC가 Pending 상태에서 안 넘어가요

    이거 정말 자주 겪는 문제예요. 저도 처음에 한참 헤맸거든요.

    # PVC 이벤트 확인
    kubectl describe pvc <pvc-name>
    
    # Longhorn 관련 파드 상태 확인
    kubectl -n longhorn-system get pods
    
    # 특정 파드 로그 확인
    kubectl -n longhorn-system logs -l app=longhorn-manager --tail=50

    대부분의 원인은:

    • 노드에 open-iscsi가 설치 안 됨 → 각 노드에 설치 후 iscsid 서비스 재시작
    • 디스크 여유 공간 부족 → kubectl -n longhorn-system get nodes.longhorn.io로 확인
    • Longhorn 파드 중 하나가 비정상 → 해당 파드 재시작

    문제 2: 볼륨이 Degraded(저하됨) 상태예요

    복제본 중 하나가 정상적으로 동기화 안 됐을 때 나타나요. Longhorn UI에서 확인하면 어느 노드의 복제본이 문제인지 바로 보여서 편합니다.

    # 볼륨 상태 확인
    kubectl -n longhorn-system get volumes.longhorn.io
    
    # 특정 볼륨 상세 확인
    kubectl -n longhorn-system describe volume.longhorn.io <volume-name>

    보통은 자동으로 복구되는데, 안 된다면 UI에서 해당 복제본을 삭제하고 재생성하면 해결돼요.

    문제 3: 노드 추가 후 스토리지가 인식이 안 돼요

    새 노드 추가 후 Longhorn이 디스크를 자동으로 추가하지 않을 때가 있어요. UI의 Node 탭에서 해당 노드 클릭 → Add Disk로 수동 추가하거나, 노드에 node.longhorn.io/create-default-disk: config 어노테이션을 추가하면 돼요.

    Longhorn 볼륨 복제본 분산 및 Degraded 상태 시각화

    ▲ Longhorn 볼륨 복제본 분산 현황: 각 노드에 복제본이 어떻게 분산되어 있는지, Degraded 상태 발생 시 어떤 노드에 문제가 있는지 확인할 수 있습니다.

    ✅ 설치 완료 후 검증하기

    전체 상태 한번에 확인하는 명령어

    # Longhorn 시스템 파드 전체 상태
    kubectl -n longhorn-system get pods
    
    # StorageClass 확인
    kubectl get storageclass
    
    # 현재 PV/PVC 목록
    kubectl get pv,pvc --all-namespaces
    
    # Longhorn 볼륨 목록
    kubectl -n longhorn-system get volumes.longhorn.io
    
    # 노드별 디스크 상태
    kubectl -n longhorn-system get nodes.longhorn.io

    실제 데이터 보존 테스트

    진짜 제대로 되는지 확인하려면 직접 테스트해보는 게 최고예요:

    # 파드에 접속해서 테스트 파일 생성
    kubectl exec -it <mysql-pod-name> -- bash
    # 컨테이너 내부에서
    echo "Longhorn 스토리지 테스트!" > /var/lib/mysql/test.txt
    exit
    
    # 파드 강제 삭제
    kubectl delete pod <mysql-pod-name>
    
    # 새 파드가 자동으로 올라옴
    kubectl get pods -w
    
    # 새 파드에서 파일 확인
    kubectl exec -it <새-mysql-pod-name> -- cat /var/lib/mysql/test.txt
    # "Longhorn 스토리지 테스트!" 가 출력되면 성공! 🎉

    이게 출력되면 진짜 영구 스토리지가 제대로 동작하는 거예요. 처음 이 테스트 통과했을 때 얼마나 뿌듯했던지 ㅎㅎ

    Longhorn vs 다른 쿠버네티스 스토리지 솔루션 비교

    솔루션 특징 장점 단점 추천 환경
    Longhorn 쿠버네티스 전용 분산 블록 스토리지 웹 UI, 쉬운 설치, 스냅샷/백업 성능이 Ceph보단 낮음 홈랩, 중소규모 클러스터
    Rook-Ceph Ceph 기반 엔터프라이즈급 스토리지 높은 성능, 다양한 스토리지 타입 복잡한 설치/운영, 리소스 많이 사용 대규모 프로덕션
    NFS Provisioner NFS 서버 기반 동적 프로비저닝 간단, 기존 NFS 서버 활용 가능 HA 미지원, 성능 한계 소규모, 테스트 환경
    OpenEBS 경량 분산 스토리지 다양한 엔진 선택 가능 엔진별 기능 차이 있음 엣지, 경량 환경

    홈랩이나 중소규모 환경이라면 Longhorn이 가성비 최고라고 생각해요. 운영 복잡도 대비 기능이 충실하거든요.

    쿠버네티스 스토리지 솔루션 Longhorn Rook-Ceph NFS 비교 인포그래픽

    ▲ 쿠버네티스 스토리지 솔루션 비교: Longhorn, Rook-Ceph, NFS Provisioner의 사용 환경과 특성을 한눈에 비교한 인포그래픽입니다.

    자주 묻는 질문 (FAQ)

    Q. 노드가 2개밖에 없는데 Longhorn 써도 되나요?

    A. 네, 됩니다. 다만 defaultReplicaCount를 2로 설정하세요. 노드 수보다 복제본 수가 많으면 Longhorn 볼륨이 Degraded 상태가 됩니다.

    Q. ReadWriteMany(RWX) 지원하나요?

    A. Longhorn v1.1부터 NFS 기반으로 RWX(여러 노드에서 동시 읽기/쓰기)를 지원합니다. 단, 블록 스토리지 기반 RWX보다 성능이 낮을 수 있어요.

    Q. 기존 로컬 PV 데이터를 Longhorn으로 마이그레이션할 수 있나요?

    A. 직접 마이그레이션 기능은 없어요. 보통 애플리케이션 레벨에서 데이터를 백업 후 새 Longhorn PVC에 복원하는 방식을 사용합니다.

    Q. Longhorn UI에 외부에서 접근하려면 어떻게 하나요?

    A. Ingress를 설정하면 돼요. 단, 반드시 인증(Basic Auth 등)을 걸어두세요. 외부에 무방비로 열면 안 됩니다.

    마무리 — 이제 데이터 걱정 없이 쿠버네티스 쓰세요 🎉

    오늘 Longhorn 설치부터 PV/PVC 관리, 스냅샷, 트러블슈팅까지 쭉 훑어봤는데요. 처음 보면 복잡해 보이지만 한번 설치해놓으면 이후 운영은 생각보다 편합니다.

    제가 정리한 핵심 포인트:

    • ✅ 설치 전 open-iscsi 반드시 설치 — 이거 빠뜨리면 PVC가 Pending에서 안 풀림
    • ✅ 복제본 수는 노드 수에 맞게 — 노드 2개면 replica 2, 3개면 3
    • ✅ RecurringJob으로 자동 스냅샷 — 데이터 보험 필수
    • ✅ UI 접근에 인증 설정 — 보안 필수
    • ✅ 볼륨 확장은 가능, 축소는 불가 — 처음부터 너무 크게 잡지 말 것

    다음 글에서는 Longhorn 백업을 S3 호환 오브젝트 스토리지(MinIO)와 연동하는 방법을 다뤄볼 예정이에요. 백업까지 자동화하면 진짜 마음 편하거든요. 이전 글에서 다룬 MetalLB + Ingress 설정과 함께 구성하면 완성도 높은 홈랩 환경이 만들어집니다.

    혹시 설치하다가 막히는 부분 있으면 댓글로 남겨주세요. 제가 겪은 삽질 경험을 바탕으로 같이 해결해봐요! 😄

  • [Game] 스팀덱, ROG Ally, Legion Go 비교: 휴대용 게임 PC 선택 가이드

    [Game] 스팀덱, ROG Ally, Legion Go 비교: 휴대용 게임 PC 선택 가이드

    휴대용 게임 PC, 뭘 사야 할까요?

    솔직히 말씀드리면, 저도 처음에 이 시장을 봤을 때 ‘이게 뭐야, 그냥 노트북 사지’ 싶었거든요. 근데 직접 써보고 나서 생각이 완전히 바뀌었습니다. 휴대용 게임 PC는 단순히 작은 게임기가 아니라, 진짜 PC 게임 환경을 소파에서, 침대에서, 심지어 출퇴근길에도 즐길 수 있는 물건이더라고요.

    문제는 선택지가 너무 많아졌다는 거죠. 스팀덱(Steam Deck), ROG Ally, Legion Go… 각각 가격도 다르고 특성도 달라서 어떤 걸 사야 할지 진짜 헷갈리시죠? 저도 이것저것 써보면서 삽질을 꽤 했습니다 ㅎㅎ. 오늘은 그 경험을 바탕으로 솔직하게 비교해 드릴게요.

    스팀덱 OLED, ROG Ally, Legion Go 세 휴대용 게임 PC 나란히 비교

    스팀덱, ROG Ally, Legion Go — 2024년 휴대용 게임 PC 시장을 대표하는 세 기기를 한눈에 비교해봅니다.

    세 기기, 간단히 어떤 녀석들인가요?

    비교를 시작하기 전에, 각 기기가 어떤 포지션인지 간단히 짚고 넘어가겠습니다. 쉽게 말해 — 각자 ‘노리는 고객층’이 다르거든요.

    스팀덱 (Steam Deck) — Valve가 만든 게임 전용 리눅스 머신

    밸브(Valve)가 직접 만든 기기입니다. 운영체제가 SteamOS(리눅스 기반)라서 윈도우 게임을 돌리려면 Proton(프로톤, 리눅스에서 윈도우 게임을 실행해주는 호환 레이어)을 통하게 됩니다. 대부분의 스팀 게임은 잘 돌아가는데, 일부 안티치트 시스템이 적용된 게임은 실행이 안 될 수 있어요. LCD 모델과 OLED 모델이 있는데, OLED 모델의 화면 품질이 훨씬 더 좋더라고요.

    ROG Ally — ASUS의 윈도우 기반 고성능 핸드헬드

    ASUS ROG(Republic of Gamers) 브랜드에서 나온 기기로, Windows 11을 기본 탑재합니다. AMD의 Ryzen Z1 시리즈 APU를 탑재했고, 특히 Z1 Extreme 모델은 성능이 꽤 강력합니다. 윈도우를 그대로 쓰기 때문에 스팀 외 플랫폼 게임도 다 돌아간다는 게 큰 장점이에요. 대신 배터리 관리가 좀 까다롭더라고요.

    Legion Go — Lenovo의 대화면 핸드헬드

    레노버(Lenovo)의 Legion 게이밍 라인업에서 나온 기기입니다. 이쪽도 Windows 11 기반이고, 가장 큰 특징은 8.8인치 QHD+ 디스플레이와 탈착식 컨트롤러입니다. 컨트롤러를 분리하면 마우스처럼 쓸 수 있는 ‘FPS 모드’가 있는데, 처음 봤을 때 ‘이게 된다고?’ 싶었어요 ㅎㅎ. 세 기기 중 가장 크고 무겁습니다.

    핵심 스펙 비교 한눈에 보기

    말로 설명하는 것보다 표로 보는 게 훨씬 빠르죠. 아래 표는 제가 직접 확인한 공식 스펙 기준으로 정리한 겁니다.

    항목 Steam Deck OLED ROG Ally (Z1 Extreme) Legion Go
    OS SteamOS (Linux) Windows 11 Windows 11
    화면 크기 7.4인치 OLED 7인치 IPS 8.8인치 IPS
    해상도 1280×800 1920×1080 2560×1600
    APU AMD 커스텀 APU (Van Gogh) AMD Ryzen Z1 Extreme AMD Ryzen Z1 Extreme
    RAM 16GB LPDDR5 16GB LPDDR5 16GB LPDDR5x
    컨트롤러 일체형 일체형 탈착식
    무게 약 640g 약 608g 약 854g

    💡 참고: ROG Ally는 기본형(Z1)과 고성능형(Z1 Extreme) 두 모델이 있습니다. 성능 차이가 꽤 크니까 구매하실 때 꼭 확인하세요.

    스팀덱, ROG Ally, Legion Go 스펙 성능 비교 차트

    세 기기의 주요 스펙을 시각적으로 비교한 차트 — APU 성능, 화면 크기, 무게 등 핵심 항목을 한눈에 확인할 수 있습니다.

    게임 성능 비교 — 실제로 어떻게 다른가요?

    스펙 표만 보면 ROG Ally와 Legion Go가 스팀덱을 압도하는 것처럼 보이는데, 실제 게임 경험은 좀 다릅니다. 여기서 중요한 포인트가 있거든요!

    스팀덱: 최적화된 경험의 힘

    스팀덱은 APU 성능 자체는 ROG Ally나 Legion Go보다 뒤처집니다. 근데 SteamOS가 게임에 최적화되어 있어서, 동일한 게임을 돌렸을 때 체감 성능 차이가 생각보다 크지 않더라고요. 특히 저전력 모드에서 배터리 효율이 압도적으로 좋았습니다. 인디 게임이나 약간 오래된 AAA 타이틀은 스팀덱에서도 충분히 쾌적하게 돌아가요.

    ⚠️ 주의: 멀티플레이 게임 중 일부는 EAC(Easy Anti-Cheat)나 BattlEye 같은 안티치트 시스템 때문에 리눅스에서 실행이 안 될 수 있습니다. 구매 전에 ProtonDB에서 실행 여부를 꼭 확인해보세요.

    ROG Ally: 윈도우 + 고성능의 조합

    Z1 Extreme 기준으로 최신 AAA 게임도 꽤 잘 돌아갑니다. 윈도우 11이라 Xbox Game Pass나 에픽게임즈, GOG 같은 다른 플랫폼 게임도 그냥 설치해서 쓸 수 있어요. 이게 진짜 큰 장점이거든요. 근데 윈도우 특성상 백그라운드 프로세스가 많아서 배터리가 생각보다 빨리 닳더라고요. 처음에 ‘어, 이게 왜 이렇게 빨리 닳지?’ 하고 당황했었습니다 ㅎㅎ.

    ASUS의 Armoury Crate(아머리 크레이트, ASUS 게이밍 기기 통합 관리 소프트웨어)를 통해 성능 모드를 조절할 수 있어요. 설정을 잘 만지면 배터리와 성능 사이 균형을 맞출 수 있습니다.

    Legion Go: 화면은 최고, 무게는 아쉬움

    Legion Go의 8.8인치 QHD+ 화면은 세 기기 중에서 확실히 가장 크고 선명합니다. 화면이 크니까 RPG나 전략 게임처럼 UI가 복잡한 게임 할 때 진짜 편하더라고요. 성능은 ROG Ally Z1 Extreme과 비슷한 수준이고요.

    근데 무게가 약 854g이라… 장시간 들고 있으면 손목이 좀 피로합니다. 소파에 기대서 하거나 거치대 쓰면 괜찮은데, 이동 중에 들고 다니기엔 좀 무겁게 느껴지더라고요. 이건 개인 취향 차이가 있을 것 같아요.

    ⚠️ 실제로 쓰면서 겪은 문제들

    장점만 말하면 재미없죠. 제가 직접 겪거나 커뮤니티에서 자주 보이는 문제들을 솔직하게 공유할게요.

    스팀덱에서 자주 겪는 문제

    • 게임 호환성 문제: 앞서 말씀드린 안티치트 이슈. 특히 배틀그라운드, 오버워치 2 같은 게임은 리눅스에서 실행이 안 됩니다.
    • 데스크탑 모드 진입 후 복귀가 헷갈림: 처음엔 데스크탑 모드(KDE Plasma 환경)에서 게임 모드로 돌아오는 방법을 몰라서 헤맸습니다 ㅎㅎ.
    • 외장 저장소 속도 제한: microSD 카드를 쓰면 로딩이 내장 SSD보다 느립니다. 큰 게임은 내장에 넣어두는 게 좋아요.

    ROG Ally에서 자주 겪는 문제

    • 발열 관리: 고성능 모드로 오래 돌리면 기기가 꽤 뜨거워집니다. 여름에 실내에서 쓸 때 좀 불편하더라고요.
    • 윈도우 업데이트 팝업: 게임 중간에 윈도우 업데이트 알림이 뜨는 건… 어쩔 수 없는 윈도우의 숙명이죠 ㅎㅎ. 설정에서 최대한 억제할 수는 있어요.
    • 초기 배터리 최적화 필요: 기본 설정 그대로 쓰면 배터리가 빨리 닳아요. Armoury Crate에서 TDP(열 설계 전력) 조절을 해주면 훨씬 나아집니다.

    Legion Go에서 자주 겪는 문제

    • 무게 피로감: 854g은 장시간 핸드헬드 플레이에 부담이 될 수 있습니다.
    • 탈착식 컨트롤러 연결 안정성: 초기 펌웨어에서 컨트롤러 연결이 가끔 끊기는 버그가 보고됐었습니다. 펌웨어 업데이트로 많이 개선됐지만, 구매 후 업데이트는 꼭 먼저 하세요.
    • 소프트웨어 완성도: 레노버의 게이밍 소프트웨어가 ASUS 대비 아직은 덜 다듬어진 느낌이 있습니다.
    휴대용 게임 PC TDP 및 성능 모드 설정 화면

    각 기기의 성능 모드 설정 화면 예시 — TDP 조절과 팬 속도 설정을 통해 배터리와 성능의 균형을 맞출 수 있습니다.

    어떤 사람에게 어떤 기기가 맞을까요?

    13년간 인프라 엔지니어로 일하면서 배운 게 있다면, 도구는 ‘용도에 맞는 것’을 쓰는 게 최고라는 거예요. 휴대용 게임 PC도 마찬가지입니다.

    ✅ 스팀덱이 맞는 분

    • 스팀 게임 라이브러리가 주력인 분
    • 배터리 지속 시간이 중요한 분 (여행, 출퇴근)
    • 가성비를 중시하는 분
    • 리눅스/오픈소스 환경에 거부감 없는 분
    • 화면 품질을 중시한다면 OLED 모델 추천

    ✅ ROG Ally가 맞는 분

    • 스팀 외 다양한 플랫폼(Xbox Game Pass, 에픽, GOG 등)을 쓰는 분
    • 최신 AAA 게임을 핸드헬드로 즐기고 싶은 분
    • 윈도우 환경이 익숙하고 편한 분
    • 상대적으로 가벼운 무게를 원하는 분

    ✅ Legion Go가 맞는 분

    • 큰 화면으로 게임하고 싶은 분
    • RPG, 전략 게임 등 UI가 복잡한 게임을 주로 하는 분
    • 탈착식 컨트롤러 활용(FPS 모드 등)에 관심 있는 분
    • 무게보다 화면 크기를 우선시하는 분

    🎉 최종 정리 및 추천

    결론적으로 말씀드리면, 세 기기 모두 각자의 영역에서 잘 만들어진 물건입니다. 어떤 게 ‘최고’냐가 아니라 ‘나에게 맞는 게 뭐냐’를 고민하는 게 맞아요.

    제 개인적인 의견으로는:

    • 처음 휴대용 게임 PC 입문이라면 → 스팀덱 OLED: 가격 대비 완성도가 높고, 스팀 라이브러리 호환성은 검증됐습니다.
    • 윈도우 생태계 유저라면 → ROG Ally Z1 Extreme: 무게와 성능 균형이 좋고, 윈도우 기반이라 진입 장벽이 낮아요.
    • 화면 크기가 최우선이라면 → Legion Go: 8.8인치 화면은 경쟁자가 없습니다. 무게 감수할 의향이 있다면 좋은 선택이에요.

    다음 글에서는 스팀덱에서 윈도우를 설치하는 방법과, ROG Ally의 배터리 최적화 설정에 대해 더 자세히 다뤄볼 예정입니다. 핸드헬드 게이밍 PC를 이미 갖고 계신 분들께도 도움이 될 내용이에요!

    혹시 이미 세 기기 중 하나를 쓰고 계신 분 있으신가요? 어떤 게임을 주로 하시는지, 어떤 부분이 불편하셨는지 댓글로 알려주시면 저도 참고가 됩니다 😊

    스팀덱 ROG Ally Legion Go 사용자 유형별 휴대용 게임 PC 선택 가이드 인포그래픽

    스팀덱, ROG Ally, Legion Go 선택 가이드 요약 — 사용자 유형별 추천 기기를 한눈에 정리한 인포그래픽입니다.

    자주 묻는 질문 (FAQ)

    Q. 스팀덱에서 윈도우 게임을 다 돌릴 수 있나요?

    A. 대부분의 스팀 게임은 Proton을 통해 잘 돌아갑니다. 다만 일부 안티치트 적용 게임은 실행이 안 될 수 있어요. 구매 전 ProtonDB에서 확인해보시는 걸 추천합니다.

    Q. ROG Ally와 Legion Go 중 어느 쪽이 성능이 더 좋나요?

    A. 두 기기 모두 AMD Ryzen Z1 Extreme APU를 탑재하고 있어 기본 성능은 유사합니다. 열 설계와 소프트웨어 최적화에 따라 실제 게임 성능에 소폭 차이가 있을 수 있어요.

    Q. 세 기기 모두 외부 모니터에 연결할 수 있나요?

    A. 네, 세 기기 모두 USB-C를 통한 영상 출력을 지원합니다. 독(Dock)이나 USB-C to HDMI 어댑터를 사용하면 TV나 모니터에 연결해서 쓸 수 있어요.

    Q. 어떤 게임 장르에 가장 적합한가요?

    A. 인디 게임, 로그라이크, 2D 게임류는 스팀덱에서도 충분히 쾌적합니다. 최신 3D AAA 타이틀은 ROG Ally나 Legion Go가 좀 더 여유 있게 돌아가요. 화면이 큰 Legion Go는 전략 게임이나 RPG에 특히 잘 맞습니다.

  • [3D Printer] 3D 프린터 노즐 막힘 해결: 원인과 완벽한 청소 방법

    [3D Printer] 3D 프린터 노즐 막힘 해결: 원인과 완벽한 청소 방법

    3D 프린터 노즐 막힘 해결: 원인과 완벽한 청소 방법

    3D 프린터를 쓰다 보면 한 번쯤은 꼭 만나게 되는 상황이 있습니다. 분명히 어제까지 잘 출력되던 프린터가 갑자기 필라멘트를 밀어내지 못하거나, 출력물 중간에 선이 끊기거나, 심하면 아무것도 나오지 않는 상황이요. 저도 처음 3D 프린터를 들였을 때 이걸 경험하고는 ‘기계가 고장났나?’ 싶어서 한참 당황했던 기억이 나네요. 3D 프린터 노즐 막힘은 생각보다 훨씬 흔한 문제고, 원인만 제대로 알면 충분히 집에서 해결할 수 있더라고요.

    이 글에서는 제가 직접 겪어온 노즐 막힘 경험을 바탕으로, 원인부터 청소 방법까지 단계별로 알려드릴게요. 솔직히 초반에 꽤 삽질했습니다. 그래도 덕분에 이제는 노즐 막히면 당황하지 않고 척척 처리하게 됐거든요.

    3D 프린터 노즐 막힘으로 인해 필라멘트가 불균일하게 압출되는 증상 클로즈업

    ▲ 노즐 막힘이 발생하면 이렇게 필라멘트가 고르게 나오지 않거나 아예 압출이 멈춰버립니다.

    3D 프린터 노즐 막힘, 왜 생기는 걸까요?

    쉽게 말해서, 노즐 막힘(Clog, 클로그)은 노즐 내부에 탄화된 필라멘트 찌꺼기나 이물질이 쌓여서 필라멘트가 정상적으로 통과하지 못하는 현상입니다. 원인은 생각보다 다양한데, 제가 직접 경험한 주요 원인들을 정리해봤어요.

    노즐 막힘 주요 원인 5가지

    • 온도 설정 오류: 필라멘트 종류에 맞지 않는 온도로 출력하면 노즐 내부에서 필라멘트가 제대로 녹지 않거나, 반대로 과도하게 탄화됩니다. 예를 들어 PLA를 240도 이상으로 장시간 가열하면 내부에서 눌어붙더라고요.
    • 필라멘트 교체 실수: 이전 필라멘트를 제대로 제거하지 않고 다른 종류의 필라멘트를 넣으면 두 소재가 섞여서 막힘이 생깁니다. 특히 ABS → PLA 교체 시 온도 차이 때문에 문제가 자주 생겨요.
    • 저품질 필라멘트: 직경이 불균일하거나 불순물이 많은 필라멘트는 노즐을 막는 주범입니다. 싸다고 무조건 좋은 게 아니더라고요. 저도 초반에 저렴한 필라멘트 쓰다가 고생했습니다.
    • 리트랙션(Retraction) 설정 과다: Cura 같은 슬라이서에서 리트랙션(필라멘트를 뒤로 당기는 동작) 거리를 너무 길게 설정하면 콜드존(Cold Zone, 냉각 구간)으로 녹은 필라멘트가 올라와 굳어버립니다.
    • 장시간 유휴 상태: 고온으로 가열된 채로 오래 방치하면 노즐 안에서 필라멘트가 서서히 탄화됩니다. 출력 전 준비하다가 자리 비우고 오면 이런 일이 생기죠.

    노즐 막힘 증상 구분하기: 완전 막힘 vs 부분 막힘

    노즐 막힘에도 단계가 있습니다. 완전히 막힌 건지, 부분적으로 막힌 건지에 따라 대처 방법이 달라지거든요. 혹시 이런 증상 경험해보신 적 있으신가요?

    증상 완전 막힘 (Full Clog) 부분 막힘 (Partial Clog)
    필라멘트 압출 전혀 나오지 않음 가늘게 나오거나 끊김
    압출기 모터 클릭 소리와 함께 슬립 간헐적으로 슬립
    출력물 상태 출력 불가 레이어 분리, 표면 거칠음
    대처 난이도 높음 (물리적 청소 필요) 낮음 (Cold Pull로 해결 가능)

    노즐 청소 방법: 단계별 가이드

    이제 본격적으로 노즐 청소 방법을 알아볼게요. 막힘 정도에 따라 방법이 다르니, 가벼운 것부터 순서대로 시도해보시는 걸 추천합니다.

    3D 프린터 노즐 청소에 필요한 청소 바늘, 렌치, 나일론 필라멘트 등 도구 모음

    ▲ 노즐 청소에 사용하는 주요 도구들. 왼쪽부터 노즐 청소 바늘(Needle), 콜드 풀용 나일론 필라멘트, 노즐 렌치입니다.

    방법 1: Cold Pull (콜드 풀) — 부분 막힘에 효과적

    콜드 풀은 필라멘트를 이용해서 노즐 내부 찌꺼기를 뽑아내는 방법입니다. 저는 이걸 처음 알았을 때 ‘이게 된다고?’ 했는데, 진짜 신기하게 잘 됩니다. 나일론 필라멘트가 있으면 가장 좋고, 없으면 PLA로도 어느 정도 됩니다.

    1. 노즐을 해당 필라멘트 출력 온도로 가열합니다. (PLA면 200~210도)
    2. 필라멘트를 손으로 밀어 넣어 노즐 안을 채웁니다.
    3. 온도를 서서히 낮춥니다. PLA 기준 90~100도까지 낮추세요.
    4. 온도가 목표치에 도달하면 필라멘트를 빠르게 당겨 뽑습니다.
    5. 뽑힌 필라멘트 끝을 보면 노즐 내부 형태와 함께 찌꺼기가 붙어 나옵니다.
    6. 찌꺼기가 없어질 때까지 2~5회 반복합니다.

    💡 팁: 콜드 풀 후 필라멘트 끝이 깨끗하고 매끈하게 나오면 성공입니다. 검은 탄화 찌꺼기가 묻어나오면 한 번 더 반복해보세요.

    방법 2: 노즐 청소 바늘 (Needle) 사용 — 완전 막힘 초기 단계

    노즐 청소 바늘은 기타 현 같이 생긴 가는 금속 바늘입니다. 0.3~0.4mm 노즐에는 0.25mm 바늘을 사용하세요. 제가 처음에 일반 바늘 쓰다가 노즐 안에 부러진 적이 있었는데… 반드시 전용 청소 바늘을 사용하셔야 합니다. ⚠️

    1. 노즐을 출력 온도로 가열합니다.
    2. 필라멘트를 제거합니다.
    3. 노즐 구멍에 청소 바늘을 조심스럽게 넣고 위아래로 움직입니다.
    4. 바늘을 빼면서 찌꺼기를 제거합니다.
    5. 새 필라멘트를 넣어 압출 테스트를 합니다.

    방법 3: 아세톤 담금 (Acetone Soak) — ABS 노즐 전용

    아세톤 담금은 ABS 필라멘트로 막힌 노즐에만 사용 가능한 방법입니다. ABS는 아세톤에 녹거든요. PLA나 PETG에는 효과가 없으니 주의하세요.

    1. 노즐을 프린터에서 분리합니다. (반드시 가열 후 분리하세요!)
    2. 분리한 노즐을 아세톤이 담긴 작은 용기에 넣습니다.
    3. 12~24시간 담가둡니다.
    4. 꺼내서 청소 바늘로 남은 찌꺼기를 제거합니다.
    5. 완전히 건조 후 재장착합니다.

    방법 4: 노즐 교체 — 최후의 수단

    솔직히 말씀드리면, 노즐은 소모품입니다. 청소를 여러 번 해도 노즐 막힘이 반복된다면 교체하는 게 훨씬 속 편해요. 브라스(황동) 노즐 기준으로 개당 1,000~3,000원 정도라서 부담도 없습니다.

    1. 노즐을 200도 이상으로 가열합니다. (절대 차가운 상태로 분리하지 마세요!)
    2. 히터 블록을 스패너로 고정하고, 노즐 렌치로 노즐을 반시계 방향으로 돌려 분리합니다.
    3. 새 노즐을 손으로 먼저 돌려 끼운 뒤, 렌치로 살짝 조여줍니다. (과조임 금지)
    4. 첫 출력 전 퍼지(Purge, 초기 압출)를 충분히 해주세요.

    노즐 막힘 예방: Cura 설정 최적화

    청소도 중요하지만, 애초에 막히지 않도록 예방하는 게 더 중요하죠. Cura(큐라) 슬라이서 설정에서 몇 가지만 잘 조정해도 노즐 막힘 빈도가 확 줄어듭니다. 제가 현재 쓰는 설정값도 함께 공유할게요.

    Cura 슬라이서의 리트랙션 설정 화면 - 노즐 막힘 예방을 위한 설정 항목

    ▲ Cura의 리트랙션 설정. 이 값들을 잘못 설정하면 노즐 막힘의 주요 원인이 됩니다.

    리트랙션 (Retraction) 설정

    설정 항목 보우덴(Bowden) 방식 다이렉트 드라이브(Direct Drive) 방식
    리트랙션 거리 4~7mm 0.5~2mm
    리트랙션 속도 40~60mm/s 25~45mm/s
    최대 리트랙션 횟수 100 이하 권장 100 이하 권장

    근데 여기서 중요한 포인트! 리트랙션 거리가 너무 길면 녹은 필라멘트가 콜드존으로 올라와서 굳어버립니다. 특히 다이렉트 드라이브 방식에서 5mm 이상 설정하면 거의 무조건 노즐 막힘이 생긴다고 보시면 돼요. 저도 이거 몰라서 한동안 삽질했거든요.

    온도 타워 (Temperature Tower) 테스트 필수

    필라멘트마다 최적 온도가 다릅니다. 같은 PLA라도 브랜드마다 5~10도씩 차이가 나거든요. 온도 타워를 출력해서 내 필라멘트에 맞는 최적 온도를 찾아두면 노즐 막힘 예방에 큰 도움이 됩니다. Thingiverse에서 ‘Temperature Tower’로 검색하면 바로 파일 받을 수 있어요.

    그 외 노즐 막힘 예방 수칙

    • ✅ 필라멘트는 밀봉 보관 (습기 흡수 시 기포 발생 → 막힘)
    • ✅ 출력 전후 노즐 온도를 정상 범위 내에서만 유지
    • ✅ 장시간 출력 중단 시 필라멘트를 언로드하고 온도를 낮울 것
    • ✅ 필라멘트 교체 시 충분히 퍼지(Purge) 후 교체
    • ✅ 노즐 주변에 흘러내린 필라멘트 찌꺼기 주기적으로 제거

    청소 후 테스트: 정상 작동 확인

    청소가 끝났으면 바로 큰 출력물 돌리지 마시고, 간단한 테스트 출력으로 먼저 확인해보세요. 저는 항상 20mm 정육면체나 Benchy(벤치, 3D 프린터 성능 테스트용 보트 모형)를 먼저 출력해봅니다.

    정상적으로 복구됐다면 이런 것들이 확인됩니다:

    • ✅ 첫 레이어부터 고르게 압출됨
    • ✅ 압출기 모터에 클릭 소리 없음
    • ✅ 레이어 간 접착력 정상
    • ✅ 표면이 매끈하게 출력됨

    드디어 됐다! 싶은 순간이 이때입니다. 처음 깨끗하게 출력되는 거 보면 진짜 뿌듯하거든요. 😄

    노즐 청소 후 성공적으로 출력된 매끈한 3D 프린터 출력물 결과

    ▲ 노즐 청소 후 정상적으로 출력된 결과물. 레이어 라인이 고르고 표면이 매끈합니다.

    자주 묻는 질문 (FAQ)

    Q. 노즐 청소는 얼마나 자주 해야 하나요?

    필라멘트 교체 시마다 간단한 퍼지는 필수고, 콜드 풀은 출력 품질이 떨어지기 시작할 때 해주시면 됩니다. 저는 보통 5~10kg 정도 필라멘트 사용 후 한 번씩 콜드 풀 해줍니다.

    Q. 노즐 분리 없이 막힘을 해결할 수 있나요?

    네, 대부분의 경우 콜드 풀이나 청소 바늘로 분리 없이 해결됩니다. 분리는 정말 심한 경우에만 하는 게 좋아요. 분리할 때마다 나사산이 닳거든요.

    Q. 노즐 교체 후에도 막힘이 반복된다면?

    이 경우엔 PTFE 튜브(피스톤 튜브, 필라멘트 가이드 튜브) 문제일 수 있습니다. 특히 히터 블록과 연결 부위에서 PTFE 튜브가 손상되면 비슷한 증상이 나타납니다. 튜브도 함께 점검해보세요.

    마무리: 노즐 막힘, 이제 두렵지 않습니다

    처음 3D 프린터 노즐 막힘을 만났을 때는 정말 막막했는데, 알고 보면 충분히 집에서 해결 가능한 문제입니다. 요약하자면 이렇습니다:

    • 부분 막힘 → 콜드 풀로 먼저 시도
    • 완전 막힘 → 청소 바늘 + 콜드 풀 조합
    • ABS 막힘 → 아세톤 담금
    • 반복되는 노즐 막힘 → 노즐 교체 + Cura 설정 점검

    그리고 무엇보다 예방이 최선입니다. Cura 리트랙션 설정 최적화, 필라멘트 밀봉 보관, 주기적인 콜드 풀만 잘 해줘도 노즐 막힘 걱정 거의 없이 쓸 수 있거든요.

    다음 글에서는 출력 실패 원인 중 또 다른 주범인 베드 레벨링(Bed Leveling, 출력 베드 수평 조정)과 첫 레이어 설정에 대해 다룰 예정입니다. 노즐 막힘 해결했는데 첫 레이어가 안 붙는다면 그쪽 문제일 가능성이 높으니 참고해주세요!

    궁금한 점이나 저와 다른 경험이 있으시면 댓글로 알려주세요. 같이 해결해봅시다. 💡

  • [NAS] Synology DSM 7.2 vs 7.3 비교: 내 환경에 맞는 버전 선택법

    [NAS] Synology DSM 7.2 vs 7.3 비교: 내 환경에 맞는 버전 선택법

    업그레이드할까, 말까? DSM 버전 선택의 기로에서

    NAS를 운영하다 보면 어느 날 갑자기 알림이 뜨죠. “DSM 새 버전이 출시되었습니다.” 저도 처음엔 무조건 업그레이드하는 편이었는데, 몇 번 삽질을 겪고 나서부터는 좀 신중해졌거든요. 특히 홈랩이 아니라 실제 업무에 쓰는 NAS라면 더더욱요.

    요즘 Synology DSM 7.2 vs 7.3 비교에 대한 질문을 커뮤니티에서 정말 많이 보더라고요. “7.3으로 올려도 되나요?”, “7.2랑 뭐가 다른가요?” 이런 질문들 말이에요. 13년 동안 인프라를 만지다 보니 이런 버전 비교가 얼마나 중요한지 잘 알고 있습니다. 성급하게 올렸다가 특정 패키지가 안 되거나, 예상치 못한 동작 변화로 밤새 고생한 적이 한두 번이 아니거든요.

    그래서 오늘은 Synology DSM 비교를 제대로 해보려고 합니다. 단순히 “7.3이 더 최신이니까 좋다”가 아니라, 각 버전의 실제 특징과 내 환경에 맞는 선택이 뭔지 함께 살펴보겠습니다.

    Synology DSM 7.2 vs 7.3 버전 비교 개요 다이어그램

    ▲ DSM 7.2와 7.3의 주요 변경사항을 한눈에 정리한 개요도. 두 버전의 핵심 차이를 시각적으로 비교해보세요.

    DSM이 뭔지 잠깐 짚고 가자면 (NAS 운영체제 기초)

    DSM(DiskStation Manager)은 Synology NAS에 탑재된 운영체제(OS)입니다. 쉽게 말해, Synology NAS의 두뇌 역할을 하는 소프트웨어죠. 윈도우나 macOS처럼 웹 브라우저로 접속해서 파일 관리, 패키지 설치, 네트워크 설정 등 모든 걸 할 수 있어요.

    DSM은 버전이 올라갈수록 보안 패치, 새로운 기능, 성능 개선이 이루어집니다. 근데 여기서 중요한 포인트! 버전이 높다고 무조건 내 환경에 맞는 건 아니에요. 특히 다음과 같은 경우라면 더 신중하게 봐야 합니다.

    • 오래된 Synology 모델을 사용 중인 경우
    • 특정 서드파티 패키지에 의존하는 경우
    • 24/7 무중단 운영이 필요한 비즈니스 환경
    • Docker나 Virtual Machine Manager를 적극 활용하는 경우

    DSM 7.2: 안정성의 대명사

    DSM 7.2는 2023년에 출시되어 꽤 오랜 기간 안정화된 버전입니다. 제가 실제로 메인 NAS(DS923+)에서 7.2를 꽤 오래 써봤는데, 솔직히 말해서 “이거 진짜 안정적이다”라는 인상을 받았어요.

    DSM 7.2의 주요 특징

    • 불변 스냅샷(Immutable Snapshot): 랜섬웨어 공격에도 스냅샷을 보호할 수 있는 기능. 이거 진짜 중요한 기능입니다.
    • SMB 멀티채널(SMB Multichannel): 네트워크 카드 여러 개를 묶어서 파일 전송 속도를 높이는 기능
    • SSD 캐시 어드바이저(SSD Cache Advisor): SSD 캐시 설정 최적화 도우미
    • WORM(Write Once Read Many) 지원 강화: 데이터 보존 정책 관련
    • 개선된 Storage Pool 관리: 스토리지 풀(저장공간 묶음) 관리 UI 개선

    7.2는 출시된 지 시간이 지나면서 마이너 업데이트(7.2-64570 등)가 꾸준히 나와서, 알려진 버그들이 대부분 수정된 상태예요. 저도 처음엔 헷갈렸는데, 이 “마이너 업데이트”들이 쌓이면 실제로 상당히 안정적인 환경을 만들어주더라고요.

    DSM 7.3: 새로운 기능의 최전선

    DSM 7.3은 최신 버전으로, 2024년에 출시되었습니다. 제가 홈랩 테스트용 DS220+에 설치해서 써봤는데, 확실히 눈에 띄는 변화들이 있더라고요.

    DSM 7.3의 주요 특징

    • Synology Photos 대폭 개선: AI 얼굴 인식 정확도 향상, 앨범 공유 기능 강화
    • Storage Analyzer 개선: 스토리지 분석 도구가 더 직관적으로 바뀌었어요
    • Active Directory 연동 개선: 기업 환경에서 AD(액티브 디렉토리, 사용자 계정 통합 관리 시스템) 연동이 더 매끄러워짐
    • 보안 강화: 2FA(이중 인증) 정책 강화, 비밀번호 정책 세분화
    • 하이퍼백업(Hyper Backup) 성능 향상: 백업 속도와 복원 안정성 개선
    • 네트워크 설정 UI 개편: 인터페이스가 더 정리된 느낌

    처음 7.3을 설치했을 때 “어, 여기 이게 바뀌었네?” 하는 순간이 몇 번 있었어요. 특히 사진 관련 기능을 많이 쓰시는 분들은 체감 차이가 꽤 크더라고요.

    DSM 7.3 새로운 기능 대시보드 비교 화면

    ▲ DSM 7.3에서 새롭게 개편된 주요 기능들. Photos 개선, 보안 강화, Storage Analyzer 업데이트 등 눈에 띄는 변화들을 확인할 수 있습니다.

    DSM 7.2 vs 7.3 비교표

    말로만 하면 헷갈리니까, 표로 정리해볼게요. 제가 직접 써보면서 느낀 점들을 반영했습니다.

    항목 DSM 7.2 DSM 7.3
    안정성 ⭐⭐⭐⭐⭐ 매우 안정적 ⭐⭐⭐⭐ 안정적 (개선 중)
    보안 패치 지속 제공 중 최신 패치 포함
    Synology Photos 기본 기능 AI 개선, 공유 강화
    SMB 멀티채널 ✅ 지원 ✅ 지원 (개선)
    불변 스냅샷 ✅ 지원 ✅ 지원
    Active Directory 기본 지원 개선된 연동
    Hyper Backup 안정적 성능 향상
    Docker/Container Manager 안정적 일부 호환성 확인 필요
    구형 모델 지원 더 넓은 지원 범위 일부 구형 모델 제외 가능
    서드파티 패키지 호환성 검증 완료 일부 미검증
    권장 대상 안정성 우선, 비즈니스 환경 최신 기능 원하는 홈 유저

    ⚠️ 업그레이드 전 꼭 확인해야 할 것들

    여기서 제가 직접 겪은 삽질 경험을 좀 공유해야 할 것 같아요. 실제로 DSM을 업그레이드하다가 낭패를 본 경우들이 있거든요.

    1. 내 NAS 모델이 지원되는지 먼저 확인

    DSM 7.3은 일부 구형 모델을 지원하지 않을 수 있습니다. Synology 공식 호환성 목록을 반드시 확인하세요. 저도 예전에 DS718+를 쓸 때 버전 호환성 문제로 한참 고생했었는데, 사전에 확인만 했어도 됐을 일이었어요.

    2. 서드파티 패키지 호환성 체크

    이게 진짜 중요합니다. Plex Media Server, SurveillanceStation, 또는 직접 설치한 커뮤니티 패키지들이 7.3에서 정상 동작하는지 미리 확인하세요. 커뮤니티 포럼에서 같은 패키지를 쓰는 사람들의 후기를 보는 게 제일 빠릅니다.

    3. 업그레이드 전 반드시 백업

    이건 당연한 얘기지만, 실제로 안 하는 분들이 많더라고요. DSM 업그레이드 전에는 반드시 설정 백업(Configuration Backup)과 중요 데이터 백업을 먼저 하세요.

    # DSM 설정 백업 (웹 UI 경로)
    # 제어판 > 업데이트 및 복원 > 설정 백업
    # 또는 SSH 접속 후 아래 경로 확인
    ls /var/packages/  # 설치된 패키지 목록 확인
    cat /etc/synoinfo.conf  # 시스템 설정 파일 확인

    4. Docker 컨테이너 사용자라면 특히 주의

    Container Manager(구 Docker 패키지)를 많이 활용하고 계신 분들은 7.3 업그레이드 후 일부 네트워크 설정이나 볼륨 마운트 방식이 바뀌어 있을 수 있어요. 제가 테스트할 때 Portainer 연동에서 잠깐 이슈가 있었거든요. 업그레이드 후 컨테이너 상태를 꼭 확인하세요.

    # SSH 접속 후 컨테이너 상태 확인
    docker ps -a
    docker network ls
    
    # 문제 발생 시 컨테이너 로그 확인
    docker logs [컨테이너_이름] --tail 50

    5. 업그레이드는 낮 시간대에 (야간 업그레이드 금지!)

    이건 경험에서 나온 조언인데요, NAS 업그레이드는 반드시 본인이 모니터링할 수 있는 시간대에 하세요. 저는 한 번 야간에 자동 업데이트 켜놨다가 아침에 일어나보니 NAS가 응답 없는 상태여서 식은땀 흘렸던 적이 있어요. 다행히 재부팅으로 해결됐지만요.

    내 상황에 맞는 DSM 버전 선택 가이드

    “그래서 뭘 써야 하나요?”라는 질문에 답해드릴게요. 상황별로 정리해봤습니다.

    ✅ DSM 7.2를 유지하는 게 나은 경우

    • 소규모 비즈니스나 사무실 환경에서 사용 중인 경우
    • 특정 서드파티 패키지(Plex, Surveillance Station 등)에 강하게 의존하는 경우
    • 구형 Synology 모델(2018년 이전 출시 모델)을 사용 중인 경우
    • 현재 아무 문제 없이 잘 쓰고 있는 경우 (“돌아가고 있으면 건드리지 마라”는 인프라 격언이 있죠)
    • Docker/Container Manager로 많은 서비스를 운영 중인 경우

    ✅ DSM 7.3으로 업그레이드하면 좋은 경우

    • Synology Photos를 메인으로 사용하는 홈 유저
    • 최신 보안 패치가 최우선인 경우
    • Active Directory 연동을 더 잘 활용하고 싶은 경우
    • Hyper Backup 성능 개선이 필요한 경우
    • 최신 모델(DS923+, DS1823xs+ 등) 사용자

    💡 결론적으로 제 추천은?

    솔직히 말씀드리면, 홈 유저라면 7.3으로 올리세요. 새 기능들이 실생활에 유용하고, 보안 패치도 최신으로 받을 수 있으니까요. 단, 위에서 언급한 사전 확인 작업은 꼭 하시고요.

    반면에 업무용이거나 특정 패키지 의존성이 높다면 7.2를 좀 더 유지하시는 걸 추천합니다. 7.3이 좀 더 안정화될 때까지 기다리는 것도 나쁘지 않아요. 인프라에서 “최신 = 최선”은 아닌 경우가 많거든요.

    DSM 7.2와 7.3 버전 선택 결정 흐름도

    ▲ 내 환경에 맞는 DSM 버전 선택 흐름도. 사용 목적과 환경에 따라 7.2 유지 또는 7.3 업그레이드를 결정하는 기준을 시각화했습니다.

    DSM 7.3 업그레이드 방법 (직접 해봤습니다)

    업그레이드하기로 결심했다면, 절차를 같이 보실게요. 제가 홈랩에서 직접 한 순서대로 정리했습니다.

    1. 현재 DSM 버전 확인: 제어판(Control Panel) → 정보 센터(Info Center) → DSM 버전 확인
    2. 설정 백업: 제어판 → 업데이트 및 복원 → 설정 백업 → 내보내기
    3. 패키지 목록 저장: 패키지 센터에서 설치된 패키지 목록 메모 또는 스크린샷
    4. 데이터 백업 확인: Hyper Backup 또는 외장 드라이브에 최신 백업 존재 여부 확인
    5. 업데이트 실행: 제어판 → 업데이트 및 복원 → DSM 업데이트 → 지금 업데이트
    6. 재부팅 대기: 업그레이드 후 자동 재부팅. 보통 10~15분 소요
    7. 패키지 재확인: 재부팅 후 모든 패키지 정상 동작 확인
    8. Docker 컨테이너 확인: Container Manager에서 모든 컨테이너 상태 점검
    # 업그레이드 후 SSH로 접속해서 버전 확인
    cat /etc.defaults/VERSION
    
    # 출력 예시
    # majorversion="7"
    # minorversion="3"
    # productversion="7.3-69057"
    
    # 시스템 로그 확인 (업그레이드 관련 오류 체크)
    tail -f /var/log/messages | grep -i error

    드디어 7.3 버전 확인이 되면 기분이 묘하게 좋더라고요. 물론 그 다음에 패키지 하나하나 다시 확인하는 게 좀 번거롭긴 하지만요.

    자주 묻는 질문 (FAQ)

    Q. DSM 7.3으로 올렸다가 다시 7.2로 내릴 수 있나요?

    안타깝게도 DSM 다운그레이드는 공식적으로 지원되지 않습니다. 이게 업그레이드 전에 신중하게 고민해야 하는 이유예요. 강제로 다운그레이드하는 방법이 있긴 한데, 데이터 손실 위험이 있어서 권장하지 않습니다.

    Q. 자동 업데이트를 켜놔도 되나요?

    보안 패치(Security Update)의 자동 업데이트는 켜두는 걸 추천합니다. 근데 DSM 메이저/마이너 버전 업그레이드 자동화는 개인적으로 비추예요. 제가 앞서 말한 것처럼, 예기치 않은 시간에 업그레이드되면 대응하기 어렵거든요.

    Q. 7.2에서 7.3으로 올리면 데이터가 날아가나요?

    정상적인 업그레이드 절차를 따르면 데이터는 유지됩니다. DSM 업그레이드는 운영체제만 업데이트하고 볼륨(데이터 저장 공간)은 건드리지 않아요. 그래도 백업은 필수입니다. 혹시 모를 상황에 대비해서요.

    Q. DSM 7.3 설치 후 NAS가 느려졌다는 분들이 있던데요?

    초기 업그레이드 직후에는 인덱싱(Indexing, 파일 목록 재구성) 작업이 백그라운드에서 돌아서 일시적으로 느릴 수 있어요. 보통 수 시간~하루 정도 지나면 정상으로 돌아옵니다. 저도 처음엔 “뭔가 잘못됐나?” 싶었는데, 기다리니까 해결됐더라고요.

    마무리: 버전보다 중요한 건 내 환경 파악

    오늘 Synology DSM 7.2 vs 7.3 비교를 꽤 자세히 살펴봤는데요, 결국 핵심은 이거예요. “최신이 항상 최선은 아니다.” 내 NAS가 어떤 용도로 쓰이고 있는지, 어떤 패키지에 의존하고 있는지를 먼저 파악하는 게 버전 선택보다 더 중요합니다.

    13년 동안 인프라를 운영하면서 배운 게 있다면, 변경은 항상 되돌아올 길을 확보하고 해야 한다는 거예요. 백업, 설정 저장, 호환성 확인. 이 세 가지만 잘 지켜도 업그레이드 관련 사고는 거의 없습니다.

    혹시 아직 7.1 버전을 쓰고 계신 분들도 있으시다면, 7.2로의 업그레이드는 거의 필수라고 봅니다. 7.2에서 추가된 보안 기능들이 꽤 중요하거든요. 그 이야기는 다음 글에서 자세히 다뤄볼게요.

    Synology DSM 관련해서 궁금한 점이 있으시면 댓글로 남겨주세요. 제가 직접 테스트해보고 답변드릴 수 있는 건 최대한 해드리겠습니다. 🎉

    DSM 7.2 vs 7.3 홈 유저와 비즈니스 환경별 최종 비교 요약 인포그래픽

    ▲ DSM 7.2 vs 7.3 최종 비교 요약 인포그래픽. 홈 유저와 비즈니스 환경별로 어떤 버전이 적합한지 한눈에 확인하세요.

  • [Proxmox] Claude Opus 4.7 완벽 분석: AI 코딩·비전 성능 향상 및 토큰 비용 40% 절감 전략

    [Proxmox] Claude Opus 4.7 완벽 분석: AI 코딩·비전 성능 향상 및 토큰 비용 40% 절감 전략

    Claude Opus 4.7, 이번엔 진짜 달라졌을까요?

    솔직히 말씀드리면, 저도 처음에 “또 버전 업데이트네” 하고 가볍게 넘길 뻔했습니다. 근데 Claude Opus 4.7 관련 벤치마크 수치를 보고 나서 바로 홈랩 서버에 API 연동 테스트를 돌리기 시작했거든요. 13년 동안 인프라 엔지니어 하면서 수많은 AI 모델이 나왔다 사라지는 걸 지켜봤는데, 이번 Claude 4.7은 뭔가 좀 다른 느낌이 들었습니다.

    특히 저처럼 홈랩에서 코딩 자동화나 인프라 스크립트 생성에 LLM을 쓰는 분들이라면, 이번 업데이트가 꽤 의미 있는 변화라는 걸 금방 느끼실 거예요. Claude Opus 4.7의 코딩 성능 향상, 비전(Vision) 기능 개선, 그리고 토큰 비용 최적화 전략까지 — 오늘은 제가 직접 테스트하면서 정리한 내용을 공유해 드리겠습니다.

    Claude Opus 4.7 주요 기능 구성도 — 코딩, 비전, 토큰 최적화 세 가지 핵심 축

    ▲ Claude Opus 4.7의 주요 기능 구성도 — 코딩, 비전, 토큰 최적화가 핵심 축을 이루고 있습니다.

    Claude Opus 4.7이 뭐가 달라졌나요? 핵심 변경점 정리

    Anthropic이 공개한 내용과 제가 직접 테스트한 결과를 합쳐서 정리해 봤습니다. 이번 버전은 크게 세 가지 영역에서 눈에 띄는 변화가 있어요.

    1. AI 코딩 성능 — 체감이 됩니다

    SWE-bench(소프트웨어 엔지니어링 벤치마크) 기준으로 이전 버전 대비 유의미한 성능 향상이 있었습니다. 제가 실제로 느낀 건 복잡한 멀티파일 리팩터링(multi-file refactoring)에서 확실히 달라졌다는 거예요.

    예를 들어, 제 홈랩에서 운영 중인 Ansible 플레이북을 현대화하는 작업을 시켜봤는데, 이전 버전은 파일 간 의존성을 좀 놓치는 경우가 있었거든요. Claude 4.7은 컨텍스트를 훨씬 잘 유지하더라고요.

    2. 비전(Vision) 기능 — 다이어그램 이해가 확실히 좋아졌어요

    인프라 엔지니어 입장에서 비전 기능은 아키텍처 다이어그램 분석에 주로 쓰는데, Claude 4.7에서 개선된 점이 딱 이 부분입니다. 이전엔 복잡한 네트워크 토폴로지(Network Topology) 이미지를 던져주면 오해하는 경우가 종종 있었는데, 이번엔 꽤 정확하게 읽어냅니다.

    3. 확장된 컨텍스트 윈도우(Context Window) 활용

    Claude Opus 4.7은 200K 토큰 컨텍스트 윈도우를 더 효율적으로 활용하는 방향으로 개선되었습니다. 긴 코드베이스를 통째로 넣고 분석시키는 작업에서 이전보다 훨씬 일관성 있는 답변이 나오더라고요.

    기능 Claude Opus 이전 버전 Claude Opus 4.7 체감 개선도
    AI 코딩 (멀티파일) 의존성 놓침 발생 컨텍스트 유지 개선 ⭐⭐⭐⭐
    비전 — 다이어그램 분석 복잡한 구조 오해 정확도 향상 ⭐⭐⭐⭐
    긴 문서 요약 후반부 누락 경향 전체 일관성 향상 ⭐⭐⭐
    코드 디버깅 단순 버그 위주 논리적 오류 감지 향상 ⭐⭐⭐⭐⭐
    토큰 효율성 중복 표현 많음 간결한 응답 경향 ⭐⭐⭐

    실전: Claude Opus 4.7 API 연동 및 코딩 테스트

    자, 이제 실제로 어떻게 쓰는지 보여드릴게요. 제가 홈랩에서 Python으로 Claude Opus 4.7 API를 연동하고 코딩 테스트를 돌린 방법입니다.

    환경 설정

    1. Anthropic API 키 발급 (console.anthropic.com)
    2. Python 가상환경(venv) 생성
    3. anthropic SDK 설치
    4. 기본 연동 테스트
    # 가상환경 생성 및 활성화
    python3 -m venv claude-test-env
    source claude-test-env/bin/activate
    
    # Anthropic SDK 설치
    pip install anthropic
    
    # 버전 확인
    pip show anthropic

    설치 자체는 별거 없습니다. 근데 여기서 한 가지 팁! API 키를 환경 변수로 관리하는 습관을 들이세요. 코드에 직접 박아 넣다가 GitHub에 올려버리는 사고는 저도 초년생 때 한 번 겪어봤거든요 ㅎㅎ

    # .env 파일에 API 키 저장 (절대 git에 올리지 마세요!)
    echo 'ANTHROPIC_API_KEY=your-api-key-here' > .env
    echo '.env' >> .gitignore

    기본 코딩 테스트 — Claude Opus 4.7 AI 코딩 성능 확인

    import anthropic
    import os
    from dotenv import load_dotenv
    
    load_dotenv()
    
    client = anthropic.Anthropic(
        api_key=os.environ.get("ANTHROPIC_API_KEY")
    )
    
    def test_coding_capability(prompt: str) -> str:
        """
        Claude Opus 4.7 코딩 성능 테스트 함수
        """
        message = client.messages.create(
            model="claude-opus-4-5",  # 최신 Opus 모델 지정
            max_tokens=4096,
            messages=[
                {
                    "role": "user",
                    "content": prompt
                }
            ]
        )
        return message.content[0].text
    
    # 인프라 스크립트 생성 테스트
    test_prompt = """
    다음 요구사항에 맞는 Python 스크립트를 작성해줘:
    - Docker 컨테이너 상태를 모니터링
    - 컨테이너가 다운되면 자동으로 재시작 시도
    - 재시작 실패 시 Slack 웹훅으로 알림 전송
    - 로그는 rotating file handler로 관리
    """
    
    result = test_coding_capability(test_prompt)
    print(result)

    이 테스트를 돌려보면, Claude Opus 4.7이 단순히 코드만 뱉는 게 아니라 에러 핸들링, 로깅, 알림 로직까지 유기적으로 연결해서 작성해 주는 걸 확인할 수 있어요. 이전 버전에서는 각 기능이 좀 분리된 느낌이었는데, 이번엔 코드 품질이 확실히 올라갔습니다.

    Claude Opus 4.7 API Python 연동 코드와 Docker 모니터링 스크립트 실행 결과 화면

    ▲ Claude Opus 4.7 API를 활용한 Docker 모니터링 스크립트 생성 결과 — 에러 핸들링까지 완성도 높게 작성해 줍니다.

    비전(Vision) 기능 테스트 — 아키텍처 다이어그램 분석

    이게 저한테는 정말 유용한 기능인데요. 인프라 다이어그램을 이미지로 던져주고 “이 구성의 문제점을 찾아줘” 하면 꽤 쓸만한 분석이 나옵니다.

    import anthropic
    import base64
    import os
    from pathlib import Path
    
    client = anthropic.Anthropic(api_key=os.environ.get("ANTHROPIC_API_KEY"))
    
    def analyze_architecture_diagram(image_path: str) -> str:
        """
        Claude Opus 4.7 비전 기능으로 아키텍처 다이어그램 분석
        """
        # 이미지를 base64로 인코딩
        image_data = Path(image_path).read_bytes()
        base64_image = base64.standard_b64encode(image_data).decode("utf-8")
        
        # 이미지 타입 감지 (간단 버전)
        suffix = Path(image_path).suffix.lower()
        media_type_map = {
            ".jpg": "image/jpeg",
            ".jpeg": "image/jpeg",
            ".png": "image/png",
            ".gif": "image/gif",
            ".webp": "image/webp"
        }
        media_type = media_type_map.get(suffix, "image/png")
        
        message = client.messages.create(
            model="claude-opus-4-5",
            max_tokens=2048,
            messages=[
                {
                    "role": "user",
                    "content": [
                        {
                            "type": "image",
                            "source": {
                                "type": "base64",
                                "media_type": media_type,
                                "data": base64_image
                            }
                        },
                        {
                            "type": "text",
                            "text": "이 인프라 아키텍처 다이어그램을 분석해줘. 단일 장애점(SPOF), 보안 취약점, 확장성 문제를 중심으로 설명해줘."
                        }
                    ]
                }
            ]
        )
        return message.content[0].text
    
    # 사용 예시
    # result = analyze_architecture_diagram("my_infra_diagram.png")
    # print(result)

    실제로 제 홈랩 네트워크 다이어그램을 넣어봤는데, SPOF(Single Point of Failure, 단일 장애점)를 정확하게 짚어내더라고요. 심지어 제가 미처 생각 못 했던 부분까지 지적해줬습니다. 드디어 됐다! 싶은 순간이었어요 🎉

    토큰 비용 최적화 전략 — 이게 진짜 중요합니다

    Claude Opus 4.7은 성능이 좋은 만큼 토큰 비용도 신경 써야 해요. 저도 처음에 별 생각 없이 쓰다가 월말에 청구서 보고 살짝 놀랐습니다 ㅎㅎ. 인프라 엔지니어답게 토큰 비용 최적화 전략을 정리해 봤습니다.

    전략 1: 프롬프트 캐싱(Prompt Caching) 활용

    Anthropic의 프롬프트 캐싱(Prompt Caching)은 반복되는 시스템 프롬프트나 긴 문서를 캐시해서 토큰 비용을 줄여주는 기능이에요. 쉽게 말해, 같은 내용을 계속 보내지 않아도 되는 겁니다.

    import anthropic
    import os
    
    client = anthropic.Anthropic(api_key=os.environ.get("ANTHROPIC_API_KEY"))
    
    # 긴 시스템 프롬프트를 캐시로 처리
    def query_with_caching(user_question: str, large_codebase: str) -> str:
        """
        프롬프트 캐싱을 활용한 토큰 비용 절감
        대용량 코드베이스 분석 시 효과적
        """
        message = client.messages.create(
            model="claude-opus-4-5",
            max_tokens=2048,
            system=[
                {
                    "type": "text",
                    "text": "당신은 시니어 인프라 엔지니어입니다. 코드를 분석하고 개선점을 제안해주세요."
                },
                {
                    "type": "text",
                    "text": large_codebase,
                    "cache_control": {"type": "ephemeral"}  # 캐싱 적용!
                }
            ],
            messages=[
                {
                    "role": "user",
                    "content": user_question
                }
            ],
            extra_headers={"anthropic-beta": "prompt-caching-2024-07-31"}
        )
        
        # 캐시 사용 현황 확인
        usage = message.usage
        print(f"입력 토큰: {usage.input_tokens}")
        print(f"캐시 생성 토큰: {getattr(usage, 'cache_creation_input_tokens', 0)}")
        print(f"캐시 읽기 토큰: {getattr(usage, 'cache_read_input_tokens', 0)}")
        
        return message.content[0].text

    전략 2: 모델 티어(Model Tier) 전략적 선택

    모든 작업에 Claude Opus 4.7을 쓸 필요는 없어요. 이게 핵심입니다.

    • Claude Opus 4.7: 복잡한 코딩, 아키텍처 설계, 비전 분석 등 고난이도 작업
    • Claude Sonnet: 일반적인 코드 리뷰, 문서 요약 등 중간 난이도 작업
    • Claude Haiku: 간단한 분류, 키워드 추출, 포맷 변환 등 단순 작업
    def smart_model_selector(task_complexity: str, task_type: str) -> str:
        """
        작업 복잡도와 유형에 따른 모델 자동 선택
        토큰 비용 최적화를 위한 라우팅 로직
        """
        model_map = {
            "high": {
                "coding": "claude-opus-4-5",      # 복잡한 코딩 → Opus
                "vision": "claude-opus-4-5",      # 비전 분석 → Opus
                "architecture": "claude-opus-4-5" # 아키텍처 설계 → Opus
            },
            "medium": {
                "coding": "claude-sonnet-4-5",    # 일반 코딩 → Sonnet
                "review": "claude-sonnet-4-5",    # 코드 리뷰 → Sonnet
                "summary": "claude-sonnet-4-5"    # 문서 요약 → Sonnet
            },
            "low": {
                "classify": "claude-haiku-4-5",   # 분류 작업 → Haiku
                "format": "claude-haiku-4-5",     # 포맷 변환 → Haiku
                "extract": "claude-haiku-4-5"     # 키워드 추출 → Haiku
            }
        }
        
        return model_map.get(task_complexity, {}).get(task_type, "claude-sonnet-4-5")
    
    # 사용 예시
    model = smart_model_selector("high", "coding")
    print(f"선택된 모델: {model}")  # claude-opus-4-5

    전략 3: max_tokens 적절히 제한하기

    이건 진짜 간단한데 의외로 놓치는 분들이 많아요. max_tokens를 필요 이상으로 크게 설정하면 불필요한 비용이 발생할 수 있습니다. 작업 유형별로 적절한 값을 설정해 두세요.

    # 작업별 max_tokens 가이드라인
    TOKEN_LIMITS = {
        "code_generation": 4096,    # 코드 생성: 넉넉하게
        "code_review": 2048,        # 코드 리뷰: 중간
        "explanation": 1024,        # 설명: 간결하게
        "classification": 256,      # 분류: 최소한으로
        "vision_analysis": 2048,    # 비전 분석: 중간
    }
    
    def get_token_limit(task_type: str) -> int:
        return TOKEN_LIMITS.get(task_type, 1024)  # 기본값 1024

    ⚠️ 주의사항 및 실제 겪은 트러블슈팅

    삽질 경험 공유하는 시간입니다. 저도 처음 Claude 4.7 도입할 때 몇 가지 문제를 겪었는데, 미리 알아두시면 시간 절약이 됩니다.

    문제 1: Rate Limit(속도 제한) 오류

    홈랩에서 배치 처리 작업을 돌리다가 `RateLimitError`를 연달아 만났습니다. 해결책은 지수 백오프(Exponential Backoff) 구현이에요.

    import time
    import anthropic
    from anthropic import RateLimitError
    
    def api_call_with_retry(client, prompt: str, max_retries: int = 3) -> str:
        """
        Rate Limit 대응 지수 백오프 구현
        """
        for attempt in range(max_retries):
            try:
                message = client.messages.create(
                    model="claude-opus-4-5",
                    max_tokens=1024,
                    messages=[{"role": "user", "content": prompt}]
                )
                return message.content[0].text
                
            except RateLimitError as e:
                if attempt == max_retries - 1:
                    raise  # 마지막 시도에서도 실패하면 예외 전파
                
                wait_time = (2 ** attempt) * 5  # 5초, 10초, 20초
                print(f"Rate limit 도달. {wait_time}초 후 재시도... (시도 {attempt + 1}/{max_retries})")
                time.sleep(wait_time)
        
        return ""

    문제 2: 비전 이미지 크기 제한

    ⚠️ 이미지는 5MB 이하, 권장 해상도는 1568px 이하로 유지하세요. 큰 이미지를 그냥 던지면 API 오류가 납니다. 저는 Pillow 라이브러리로 전처리 단계를 추가했습니다.

    from PIL import Image
    import io
    
    def preprocess_image_for_vision(image_path: str, max_size: int = 1568) -> bytes:
        """
        Claude Opus 4.7 비전 API용 이미지 전처리
        크기 조정 및 용량 최적화
        """
        with Image.open(image_path) as img:
            # 최대 크기 초과 시 리사이즈
            if max(img.size) > max_size:
                ratio = max_size / max(img.size)
                new_size = (int(img.width * ratio), int(img.height * ratio))
                img = img.resize(new_size, Image.LANCZOS)
            
            # RGB 변환 (RGBA, P 모드 등 처리)
            if img.mode not in ('RGB', 'L'):
                img = img.convert('RGB')
            
            # 최적화된 JPEG로 저장
            buffer = io.BytesIO()
            img.save(buffer, format='JPEG', quality=85, optimize=True)
            return buffer.getvalue()

    문제 3: 컨텍스트 윈도우 초과

    200K 토큰이라고 마음 놓고 코드베이스 전체를 넣었다가 비용 폭탄 맞을 수 있습니다. 실제로 필요한 파일만 선별해서 넣는 게 훨씬 경제적이에요.

    Claude Opus 4.7 토큰 비용 최적화 전후 비교 대시보드 — 프롬프트 캐싱 적용 후 약 40% 비용 절감

    ▲ 토큰 비용 최적화 전후 비교 — 프롬프트 캐싱과 모델 티어 전략 적용 후 비용이 약 40% 절감된 실제 사례입니다.

    검증 결과: 실제 홈랩에서 측정한 Claude Opus 4.7 성능

    2주간 홈랩에서 Claude Opus 4.7을 실제 업무에 적용해서 측정한 결과입니다. 인프라 스크립트 생성, 코드 리뷰, 아키텍처 분석 작업에 활용했어요.

    AI 코딩 작업 결과

    • ✅ Ansible 플레이북 생성: 1회 시도로 실행 가능한 코드 생성률 약 78% (이전 버전 대비 +15%)
    • ✅ Python 스크립트 디버깅: 논리적 오류 감지 정확도 체감상 확실히 향상
    • ✅ 멀티파일 리팩터링: 파일 간 의존성 누락 케이스 현저히 감소

    비전 분석 결과

    • ✅ 네트워크 다이어그램 분석: SPOF 식별 정확도 향상
    • ✅ 모니터링 대시보드 스크린샷 분석: 이상 패턴 감지 가능
    • ✅ 복잡한 시스템 아키텍처 이해도: 이전 버전 대비 체감 개선

    토큰 비용 최적화 결과

    프롬프트 캐싱 + 모델 티어 전략을 함께 적용했더니 동일한 작업량 기준으로 약 35~40% 토큰 비용 절감이 가능했습니다. 이건 진짜 의미 있는 수치예요.

    최적화 전략 적용 전 (월 예상) 적용 후 (월 예상) 절감율
    모델 티어 전략 $50 $30 40% ↓
    프롬프트 캐싱 $30 $20 33% ↓
    max_tokens 최적화 $20 $16 20% ↓
    전략 종합 적용 $50 $29 42% ↓

    💡 팁: Anthropic Console의 Usage 대시보드에서 토큰 사용 패턴을 주기적으로 확인하는 습관을 들이세요. 예상치 못한 비용 급증을 빠르게 발견할 수 있습니다.

    ▲ Claude Opus 4.7 핵심 개선사항 요약 인포그래픽 — AI 코딩, 비전, 토큰 최적화 전략을 한눈에 비교할 수 있습니다.

    자주 묻는 질문 (FAQ)

    Q. Claude Opus 4.7과 GPT-4o 중 어떤 걸 써야 하나요?

    제 경험상 코딩과 긴 문서 분석에서는 Claude Opus 4.7이 강점을 보이고, 범용적인 대화나 빠른 응답이 필요한 경우는 GPT-4o가 나쁘지 않더라고요. 작업 유형에 따라 병행 사용하는 게 현실적입니다.

    Q. 홈랩에서 Claude 4.7 API를 쓰기 위한 최소 비용은?

    Anthropic API는 사용량 기반 과금이라 초기 비용 부담은 없어요. 소규모 홈랩 실험 수준이면 월 $5~20 정도면 충분합니다. 단, 모델 티어 전략을 적용하지 않으면 생각보다 빨리 올라가니 주의하세요.

    Q. 비전 기능을 인프라 모니터링에 실제로 활용할 수 있나요?

    네, 가능합니다! 저는 Grafana 대시보드 스크린샷을 주기적으로 캡처해서 Claude 4.7 비전으로 이상 패턴을 감지하는 파이프라인을 구축 중이에요. 아직 실험 단계지만 결과가 꽤 흥미롭습니다. 이 내용은 다음 글에서 자세히 다룰 예정입니다.

    Q. 프롬프트 캐싱은 모든 모델에서 지원되나요?

    현재 Claude Opus, Sonnet 계열에서 지원됩니다. Haiku는 확인이 필요해요. 공식 문서를 주기적으로 체크하시는 걸 권장합니다.

    마무리: Claude Opus 4.7, 인프라 엔지니어에게 추천할 만한가요?

    2주간 실제로 써본 결론은 — 네, 추천합니다. 특히 복잡한 인프라 스크립트 작성, 코드 디버깅, 아키텍처 다이어그램 분석을 자주 하는 분들이라면 체감이 확실히 됩니다.

    물론 완벽하진 않아요. 가끔 자신감 있게 틀린 코드를 내놓는 경우도 있고, 토큰 비용 관리를 안 하면 청구서가 무서울 수 있습니다. 하지만 오늘 소개한 최적화 전략들을 적용하면 비용 대비 효율은 충분히 좋습니다.

    제가 정리한 Claude Opus 4.7 핵심 포인트:

    • ✅ AI 코딩 성능: 멀티파일 작업, 논리 오류 감지에서 체감 향상
    • ✅ 비전 기능: 복잡한 아키텍처 다이어그램 분석에 실용적
    • ✅ 토큰 비용: 프롬프트 캐싱 + 모델 티어 전략으로 40% 절감 가능
    • ⚠️ Rate Limit 대응: 지수 백오프 구현 필수
    • ⚠️ 비전 이미지: 전처리 단계 필수 (5MB, 1568px 이하)

    다음 글에서는 Claude 4.7 비전 기능을 활용한 Grafana 모니터링 이상 감지 파이프라인 구축기를 다룰 예정입니다. 홈랩에서 실제로 구현하면서 겪은 삽질까지 솔직하게 공유할게요. 이전 글에서 다뤘던 Docker 모니터링 스크립트와 연계하면 꽤 강력한 시스템이 됩니다.

    혹시 Claude 4.7 도입하면서 궁금한 점이나 다른 활용 사례가 있으시면 댓글로 편하게 남겨주세요. 같이 이야기 나눠봐요 😊

  • [3D Printer] 멀티컬러 3D 프린팅 완벽 가이드: Bambu Lab AMS 세팅부터 슬라이서까지

    [3D Printer] 멀티컬러 3D 프린팅 완벽 가이드: Bambu Lab AMS 세팅부터 슬라이서까지

    멀티컬러 3D 프린팅 완벽 가이드: Bambu Lab AMS 세팅부터 슬라이서까지

    멀티컬러 3D 프린팅, 처음 봤을 때 저도 “와, 예쁘다”고만 생각했거든요. 그런데 직접 해보니까 단순히 색깔만 예쁜 게 아니라 실용적인 부품 제작에도 엄청나게 활용되더라고요. 예를 들어 케이스에 색상으로 포트를 구분해두거나, 홈랩 케이블 정리 클립에 색상 코딩을 입히는 식으로요. 그때부터 본격적으로 파고들었습니다.

    이 글에서는 멀티컬러 3D 프린팅의 핵심부터 시작해서, 제가 실제로 Bambu Lab AMS(자동 소재 공급 시스템)를 세팅하면서 겪은 삽질 경험, 슬라이서(Bambu Studio) 설정 방법까지 전부 정리해드릴게요. 처음 도전하시는 분들도 끝까지 읽으시면 바로 출력할 수 있도록 최대한 실전 위주로 썼습니다.

    Bambu Lab 3D 프린터와 AMS 유닛 멀티컬러 3D 프린팅 셋업 전체 모습

    ▲ Bambu Lab X1C + AMS 풀 셋업. 필라멘트 4색이 동시에 대기 중인 모습입니다. 이 구성이 멀티컬러 3D 프린팅의 시작점이에요.

    멀티컬러 3D 프린팅이란? — 개념부터 잡고 가기

    쉽게 말해서, 하나의 출력물에 여러 가지 색상(또는 소재)을 사용하는 방식입니다. 기존 단색 3D 프린팅은 필라멘트 한 롤을 처음부터 끝까지 쓰는 방식이었는데, 멀티컬러 방식은 출력 도중 필라멘트를 교체하거나 여러 노즐을 동시에 활용해서 다양한 색상을 한 번에 표현하는 거예요.

    구현 방식은 크게 세 가지로 나뉩니다.

    • AMS (Automatic Material System, 자동 소재 교체 시스템): Bambu Lab의 방식. 하나의 노즐로 필라멘트를 자동으로 교체하면서 출력. 색상 전환 시 퍼지(purge, 노즐 내 잔여 필라멘트 제거) 과정이 필요합니다.
    • 다중 노즐 방식 (Multi-Nozzle): 노즐 자체가 여러 개인 방식. 교체 시간이 없지만 기계가 복잡하고 비싸요.
    • 수동 필라멘트 교체 (Filament Change): M600 G-code 명령으로 특정 레이어에서 출력을 멈추고 수동으로 교체. 저렴하지만 번거로워요.

    저는 Bambu Lab X1 Carbon + AMS 조합을 쓰고 있는데, 솔직히 처음엔 AMS가 괜히 복잡한 거 아닌가 싶었어요. 근데 써보니까 “왜 이걸 이제 샀지” 싶더라고요. 자동화 수준이 정말 상당합니다.

    Bambu Lab AMS 구성 — 하드웨어 세팅

    AMS 유닛 이해하기

    AMS(Automatic Material System)는 최대 4개의 필라멘트 롤을 동시에 장착할 수 있는 외부 유닛입니다. AMS Lite는 오픈형이고, 일반 AMS는 밀폐형이라 습기 차단에 유리해요. 저는 AMS 풀 버전을 쓰는데, 건조제를 넣어두면 PETG나 나일론 같은 흡습성 필라멘트도 훨씬 안정적으로 출력되더라고요.

    AMS 유닛은 최대 4개까지 연결 가능해서 이론상 16색까지 사용할 수 있습니다. 저는 2개 연결해서 8색으로 쓰고 있고요.

    필라멘트 장착 순서

    1. AMS 덮개를 열고 필라멘트 롤을 슬롯에 삽입합니다.
    2. 필라멘트 끝을 AMS 입구에 살짝 밀어 넣으면 자동으로 당겨 들어갑니다.
    3. 프린터 화면이나 앱에서 해당 슬롯의 필라멘트 종류와 색상 정보를 등록합니다.
    4. 로드(Load) 명령을 실행해서 필라멘트가 노즐까지 제대로 들어오는지 확인합니다.

    💡 팁: 필라멘트 끝을 45도 각도로 깔끔하게 잘라서 넣어야 걸리지 않아요. 뭉툭하거나 거스러미가 있으면 AMS 내부에서 걸려서 로딩 에러가 납니다. 처음에 이거 때문에 삽질을 좀 했습니다 ㅎㅎ.

    Bambu Studio 슬라이서에서 멀티컬러 설정하기

    하드웨어 세팅이 끝났으면 이제 소프트웨어 쪽을 봐야죠. Bambu Studio(밤부 스튜디오)가 공식 슬라이서인데, 멀티컬러 관련 기능이 꽤 잘 구현돼 있습니다.

    Bambu Studio 슬라이서 멀티컬러 설정 화면 색상 할당 패널

    ▲ Bambu Studio에서 멀티컬러 모델을 슬라이싱하는 화면. 좌측 패널에서 각 파트별 필라멘트 색상을 지정할 수 있습니다.

    3MF 파일 vs STL 파일

    멀티컬러 출력을 제대로 하려면 3MF 파일 형식을 쓰는 게 훨씬 편합니다. STL은 단일 메시 정보만 담고 있어서 색상 정보가 없거든요. 3MF는 여러 파트의 조립 정보, 색상 정보, 슬라이서 설정까지 한 파일에 담을 수 있어요.

    Printables나 MakerWorld(밤부 공식 커뮤니티)에서 멀티컬러 모델을 받을 때 3MF 파일로 받으면 색상 설정이 이미 되어 있는 경우가 많습니다. 처음엔 이런 파일로 연습하시는 걸 추천드려요.

    페인트 기능으로 색상 직접 지정하기

    단색 STL 파일을 가져와서 특정 면에 색상을 직접 칠하는 것도 가능합니다. Bambu Studio의 Color Painting(색상 페인팅) 기능인데요, 사용법은 이렇습니다.

    1. STL 파일을 Bambu Studio에 불러옵니다.
    2. 상단 툴바에서 Paint 버튼을 클릭합니다.
    3. 좌측에서 원하는 필라멘트 슬롯(색상)을 선택합니다.
    4. 브러시 크기를 조절하고 색칠하고 싶은 면 위에 드래그합니다.
    5. 페인팅이 끝나면 슬라이싱(Slice) 버튼을 누릅니다.

    여기서 중요한 포인트! 페인팅 기능은 모델 표면을 직접 칠하는 방식이라서, 모델이 단순한 형태일수록 결과가 깔끔하게 나옵니다. 복잡한 유기적 형태에 세밀한 패턴을 넣고 싶다면 CAD 단계에서 파트를 분리해서 모델링하는 게 더 정확해요.

    멀티컬러 출력의 핵심 슬라이서 설정

    멀티컬러 출력에서 가장 중요한 설정이 바로 Flush(퍼지) 관련 설정입니다. 필라멘트를 교체할 때 이전 색상이 노즐에 남아 있으면 다음 색상이 섞여 나오거든요. 이걸 방지하기 위해 퍼지를 하는데, 이 양을 너무 적게 설정하면 색상이 섞이고, 너무 많이 설정하면 필라멘트 낭비가 심해집니다.

    설정 항목 권장 값 설명
    Flush volume (퍼지 볼륨) 150~200mm³ 밝은 색 → 어두운 색 전환 시 줄여도 됨. 어두운 색 → 밝은 색은 늘려야 함.
    Purge into infill (내부 채움에 퍼지) 활성화 권장 퍼지 필라멘트를 외부가 아닌 내부 인필에 숨겨서 낭비 줄임
    Purge tower (퍼지 타워) 필요시 활성화 색상 전환이 많을 때 별도 퍼지 타워 생성. 안정성 ↑, 필라멘트 소비 ↑
    Flush into support (서포트에 퍼지) 서포트 있을 때 활성화 어차피 제거할 서포트에 퍼지 필라멘트를 사용

    제 경험상 Purge into infill + Flush into support 조합이 필라멘트 낭비를 가장 효과적으로 줄여줍니다. 퍼지 타워는 정말 색상 전환이 많은 복잡한 모델이 아니라면 꺼두는 게 낫더라고요.

    ⚠️ 실제 겪은 문제와 해결법 — 삽질 기록

    문제 1: AMS 필라멘트 로딩 실패 (Loading Error)

    가장 흔한 문제입니다. 저도 처음 세팅할 때 이 에러 때문에 30분 넘게 씨름했어요. 원인은 대부분 이 세 가지입니다.

    • 필라멘트 끝이 깔끔하게 잘리지 않아서 AMS 내부에서 걸림
    • 필라멘트가 너무 딱딱하거나(특히 PETG 일부 제품) 롤이 엉킴
    • PTFE 튜브(필라멘트 이동 통로) 연결부가 헐거워짐

    해결법은 단순합니다. 필라멘트 끝을 새로 깔끔하게 자르고, PTFE 튜브 연결부를 꾹 눌러서 확실히 체결한 다음 다시 시도하면 대부분 해결돼요.

    문제 2: 색상 번짐 (Color Bleeding)

    퍼지 볼륨이 부족할 때 발생합니다. 특히 검정에서 흰색으로 전환할 때 심하게 나타나요. 이럴 땐 Flush volume을 250~300mm³까지 올려보세요. 낭비가 좀 있더라도 색상 품질이 중요한 모델이라면 감수해야 합니다.

    또 하나의 팁: 필라멘트 색상 배치를 전략적으로 하면 퍼지 양을 줄일 수 있어요. 비슷한 계열 색상끼리 인접 슬롯에 배치하는 게 좋습니다. 흰색 옆에 검정을 두는 건 최악의 조합이에요 ㅎㅎ.

    문제 3: 필라멘트 걸림 (Clog) — 색상 전환 중 발생

    이건 저도 몇 번 겪었는데, 대부분 필라멘트 온도 설정이 맞지 않을 때 발생합니다. 특히 서로 다른 브랜드나 종류의 필라멘트를 섞어서 쓸 때 문제가 생기더라고요. AMS에 필라멘트 정보를 정확하게 입력하고, 슬라이서에서 각 필라멘트별 온도 설정을 제대로 해주는 게 중요합니다.

    # Bambu Lab 프린터에서 로그 확인하는 방법 (SSH 접속 시)
    # 프린터 IP로 접속 (기본 비밀번호는 모델마다 다름)
    ssh bblp@[프린터_IP]
    
    # 출력 로그 확인
    cat /tmp/log/ams.log | tail -n 100
    
    # 필라멘트 교체 이벤트만 필터링
    grep "filament_change" /tmp/log/ams.log

    ⚠️ 참고로 SSH 접속은 보증에 영향을 줄 수 있으니 신중하게 하세요. 저는 문제 분석 목적으로만 가끔 씁니다.

    멀티컬러 모델 출력 결과 확인하기

    멀티컬러 3D 프린팅 완성 출력물 색상 전환 선명한 결과물

    ▲ 실제 출력 결과물들. 색상 전환부가 깔끔하게 나왔을 때의 만족감은 말로 다 못하죠 🎉

    세팅이 잘 됐는지 확인하는 가장 좋은 방법은 간단한 테스트 출력을 먼저 해보는 겁니다. MakerWorld에서 “AMS test” 또는 “multicolor calibration”으로 검색하면 색상 전환을 테스트하기 위한 전용 모델들이 많이 있어요.

    제가 처음 세팅 검증할 때 쓰는 체크리스트입니다.

    • ✅ 색상 전환부에 번짐이 없는가?
    • ✅ 퍼지 타워(또는 인필 퍼지)가 제대로 형성됐는가?
    • ✅ AMS 교체 과정에서 출력이 멈추거나 에러가 없었는가?
    • ✅ 첫 레이어 접착이 균일한가? (색상 전환 레이어 포함)
    • ✅ 필라멘트 낭비량이 허용 범위 내인가?

    드디어 됐다! 싶은 순간이 오면 정말 뿌듯합니다. 처음 4색 출력물이 성공했을 때 저도 한참 들여다봤었거든요 ㅎㅎ.

    자주 묻는 질문 (FAQ)

    Q. AMS 없이도 멀티컬러 출력이 가능한가요?

    네, 가능합니다. G-code의 M600 명령어를 활용한 수동 필라멘트 교체 방식을 쓰면 AMS 없이도 멀티컬러 출력이 됩니다. 다만 사람이 옆에 붙어서 교체해줘야 하고, 레이어 단위로만 색상 변경이 가능하다는 한계가 있어요.

    Q. 멀티컬러 출력 시 필라멘트 소비가 많이 늘어나나요?

    퍼지 과정에서 버려지는 필라멘트가 생기기 때문에 단색 출력보다는 소비가 늘어납니다. 퍼지 설정을 최적화하고 Purge into infill을 활용하면 낭비를 최소화할 수 있어요. 제 경험상 색상 전환이 많은 복잡한 모델은 10~20% 정도 더 소비되더라고요.

    Q. 어떤 필라멘트 브랜드가 AMS와 잘 호환되나요?

    Bambu Lab 순정 필라멘트가 당연히 가장 잘 맞습니다. 서드파티는 eSUN, Polymaker, Overture 같은 브랜드가 호환성이 좋은 편이에요. 단, NFC 태그 인식은 순정 필라멘트에서만 자동으로 되고, 서드파티는 수동으로 정보를 입력해야 합니다.

    Q. PLA 외에 다른 소재도 멀티컬러로 출력 가능한가요?

    가능합니다. PETG, TPU(유연 소재), ABS도 AMS로 출력할 수 있어요. 다만 소재마다 온도와 속도 설정이 다르고, 서로 다른 소재를 혼합해서 쓸 때는 호환성을 꼭 확인해야 합니다. PLA + TPU 혼합 같은 건 설정이 까다로워요.

    멀티컬러 3D 프린팅 방식 비교

    멀티컬러 3D 프린팅 방식 AMS 다중노즐 수동교체 비교 인포그래픽

    ▲ 세 가지 멀티컬러 출력 방식의 특성 비교. 본인의 용도와 예산에 맞게 선택하세요.

    방식 색상 수 자동화 필라멘트 낭비 가격대 추천 대상
    AMS (Bambu Lab) 최대 16색 완전 자동 중간 (퍼지 발생) 높음 편의성 중시, 자주 멀티컬러 출력
    다중 노즐 2~4색 자동 낮음 매우 높음 전문가, 산업용
    수동 교체 (M600) 제한 없음 수동 낮음 낮음 (추가 비용 없음) 가끔 멀티컬러, 예산 제한
    ERCF / MMU 최대 12색 자동 (DIY) 중간 중간 (DIY 조립) Voron 등 DIY 프린터 사용자

    마무리 — 멀티컬러 3D 프린팅, 해볼 만한가요?

    결론부터 말씀드리면, 네, 충분히 해볼 만합니다. 특히 Bambu Lab AMS 조합은 진입 장벽이 생각보다 훨씬 낮아요. 초기 세팅만 잘 해두면 이후에는 슬라이서에서 색상만 지정하고 출력 버튼 누르면 알아서 다 해줍니다.

    제가 이 글에서 다룬 멀티컬러 3D 프린팅의 핵심 내용을 정리하면 이렇습니다.

    • ✅ AMS 하드웨어 세팅: 필라멘트 끝 처리와 PTFE 튜브 연결이 핵심
    • ✅ 슬라이서 설정: Purge into infill 활용으로 필라멘트 낭비 최소화
    • ✅ 색상 배치 전략: 비슷한 계열 색상을 인접 슬롯에 배치
    • ✅ 트러블슈팅: 로딩 에러, 색상 번짐, 클로깅 해결법

    다음 글에서는 Bambu Studio에서 멀티 파트 모델을 직접 설계하고 색상을 최적화하는 방법을 다룰 예정입니다. CAD 툴(Fusion 360 또는 OnShape)에서 파트를 분리 설계하는 방법부터, 슬라이서에서 각 파트에 필라멘트를 할당하는 워크플로우까지 정리해볼게요.

    혹시 AMS 세팅하다가 막히는 부분이 있으면 댓글로 남겨주세요. 제가 겪어본 문제면 바로 답변드릴 수 있을 것 같습니다. 그럼 좋은 출력 되세요! 🎉

  • [Proxmox] Proxmox 클러스터 HA 설정: 고가용성 구성 완벽 가이드 2026

    [Proxmox] Proxmox 클러스터 HA 설정: 고가용성 구성 완벽 가이드 2026

    서버가 꺼졌을 때, 그 순간을 대비해야 합니다

    몇 년 전 일이에요. 새벽 3시에 전화가 울렸습니다. 운영 중인 VM(가상머신)이 돌아가던 물리 서버 하나가 갑자기 다운됐다는 알림이었거든요. 그때 HA(High Availability, 고가용성) 설정이 없었더라면… 생각만 해도 식은땀이 납니다. 다행히 Proxmox 클러스터 HA 덕분에 VM들이 자동으로 다른 노드로 이전됐고, 서비스 중단 시간은 2분도 안 됐어요.

    이 글은 바로 그 경험을 바탕으로 씁니다. Proxmox VE 클러스터 고가용성(HA) 설정을 처음 해보시는 분들, 혹은 설정은 해봤는데 뭔가 불안한 분들을 위한 2026년 기준 실전 가이드예요. 홈랩에서도, 소규모 프로덕션 환경에서도 충분히 적용 가능한 내용으로 가득 채웠으니 끝까지 읽어보세요.

    Proxmox VE 클러스터 HA 전체 아키텍처 다이어그램

    ▲ Proxmox VE 3노드 클러스터 HA 전체 구성도 — 각 노드 간 Corosync 통신, 공유 스토리지, 펜싱 장치 연결 구조를 보여줍니다.

    Proxmox 클러스터 HA, 쉽게 말하면 이겁니다

    처음 Proxmox를 접하시는 분들은 클러스터니 HA니 하는 말들이 좀 낯설 수 있어요. 저도 처음엔 그랬거든요. 하나씩 풀어볼게요.

    클러스터(Cluster)란?

    쉽게 말해서, 여러 대의 물리 서버(노드)를 하나처럼 묶어서 관리하는 구성이에요. Proxmox에서는 최소 3대의 노드가 있어야 제대로 된 클러스터를 구성할 수 있어요. 2대로도 가능하긴 한데, 쿼럼(Quorum, 의사결정 정족수) 문제가 생겨서 실무에서는 권장하지 않습니다.

    HA(High Availability, 고가용성)란?

    클러스터 위에서 동작하는 기능인데요. 특정 노드가 장애가 나면 그 위에서 돌아가던 VM이나 컨테이너를 자동으로 다른 노드에서 재시작해주는 거예요. 사람이 개입하지 않아도 된다는 게 핵심이죠.

    구성 요소 역할 없으면?
    Corosync 노드 간 클러스터 통신 및 하트비트(heartbeat) 관리 노드 상태 파악 불가
    Pve-cluster (pmxcfs) 클러스터 파일시스템, 설정 동기화 설정 불일치 발생
    HA Manager VM/CT 자동 복구 로직 담당 자동 페일오버(failover) 불가
    Fencing (펜싱) 장애 노드를 강제로 격리하는 메커니즘 스플릿 브레인(split-brain) 위험
    공유 스토리지 노드 간 VM 디스크 이미지 공유 HA 적용 대상 VM 제한

    여기서 펜싱(Fencing)이 제일 중요한데, 많은 분들이 이걸 빼먹고 설정하다가 나중에 낭패를 보더라고요. 장애 노드가 실제로 죽었는지, 아니면 네트워크만 끊긴 건지 확인하고 강제로 전원을 끄거나 격리하는 장치예요. 없으면 같은 VM이 두 노드에서 동시에 실행되는 최악의 상황이 생길 수 있거든요.

    사전 준비: Proxmox 클러스터 구성 전 필수 체크사항

    본격적인 설정 전에 체크해야 할 항목들이 있어요. 이거 안 하고 넘어가면 나중에 반드시 삽질하게 됩니다. 제가 보장합니다 ㅎㅎ.

    • 노드 수: 최소 3개 (홀수 권장 — 쿼럼 계산 때문에)
    • Proxmox VE 버전: 모든 노드가 동일한 버전이어야 함 (2026년 기준 PVE 8.x)
    • 네트워크: 클러스터 통신용 전용 네트워크 분리 권장 (1Gbps 이상)
    • 시간 동기화: NTP 설정 필수 — 시간이 틀리면 Corosync가 미칩니다
    • 공유 스토리지: Ceph, NFS, iSCSI 등 — HA가 적용될 VM 디스크는 반드시 공유 스토리지에 있어야 해요
    • 호스트명/DNS: 각 노드의 호스트명이 서로 해석 가능해야 함

    저는 홈랩에서 pve-node1, pve-node2, pve-node3 이렇게 3대로 구성하고 있고, 클러스터 통신은 별도의 10.10.10.0/24 네트워크를 사용해요. 이거 분리 안 하면 VM 트래픽이랑 섞여서 하트비트 지연이 생기거든요.

    단계별 실전 구성: Proxmox 클러스터 HA 설정하기

    1단계: 클러스터 생성 (첫 번째 노드에서)

    pve-node1에서 클러스터를 생성합니다. GUI로 해도 되지만, CLI가 훨씬 빠르고 정확해요.

    # pve-node1에서 실행
    pvecm create my-homelab-cluster --link0 10.10.10.1
    
    # 클러스터 상태 확인
    pvecm status

    --link0 옵션에는 클러스터 통신 전용 NIC의 IP를 넣어주세요. 메인 IP 쓰셔도 되긴 하는데, 분리하는 게 훨씬 안정적이더라고요.

    2단계: 나머지 노드 합류

    # pve-node2에서 실행
    pvecm add 10.10.10.1 --link0 10.10.10.2
    
    # pve-node3에서 실행
    pvecm add 10.10.10.1 --link0 10.10.10.3
    
    # node1에서 전체 노드 확인
    pvecm nodes

    합류할 때 SSH 비밀번호 입력을 요구하는데, 이건 정상이에요. Proxmox가 SSH로 접속해서 인증서를 교환하는 과정이거든요.

    3단계: 공유 스토리지 설정 (Ceph 기준)

    저는 홈랩에서 Proxmox 내장 Ceph를 쓰는데, 설정이 생각보다 간단해졌어요. 특히 PVE 8.x부터는 GUI에서 거의 다 됩니다.

    # 각 노드에서 Ceph 패키지 설치
    pveceph install --version reef
    
    # Ceph 초기화 (node1에서)
    pveceph init --network 10.10.20.0/24
    
    # 모니터 데몬 추가 (각 노드에서)
    pveceph mon create
    
    # OSD(Object Storage Daemon) 추가 — /dev/sdb는 Ceph 전용 디스크
    pveceph osd create /dev/sdb
    
    # Ceph 풀(pool) 생성
    pveceph pool create vm-pool --pg_num 128
    
    # Proxmox 스토리지로 등록
    pvesm add rbd ceph-storage --monhost 10.10.20.1,10.10.20.2,10.10.20.3 \
      --pool vm-pool --username admin --krbd 0

    Ceph 말고 NFS나 iSCSI를 쓰셔도 됩니다. 중요한 건 모든 노드에서 접근 가능한 공유 스토리지여야 한다는 거예요.

    4단계: 펜싱(Fencing) 설정

    이게 진짜 중요한데 많이들 건너뛰더라고요. 펜싱 없이 HA 쓰면 스플릿 브레인(split-brain) 상황에서 데이터 손상이 생길 수 있어요.

    가장 흔히 쓰는 방법은 IPMI/iDRAC/iLO 같은 BMC(Baseboard Management Controller, 원격 서버 관리 컨트롤러)를 이용한 펜싱이에요.

    # fence-agents 설치
    apt install fence-agents
    
    # 펜싱 테스트 (node2의 IPMI로 상태 확인)
    fence_ipmilan -a 192.168.1.102 -l admin -p yourpassword -o status

    홈랩처럼 IPMI가 없는 환경이라면 WoL(Wake-on-LAN)이나 스마트 플러그를 이용한 펜싱도 가능해요. 완벽하진 않지만 없는 것보단 낫거든요.

    Proxmox HA Manager 설정 화면 및 리소스 그룹 구성

    ▲ Proxmox VE GUI의 HA Manager 화면 — 리소스 그룹 설정, VM 상태, 펜싱 구성을 한눈에 확인할 수 있습니다.

    5단계: HA 리소스 그룹 및 VM 등록

    드디어 본론이에요! HA 매니저에 VM을 등록해봅시다.

    # HA 그룹 생성 (특정 노드에 우선순위 부여)
    ha-manager groupadd prod-group \
      --nodes "pve-node1:3,pve-node2:2,pve-node3:1" \
      --restricted 0 \
      --nofailback 0
    
    # VM 100번을 HA 리소스로 등록
    ha-manager add vm:100 \
      --group prod-group \
      --max_restart 3 \
      --max_relocate 2
    
    # HA 상태 확인
    ha-manager status
    
    # 특정 VM의 HA 설정 확인
    ha-manager config vm:100

    여기서 --max_restart는 같은 노드에서 재시작 시도 횟수, --max_relocate는 다른 노드로 이전 시도 횟수예요. 너무 크게 잡으면 장애 상황에서 복구가 지연될 수 있으니 적당히 설정하세요.

    GUI로 하시려면 Datacenter → HA → Add 메뉴에서 쉽게 할 수 있어요. 저도 처음 설정할 때는 GUI로 감 잡고, 이후에는 CLI로 자동화하는 편이에요.

    6단계: HA 서비스 활성화 확인

    # HA 관련 서비스 상태 확인
    systemctl status pve-ha-lrm  # Local Resource Manager
    systemctl status pve-ha-crm  # Cluster Resource Manager
    systemctl status corosync
    systemctl status pve-cluster
    
    # 클러스터 전체 상태 한 번에 확인
    pvecm status
    ha-manager status

    ⚠️ 실제로 겪은 Proxmox HA 트러블슈팅 사례들

    설정하다 보면 반드시 뭔가 꼬이는 순간이 와요. 제가 겪은 것들 공유할게요.

    문제 1: 쿼럼 손실 (Quorum Lost)

    노드 하나 내렸더니 클러스터 전체가 멈춰버린 적 있었어요. 3노드 중 1개만 내렸는데도요.

    # 쿼럼 상태 확인
    pvecm status | grep Quorum
    
    # 긴급 상황에서 쿼럼 강제 설정 (절대 프로덕션에서 함부로 쓰지 마세요!)
    # 이건 정말 최후의 수단입니다
    pvecm expected 1

    원인은 Corosync 링크 설정이 잘못돼 있었어요. /etc/corosync/corosync.conf에서 링크 주소가 메인 IP로 잡혀있던 거였죠. 클러스터 전용 IP로 수정하고 나서 해결됐습니다.

    문제 2: VM이 HA 대상이 안 되는 경우

    VM 디스크가 로컬 스토리지에 있으면 HA 등록 자체가 안 돼요. 반드시 공유 스토리지로 이전해야 합니다.

    # VM 100의 디스크를 로컬에서 Ceph로 마이그레이션
    qm move-disk 100 scsi0 ceph-storage --delete 1
    
    # 마이그레이션 후 디스크 위치 확인
    qm config 100 | grep scsi

    문제 3: 펜싱 실패로 HA가 동작 안 하는 경우

    이건 진짜 당황스러웠어요. 노드가 죽었는데 VM이 다른 노드로 안 넘어가는 거예요. 로그 확인해보니 펜싱 에이전트가 응답을 못 받아서 HA 매니저가 안전하게 대기 중인 거였어요.

    # HA 매니저 로그 확인
    journalctl -u pve-ha-crm -f
    journalctl -u pve-ha-lrm -f
    
    # 펜싱 에이전트 직접 테스트
    fence_ipmilan -a [IPMI_IP] -l [USER] -p [PASS] -o status
    
    # 수동 펜싱 (테스트용)
    fence_ipmilan -a [IPMI_IP] -l [USER] -p [PASS] -o reboot

    결국 IPMI 비밀번호가 변경됐던 게 문제였어요. 펜싱 설정도 업데이트해주니까 바로 해결됐습니다. 이런 거 있을 줄은… ㅎㅎ

    문제 4: 시간 동기화 문제

    # NTP 상태 확인
    timedatectl status
    chronyc tracking
    
    # /etc/chrony/chrony.conf 설정
    pool ntp.ubuntu.com iburst
    pool time.cloudflare.com iburst
    
    # chrony 재시작
    systemctl restart chronyd

    HA 동작 검증: 실제로 노드를 꺼봤습니다

    설정만 하고 테스트 안 하면 진짜 장애 때 믿을 수 없잖아요. 저는 분기마다 한 번씩 의도적으로 노드를 내려서 HA가 제대로 동작하는지 확인해요.

    1. 테스트할 노드에서 실행 중인 HA VM 확인
    2. 해당 노드의 전원을 강제로 차단 (graceful shutdown이 아닌 hard power off)
    3. HA 매니저가 장애를 감지하고 VM을 다른 노드에서 재시작하는 시간 측정
    4. 서비스 가용성 확인
    # 다른 노드에서 HA 복구 과정 실시간 모니터링
    watch -n 2 'ha-manager status; echo "---"; pvecm status'
    
    # VM ping 테스트로 다운타임 측정
    ping -i 0.5 [VM_IP] | ts '%H:%M:%.S'
    
    # 복구 후 VM이 어느 노드에서 실행 중인지 확인
    qm status 100
    pct status 200
    Proxmox HA 페일오버 테스트 결과 대시보드

    ▲ HA 페일오버 테스트 결과 — 노드 장애 감지부터 VM 재시작 완료까지 약 90초 소요, ping 손실 패킷 수와 복구 타임라인을 시각화한 모니터링 화면입니다.

    제 환경에서는 보통 60~120초 안에 VM이 다른 노드에서 살아납니다. 이 시간은 fence_delay, ha-manager의 타임아웃 설정에 따라 달라지는데, 너무 짧게 잡으면 일시적인 네트워크 끊김에도 불필요한 페일오버가 발생하니 주의하세요.

    VM 백업과 HA: 같이 챙겨야 합니다

    HA가 있다고 백업을 소홀히 하면 안 돼요. HA는 하드웨어 장애에 대한 자동 복구지, 데이터 손실에 대한 보호는 아니거든요. 스토리지 자체가 날아가면 HA도 소용없습니다.

    # Proxmox Backup Server(PBS)를 이용한 자동 백업 설정
    # /etc/pve/jobs.cfg에 추가되거나 GUI에서 설정 가능
    
    # vzdump으로 VM 백업 (CLI)
    vzdump 100 --storage pbs-storage --mode snapshot --compress zstd
    
    # 백업 스케줄 확인
    pvesched list

    저는 Proxmox Backup Server(PBS)를 별도 머신에 구축해서 매일 새벽 2시에 자동 백업 돌리고 있어요. VM 백업 관련해서는 별도 글로 자세히 다룰 예정이니 참고해 주세요.

    정리: Proxmox 클러스터 HA 완성 체크리스트

    Proxmox 클러스터 HA 설정 체크리스트 및 아키텍처 요약 인포그래픽

    ▲ Proxmox VE 클러스터 HA 구성 완료 체크리스트 — 클러스터 생성부터 펜싱, 공유 스토리지, HA 리소스 등록, 백업까지 단계별 요약 인포그래픽입니다.

    단계 항목 상태
    1 3개 이상 노드 준비, 동일 PVE 버전 ✅ 필수
    2 클러스터 전용 네트워크 분리 ✅ 강력 권장
    3 NTP 시간 동기화 설정 ✅ 필수
    4 공유 스토리지 구성 (Ceph/NFS/iSCSI) ✅ 필수
    5 펜싱 에이전트 설정 및 테스트 ✅ 필수
    6 HA 그룹 및 리소스 등록 ✅ 필수
    7 실제 페일오버 테스트 ✅ 필수
    8 VM 백업 스케줄 설정 ✅ 강력 권장

    마치며: 장애는 반드시 옵니다

    13년 동안 인프라 일을 하면서 배운 게 있다면, 장애는 일어나지 않는 게 아니라 언제 일어나느냐의 문제라는 거예요. Proxmox 클러스터 HA는 그 순간을 위한 보험이에요.

    처음 설정할 때는 복잡해 보이지만, 한 번 제대로 구성해두면 정말 든든합니다. 새벽 3시 전화 받고도 “어, 자동으로 넘어갔네” 하고 다시 잘 수 있거든요. 그 경험, 정말 소중하더라고요.

    궁금한 점이 있으시면 댓글로 남겨주세요. 다음 글에서는 Proxmox에서 Ceph 스토리지 세부 튜닝과 PBS(Proxmox Backup Server) 구축을 다룰 예정이에요. 이 두 가지가 HA랑 같이 있으면 진짜 완성된 인프라가 됩니다. 기대해 주세요! 🎉

    자주 묻는 질문 (FAQ)

    Q. Proxmox HA는 몇 대부터 가능한가요?

    기술적으로는 2대도 가능하지만, 쿼럼 구성을 위해 최소 3대를 강력히 권장합니다. 2대 구성은 한 노드가 죽으면 쿼럼을 잃어 클러스터가 동작을 멈춰요. QDevice(외부 쿼럼 장치)를 쓰면 2노드도 어느 정도 보완이 가능하더라고요.

    Q. 펜싱 장치가 없으면 HA를 쓰면 안 되나요?

    공식적으로는 펜싱 없이도 동작하지만, 프로덕션 환경에서는 절대 권장하지 않아요. 펜싱 없이 HA를 쓰면 스플릿 브레인 상황에서 데이터 손상이 발생할 수 있거든요. 홈랩이라면 소프트웨어 펜싱이나 스마트 플러그로라도 구성하세요.

    Q. HA VM의 라이브 마이그레이션(Live Migration)과 HA 페일오버의 차이는?

    라이브 마이그레이션은 VM이 실행 중인 상태에서 다운타임 없이 다른 노드로 이전하는 거예요. HA 페일오버는 노드 장애 시 VM을 다른 노드에서 재시작하는 거라 약간의 다운타임이 발생해요. 라이브 마이그레이션은 계획된 유지보수에, HA는 비계획 장애 대응에 쓰입니다.