내 컴퓨터의 폴더를, 아무 서버 없이, 인터넷 주소 하나로 여는 세 가지 길
「강국진의 창고가 열렸습니다」에서 저는 공유창고를 여는 방법으로 Tailscale의 Funnel과 Cloudflare의 Tunnel + R2를 이름만 언급하고, "자세한 것은 여러분의 AI와 상담하라"며 넘어갔습니다. 이 글은 그 미룬 설명을 채웁니다 — 무엇을 어떻게 하면 실제로 창고가 열리는지, 그리고 indiebizOS를 설치했다면 무엇이 달라지는지를.
거창한 게 아닙니다. 내 컴퓨터 안의 어떤 폴더 하나를, 인터넷 주소를 아는 사람이
브라우저로 열어볼 수 있게 하는 것입니다. 신문이든, 보고서든, 맛집 목록이든,
그 폴더에 넣어둔 파일을 남이 받아볼 수 있으면 그게 창고입니다.
제 창고는 finder.kukjinkang.uk 에 열려 있습니다.
문제는 하나입니다. 내 컴퓨터는 보통 인터넷에서 직접 접근할 수 없습니다. 집 공유기 뒤에 숨어 있고(사설 IP), 통신사도 주소를 감춥니다(CGNAT). 옛날 방식은 공유기에서 포트포워딩을 열고 방화벽을 만지는 것이었는데, 위험하고 번거롭습니다. 그래서 요즘은 반대로 합니다 — 내 컴퓨터가 바깥의 중계 서버로 먼저 '터널'을 뚫고 나가서, 방문자는 그 중계 서버를 거쳐 내 컴퓨터에 닿습니다. 포트를 열 필요도, 고정 IP도 필요 없습니다. 아래 세 방법이 모두 이 원리입니다.
cd /공유할/폴더/경로
python3 -m http.server 8080
이제 localhost:8080 에 그 폴더가 열립니다. 아래 방법들은 이 8080 포트를
바깥 세상으로 꺼내는 서로 다른 통로일 뿐입니다.
Tailscale은 WireGuard 기반의 개인 VPN 서비스입니다. 그 부가기능인 Funnel이, 내 기기의 한 포트를 공개 인터넷에 HTTPS 주소로 그대로 노출해 줍니다. 개인 용도로 무료이고, 신용카드도 도메인도 필요 없습니다. 가장 빠른 길입니다.
tailscale.com/download 에서 설치한 뒤:
# macOS는 앱 설치 후 로그인, 리눅스는:
curl -fsSL https://tailscale.com/install.sh | sh
tailscale up # 브라우저가 열리며 계정 로그인(구글/깃허브 등)
Funnel은 안전을 위해 기본은 꺼져 있습니다. Tailscale 관리자 콘솔(admin console)의 DNS 탭에서 HTTPS 인증서를 활성화하고, Access Controls에서 Funnel 사용을 허용해야 합니다. 실은 다음 단계 명령을 처음 실행하면 "여기를 눌러 켜라"는 링크를 직접 띄워주므로, 그 링크만 눌러도 됩니다.
앞의 파이썬 서버(8080)가 돌고 있는 상태에서, 다른 터미널 창에:
tailscale funnel 8080
그러면 https://내기기이름.내tailnet이름.ts.net/ 형태의 공개 주소가 뜹니다.
이 주소를 아는 사람은 누구나 브라우저로 내 폴더를 열 수 있습니다. 끝입니다.
tailscale funnel --bg 8080 # 창을 닫아도 계속 돌게(백그라운드)
tailscale funnel status # 지금 열린 주소 확인
tailscale funnel off # 창고 닫기
...ts.net 으로 길고, 방문자가 몰리거나 큰 동영상을 여럿이 볼 때
내 컴퓨터가 그 트래픽을 전부 직접 감당합니다. 문서·사진 위주의 소박한 창고엔 완벽하고,
"영상을 여러 사람이 동시에" 같은 부하가 예상되면 방법 2를 고려하세요.
좀 더 손이 가지만 보기 좋은 내 도메인 주소(예: finder.내도메인.com)를 쓸 수 있고,
R2(Cloudflare의 저장소)로 캐시를 걸 수 있습니다. 자주 보는 파일·동영상을
Cloudflare가 대신 기억해 뿌려주므로, 여러 사람이 봐도 내 컴퓨터가 덜 힘듭니다.
Cloudflare에 도메인 하나를 연결해 두었다는 전제가 필요합니다(무료 등록 가능).
brew install cloudflared # macOS (윈도우/리눅스는 공식 설치 안내 참고)
cloudflared tunnel login # 브라우저에서 내 도메인 선택·인증
cloudflared tunnel create mycreek # 터널 생성 → 터널 ID가 나옴
cloudflared tunnel route dns mycreek finder.내도메인.com # 공개 주소를 이 터널로
~/.cloudflared/config.yml 파일을 만들어, 그 주소로 온 요청을 아까의 8080 포트로 넘깁니다:
tunnel: <터널 ID>
credentials-file: ~/.cloudflared/<터널 ID>.json
ingress:
- hostname: finder.내도메인.com
service: http://localhost:8080
- service: http_status:404
cloudflared tunnel run mycreek
이제 https://finder.내도메인.com 으로 내 창고가 열립니다.
동영상처럼 무거운 걸 여럿이 볼 때, Cloudflare Worker를 앞단에 두고 R2 버킷에 한 번 받아온 파일을 캐시하도록 만들면, 두 번째 방문자부터는 Cloudflare가 대신 뿌려줍니다. R2는 이용료가 저렴하고 다운로드(egress) 요금이 없다는 점이 이 용도에 맞습니다. 다만 이 단계는 Worker 코드를 다뤄야 해서 손이 제법 갑니다 — 원문에서 말했듯 당장 급한 일은 아닙니다. 창고가 커지고 영상 수요가 실제로 생겼을 때 붙이면 됩니다. (그리고 이 귀찮은 조립을 대신 해주는 게 다음의 indiebizOS입니다.)
| 항목 | Tailscale Funnel | Cloudflare Tunnel (+R2) |
|---|---|---|
| 비용 | 개인 무료 | 터널 무료 · R2는 소액 |
| 도메인 | 불필요(*.ts.net) | 내 도메인 필요 |
| 설정 난이도 | 매우 쉬움(5분) | 중간 |
| 대량·동영상 부하 | 내 컴퓨터가 감당 | R2 캐시로 완화 |
| 추천 대상 | 처음 여는 소박한 창고 | 주소·규모를 갖추고 싶을 때 |
위 두 방법은 결국 터널을 뚫고 · 폴더를 서빙하고 · 캐시를 붙이는 세 가지 손일입니다. indiebizOS는 이걸 내장 기능으로 대신 해줍니다. 직접 명령어를 치는 대신, 아래 흐름을 따르면 됩니다.
Cloudflare 토큰·도메인을 준비했다면, AI에게
"공유창고 터널을 설정해줘"라고 말하면 됩니다. AI가 위 방법 2의 명령들
(cloudflared 로그인 → 터널 생성 → DNS 연결 → 설정 저장)을 대신 수행하고,
그 결과를 설정 → 터널 탭에 채워 넣습니다. 그다음엔
터널이 켜졌으면, 이제 어떤 폴더를 세상에 보여줄지만 고르면 됩니다. AI에게 "이 폴더를 공유창고에 올려줘" 라고 하거나, 공개파일(showcase) 기능을 씁니다. 핵심 규칙은 두 가지입니다:
내창고주소/s/ABCDE, 5자 코드)입니다. 널리 뿌리면 공개 갤러리,
아는 사람에게만 주면 비밀 창고가 됩니다.내부적으로는 이런 어휘가 실행됩니다(참고):
[others:showcase]{op:"add", path:"/Users/.../오송맛집", mode:"files"} # 폴더 추가
[others:showcase]{op:"basket_save", title:"오송 창고"} # 주소 발급(5자 코드)
[others:showcase]{op:"basket_toggle", basket_id:"bsk_…", folder_id:"fld_…"} # 그 주소에 담기
[others:showcase]{op:"status"} # 폴더·주소 현황
창고에 넣을 게 많지 않아도 괜찮습니다. 하나씩 열리고 그게 이어져 망이 되면, 우리는 서로에게서 많은 것을 얻게 됩니다. 당신의 창고도 하나 열어보시길.
— 창고 하나가, 인터넷을 조금 되찾는다.