홈서버 구축 완전 가이드 5편: 미디어 서버 구축
Home Server Complete Guide Part 5: Building a Media Server
서론: 나만의 스트리밍 서비스를 만들어보자
넷플릭스, 디즈니+, 왓챠... 요즘 스트리밍 서비스가 정말 많습니다. 하지만 각 서비스마다 콘텐츠가 분산되어 있고, 가지고 있는 영화나 드라마 파일은 재생하기가 불편하죠. 홈서버에 미디어 서버를 구축하면 이 모든 문제를 해결할 수 있습니다.
미디어 서버를 구축하면 집에 있는 모든 동영상, 음악, 사진을 스마트TV, 스마트폰, 태블릿 어디서든 편하게 감상할 수 있습니다. 외부에서도 인터넷만 연결되면 마치 나만의 넷플릭스처럼 사용할 수 있죠. 이번 편에서는 미디어 서버 소프트웨어 비교부터 설치, 설정, 외부 접속까지 모든 과정을 상세히 안내하겠습니다.
1. 미디어 서버란 무엇인가?
1.1 미디어 서버의 개념
미디어 서버는 동영상, 음악, 사진 등의 미디어 파일을 저장하고 다양한 기기에서 스트리밍으로 재생할 수 있게 해주는 서버 소프트웨어입니다. 단순히 파일을 공유하는 것과 달리, 미디어 서버는 다음과 같은 기능을 제공합니다.
- 미디어 정보 자동 수집: 영화 제목, 줄거리, 배우 정보, 포스터 이미지 등을 자동으로 가져옵니다.
- 라이브러리 정리: 장르, 연도, 감독 등으로 자동 분류하여 보기 좋게 정리합니다.
- 트랜스코딩: 재생 기기가 지원하지 않는 형식의 파일도 실시간으로 변환하여 재생합니다.
- 시청 진행률 동기화: 어느 기기에서 보다가 멈춰도 다른 기기에서 이어볼 수 있습니다.
- 사용자 관리: 가족 구성원별로 계정을 만들어 개인화된 추천과 시청 기록을 관리합니다.
1.2 미디어 서버의 장점
미디어 서버를 운영하면 여러 가지 이점을 누릴 수 있습니다.
- 중앙 집중화: 흩어져 있던 미디어 파일을 한 곳에서 관리할 수 있습니다.
- 기기 제약 없음: 스마트TV, 스마트폰, 태블릿, PC 등 어디서든 접근 가능합니다.
- 외부 접속: 집 밖에서도 자신의 미디어 라이브러리에 접근할 수 있습니다.
- 공유 편의성: 가족이나 친구에게 쉽게 미디어를 공유할 수 있습니다.
- 구독료 절약: 이미 보유한 콘텐츠를 활용하여 스트리밍 서비스 의존도를 줄일 수 있습니다.
2. 미디어 서버 소프트웨어 비교: Plex vs Jellyfin vs Emby
미디어 서버 소프트웨어로 가장 많이 사용되는 세 가지를 비교해보겠습니다. 각각의 특성을 파악하고 자신에게 맞는 것을 선택하면 됩니다.
2.1 Plex
Plex는 미디어 서버 분야에서 가장 오래되고 인지도가 높은 소프트웨어입니다.
- 장점: 세련된 UI, 안정적인 서비스, 풍부한 클라이언트 앱, 쉬운 외부 접속 설정
- 단점: 핵심 기능 일부가 유료(Plex Pass), 서버에 Plex 계정 필수, 폐쇄적인 생태계
- 요금: 기본 무료, Plex Pass 월 $4.99 또는 평생 라이선스 $119.99
- 추천 대상: 설정에 시간을 들이고 싶지 않은 분, 안정성을 중시하는 분
2.2 Jellyfin
Jellyfin은 완전 무료이자 오픈소스인 미디어 서버입니다. Emby의 오픈소스 포크로 시작했습니다.
- 장점: 100% 무료, 오픈소스, 계정 강제 없음, 커뮤니티 활발, 플러그인 확장성
- 단점: Plex보다 UI가 다소 투박함, 공식 클라이언트 앱이 적음, 초기 설정이 복잡할 수 있음
- 요금: 완전 무료
- 추천 대상: 비용을 들이고 싶지 않은 분, 오픈소스를 선호하는 분, 커스터마이징을 좋아하는 분
2.3 Emby
Emby는 Plex와 Jellyfin의 중간 정도 위치에 있는 미디어 서버입니다.
- 장점: 깔끔한 UI, 안정적인 서비스, DVR 및 라이브 TV 기능
- 단점: 핵심 기능 대부분이 유료(Emby Premiere), 오픈소스였다가 폐쇄됨
- 요금: 기본 무료, Emby Premiere 월 $4.99 또는 평생 라이선스 $119
- 추천 대상: DVR/라이브TV 기능이 필요한 분, Plex와 Jellyfin 사이에서 균형을 원하는 분
2.4 비교 표
| 항목 | Plex | Jellyfin | Emby |
|---|---|---|---|
| 가격 | 부분 유료 | 완전 무료 | 부분 유료 |
| 오픈소스 | X | O | X |
| 계정 필수 | O (Plex 계정) | X | X |
| UI 완성도 | 최고 | 양호 | 좋음 |
| 클라이언트 앱 | 매우 풍부 | 보통 | 풍부 |
| 하드웨어 가속 | O (유료) | O (무료) | O (유료) |
| 커뮤니티 | 대규모 | 활발 | 중간 |
이 가이드에서는 Jellyfin을 기준으로 설명합니다. 완전 무료이면서도 기능이 충분하고, 하드웨어 가속 트랜스코딩까지 무료로 제공하기 때문입니다.
3. Jellyfin 설치하기
3.1 Docker로 Jellyfin 설치 (권장)
Docker를 사용하면 설치와 업데이트가 간편합니다. 다음은 docker-compose를 이용한 설치 방법입니다.
먼저 Jellyfin용 디렉토리를 생성합니다.
mkdir -p /opt/jellyfin/{config,cache}
mkdir -p /media/{movies,tvshows,music}
docker-compose.yml 파일을 작성합니다.
version: "3.8"
services:
jellyfin:
image: jellyfin/jellyfin:latest
container_name: jellyfin
user: 1000:1000
network_mode: host
volumes:
- /opt/jellyfin/config:/config
- /opt/jellyfin/cache:/cache
- /media:/media:ro
restart: unless-stopped
environment:
- JELLYFIN_PublishedServerUrl=http://your-server-ip:8096
컨테이너를 실행합니다.
cd /opt/jellyfin
docker-compose up -d
3.2 직접 설치 (Ubuntu/Debian)
Docker를 사용하지 않는 경우 직접 설치할 수 있습니다.
# Jellyfin 저장소 추가
sudo apt install apt-transport-https gnupg
wget -O - https://repo.jellyfin.org/jellyfin_team.gpg.key | sudo apt-key add -
echo "deb [arch=$( dpkg --print-architecture )] https://repo.jellyfin.org/$( awk -F'=' '/^ID=/{ print $NF }' /etc/os-release ) $( awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release ) main" | sudo tee /etc/apt/sources.list.d/jellyfin.list
# 설치
sudo apt update
sudo apt install jellyfin
# 서비스 시작
sudo systemctl start jellyfin
sudo systemctl enable jellyfin
3.3 초기 설정 마법사
설치가 완료되면 웹 브라우저에서 http://서버IP:8096으로 접속합니다. 초기 설정 마법사가 나타나면 다음 단계를 따릅니다.
- 언어 선택: 한국어를 선택합니다.
- 관리자 계정 생성: 사용자명과 비밀번호를 설정합니다.
- 미디어 라이브러리 추가: 일단 건너뛰고 나중에 설정해도 됩니다.
- 메타데이터 언어: 한국어로 설정합니다.
- 원격 접속: 외부 접속을 허용할지 설정합니다.
4. 미디어 라이브러리 구성
4.1 폴더 구조 정리
미디어 파일을 체계적으로 정리하면 Jellyfin이 메타데이터를 정확하게 가져옵니다. 권장하는 폴더 구조는 다음과 같습니다.
/media/
├── movies/
│ ├── 기생충 (2019)/
│ │ └── 기생충 (2019).mkv
│ ├── Inception (2010)/
│ │ └── Inception (2010).mkv
│ └── ...
├── tvshows/
│ ├── 오징어 게임 (2021)/
│ │ ├── Season 01/
│ │ │ ├── 오징어 게임 - S01E01 - 무궁화 꽃이 피었습니다.mkv
│ │ │ ├── 오징어 게임 - S01E02 - 지옥.mkv
│ │ │ └── ...
│ │ └── Season 02/
│ │ └── ...
│ └── ...
└── music/
├── Artist Name/
│ ├── Album Name (Year)/
│ │ ├── 01 - Track Name.flac
│ │ └── ...
│ └── ...
└── ...
4.2 라이브러리 추가
Jellyfin 관리자 페이지에서 라이브러리를 추가합니다.
- 대시보드 > 라이브러리 > 라이브러리 추가
- 콘텐츠 유형 선택: 영화, TV 쇼, 음악 중 선택
- 폴더 추가: 해당 미디어가 저장된 경로 입력
- 메타데이터 언어: 한국어 선택
- 국가: 대한민국 선택
4.3 메타데이터 설정
한국 콘텐츠의 메타데이터를 잘 가져오려면 추가 설정이 필요합니다.
- 영화: TheMovieDB를 메타데이터 소스로 사용합니다. 한국어 메타데이터도 잘 지원됩니다.
- TV 쇼: TheMovieDB 또는 TheTVDB를 사용합니다.
- 음악: MusicBrainz를 사용합니다.
라이브러리 설정에서 "이미지 가져오기" 옵션들을 활성화하면 포스터, 배경 이미지 등을 자동으로 다운로드합니다.
5. 트랜스코딩 설정
5.1 트랜스코딩이란?
트랜스코딩은 재생 기기가 지원하지 않는 코덱이나 해상도의 파일을 실시간으로 변환하는 기능입니다. 예를 들어 HEVC(H.265)로 인코딩된 4K 영상을 구형 스마트TV에서 재생하려면 서버에서 H.264로 변환해서 전송해야 합니다.
5.2 하드웨어 가속 설정
트랜스코딩은 CPU에 부담이 큽니다. 하드웨어 가속을 사용하면 GPU가 이 작업을 대신하여 CPU 부하를 크게 줄일 수 있습니다.
Intel Quick Sync (내장 그래픽)
Intel CPU의 내장 그래픽을 사용하는 경우, Docker 컨테이너에 다음 장치를 추가합니다.
devices:
- /dev/dri:/dev/dri
Jellyfin 설정에서 대시보드 > 재생 > 트랜스코딩으로 이동하여 "하드웨어 가속"을 "VAAPI" 또는 "QSV"로 설정합니다.
NVIDIA GPU
NVIDIA GPU를 사용하는 경우 nvidia-docker를 설치하고 docker-compose에 다음을 추가합니다.
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
Jellyfin에서 하드웨어 가속을 "NVENC"로 설정합니다.
5.3 트랜스코딩 최적화 팁
- Direct Play 우선: 가능하면 클라이언트가 원본 파일을 직접 재생하도록 합니다. 트랜스코딩 없이 재생하면 서버 부하가 없습니다.
- 호환성 높은 포맷 사용: 영상을 저장할 때 H.264 + AAC 조합으로 인코딩하면 대부분의 기기에서 Direct Play가 가능합니다.
- 대역폭 설정: 클라이언트 앱에서 최대 스트리밍 품질을 "원본"으로 설정하면 불필요한 트랜스코딩을 피할 수 있습니다.
6. 외부 접속 설정
6.1 포트 포워딩
외부에서 Jellyfin에 접속하려면 공유기에서 포트 포워딩을 설정해야 합니다.
- 공유기 관리 페이지 접속 (보통 192.168.0.1 또는 192.168.1.1)
- 포트 포워딩 또는 가상 서버 설정 메뉴 찾기
- 외부 포트 8096을 내부 서버 IP의 8096 포트로 전달 설정
6.2 HTTPS 설정 (권장)
외부 접속 시 보안을 위해 HTTPS를 설정하는 것이 좋습니다. Nginx 리버스 프록시와 Let's Encrypt를 사용하는 방법을 권장합니다.
server {
listen 443 ssl http2;
server_name jellyfin.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/jellyfin.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/jellyfin.yourdomain.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8096;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket 지원
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
6.3 DDNS 설정
고정 IP가 없는 가정에서는 DDNS를 사용하면 편리합니다. 무료 DDNS 서비스로는 DuckDNS, No-IP, Dynu 등이 있습니다.
7. Bazarr로 자막 자동 다운로드
7.1 Bazarr 소개
Bazarr는 영화와 TV 쇼의 자막을 자동으로 다운로드해주는 프로그램입니다. Jellyfin과 연동하면 새로운 미디어가 추가될 때마다 자동으로 한글 자막을 찾아줍니다.
7.2 Bazarr 설치
version: "3.8"
services:
bazarr:
image: lscr.io/linuxserver/bazarr:latest
container_name: bazarr
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Seoul
volumes:
- /opt/bazarr/config:/config
- /media/movies:/movies
- /media/tvshows:/tv
ports:
- 6767:6767
restart: unless-stopped
7.3 Bazarr 설정
- 자막 제공자 설정: Settings > Providers에서 OpenSubtitles, Subscene 등을 추가합니다.
- 언어 설정: Settings > Languages에서 한국어를 추가합니다.
- 미디어 서버 연동: Settings > Sonarr/Radarr에서 연동하거나, 직접 경로를 지정합니다.
설정이 완료되면 Bazarr가 주기적으로 자막을 검색하고 다운로드합니다. 다운로드된 자막은 영상 파일과 같은 폴더에 저장되어 Jellyfin이 자동으로 인식합니다.
8. 클라이언트 앱 설정
8.1 스마트TV
각 TV 제조사별 앱 스토어에서 Jellyfin 앱을 설치할 수 있습니다.
- 삼성 TV (Tizen): 삼성 앱스토어에서 "Jellyfin" 검색하여 설치
- LG TV (webOS): LG Content Store에서 "Jellyfin" 설치
- Android TV: Google Play 스토어에서 "Jellyfin" 설치
- Apple TV: App Store에서 "Jellyfin" 설치
- Fire TV: Amazon Appstore에서 "Jellyfin" 설치
공식 앱이 없는 경우 웹 브라우저로 Jellyfin 서버 주소에 접속하면 웹 클라이언트를 사용할 수 있습니다.
8.2 모바일 앱
스마트폰과 태블릿에서도 Jellyfin 앱을 사용할 수 있습니다.
- Android: Google Play에서 "Jellyfin" 설치
- iOS: App Store에서 "Jellyfin Mobile" 또는 서드파티 앱 "Swiftfin" 설치
앱 설치 후 서버 주소를 입력하고 계정으로 로그인하면 바로 사용할 수 있습니다. 외부에서 접속하는 경우 DDNS 주소 또는 공인 IP를 입력합니다.
8.3 데스크톱
- 웹 브라우저: 어떤 OS든 웹 브라우저로 접속 가능
- Jellyfin Media Player: 공식 데스크톱 앱 (Windows, macOS, Linux)
- Kodi 플러그인: Kodi를 사용하는 경우 Jellyfin 플러그인 설치
9. 문제 해결
9.1 자주 발생하는 문제와 해결 방법
메타데이터가 잘못 매칭되는 경우
파일명을 "영화제목 (년도).확장자" 형식으로 정확히 맞추세요. 그래도 안 되면 해당 미디어를 선택하고 "메타데이터 식별" 기능으로 수동 매칭합니다.
재생이 끊기거나 버퍼링이 심한 경우
트랜스코딩이 발생하고 있을 가능성이 높습니다. 클라이언트 설정에서 품질을 "원본"으로 설정하거나, 서버의 하드웨어 가속이 제대로 작동하는지 확인하세요.
외부에서 접속이 안 되는 경우
포트 포워딩 설정을 확인하고, 방화벽에서 해당 포트가 열려 있는지 확인하세요. ISP에서 포트를 차단하는 경우도 있으니 다른 포트(예: 443)를 사용해보세요.
마무리
이번 편에서는 홈서버에 미디어 서버를 구축하는 방법을 살펴봤습니다. Jellyfin은 완전 무료이면서도 상용 서비스 못지않은 기능을 제공하므로, 처음 미디어 서버를 구축하는 분들께 강력히 추천합니다.
미디어 서버는 홈서버의 꽃이라고 할 수 있습니다. 한번 구축해두면 온 가족이 편하게 사용할 수 있고, 집 밖에서도 자신만의 스트리밍 서비스를 즐길 수 있습니다. 다음 편에서는 Docker를 활용하여 다양한 서비스를 쉽게 배포하고 관리하는 방법을 알아보겠습니다.