# Trystero - 서버 없이 즉시 멀티플레이어 웹앱 만들기

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

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=23940](https://news.hada.io/topic?id=23940)
- GeekNews Markdown: [https://news.hada.io/topic/23940.md](https://news.hada.io/topic/23940.md)
- Type: news
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2025-10-27T09:46:01+09:00
- Updated: 2025-10-27T09:46:01+09:00
- Original source: [github.com/dmotz](https://github.com/dmotz/trystero)
- Points: 36
- Comments: 8

## Summary

몇 줄의 코드만으로 **서버 없이 실시간으로 연결되는 멀티플레이어 웹앱**을 만들 수 있게 해주는 **Trystero**는, 브라우저의 **WebRTC**와 공개 네트워크를 활용해 **P2P 매칭과 데이터 전송을 자동화**합니다. **BitTorrent·Nostr·IPFS** 등 다양한 채널을 시그널링에 활용하며, 이후 통신은 **E2E 암호화된 P2P**로 직접 이루어집니다. 브라우저뿐 아니라 **Node·Deno·Bun**에서도 동작해, 서버 인프라 없이도 협업 툴이나 실험적 네트워크 앱을 빠르게 프로토타이핑할 수 있습니다. “서버 없는 멀티플레이”가 진짜 현실이 되는 순간을 보고 싶다면, 이 프로젝트가 꽤 흥미로울 겁니다.

## Topic Body

- 몇 줄의 코드만으로 **서버 없이 서로 연동**되는 **멀티 플레이어 웹앱**을 구현 가능하게 해주는 라이브러리  
- 브라우저 **WebRTC**를 기반으로, 공개 네트워크를 **신호 교환(시그널링) 채널**로 활용해 **P2P 매칭과 통신을 자동화**  
  - **BitTorrent, Nostr, MQTT, IPFS, Supabase, Firebase** 중 하나를 선택해 **서버 없이 피어 발견**을 수행  
  - 시그널링 이후의 **앱 데이터**는 중간 매체를 거치지 않고 **P2P** + **E2E 암호화**로 전송됨  
- Rooms/브로드캐스팅, 자동 직렬화, 대용량 데이터의 청킹/스로틀링, 진행률 이벤트, 세션 데이터 암호화, 스트림 메타데이터 등 **고수준 추상화** 제공  
- 브라우저뿐 아니라 **Node/Deno/Bun**에서도 동작하며, **TURN 서버 설정**, **React 훅**, **서버 사이드 실행** 등 실전 기능을 지원  
- 퍼블릭 인프라를 **무설정으로 활용**하는 방식으로 다양한 실험과 프로토타이핑에 쓰기 좋음  
  
* [데모 사이트 - https://oxism.com/trystero ](https://oxism.com/trystero) 를 2개의 탭으로 동시에 열고 마우스 이동/클릭해보면 바로 확인 가능  
* 사람들이 Trystero로 만들고 있는 것 보기 - [Awesome Trystero](https://github.com/jeremyckahn/awesome-trystero)

## Comments



### Comment 45516

- Author: kimjoin2
- Created: 2025-10-27T19:39:08+09:00
- Points: 2

TURN 서버는 조상님이 제공해주나요?

### Comment 45524

- Author: helio
- Created: 2025-10-28T06:32:38+09:00
- Points: 1
- Parent comment: 45516
- Depth: 1

'stun:stun.cloudflare.com:3478' 가 소스에 박혀있네요

### Comment 45537

- Author: kimjoin2
- Created: 2025-10-28T10:16:48+09:00
- Points: 3
- Parent comment: 45524
- Depth: 2

stun 말고 turn 요.  
stun은 단순 stun 기준 넌 누구다 알려주는 정도라 공개된 서버가 좀 있지만  
turn 은 트래픽을 릴레이해줘야해서(비싸서) 돈내고쓰던가 자체 구축을 하던가 해야해요.  
예) https://github.com/coturn/coturn  
요런친구요.  
  
stun 만으로 통신이 가능한 경우가 많기야하지만 단순하게 "된다" 라고 하기에는.....  
되......긴 되는대..... 쓰읍.. 라는 느낌이내요.

### Comment 45593

- Author: skageektp
- Created: 2025-10-29T15:39:04+09:00
- Points: 2
- Parent comment: 45537
- Depth: 3

p2p 매칭이면 turn 필요 없지 않나요

### Comment 45600

- Author: kimjoin2
- Created: 2025-10-29T19:49:39+09:00
- Points: 1
- Parent comment: 45593
- Depth: 4

webrtc에서 말씀하시는 "p2p 매칭"의 의도에 따라 다를 것 같아요  
  
1. 상호 UDP 로 패킷 통신이 가능한 상태  
2. 상호 stun 이 알려주는 주소만 알고있는 상태  
  
1번이면 말씀하신대로 turn 이 필요 없어요  
2번에서도 상황이 좋아서 상호 UDP 통신이 성공한 상태라면 turn 이 필요 없어요.  
  
2번에서 상호 UDP 로 패킷 통신이 실패한 상태에서 turn 이 필요해요.  
  
실패하는 요인은   
- 피어가 symmetric nat 뒤에 있거나 해서 stun 이 알아낸 주소(의 포트)를 사용할 수 없거나  
- 네트워크 중간 어디든 웹 트래픽만 허용하거나(80,443)  
- 네트워크 중간 어디든 UDP 가 막혀있거나  
- 한쪽은 ipv4 만 쓰고 한쪽은 ipv6 만 쓰거나  
- 등등?  
  
에는 turn 을 써야합니다.  
  
(ipv4 only <-> ipv6 only 가 안된다는건 기억 검증하다가 처음 알았내요)

### Comment 45621

- Author: skageektp
- Created: 2025-10-30T09:38:51+09:00
- Points: 1
- Parent comment: 45600
- Depth: 5

네 그러니까 2번이요. '서버 없이 서로 연동', '라이브러리' 라고 했는데 너무 많은걸 기대하시는게 아니신지...

### Comment 45634

- Author: kimjoin2
- Created: 2025-10-30T10:46:19+09:00
- Points: 1
- Parent comment: 45621
- Depth: 6

말씀하시고자 하는 부분이 어떤 부분이에요?  
1. stun 에서 알려주는 주소(+포트) 만으로 연동이 가능하므로 turn 서버는 필요없다. 따라서 "서버 없이 서로 연동" 표현이 텍스트 그대로 맞다.  
  -> 요거면 제가 아는게 옛날꺼인가보내요. 제가 알고있는(공유드린) 내용 이후로 상황이 바뀐 부분을 알려주시면 감사하겠습니다~!  
2. turn 서버는 필요하지만 라이브러리니까 그정도는 봐주자.  
  -> skageektp님이 말씀하신게 맞아요. 라이브러리니까 그 정도는 봐줄 수도 있습니다. 제가 민감했어요.  
  
저는  
3. 제대로 쓰려면 stun 만으로는 부족하고 turn이 필요한대 과장이 심하내~  
를 표현중이였습니다.

### Comment 45601

- Author: kimjoin2
- Created: 2025-10-29T19:55:22+09:00
- Points: 1
- Parent comment: 45600
- Depth: 5

1번, 2번 설명에 대해서  
  
1. 상호 UDP 로 패킷 통신이 가능한 상태 -> 상호 피어가 UDP 로 패킷 통신이 가능한 상태  
2. 상호 stun 이 알려주는 주소만 알고있는 상태 -> 상호 피어가 stun 이 알려주는 주소만 알고있는 상태  
  
로 정정하겠습니다. 원글에서는 오해의 여지가 있내요.
