FRP로 ServBay 로컬 개발 환경을 외부 인터넷에 공개하기 (내망 관통)
FRP는 고성능이면서도 사용이 간편한 리버스 프록시 도구로, 로컬 개발 중인 서비스(웹사이트, API, 데이터베이스 등)를 안전하고 쉽게 외부에 노출해야 할 때 적합합니다. FRP는 클라이언트(frpc
)와 서버(frps
) 아키텍처를 통해 내망 관통(외부 네트워크에서 로컬에 접속 가능)을 효율적으로 실현합니다.
이 가이드는, 특히 macOS 환경의 ServBay 사용자에게 FRP 클라이언트(frpc
)를 설정하여 보안 터널을 만들고 ServBay에서 구동 중인 로컬 웹 서비스를 외부에서도 접속 가능하게 만드는 방법을 단계별로 안내합니다. 이는 원격 시연, 협업 개발, Webhook 수신, 외부 API 테스트 등 다양한 개발 시나리오에서 매우 유용합니다.
기술 원리 개요
FRP의 핵심 원리는 내망 기기(귀하의 ServBay가 구동 중인 macOS, frpc
실행)에서 외부 서버(frps
실행)로 암호화 터널을 만드는 것에 있습니다. 외부 사용자의 요청은 먼저 frps
가 구동 중인 서버로 전송되고, 그 후 터널을 통해 로컬의 frpc
로 전달됩니다. frpc
는 이 요청을 ServBay 내의 실제 서비스(예: 웹사이트, API 등)로 넘기고, 응답 역시 반대 경로로 외부까지 전달됩니다.
이 메커니즘을 통해 내망 방화벽과 라우터 제약을 우회하여 로컬 서비스를 외부에 노출할 수 있으며, TCP/UDP/HTTP/HTTPS 등 다양한 프로토콜을 지원해 ServBay 개발 환경을 위한 강력한 원격 접근 기능을 제공합니다.
활용 시나리오
ServBay를 FRP와 결합하면 다음과 같은 상황에서 쉽게 활용 가능합니다:
- 원격 시연 & 협업: 서비스 배포 없이 로컬 웹사이트나 앱을 팀원·고객에게 즉시 시연.
- Webhook 테스트: GitHub, Stripe, WeChat Pay 등 외부 서비스의 Webhook 알림을 직접 로컬에서 처리 및 디버깅.
- API 연동 개발: 로컬 백엔드 API를 외부 프론트 개발자, 파트너 등에게 공개해 합동 테스트.
- 모바일 테스트: 모바일 기기에서 로컬 ServBay 사이트 혹은 앱에 접속하여 호환성 테스트.
- 임시 공유: 복잡한 설정 없이 로컬 파일이나 서비스를 즉시 공유.
사전 준비 사항
FRP 구성을 시작하기 전에 다음을 확인하세요:
- ServBay 설치 및 실행: macOS에 ServBay가 정상 설치되어 실행 중이며, 외부에 공개할 서비스(예: 웹사이트)도 ServBay에 설정 후 로컬 브라우저에서 접속 가능해야 합니다.
- 외부 네트워크용 FRP 서버(
frps
) 보유: 공인 IP 주소가 있는 서버에 FRP 서버(frps
)를 설치·운영해야 합니다. 이 가이드는 클라이언트(frpc
) 설정에 집중합니다. - 공인 도메인(선택, HTTP/HTTPS 접근 시 권장): 도메인 접속이 필요할 경우 도메인을 소유하고 DNS 설정 가능해야 합니다.
- FRP 클라이언트(
frpc
) 설치 완료: FRP 클라이언트는 ServBay에 기본 포함되어 있지 않으므로 별도 다운로드 및 설치가 필요합니다.
환경 준비 및 FRP 클라이언트 설치
다음 절차를 따라 macOS에서 FRP 클라이언트(frpc
)를 설치합니다.
FRP 클라이언트 다운로드:FRP GitHub Releases 페이지에서, macOS 아키텍처(M1/M2/M3 등 Apple Silicon은
frp_*.darwin_arm64.tar.gz
, Intel은frp_*.darwin_amd64.tar.gz
)에 맞는 최신 버전을 다운로드하세요.FRP 클라이언트 설치: 다운로드 파일 압축을 풀고,
frpc
실행 파일을/usr/local/bin
등 시스템 PATH에 복사하면 터미널 어디서든 명령 사용이 가능합니다.아래 명령에서 버전(
0.52.3
) 및 구조(darwin_arm64
)는 예시이므로 실제 다운로드한 파일명으로 변경하세요.bash# 예시: frp_0.52.3_darwin_arm64.tar.gz 다운로드 완료 시 cd ~/Downloads tar -zxvf frp_0.52.3_darwin_arm64.tar.gz cd frp_0.52.3_darwin_arm64 sudo cp frpc /usr/local/bin/ # (선택) frpc.toml 예시 파일 복사 (사용자 홈 디렉토리 등) # cp frpc.toml ~/
1
2
3
4
5
6
7
8
9
10
11sudo
사용 시 사용자 암호를 입력하세요.설치 확인: 터미널에서 다음 명령으로 PATH 적용 및 설치 확인:
bashfrpc -v # 예시 출력: frpc version 0.52.3
1
2버전 정보가 나오면 정상 설치입니다.
FRP 클라이언트 터널 구성
FRP 클라이언트는 주로 frpc.toml
설정 파일을 통해 운영합니다(TOML 포맷 권장). 이 파일에 클라이언트가 FRP 서버(frps
)와 어떻게 연결하고, ServBay 내 서비스가 외부에서 어떻게 접근 가능한지 설정합니다.
frpc.toml
설정 파일 구조
다음은 대표적인 frpc.toml
형식 예시로, 서버 연결 정보와 최소 1개의 프록시(터널) 설정을 보여줍니다:
toml
# frpc.toml - FRP 클라이언트 설정 파일 예시
# [common]: 서버 연결 정보
serverAddr = "your-frps-server.com" # FRP 서버의 공인 IP나 도메인
serverPort = 7000 # 서버가 클라이언트 연결용으로 연 포트 (기본 7000)
# 인증 설정 (token 방식 권장)
auth.method = "token"
auth.token = "your_authentication_token" # 서버와 일치하는 인증 토큰
# (선택) TLS 암호화 사용 시 보안 강화
# tls_enable = true
# [[proxies]]: 1개 이상의 프록시(터널) 설정
[[proxies]]
name = "my-web-service" # 프록시 이름 (frpc.toml 내 유일해야 함)
type = "http" # 프록시 프로토콜 종류: http, https, tcp, udp 등
localIP = "127.0.0.1" # 로컬 서비스 IP (기본 127.0.0.1)
localPort = 80 # 노출할 로컬 포트(예: ServBay의 HTTP 서비스 기본값)
customDomains = ["servbay.your-domain.com"] # 외부 접근 도메인 (http/https 전용). **이 도메인은 반드시 사전에 DNS로 FRP 서버 Public IP에 연결해야 함**
# 추가 프록시 설정 가능
# [[proxies]]
# ... (다른 서비스용 프록시)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
설정 항목 | 구분 | 설명 |
---|---|---|
serverAddr | [common] | FRP 서버(frps )의 공인 IP 또는 도메인명 |
serverPort | [common] | 서버가 클라이언트 연결용으로 연 포트 (기본 7000, 환경에 따라 조정 필요) |
auth.method | [common] | 서버 인증 방식. token 이 일반적. 서버와 반드시 일치해야 함 |
auth.token | auth ([common] 하위) | 서버와 동일한 인증 토큰. 타인에 유출 금지 |
tls_enable | [common] | TLS 암호화 터널 사용 여부 (보안 목적상 true 권장) |
[[proxies]] | 최상위 | 복수 프록시(터널) 규칙 배열 설정. 각 프록시는 별도 [[proxies]]로 정의 |
name | [[proxies]] | 프록시 식별용 이름 (frpc.toml 내 고유) |
type | [[proxies]] | 터널 프로토콜 종류. 일반적으로 http , https , tcp , udp |
localIP | [[proxies]] | 로컬 서비스 IP. 특별한 경우 외엔 기본(127.0.0.1) 유지 |
localPort | [[proxies]] | 로컬 포트 (예: HTTP는 80, HTTPS는 443, MySQL은 3306, PostgreSQL은 5432 등) |
remotePort | [[proxies]] | (tcp/udp만 해당) 외부에서 사용하는 공개 포트. serverAddr:remotePort 형식으로 접속 |
customDomains | [[proxies]] | (http/https만 해당) 외부 접속용 도메인 배열. 모두 DNS로 서버 Public IP 매핑 필요 |
subdomain | [[proxies]] | (http/https/지원되는 경우) 서버에서 subdomain_host 활성화 시 하위 도메인 지정 가능 |
[proxies.plugin] | [[proxies]] | SSL 처리 등 특수 플러그인 설정용 |
hostHeaderRewrite | [proxies.plugin] 또는 [[proxies]] (유형/플러그인별) | 포워딩 요청의 Host 헤더 재작성. ServBay의 가상호스트 환경에 필수. 반드시 ServBay 사이트 도메인과 일치하도록 설정! |
실전 예시: ServBay HTTPS 웹사이트 서비스 공개
ServBay는 기본적으로 로컬 웹사이트를 위한 HTTPS 및 SSL 인증서를 자동 관리합니다. FRP로 HTTPS 서비스를 외부에 공개할 때는 https
프록시 타입과 hostHeaderRewrite
(및 경우에 따라 https2https
플러그인) 설정을 조합해서 사용해야 합니다. ServBay의 가상호스트 구조상 올바른 Host 헤더 지정은 매우 중요합니다.
아래는 ServBay에 HTTPS로 설정된 웹사이트(예: servbay.test
)를 FRP를 통해 외부 도메인으로 매핑하는 설정 예시입니다. 외부 도메인(예: test-frp.servbay.app
)이 사전에 DNS로 FRP 서버(frps.servbay.demo
)의 IP에 바르게 연결되어야 합니다.
frpc.toml
파일을 만드시고(예: ~/frpc.toml
), 아래와 같이 내용을 추가합니다:
toml
# frpc.toml 예시 - ServBay HTTPS 웹사이트 외부 노출
# [common]: FRP 서버 연결 정보
serverAddr = "frps.servbay.demo" # FRP 서버 도메인/IP로 변경
serverPort = 7000 # 서버 포트로 변경
auth.method = "token"
auth.token = "servbay_demo_token" # 서버에 맞게 토큰 입력
# (권장) TLS 보안 통신 활성화
tls_enable = true
# [[proxies]]: ServBay 로컬 HTTPS 서비스 매핑
[[proxies]]
name = "servbay-website-https" # 자유롭게 지정
type = "https" # HTTPS 프록시 유형
# 외부 접속용 도메인. 반드시 서버 IP로 DNS 매핑 필수
customDomains = ["test-frp.servbay.app"] # 실제 도메인으로 변경
# ServBay 로컬 서비스로 포워딩 세부 설정
localIP = "127.0.0.1" # 일반적 환경 그대로 사용
localPort = 443 # ServBay에서 사용하는 HTTPS 포트
# 필수: Host 헤더 재작성 (ServBay 사이트 도메인과 동일하게 지정)
hostHeaderRewrite = "servbay.test" # ServBay와 동일한 도메인으로 변경
# (선택) 요청 헤더에 커스텀 정보 삽입(백엔드에서 식별에 활용 가능)
[proxies.requestHeaders.set]
x-from-where = "frp-tunnel"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
필수 필드인 serverAddr
, serverPort
, auth.token
, customDomains
, hostHeaderRewrite
는 실제 환경에 맞춰 수정하세요.
hostHeaderRewrite
의 중요성:
ServBay는 Nginx, Caddy 등의 웹서버를 기본 사용하며, 요청의 Host 헤더값으로 가상호스트를 구분합니다. 외부 도메인(test-frp.servbay.app
)로 접속하면 HTTP Host 헤더는 외부 도메인명으로 전달되어, ServBay 내 가상호스트(예: servbay.test
)와 매치되지 않으면 404 결과 혹은 기본 사이트가 보일 수 있습니다.
따라서 반드시 hostHeaderRewrite
를 ServBay 사이트 등록 도메인으로 지정하세요.
FRP 클라이언트 실행
frpc.toml
파일 생성 및 저장 후, 터미널에서 해당 파일이 위치한 경로로 이동하여 또는 절대 경로로 다음 명령어를 실행합니다:
bash
# 현재 디렉터리에 frpc.toml이 있다면
frpc -c frpc.toml
# 사용자 홈디렉터리에 있다면
# frpc -c ~/frpc.toml
1
2
3
4
5
2
3
4
5
실행 후, 터미널에서 정상적인 연결(터널 생성 및 서비스 시작)이 로그로 출력됩니다.
백그라운드 실행을 원할 경우 nohup
이나 macOS 표준 서비스(launchctl
) 사용이 가능합니다. 예시로 nohup
활용:
bash
# 홈 디렉터리에 frpc.toml이 있을 때
nohup frpc -c ~/frpc.toml &
1
2
2
nohup
사용 시 로그는 nohup.out
파일로 저장, 백그라운드에서 실행됩니다.
macOS의 정식 서비스 관리(launchctl
) 사용은 복잡하므로 이 가이드 범위에서는 생략합니다.
서비스 검증 및 로그 진단
서비스 검증
frpc
실행 후 터널 연결 성공 로그를 확인했다면, 브라우저에서 frpc.toml
에 지정한 외부 도메인(예: https://test-frp.servbay.app
)으로 접속합니다. 다음을 확인해보세요:
- 브라우저가 페이지를 정상적으로 로드하고 연결이나(HTTPS의 경우) 인증서 경고가 없음
- HTTP 200 등 정상적인 상태 코드 반환
- 로컬
https://servbay.test
접속 시와 일치하는 컨텐츠 표시 - HTTPS 사용 시 브라우저 주소창 자물쇠 표시와 도메인에 해당하는 유효한 인증서
로그 진단
FRP 클라이언트 로그는 문제 진단에서 매우 중요합니다. 기본적으로 frpc -c frpc.toml
실행 시 터미널에 출력됩니다.
아래처럼 디버그 레벨로 실행하면 더 자세한 로그 확인이 가능합니다:
bash
frpc -c frpc.toml --log_level debug
1
설정 파일에서 log_file
파라미터(예: log_file = "/var/log/frpc.log"
)를 지정했다면 해당 파일을 tail -f /경로/your/frpc.log
로 모니터링 가능합니다.
자주 발생하는 문제와 해결 방법
구성 또는 사용 중 문제가 발생했다면 다음 표의 주요 사례와 대응 방법을 참고하세요:
증상 | 해결 방법 |
---|---|
FRP 서버 인증 실패 | frpc.toml 의 [common] 내 auth.token 및 auth.method 가 FRP 서버(frps )의 설정과 정확히 일치하는지 확인. 서버 로그에서 인증 실패 기록도 확인. |
외부 도메인 접속 불가/이상 | customDomains 에 설정한 도메인이 DNS로 FRP 서버 Public IP에 올바로 매핑되어 있는지 체크. ping your-frp-domain.com 등으로 점검. DNS 캐시로 인한 대기 필요. |
외부 도메인 접속 시 FRP 환영 페이지 | 도메인도 서버에도 연결되었으나 FRP 서버가 해당 도메인 요청을 클라이언트로 포워딩하지 않음. customDomains 값과 실제 접근 도메인이 동일한지, type 이 http/https인지, 서버에서도 도메인 허용 설정이 맞는지 체크. |
로컬 포트 점유/서비스 미실행 | ServBay 및 노출 대상 서비스가 정상 실행 상태이며 localPort 로 듣고 있는지 확인. lsof -i :PORT (PORT = localPort 값) 명령으로 점유 앱 확인. |
터널 자주 끊김/불안정 | macOS 및 FRP 서버의 네트워크 상태 점검, heartbeat_timeout = 30 등 [common]내 하트비트 타임아웃 조정, pool_count 등 커넥션 풀 수 조정, 서버 자원이나 이상 여부 점검. |
HTTP 서비스 접근 시 HTTPS로 강제 리다이렉트 | ServBay의 웹서버(Nginx/Caddy)에서 HTTP→HTTPS 강제 리다이렉트 설정 확인. HTTP만 열려야 할 땐 type 을 http로 전환, 플러그인 사용 중지도 고려. HTTPS 공개엔 올바른 인증서 지정 필수. |
HTTPS 인증서 오류(브라우저 경고) | https 프록시 사용 시 자가서명이나 ServBay CA 인증서 사용 시 경고 발생. 이 경우 로컬에 ServBay User CA 인증서 설치로 신뢰성 확보 가능, 혹은 프록시 플러그인(https2http , https2https )과 ServBay 발급 cert 파일 지정, 또는 서버측에서 공식 인증서 사용. hostHeaderRewrite 사용 시 ServBay 인증서가 브라우저 신뢰 대상 여부 확인 필요 |
404 에러로 접속 실패 | hostHeaderRewrite 항목이 ServBay 사이트 도메인과 일치하는지 재확인. Host 헤더가 맞지 않으면 가상호스트 매핑 실패. |
FRP 서버 방화벽에 의해 연결 차단 | 서버 방화벽에서 serverPort (기본 7000) 및 외부 노출 포트(HTTP: 80, HTTPS: 443 등, TCP/UDP remotePort 등) 개방 여부 검사. |
로컬 방화벽에 의해 연결 차단 | macOS 방화벽 규칙상 frpc 가 외부 서버 serverPort 로 통신 가능해야 하며, ServBay 서비스 포트(localPort )도 127.0.0.1 통신 허용 필요. |
FRP 클라이언트는 연결 성공, 실제 접속 불가 | 서버 설정 오탈자나 네트워크 문제 의심. FRP 서버(frps ) 로그에서 에러 및 접속 기록 점검. 서버의 포트/도메인 매핑규칙 현황도 확인. |
ServBay 환경에서 FRP 사용의 장점과 안전 가이드
ServBay와 FRP를 결합하면 개발자에게 다음과 같은 유연성과 이점을 제공합니다:
- 다양한 프로토콜 지원: HTTP, HTTPS, TCP, UDP 등 폭넓게 지원. 웹 서비스뿐 아니라 로컬 데이터베이스(MySQL, PostgreSQL, MongoDB 등), Redis, SSH도 쉽게 외부 공유 가능.
- 높은 구성 유연성: TOML 파일 하나로 여러 프록시/웹사이트·서비스 동시 노출 간편 설정.
- 오픈소스·직접 제어: FRP는 성숙한 오픈소스로, 완전한 자체 관리와 타사 솔루션 의존 없이 보안·운영 가능.
- 강력한 보안: 인증토큰, TLS 암호 터널(
tls_enable = true
) 등으로 데이터 보안을 확보할 수 있습니다. ServBay의 SSL 인증서 관리까지 결합시 더욱 견고한 개발 환경 구축이 가능합니다.
보안 권장 사항:
- TLS 암호화 활성화:
[common]
구간에tls_enable = true
로 반드시 암호화 통신을 사용하세요. - 복잡한 인증토큰 사용: 쉽게 추측할 수 없는 강력한
auth.token
을 사용하고 정기 교체하세요. - 불필요한 서비스/포트 노출 금지: 외부 접근이 꼭 필요한 서비스 및 포트만 공개하세요.
- 공인도메인 사용 권장: HTTP/HTTPS 프록시에서는 도메인 기반 접속(
customDomains
)을 원칙으로 하세요. - FRP 서버 자체 보안 강화: FRP 서버에서는 최소한의 포트만 개방 및 서버 방화벽 강화 필요.
- 접근 제어 활용: 서버가 지원할 경우, IP 화이트리스트 등 고급 접근 제어 방안도 고려.
이상의 설정과 보안 수칙을 따라 구성하면, ServBay 로컬 개발 서비스를 FRP를 통해 안전하게 외부에 노출할 수 있으며, 개발 프로세스가 크게 개선됩니다.