서버가 된다는 것
서버는 어렵게 말하면 '요청을 기다리는 컴퓨터'입니다. 다른 기기가 웹 페이지를 달라고 요청하면 웹 서버가 파일을 보내 줍니다. 폴더에 접근하겠다고 요청하면 파일 서버가 목록을 보여 줍니다. 영화나 음악을 재생하겠다고 요청하면 미디어 서버가 데이터를 전송합니다.
라즈베리파이는 크기는 작지만 리눅스가 돌아가는 컴퓨터입니다. 그래서 집 안에서 쓰는 작은 서버로 충분히 활용할 수 있습니다. 방문자가 많은 상업용 사이트나 무거운 영상 변환 작업에는 맞지 않지만, 개인용 웹 페이지, 센서값 표시 페이지, 집 안 파일 공유, 가벼운 미디어 보관함에는 좋은 출발점이 됩니다. 특히 정적 HTML처럼 내용이 거의 바뀌지 않는 페이지는 라즈베리파이에도 부담이 적습니다.1
서버 실습을 시작하기 전에 먼저 라즈베리파이의 IP 주소를 확인합니다.
hostname -I예를 들어 192.168.0.25가 보이면, 같은 공유기에 연결된 노트북이나 스마트폰에서 이 주소로 라즈베리파이에 접근할 수 있습니다. 이번 장의 실습은 기본적으로 집 안의 같은 네트워크에서 사용하는 것을 기준으로 합니다.
AI 생성 이미지
정적 웹 서버 만들기
가장 단순한 서버는 HTML 파일을 그대로 보여 주는 웹 서버입니다. 이 방식은 개인 소개 페이지, 프로젝트 설명 페이지, 간단한 안내판을 만들 때 좋습니다.
웹 서버 프로그램으로는 Apache와 NGINX가 많이 쓰입니다. Apache는 자료가 많고 오래 검증된 서버입니다. NGINX는 정적 파일 제공에 가볍고 빠른 편입니다.1 여기서는 NGINX를 예로 들겠습니다.
sudo apt update
sudo apt install nginx -y설치가 끝나면 NGINX 서비스가 실행 중인지 확인합니다.
systemctl status nginx이제 같은 네트워크의 다른 기기에서 브라우저를 열고 다음 주소로 접속합니다.
http://라즈베리파이_IP주소예를 들어 다음과 같습니다.
http://192.168.0.25기본 환영 페이지가 보이면 웹 서버가 정상적으로 동작하는 것입니다. 이제 기본 페이지를 직접 바꿔 보겠습니다.
sudo nano /var/www/html/index.html내용을 간단히 작성합니다.
<!doctype html>
<html>
<head>
<meta charset='utf-8'>
<title>My Raspberry Pi Server</title>
</head>
<body>
<h1>안녕하세요</h1>
<p>이 페이지는 라즈베리파이에서 제공하고 있습니다.</p>
</body>
</html>저장한 뒤 브라우저를 새로고침합니다. 방금 작성한 문장이 보이면 성공입니다. 지금 만든 서버는 아주 단순하지만 중요한 구조를 담고 있습니다. 웹 서버 프로그램이 실행되고, /var/www/html 폴더의 파일을 읽고, 브라우저 요청에 응답합니다.
Flask로 동적 웹 페이지 만들기
정적 웹 서버는 저장된 파일을 그대로 보여 줍니다. 반면 Flask 같은 파이썬 웹 프레임워크를 사용하면 요청이 들어올 때마다 파이썬 코드가 실행됩니다. 덕분에 현재 시간, 센서값, 버튼 상태처럼 바뀌는 정보를 웹 페이지로 보여 줄 수 있습니다. Flask는 가볍고 배우기 쉬워 라즈베리파이의 IoT 웹 실습에 자주 쓰입니다.2
먼저 작업 폴더를 만듭니다.
mkdir -p ~/webapp
cd ~/webapp가상 환경을 만들고 Flask를 설치합니다. 가상 환경은 프로젝트마다 파이썬 패키지를 따로 관리하는 작은 작업 공간입니다.
python3 -m venv venv
source venv/bin/activate
pip install flask만약 venv 관련 오류가 나오면 다음 패키지를 설치한 뒤 다시 시도합니다.
sudo apt install python3-venv -y이제 app.py 파일을 만듭니다.
nano app.py다음 코드를 입력합니다.
from flask import Flask
from datetime import datetime
app = Flask(__name__)
@app.route('/')
def home():
now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
return f'<h1>Raspberry Pi Flask Server</h1><p>현재 시간: {now}</p>'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)중요한 부분은 host='0.0.0.0'입니다. 이것은 라즈베리파이 자기 자신뿐 아니라 같은 네트워크의 다른 기기에서도 접속할 수 있게 열어 둔다는 뜻입니다.2
실행합니다.
python3 app.py브라우저에서 다음 주소로 접속합니다.
http://라즈베리파이_IP주소:5000페이지를 새로고침할 때마다 시간이 바뀌면 동적 웹 서버가 동작하는 것입니다. 나중에는 이 위치에 온도, 습도, 거리 센서값을 넣을 수 있습니다.
단, Flask의 기본 개발 서버는 학습과 실험용입니다. 집 안에서 테스트하는 데는 편하지만, 인터넷에 그대로 공개하는 용도로 생각하면 안 됩니다.2
Samba로 파일 서버 만들기
파일 서버는 여러 기기에서 같은 폴더에 접근하게 해 줍니다. 예를 들어 라즈베리파이에 연결한 USB 저장장치에 사진, 로그, 프로젝트 파일을 모아 두고 Windows 노트북이나 Mac에서 열 수 있습니다.
라즈베리파이에서 가장 흔히 쓰는 파일 공유 도구 중 하나가 Samba입니다. Samba를 사용하면 Windows의 공유 폴더처럼 접근할 수 있습니다.3
먼저 설치합니다.
sudo apt update
sudo apt install samba -y공유할 폴더를 만듭니다.
sudo mkdir -p /media/share
sudo chown -R $USER:$USER /media/share
chmod 775 /media/share테스트 파일을 하나 만들어 둡니다.
echo 'hello from raspberry pi' > /media/share/hello.txt이제 Samba 설정 파일을 엽니다.
sudo nano /etc/samba/smb.conf파일 맨 아래에 다음 내용을 추가합니다. valid users에는 자신의 라즈베리파이 사용자 이름을 넣습니다.
[SharePi]
comment = Raspberry Pi Share
path = /media/share
browsable = yes
writeable = yes
public = no
valid users = pi
create mask = 0664
directory mask = 0775사용자 이름이 pi가 아니라면 바꿔야 합니다. 현재 사용자 이름은 다음 명령으로 확인할 수 있습니다.
whoamiSamba 접속용 비밀번호를 등록합니다.
sudo smbpasswd -a 사용자이름서비스를 재시작합니다.
sudo systemctl restart smbd이제 다른 기기에서 접속합니다.
Windows에서는 파일 탐색기 주소창에 다음처럼 입력합니다.
\라즈베리파이_IP주소SharePimacOS나 Linux에서는 다음 주소를 사용합니다.
smb://라즈베리파이_IP주소/SharePiUSB HDD나 SSD를 공유하고 싶다면 /media/share 대신 USB 저장장치가 마운트된 폴더를 path로 지정하면 됩니다. 단, 중요한 파일을 저장할 계획이라면 권한을 너무 넓게 열지 말고, 반드시 비밀번호 방식으로 접근하게 하는 편이 좋습니다.
미디어 서버와 미디어 센터로 활용하기
라즈베리파이는 영화, 음악, 사진을 보관하고 집 안 기기에서 재생하는 미디어 서버로도 사용할 수 있습니다. 구조는 단순합니다. 외장 USB HDD나 SSD에 미디어 파일을 저장하고, 라즈베리파이에서 미디어 서버 프로그램을 실행한 뒤, TV·스마트폰·태블릿·PC에서 접속해 재생합니다.
대표적인 선택지는 다음과 같습니다.
Plex: 영화, 드라마, 음악 라이브러리를 보기 좋게 정리해 주는 인기 미디어 서버입니다.
Jellyfin: 무료 오픈소스 미디어 서버입니다. 개인 서버를 직접 운영하고 싶은 사람에게 잘 맞습니다.
Kodi: 라즈베리파이를 TV에 직접 연결해 미디어 센터처럼 쓸 때 적합합니다.
Volumio, MoOde: 음악 재생 전용 서버를 만들 때 사용할 수 있습니다.
미디어 서버는 저장 공간과 네트워크가 중요합니다. 영상 파일은 용량이 크므로 microSD 카드에 모두 저장하기보다 외장 HDD나 SSD를 사용하는 편이 좋습니다. 집 안 스트리밍은 가능하면 유선 Ethernet 연결이 안정적입니다. Wi-Fi도 가능하지만, 고화질 영상에서는 끊김이 생길 수 있습니다.4
또 하나 중요한 점은 발열입니다. 라즈베리파이가 오래 일하면 온도가 올라가고, 온도가 높아지면 성능을 낮춰 스스로를 보호합니다. 이 현상을 스로틀링이라고 합니다. 장시간 서버로 쓸 계획이라면 방열판이나 팬이 있는 케이스를 사용하는 것이 좋습니다.5
백그라운드 실행과 자동 시작
서버는 터미널 창을 열어 둔 동안만 동작하면 불편합니다. 재부팅 후에도 자동으로 켜지고, 오류가 나면 다시 시작되도록 만드는 것이 좋습니다.
NGINX와 Samba처럼 패키지로 설치한 서버는 보통 systemd 서비스로 관리됩니다.
sudo systemctl enable nginx
sudo systemctl enable smbd직접 만든 Flask 앱도 서비스로 등록할 수 있습니다. 아래 예시는 사용자 이름이 pi이고 작업 폴더가 /home/pi/webapp일 때의 예입니다. 자신의 사용자 이름과 경로에 맞게 바꿔야 합니다.
sudo nano /etc/systemd/system/pi-flask.service다음 내용을 입력합니다.
[Unit]
Description=Raspberry Pi Flask App
After=network-online.target
Wants=network-online.target
[Service]
User=pi
WorkingDirectory=/home/pi/webapp
ExecStart=/home/pi/webapp/venv/bin/python /home/pi/webapp/app.py
Restart=on-failure
[Install]
WantedBy=multi-user.target서비스를 등록하고 시작합니다.
sudo systemctl daemon-reload
sudo systemctl enable --now pi-flask상태와 로그는 다음 명령으로 확인합니다.
systemctl status pi-flask
journalctl -u pi-flask -n 50이제 라즈베리파이를 재부팅해도 Flask 앱이 자동으로 실행됩니다.
항상 켜 두는 장치의 기본 점검
서버는 오래 켜 두는 장치입니다. 그래서 처음 실습할 때보다 전원, 저장장치, 보안을 더 신경 써야 합니다.
첫째, 전원 어댑터는 안정적인 제품을 사용합니다. 전원이 부족하면 서버가 멈추거나 저장장치에 오류가 생길 수 있습니다.
둘째, 중요한 데이터는 microSD 카드에만 두지 않습니다. microSD 카드는 운영체제용으로는 편리하지만, 계속 로그를 쓰고 파일을 저장하는 서버 용도로는 부담이 큽니다. 사진, 영상, 공유 파일, 센서 기록은 가능하면 외장 SSD나 HDD에 저장하고 따로 백업합니다.
셋째, 외부 인터넷 공개는 서두르지 않습니다. 집 안에서 접속되는 것과 인터넷 전체에 노출되는 것은 완전히 다른 문제입니다. 공유기에서 포트 포워딩을 열면 모르는 사람이 접속을 시도할 수 있습니다. 비밀번호, 공유 권한, 업데이트, 방화벽 설정을 확인하기 전에는 외부 공개를 피하는 것이 안전합니다. 미디어 서버도 기본적으로 집 안 네트워크에서 쓰는 구성을 먼저 권장합니다.5
필요하다면 방화벽을 설치해 열어 둘 포트를 제한할 수 있습니다.
sudo apt install ufw -y
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 5000/tcp
sudo ufw enableSSH로 원격 접속 중이라면 sudo ufw allow ssh를 먼저 실행해야 합니다. 그렇지 않으면 방화벽을 켠 순간 원격 접속이 끊길 수 있습니다.
라즈베리파이 서버의 핵심은 거창한 성능이 아닙니다. 작은 보드 하나로 웹 페이지를 열고, 파일을 공유하고, 미디어를 재생하고, 내가 만든 파이썬 서비스를 계속 실행해 보는 경험입니다. 이 경험을 바탕으로 다음 장에서는 카메라와 멀티미디어 장치를 연결해 사진과 영상을 다루는 프로젝트로 확장하겠습니다.
참고
1Building your own Raspberry Pi Web Server
2Raspberry Pi Web Server With Python
3How to Turn a Raspberry Pi into a File Server?
4Raspberry Pi as a Media Center: Complete Guide for Beginners
5Media Server on Raspberry Pi: The Ultimate 2025 Setup & Streaming Guide
이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.