홈 서버 만들기 시리즈
1편 → 남는 PC로 개인 서버 만들기 (VirtualBox & 우분투) → 2편 → Samba로 나만의 NAS 만들기 → 3편 ← 지금 여기
Ubuntu에 Jellyfin 설치해서 나만의 미디어 서버 만들기
1편에서 VirtualBox와 우분투로 홈 서버 기반을 마련하고, 2편에서는 Samba를 이용해 나만의 NAS를 완성했습니다. 이제 그 서버 위에 왕관을 얹을 시간입니다.
바로 Jellyfin(젤리핀)입니다. 하드 디스크 속에 잠들어 있던 영화, 드라마, 음악, 사진들이 마치 나만의 넷플릭스처럼 깔끔한 UI로 살아납니다. TV, 스마트폰, PC, 태블릿 어디서든 — 심지어 외부 카페에서도 — 내 집 서버의 미디어를 스트리밍할 수 있습니다. 월 구독료? 0원입니다.
1. Jellyfin이란? — 넷플릭스를 내 서버에 짓다
Jellyfin은 영화, TV 시리즈, 음악, 사진을 스스로 호스팅할 수 있는 무료 오픈소스 미디어 서버입니다. 한때 유료로 전환한 Emby의 완전한 무료 대안으로 탄생하였으며, 광고도, 구독료도, 숨겨진 기능 잠금도 없습니다.
Plex(플렉스)와 자주 비교되는데, Plex는 일부 기능(오프라인 다운로드, 라이브 TV 등)이 월 구독 유료 플랜에 묶여 있습니다. Jellyfin은 그 모든 기능을 영구 무료로 제공합니다.
- 브라우저에서
http://서버IP:8096으로 접속해 넷플릭스 같은 미디어 UI 사용 - 삼성/LG TV, 안드로이드 TV에 Jellyfin 앱 설치해서 대형 화면으로 감상
- 스마트폰(iOS/Android) 앱으로 외출 중 집 서버 스트리밍
- 음악, 사진, 팟캐스트, 오디오북까지 통합 관리
- 여러 가족 구성원을 위한 별도 계정·프로필 운영
2. 시작 전 준비사항 확인
이 가이드는 1편에서 우분투 서버 구축을 마친 상태를 기준으로 합니다. 아래 항목을 먼저 확인하세요.
| 준비사항 | 세부 내용 | 확인 |
|---|---|---|
| Ubuntu Server | Ubuntu 22.04 LTS 또는 24.04 LTS 실행 중 | ☐ |
| SSH 접속 | 터미널에서 서버에 SSH 접속 가능 | ☐ |
| 내부 IP 주소 | 우분투 서버의 내부 IP(예: 192.168.0.x) 파악 | ☐ |
| sudo 권한 | sudo 명령어 실행 가능한 계정 | ☐ |
| 미디어 파일 | 재생할 영화·음악·사진 파일이 서버에 저장되어 있거나 NAS(2편)와 연결됨 | ☐ |
3. Jellyfin 설치하기 (공식 저장소 방법)
Jellyfin을 설치하는 방법은 여러 가지가 있지만, 공식 APT 저장소를 추가하는 방법이 가장 안정적이며 자동 업데이트도 지원되어 강력히 권장합니다. SSH로 우분투 서버에 접속한 상태에서 아래 명령어를 순서대로 실행합니다.
① 패키지 목록 업데이트 및 의존성 설치
먼저 시스템 패키지 목록을 최신 상태로 갱신하고, HTTPS 저장소 접근에 필요한 패키지를 설치합니다.
sudo apt update && sudo apt upgrade -y
sudo apt install apt-transport-https curl gnupg -y
② Jellyfin 공식 GPG 키 추가
패키지의 신뢰성을 검증하기 위한 공식 GPG 서명 키를 시스템에 추가합니다.
curl -fsSL https://repo.jellyfin.org/ubuntu/jellyfin_team.gpg.key \
| sudo gpg --dearmor -o /usr/share/keyrings/jellyfin.gpg
③ Jellyfin 공식 저장소 추가
우분투 버전에 맞는 Jellyfin 저장소를 APT 소스 목록에 추가합니다. 아래는 Ubuntu 22.04(Jammy) 및 24.04(Noble) 모두에서 동작하는 방법입니다.
echo "deb [signed-by=/usr/share/keyrings/jellyfin.gpg] \
https://repo.jellyfin.org/ubuntu \
$(lsb_release -cs) main" \
| sudo tee /etc/apt/sources.list.d/jellyfin.list
④ 저장소 갱신 후 Jellyfin 설치
sudo apt update
sudo apt install jellyfin -y
설치 중 패키지 크기에 따라 1~3분 정도 소요될 수 있습니다. 설치가 완료되면 Jellyfin 서비스가 자동으로 시작됩니다.
⑤ 설치 확인 및 자동 시작 등록
Jellyfin이 정상적으로 동작하는지 확인하고, 서버 재부팅 시에도 자동으로 시작되도록 등록합니다.
sudo systemctl status jellyfin
Active: active (running)이 초록색으로 표시되면 Jellyfin이 정상 동작 중입니다.# 부팅 시 자동 시작 활성화
sudo systemctl enable jellyfin
# 자동 시작 상태 확인
sudo systemctl is-enabled jellyfin
enabled라고 출력되면 설정 완료입니다. 확인 후 q를 눌러 상태 화면을 빠져나옵니다.
sudo systemctl start jellyfin 명령어로 수동 실행 후 다시 상태를 확인하세요. 그래도 오류가 발생한다면 sudo journalctl -u jellyfin -n 50 명령어로 로그를 확인하여 원인을 파악할 수 있습니다.
4. 방화벽(UFW) 및 포트 설정
Jellyfin은 기본적으로 8096번 포트(HTTP)와 8920번 포트(HTTPS)를 사용합니다. 우분투 방화벽(UFW)이 활성화되어 있다면, 이 포트를 허용해야 웹 브라우저와 앱에서 접근할 수 있습니다.
① UFW 상태 확인
sudo ufw status
② Jellyfin 포트 허용
# Jellyfin 웹 UI 및 클라이언트 접속 포트
sudo ufw allow 8096/tcp
# HTTPS (선택 사항 — 나중에 도메인·SSL 적용 시 필요)
sudo ufw allow 8920/tcp
# 적용 확인
sudo ufw status numbered
| 포트 | 프로토콜 | 용도 | 필수 여부 |
|---|---|---|---|
| 8096 | TCP | Jellyfin 웹 UI 및 모든 클라이언트 기본 접속 포트 (HTTP) | 필수 |
| 8920 | TCP | HTTPS 접속 포트 (SSL 인증서 적용 시 사용) | 선택 |
| 7359 | UDP | 로컬 네트워크 내 Jellyfin 서버 자동 검색 기능 | 선택 |
| 1900 | UDP | DLNA 서비스 (TV 등 DLNA 기기에서 서버 검색 시 필요) | 선택 |
5. Jellyfin 최초 설정 마법사
이제 웹 브라우저를 열고 Jellyfin 서버에 접속하여 초기 설정을 진행합니다. 같은 네트워크(집 Wi-Fi)에 연결된 PC나 스마트폰에서 진행합니다.
① 브라우저에서 Jellyfin 접속
웹 브라우저 주소창에 아래 주소를 입력합니다. 서버_IP 부분을 1편에서 확인한 우분투 서버의 내부 IP로 교체하세요.
http://서버_IP:8096
# 예시: http://192.168.0.100:8096
② 최초 설정 마법사 단계별 진행
- 언어 선택: 목록에서 한국어(Korean)를 선택하고 '다음'을 클릭합니다.
- 관리자 계정 생성: 사용할 사용자 이름과 비밀번호를 입력합니다. 이 계정이 Jellyfin의 최고 관리자 계정이 됩니다. 안전한 비밀번호를 설정하세요.
- 미디어 라이브러리 설정: '다음' 단계에서 미디어 라이브러리를 추가할 수 있습니다. 일단 건너뛰고 나중에 추가해도 됩니다. (다음 섹션에서 자세히 다룹니다.)
- 메타데이터 언어: 기본 메타데이터 언어를 한국어로 설정하면 영화 제목과 설명이 한국어로 표시됩니다. (단, 해당 영화의 메타데이터가 한국어를 지원하는 경우에 한합니다.)
- 원격 접속 허용: 외부 기기에서 접속을 허용하려면 이 옵션을 체크합니다. 나중에 설정 메뉴에서도 변경 가능합니다.
- 설정 완료: '완료' 버튼을 클릭하면 Jellyfin 대시보드로 이동합니다. 방금 만든 관리자 계정으로 로그인합니다.
6. 미디어 라이브러리 추가하기
Jellyfin은 라이브러리(Library) 개념으로 미디어를 관리합니다. 라이브러리를 추가한다는 것은 "이 서버에 있는 이 폴더의 파일들을 Jellyfin이 인식하고 관리하게 해라"는 명령입니다.
① 미디어 파일 폴더 구조 설계 (강력 권장)
Jellyfin이 영화 포스터, 줄거리, 출연진 같은 메타데이터를 자동으로 가져오려면 폴더 구조와 파일명 규칙을 따르는 것이 매우 중요합니다. 아래 구조를 권장합니다.
/srv/media/
├── movies/ ← 영화 라이브러리
│ ├── 인터스텔라 (2014)/
│ │ └── 인터스텔라 (2014).mkv
│ └── 기생충 (2019)/
│ └── 기생충 (2019).mp4
├── tvshows/ ← TV 시리즈 라이브러리
│ └── 더 글로리/
│ ├── Season 01/
│ │ ├── 더 글로리 S01E01.mkv
│ │ └── 더 글로리 S01E02.mkv
│ └── Season 02/
│ └── 더 글로리 S02E01.mkv
├── music/ ← 음악 라이브러리
│ └── 아티스트명/
│ └── 앨범명/
│ └── 01 - 곡명.flac
└── photos/ ← 사진 라이브러리
└── 2024년 여름 여행/
기생충 (2019).mp4)하면 Jellyfin이 동명의 다른 작품과 혼동하지 않고 정확한 메타데이터를 가져옵니다. TV 시리즈는 S01E01 형식을 반드시 지켜야 에피소드 순서가 올바르게 인식됩니다.
② 미디어 폴더 생성 및 권한 설정
SSH에서 미디어 폴더를 생성하고, Jellyfin 서비스 계정이 파일을 읽을 수 있도록 권한을 설정합니다.
# 미디어 폴더 생성
sudo mkdir -p /srv/media/movies
sudo mkdir -p /srv/media/tvshows
sudo mkdir -p /srv/media/music
sudo mkdir -p /srv/media/photos
# Jellyfin 서비스 계정(jellyfin)에 읽기 권한 부여
sudo chown -R jellyfin:jellyfin /srv/media
sudo chmod -R 755 /srv/media
/srv/samba/nas)에 미디어 파일을 업로드하고, 그 경로를 라이브러리에 추가하면 됩니다. 별도로 파일을 옮기지 않아도 됩니다.
# Samba NAS 폴더를 Jellyfin에 심볼릭 링크로 연결하는 방법
sudo ln -s /srv/samba/nas /srv/media/nas
③ Jellyfin 대시보드에서 라이브러리 추가
- Jellyfin 대시보드에서 우측 상단 프로필 아이콘 → '대시보드'를 클릭합니다.
- 왼쪽 메뉴에서 '라이브러리'를 클릭합니다.
- '미디어 라이브러리 추가' 버튼을 클릭합니다.
- 콘텐츠 유형을 선택합니다. (영화 → Movies, 시리즈 → TV Shows, 음악 → Music, 사진 → Photos 등)
- 폴더 추가 버튼을 클릭하고 위에서 만든 경로(예:
/srv/media/movies)를 입력합니다. - 메타데이터 언어를 한국어로 설정하고 '확인'을 클릭합니다.
라이브러리 추가 후 Jellyfin은 자동으로 폴더를 스캔하고 인터넷에서 메타데이터를 가져옵니다. 파일 수에 따라 수 분에서 수십 분이 걸릴 수 있습니다. 스캔이 완료되면 대시보드에 포스터 이미지와 함께 미디어 목록이 나타납니다.
7. TV · 스마트폰 · PC에서 접속하기
Jellyfin의 진짜 강점은 다양한 기기 지원입니다. 공식 클라이언트 앱이 제공되어 별도 설정 없이 서버 주소만 입력하면 연결됩니다.
① 웹 브라우저 (PC / Mac / 스마트폰)
별도 앱 설치 없이 가장 간편한 방법입니다. Chrome, Firefox, Safari, Edge 모두 지원합니다.
http://서버_내부_IP:8096
# 예시: http://192.168.0.100:8096
관리자 계정으로 로그인하면 바로 미디어 라이브러리에 접근할 수 있습니다. PC에서는 풀 HD 스트리밍도 브라우저만으로 충분합니다.
② 스마트폰 (Android / iOS)
공식 Jellyfin 앱을 설치합니다. 앱 스토어에서 "Jellyfin"으로 검색하거나 아래 링크를 이용하세요.
🤖 Android
Google Play 스토어에서 "Jellyfin" 검색 후 설치. 또는 Google Play 공식 페이지에서 설치.
🍎 iOS (iPhone / iPad)
App Store에서 "Jellyfin" 검색 후 설치. 공식 앱은 무료이며 광고 없음.
앱 설치 후 '서버 추가' → http://서버_IP:8096 입력 → 계정 로그인 순서로 연결합니다. 같은 Wi-Fi에 있다면 서버 자동 검색 기능으로 더 간편하게 연결할 수도 있습니다.
③ 스마트 TV (Android TV / 삼성 TV / LG TV)
TV 앱 스토어에서 "Jellyfin"을 검색하면 공식 앱을 설치할 수 있습니다.
- Android TV / Google TV: Google Play 스토어 → "Jellyfin" 검색 설치. 4K 콘텐츠 직접 재생 지원.
- 삼성 TIZEN TV (2018년 이후 모델): Samsung Apps 스토어 → "Jellyfin" 검색 설치.
- LG webOS TV: LG Content Store → "Jellyfin" 검색 설치.
- Fire TV Stick: Amazon AppStore → "Jellyfin" 검색 설치.
http://서버IP:8096 주소를 직접 입력하세요.
8. 하드웨어 가속 트랜스코딩 설정 (선택)
Jellyfin에서 트랜스코딩(Transcoding)이란 클라이언트 기기가 원본 파일의 코덱을 지원하지 않을 때, 서버가 실시간으로 영상을 변환하여 전송하는 과정입니다. 이 작업은 CPU를 많이 사용하므로, 서버의 GPU(그래픽카드)나 내장 그래픽을 활용하는 하드웨어 가속을 활성화하면 성능이 크게 향상됩니다.
① Intel 내장 그래픽 (Intel Quick Sync) 가속 설정
인텔 CPU 내장 그래픽을 이용한 하드웨어 가속이 가장 간단합니다. 대부분의 가정용 PC에서 사용 가능합니다.
# 1. Intel 미디어 드라이버 설치
sudo apt install intel-media-va-driver -y
# 2. jellyfin 계정을 render 그룹에 추가
sudo usermod -aG render jellyfin
# 3. Jellyfin 재시작
sudo systemctl restart jellyfin
이후 Jellyfin 대시보드 → 재생 → 트랜스코딩 메뉴에서 하드웨어 가속을 Video Acceleration API (VAAPI)로 선택하고, VA API 기기를 /dev/dri/renderD128로 설정하면 됩니다.
② NVIDIA GPU 가속 설정 (NVENC)
NVIDIA 그래픽카드가 장착된 PC라면 NVENC를 활용하여 훨씬 강력한 하드웨어 가속이 가능합니다.
# NVIDIA 드라이버가 설치되어 있는지 확인
nvidia-smi
# jellyfin 계정을 render 그룹에 추가
sudo usermod -aG render jellyfin
sudo systemctl restart jellyfin
Jellyfin 대시보드 → 재생 → 트랜스코딩에서 하드웨어 가속을 NVENC로 선택하면 됩니다.
9. 외부에서 안전하게 접속하기
집 Wi-Fi에서는 내부 IP로 바로 접속되지만, 카페나 직장 같은 외부 환경에서 집 Jellyfin 서버를 이용하려면 추가 설정이 필요합니다.
방법 1. 공유기 포트포워딩 (간편하지만 보안 주의 필요)
Jellyfin의 8096 포트는 Samba와 달리 외부 개방이 상대적으로 안전합니다. 다만 기본 HTTP(암호화 없음)이므로 보안 강화를 위해 비밀번호를 강하게 설정하고 HTTPS 설정을 권장합니다.
- 1편에서 배운 방법으로 공유기 관리 페이지에 접속합니다.
- 포트포워딩 규칙을 추가합니다:
- 규칙 이름: Jellyfin
- 내부 IP: 우분투 서버 IP (예: 192.168.0.100)
- 외부 포트: 8096 (또는 보안을 위해 임의의 포트, 예: 18096)
- 내부 포트: 8096
- 프로토콜: TCP
- 공유기의 외부 IP를 확인합니다: whatismyip.com 방문 후 표시되는 IP 사용.
- 외부에서
http://공유기_외부_IP:8096으로 접속 가능합니다.
방법 2. VPN 사용 (가장 안전한 방법)
2편에서 소개한 Tailscale 또는 ZeroTier VPN을 이미 구성했다면, 그 가상 IP를 통해 외부에서도 내부 IP처럼 Jellyfin에 접속할 수 있습니다.
10. 자주 발생하는 오류 및 해결 방법
설정 과정에서 자주 마주치는 문제들과 해결 방법을 정리했습니다.
❶ 브라우저에서 서버 주소를 입력했는데 접속이 안 됩니다
원인 1: Jellyfin 서비스가 실행 중이지 않음
sudo systemctl status jellyfin
sudo systemctl start jellyfin
원인 2: UFW 방화벽이 8096 포트를 차단
sudo ufw allow 8096/tcp
sudo ufw reload
원인 3: IP 주소 오입력 — ip addr 명령어로 서버 IP를 다시 확인하세요.
❷ 미디어 라이브러리를 추가했는데 파일이 보이지 않습니다
원인 1: 파일/폴더 읽기 권한 문제
sudo chown -R jellyfin:jellyfin /srv/media
sudo chmod -R 755 /srv/media
원인 2: 스캔이 아직 완료되지 않음 — 대시보드 → 라이브러리 → '전체 라이브러리 스캔' 버튼을 수동으로 클릭하세요.
원인 3: 파일명/폴더 구조 규칙 미준수 — 영화는 영화제목 (연도)/영화제목 (연도).mkv 형식을 따르세요.
❸ 영상이 재생되다가 계속 끊깁니다 (버퍼링)
원인 1: 트랜스코딩으로 인한 CPU 과부하
# 서버 CPU 사용률 확인
top
해결: 8번 섹션의 하드웨어 가속 트랜스코딩을 활성화하세요. 또는 클라이언트 앱에서 재생 품질을 낮추거나(720p 이하) 직접 재생(Direct Play)으로 설정하세요.
원인 2: 네트워크 속도 부족 — 가능하면 Wi-Fi 대신 유선 LAN 케이블로 서버와 공유기를 연결하세요. 4K 스트리밍은 최소 25Mbps의 안정적인 네트워크가 필요합니다.
❹ 영화 포스터나 줄거리 정보가 가져와지지 않습니다
원인: 서버에서 인터넷(TheMovieDB 등)에 접근하지 못하거나, 파일명이 메타데이터 규칙과 다른 경우입니다.
- 서버에서
curl https://api.themoviedb.org명령어로 인터넷 연결을 확인하세요. - 영화 파일명에 연도를 포함하세요:
기생충 (2019).mp4 - 대시보드 → 해당 항목 우클릭 → '메타데이터 새로고침' 수동 실행
마치며: 나만의 넷플릭스가 완성되었습니다 🎉
수고하셨습니다! 이 시리즈의 3편을 모두 완료하셨다면, 집에 방치되어 있던 구형 PC가 이제 완전히 다른 모습으로 변신했습니다.
🏠 홈 서버 만들기 시리즈 완주!
월 구독료 없이, 용량 제한 없이, 광고 없이 — 온전히 내 것인 미디어 서버. 여기까지 왔다는 것만으로도 이미 대단한 성취입니다.
앞으로 더 발전시키고 싶다면 다음과 같은 것들에 도전해 볼 수 있습니다. Nginx 리버스 프록시와 Let's Encrypt SSL 인증서를 적용하여 개인 도메인으로 HTTPS 접속하기, Docker를 활용한 컨테이너 기반 서버 관리, Portainer로 GUI에서 여러 서비스 한 번에 관리하기 등이 있습니다. 이어지는 시리즈에서 다뤄볼 예정이니 기대해 주세요!
설정 중 막히는 부분이 있다면 댓글로 남겨주세요. 최대한 빠르게 도움을 드리겠습니다. 😊
