# Piko - Ngrok의 오픈소스 대체제

> Clean Markdown view of GeekNews topic #14833. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=14833](https://news.hada.io/topic?id=14833)
- GeekNews Markdown: [https://news.hada.io/topic/14833.md](https://news.hada.io/topic/14833.md)
- Type: news
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2024-05-16T09:42:02+09:00
- Updated: 2024-05-16T09:42:02+09:00
- Original source: [github.com/andydunstall](https://github.com/andydunstall/piko)
- Points: 39
- Comments: 6

## Topic Body

- 외부 네트워크로 터널링하는 리버스 프록시   
- 프로덕션 수준의 트래픽을 처리하며, 호스팅(특히 Kubernetes에서)이 간단하도록 설계됨  
- 고객 네트워크, BYOC(Bring Your Own Cloud) 서비스의 서비스를 노출하거나 IoT 디바이스에 연결할 수 있음  
- 내결함성, 확장성, 무중단 배포를 위해 노드 클러스터로 호스팅될 수 있음  
  
### Piko의 동작 방식  
  
- 업스트림 서비스는 Piko에 연결하여 엔드포인트를 등록  
- Piko는 아웃바운드 전용 연결을 통해 등록된 업스트림 서비스로 엔드포인트에 대한 요청을 라우팅  
- 이는 공용 포트를 열지 않고도 서비스를 노출할 수 있음을 의미  
- 들어오는 HTTP(S) 요청은 Host 헤더 또는 x-pico-endpoint 헤더를 사용하여 대상 엔드포인트의 ID를 식별  
- 여러 업스트림 서비스가 동일한 엔드포인트를 등록한 경우, Piko는 해당 엔드포인트에 대한 요청을 등록된 업스트림 간에 로드 밸런싱  
  
### Piko의 설계 목표  
  
#### 프로덕션 트래픽 처리  
  
- Piko는 테스트 및 개발 도구가 아닌 프로덕션 트래픽을 처리하도록 설계됨  
- Piko를 사용하여 고객 네트워크에 액세스하고, BYOC 솔루션을 구축하며, IoT 디바이스에 액세스할 수 있음  
- 이를 지원하기 위해 Piko는 내결함성, 수평 확장, 무중단 배포를 위해 노드 클러스터로 실행될 수 있음  
- 또한 모니터링 및 디버깅을 위한 관측성 도구를 제공함  
  
#### 호스팅 용이성  
  
- Piko는 Kubernetes에서 호스팅하기 쉽도록 설계됨  
- Piko 클러스터는 HTTP 로드 밸런서 또는 Kubernetes Gateway 뒤에 Kubernetes StatefulSet으로 호스팅될 수 있음  
- 업스트림 서비스 연결과 프록시 클라이언트 요청은 클러스터의 모든 노드에 로드 밸런싱될 수 있으며, Piko는 요청을 올바른 업스트림으로 라우팅하는 것을 관리함  
  
#### 보안성  
  
- 업스트림 서비스는 아웃바운드 전용 연결을 통해 Piko에 연결함  
- Piko는 해당 연결을 통해 모든 요청을 업스트림으로 라우팅함  
- 따라서 업스트림은 요청을 수신하기 위해 포트를 열 필요가 없음  
- Piko는 업스트림 서비스가 엔드포인트를 등록하기 전에 인증하는 것을 지원함  
- Piko는 자체 호스팅이 가능하므로 프록시 클라이언트와 동일한 네트워크에서 호스팅하여 외부 네트워크에서 요청을 수락하지 않을 수 있음  
- 예를 들어, 인증된 업스트림 서비스가 TLS를 통해 인터넷에서 등록하도록 한 다음, Piko와 동일한 네트워크에 있는 프록시 클라이언트에 대해서만 내부 경로를 제공할 수 있음

## Comments



### Comment 25314

- Author: halfenif
- Created: 2024-05-17T08:24:59+09:00
- Points: 1

이는 공용 포트를 열지 않고도 서비스를 노출할 수 있음을 의미  
> 이것이 가지는 의미==사례가 궁금합니다.

### Comment 25319

- Author: secret3056
- Created: 2024-05-17T09:12:44+09:00
- Points: 2
- Parent comment: 25314
- Depth: 1

예를 들어 컴공 학부생 A가 프로젝트를 하고 있다고 합시다.  
열심히 개발한 A는 이제 발표일 가까워지자 이 서비스를 시연하고자 합니다.  
그런데 A는 이제 갓 서버나 짤 줄 알지 어떠한 서버도, 인스턴스도 띄우는 방법을 모릅니다.  
거기다 기숙사에 살고 있지 때문에 포트포워딩으로 서비스를 노출할 수 없습니다.  
이때 터널링이 등장합니다.  
기숙사에 있는 노트북에서 `ngork http 8080`을 치면 랜덤한 url이 발급되고, 강의실에서 시연할 때 사용자가 이 url에 접속하면 ngrok서버-ngrok클라이언트-A의 서버 프로그램으로 http 요청이 전달되서 별도의 포트 포워딩 없이도 서비스를 노출할 수 있게 됩니다.

### Comment 25300

- Author: lastorder
- Created: 2024-05-16T14:32:09+09:00
- Points: 1

https://github.com/andydunstall/piko/pull/20  
  
프로젝트 이름이 Pico에서 Piko로 변경되었네요. 이미 pico라는 이름의 에디터가 있어 충돌 문제로 변경된것으로 보입니다.

### Comment 25356

- Author: dontdieych
- Created: 2024-05-18T17:09:47+09:00
- Points: 1
- Parent comment: 25300
- Depth: 1

pico editor를 몰랐다는 답변을 보고 저의 아재력을 느낍니다. nano 전에 pico 였는 데 ㅜㅜ

### Comment 25301

- Author: xguru
- Created: 2024-05-16T14:34:46+09:00
- Points: 1
- Parent comment: 25300
- Depth: 1

어제 찾아서 정리해놓고 올린건데.. 그새 바뀌었네요 ㅠ 수정해두었습니다.

### Comment 25280

- Author: winterjung
- Created: 2024-05-16T10:01:50+09:00
- Points: 2

- [Portr - 소규모 팀을 위한 ngrok 대체제 오픈소스](https://news.hada.io/topic?id=14148)  
- [pgrok - Poor man's ngrok](https://news.hada.io/topic?id=8691)  
- [Awesome Tunneling - ngrok 대체제 모음](https://news.hada.io/topic?id=6045)
