Trystero - 서버 없이 즉시 멀티플레이어 웹앱 만들기
(github.com/dmotz)- 몇 줄의 코드만으로 서버 없이 서로 연동되는 멀티 플레이어 웹앱을 구현 가능하게 해주는 라이브러리
 - 브라우저 WebRTC를 기반으로, 공개 네트워크를 신호 교환(시그널링) 채널로 활용해 P2P 매칭과 통신을 자동화
- BitTorrent, Nostr, MQTT, IPFS, Supabase, Firebase 중 하나를 선택해 서버 없이 피어 발견을 수행
 - 시그널링 이후의 앱 데이터는 중간 매체를 거치지 않고 P2P + E2E 암호화로 전송됨
 
 - Rooms/브로드캐스팅, 자동 직렬화, 대용량 데이터의 청킹/스로틀링, 진행률 이벤트, 세션 데이터 암호화, 스트림 메타데이터 등 고수준 추상화 제공
 - 브라우저뿐 아니라 Node/Deno/Bun에서도 동작하며, TURN 서버 설정, React 훅, 서버 사이드 실행 등 실전 기능을 지원
 - 퍼블릭 인프라를 무설정으로 활용하는 방식으로 다양한 실험과 프로토타이핑에 쓰기 좋음
 
- 데모 사이트 - https://oxism.com/trystero 를 2개의 탭으로 동시에 열고 마우스 이동/클릭해보면 바로 확인 가능
 - 사람들이 Trystero로 만들고 있는 것 보기 - Awesome Trystero
 
stun 말고 turn 요.
stun은 단순 stun 기준 넌 누구다 알려주는 정도라 공개된 서버가 좀 있지만
turn 은 트래픽을 릴레이해줘야해서(비싸서) 돈내고쓰던가 자체 구축을 하던가 해야해요.
예) https://github.com/coturn/coturn
요런친구요.
stun 만으로 통신이 가능한 경우가 많기야하지만 단순하게 "된다" 라고 하기에는.....
되......긴 되는대..... 쓰읍.. 라는 느낌이내요.
webrtc에서 말씀하시는 "p2p 매칭"의 의도에 따라 다를 것 같아요
- 상호 UDP 로 패킷 통신이 가능한 상태
 - 상호 stun 이 알려주는 주소만 알고있는 상태
 
1번이면 말씀하신대로 turn 이 필요 없어요
2번에서도 상황이 좋아서 상호 UDP 통신이 성공한 상태라면 turn 이 필요 없어요.
2번에서 상호 UDP 로 패킷 통신이 실패한 상태에서 turn 이 필요해요.
실패하는 요인은
- 피어가 symmetric nat 뒤에 있거나 해서 stun 이 알아낸 주소(의 포트)를 사용할 수 없거나
 - 네트워크 중간 어디든 웹 트래픽만 허용하거나(80,443)
 - 네트워크 중간 어디든 UDP 가 막혀있거나
 - 한쪽은 ipv4 만 쓰고 한쪽은 ipv6 만 쓰거나
 - 등등?
 
에는 turn 을 써야합니다.
(ipv4 only <-> ipv6 only 가 안된다는건 기억 검증하다가 처음 알았내요)
말씀하시고자 하는 부분이 어떤 부분이에요?
- stun 에서 알려주는 주소(+포트) 만으로 연동이 가능하므로 turn 서버는 필요없다. 따라서 "서버 없이 서로 연동" 표현이 텍스트 그대로 맞다.
-> 요거면 제가 아는게 옛날꺼인가보내요. 제가 알고있는(공유드린) 내용 이후로 상황이 바뀐 부분을 알려주시면 감사하겠습니다~! - turn 서버는 필요하지만 라이브러리니까 그정도는 봐주자.
-> skageektp님이 말씀하신게 맞아요. 라이브러리니까 그 정도는 봐줄 수도 있습니다. 제가 민감했어요. 
저는
3. 제대로 쓰려면 stun 만으로는 부족하고 turn이 필요한대 과장이 심하내~
를 표현중이였습니다.