🧐WebRTC가 뭐지?
👨🏫 Flutter의 WebRTC 라이브러리는 Flutter 앱에서 실시간 오디오, 비디오 통화 및 데이터 전송 기능을 구현할 수 있도록 도와주는 패키지입니다.
이 라이브러리를 통해 웹, 안드로이드, iOS 등 다양한 플랫폼에서 WebRTC를 활용한 P2P 통신을 쉽게 구현할 수 있어요.
주요 패키지: flutter_webrtc
flutter에서 WebRTC 기능을 사용하려면 보통 flutter_webrtc
패키지를 사용해요. 이 패키지는 Flutter 앱이 WebRTC의 핵심 기능을 사용할 수 있게 해주는 역할을 합니다.
flutter_webrtc
패키지의 주요 기능
- 오디오/비디오 스트림 처리: 이 패키지를 사용하면 Flutter 앱에서 카메라나 마이크를 이용해 실시간으로 오디오와 비디오를 주고받을 수 있어요.
- P2P 연결 관리: WebRTC의 핵심인 P2P 연결을 지원하여 두 기기 간에 직접 연결할 수 있게 도와줍니다.
- 데이터 채널: 단순히 오디오/비디오만이 아니라, 텍스트나 파일 등 다른 데이터도 실시간으로 주고받을 수 있습니다.
- 시그널링(Signaling): 두 클라이언트가 서로 연결할 수 있도록 하는 초기 단계 설정을 수행합니다.
flutter_webrtc
자체는 시그널링을 제공하지 않으므로 WebSocket이나 Firebase와 같은 별도의 서버를 사용해 시그널링을 처리해야 합니다. - 미디어 스트림: 이 패키지를 사용하면 카메라나 마이크를 통해 오디오/비디오 데이터를 캡처하고 상대방에게 전송할 수 있습니다.
- ICE (Interactive Connectivity Establishment):
flutter_webrtc
는 클라이언트 간의 연결을 설정하는 데 필요한 ICE Candidate(네트워크 경로 정보) 관리도 지원합니다.flutter_webrtc
의 구조 및 핵심 클래스
RTCPeerConnection
: WebRTC의 핵심 클래스 중 하나로, 두 클라이언트 간의 연결을 설정하고 관리하는 역할을 합니다.MediaStream
: 오디오나 비디오 스트림을 관리하는 클래스입니다. 이 스트림을 통해 카메라와 마이크에서 데이터를 얻을 수 있습니다.RTCVideoRenderer
: Flutter 앱에서 비디오를 화면에 표시할 때 사용하는 위젯입니다.RTCDataChannel
: 오디오/비디오 이외의 데이터(예: 텍스트 메시지)를 주고받는 데 사용됩니다.
Flutter에서 WebRTC 사용 시 고려할 점
- 플랫폼별 차이: WebRTC는 다양한 플랫폼에서 동작하는 기술이지만, 각 플랫폼(iOS, Android, Web)에 따라 약간의 차이가 있을 수 있습니다. 예를 들어 iOS에서는 CallKit과 같은 추가 기능을 구현해야 하는 경우도 있습니다.
- 권한 처리: 카메라, 마이크, 네트워크 권한이 필요하므로 AndroidManifest.xml, Info.plist에 권한을 추가하고 사용자에게 권한 요청을 해야 합니다.
- 다른 관련 패키지
web_socket_channel
: WebRTC 통신을 위해 시그널링 서버와 연결할 때 주로 WebSocket을 사용합니다.flutter_webrtc
자체에 WebSocket 기능은 포함되어 있지 않기 때문에, 시그널링에 사용할 수 있는 패키지입니다.flutter_callkeep
: iOS의 CallKit과 Android의 ConnectionService를 연동하여 전화가 올 때 실제 전화처럼 보이도록 구현할 수 있게 도와주는 패키지입니다.- 한마디로 요약
flutter_webrtc
라이브러리는 Flutter 앱에서 실시간 오디오/비디오 통화와 데이터 전송 기능을 구현하기 위해 WebRTC를 활용할 수 있게 해주는 도구입니다. 이를 통해 화상통화 앱, 채팅 앱 등을 Flutter로 만들 때 핵심 기능을 쉽게 구축할 수 있어요.
궁금한 부분이 더 있거나 구현에 도움이 필요한 부분이 있으면 언제든지 물어보세요!
🧐 ice랑 sdp랑 차이가 뭐지? ice는 클라이언트간에 연결? p2p연결할때 필요한 거고, sdp는?
👨🏫 네, 정확하게 짚으셨습니다. ICE와 SDP는 WebRTC에서 서로 다른 역할을 하지만, 모두 P2P 연결을 설정하는 데 필요한 정보를 제공한다는 공통점이 있어요. 각자의 역할과 차이점을 쉽게 설명해드릴게요.
- ICE (Interactive Connectivity Establishment)
ICE는 P2P 연결을 설정할 때, 두 클라이언트가 서로 통신할 수 있는 최적의 네트워크 경로를 찾는 과정을 담당해요.
ICE의 역할
- 네트워크 경로 찾기: 서로 다른 네트워크 환경에 있는 두 클라이언트가 직접 연결될 수 있는 가능한 모든 경로(네트워크 후보)를 찾아내고, 그중 가장 적합한 경로를 선택해 연결합니다.
- ICE Candidate 교환: ICE는 클라이언트가 서로에게 "내가 사용할 수 있는 네트워크 경로는 이거야!"라고 여러 후보(ICE Candidates)를 알려주는 역할을 해요.
쉽게 말하면:
ICE는 마치 두 사람이 서로 만날 수 있는 장소를 찾기 위해 다양한 경로를 제안하는 것과 비슷해요. "우리 집 앞길, 골목길, 큰 도로 중 어느 길로 만날까?"라고 서로 후보를 주고받고 최적의 길을 찾는 과정이에요.
- SDP (Session Description Protocol)
SDP는 두 클라이언트가 P2P 연결을 설정할 때, 서로의 통신 환경과 설정 정보를 교환하기 위한 일종의 설명서입니다.
SDP의 역할
- 미디어 정보 교환: 어떤 코덱을 사용할지, 오디오/비디오 트랙은 어떻게 할지 등 통화나 미디어 스트리밍에 필요한 설정 정보를 담고 있어요.
- 네트워크 설정 정보: ICE Candidates 정보도 포함되어 있어, 상대방에게 자신의 네트워크 경로 정보를 전달합니다.
쉽게 말하면:
SDP는 두 사람이 "내가 너에게 어떻게 말할지, 어떤 언어를 사용할지, 어떤 방식으로 정보를 주고받을지"에 대해 미리 약속하는 설명서라고 생각하면 돼요.
ICE와 SDP의 차이
- ICE는 두 클라이언트가 연결될 수 있는 최적의 네트워크 경로를 찾고 설정하는 역할을 담당합니다.
- SDP는 연결을 하기 위해 서로의 통신 설정, 미디어 정보, 네트워크 후보 등을 교환하는 설명서 역할을 합니다.
연결 과정에서의 역할
- SDP 교환:
- 먼저 시그널링 서버를 통해 클라이언트 간에 SDP 정보를 주고받아요. 여기에는 오디오/비디오 설정 정보와 함께 ICE Candidates 정보가 포함되어 있어요.
- ICE 연결 과정:
- SDP 교환 후, 클라이언트는 서로의 ICE Candidate 정보를 주고받고 최적의 경로를 찾아서 실제 P2P 연결을 완성해요.
요약
- ICE: "어떻게 연결할까?"라는 경로 찾기를 담당하는 기술
- SDP: "무엇을, 어떻게 주고받을까?"라는 통신에 대한 상세 설명을 담은 정보
결국, SDP는 통신을 준비하는 정보 교환 과정, ICE는 실제로 연결을 성사시키기 위한 경로 찾기라고 보면 됩니다.
🧐 p2p인데 왜 공인 ip 주소를 알아야해?
👨🏫 좋은 질문이에요! P2P(Peer-to-Peer) 통신에서 공인 IP 주소가 필요한 이유는 두 클라이언트가 서로 다른 네트워크에 있을 때 직접 연결하기 위해서는 서로를 정확히 찾아야 하기 때문입니다. 자세히 설명해드릴게요.
왜 공인 IP 주소가 필요한가?
- 로컬 IP 주소는 내부 네트워크에서만 유효해요:
- 우리 집이나 회사에서 사용하는 컴퓨터, 스마트폰, 태블릿 등은 라우터를 통해 인터넷에 연결되어 있어요.
- 이 기기들은 내부 네트워크에서는 서로 통신할 수 있도록 로컬 IP 주소를 가지고 있어요. 예를 들어,
192.168.0.10
같은 IP 주소죠. - 하지만 이 로컬 IP 주소는 인터넷에서 직접 접근할 수 없고, 외부에서는 해당 주소를 알 방법이 없어요. 즉, 서로 다른 네트워크에 있는 두 기기가 로컬 IP 주소만 가지고는 서로를 찾을 수 없습니다.
- 공인 IP 주소는 인터넷에서 서로를 찾을 수 있는 유일한 방법:
- 인터넷에서 통신하려면 각 기기나 네트워크는 고유한 공인 IP 주소를 사용해요. 이 공인 IP 주소는 인터넷상에서 모든 기기가 서로를 식별하고 연결할 수 있도록 하는 유일한 주소입니다.
- 두 클라이언트가 P2P로 직접 연결되려면 각자의 공인 IP 주소를 알아야만 상대방을 정확히 찾아갈 수 있어요.
P2P 통신에서 공인 IP가 필요한 이유
- P2P 통신은 클라이언트 간 직접 연결을 의미하지만, 이 직접 연결을 설정하기 위해서는 서로의 위치(공인 IP 주소와 포트)를 알아야 합니다.
- 만약 두 기기가 서로 다른 네트워크에 있거나, NAT(Network Address Translation) 뒤에 있다면 각 기기는 자신의 로컬 IP만 알고 있을 뿐, 상대방의 공인 IP를 알 수 없어요.
- 이때 STUN 서버가 각 기기에게 "당신의 공인 IP 주소는 이거예요"라고 알려주고, 두 기기는 이 정보를 시그널링 서버를 통해 교환하여 직접 연결을 시도하게 됩니다.
NAT와 방화벽이 있는 이유
- 대부분의 인터넷 연결은 NAT(Network Address Translation) 라우터를 통해 이루어지는데, 이 라우터는 내부 네트워크(가정, 회사 등)와 외부 인터넷 간의 IP 주소를 매핑해주는 역할을 해요. 이것은 여러 기기가 동시에 인터넷을 사용할 수 있게 해주죠.
- 하지만 NAT 때문에 내부에 있는 기기들은 외부에서 직접 접근할 수 없게 되는데, 이 때문에 P2P 통신을 할 때 공인 IP 주소가 필요하게 되는 겁니다.
정리하자면
- P2P 통신에서 공인 IP 주소를 알아야 하는 이유는: 두 클라이언트가 서로 다른 네트워크에 있을 때, 서로를 정확하게 찾아 연결하기 위해서입니다.
- STUN 서버는 각 클라이언트에게 "당신의 공인 IP 주소와 포트 번호는 이겁니다"라고 알려주고, 이 정보를 시그널링 서버를 통해 교환함으로써 두 클라이언트가 P2P 연결을 설정할 수 있게 도와줍니다.
결론적으로, 공인 IP 주소는 인터넷상에서 두 클라이언트가 서로를 찾고 직접 연결하기 위한 필수적인 정보입니다.
🧐 시그널링 서버는 한 번만 사용돼?
👨🏫 시그널링 주소는 초기 연결 설정을 할 때만 필요하며, P2P 연결이 성공적으로 설정된 후에는 더 이상 필요하지 않기 때문에 일반적으로 한 번만 사용하면 됩니다. 하지만, 상황에 따라 다시 시그널링 주소를 사용할 수 있는 경우도 있으니, 이에 대해 자세히 설명해 드릴게요.
시그널링의 역할과 사용 시점
초기 연결 설정:
WebRTC 연결을 시작할 때, 두 클라이언트는 서로 통신하기 위해 SDP(Session Description Protocol) 정보와 ICE Candidate 정보를 주고받아야 합니다.
이 정보를 주고받기 위해 시그널링 서버를 사용하며, 이 단계에서 시그널링 서버의 주소를 사용합니다.
P2P 연결이 설정되면 시그널링 서버는 더 이상 사용되지 않음:
두 클라이언트가 SDP와 ICE Candidate 정보를 모두 교환하고 P2P 연결이 설정되면, 이제 클라이언트들은 시그널링 서버를 거치지 않고 직접 통신하게 됩니다.
따라서 P2P 연결이 성립된 이후에는 시그널링 서버의 주소는 필요하지 않아요.
예외적인 경우: 시그널링 서버가 다시 필요한 경우
연결 재설정: 만약 두 클라이언트 중 하나의 네트워크 상태가 변경되어 연결이 끊어지거나 재시도해야 하는 경우, 시그널링 서버를 다시 사용해야 합니다.
다자간 연결(Multi-Party Communication): 여러 명이 참여하는 그룹 화상 통화에서는 새로운 사용자가 참여할 때마다 시그널링 서버를 통해 해당 사용자의 연결 정보를 전달해야 합니다.
통화 종료 또는 새로운 연결 요청: 통화 중 한쪽에서 연결을 끊거나 다시 연결을 요청할 때도 시그널링 서버를 통해 상태를 알릴 수 있습니다.
요약
- 일반적으로 시그널링 주소는 한 번만 사용하면 됩니다. 이는 P2P 연결을 설정하기 위해 필요한 초기 정보 교환 과정에서만 사용되기 때문입니다.
- 그러나 연결이 끊어지거나 재설정이 필요한 경우, 새로운 사용자가 참여하는 경우 등에는 다시 시그널링 서버를 사용해야 할 수 있습니다.
따라서, P2P 연결이 잘 이루어지고 있는 동안에는 시그널링 서버가 필요 없지만, 예외적인 상황에서는 다시 시그널링 서버와 통신할 수 있다고 이해하시면 됩니다.
🧐 스턴서버랑 시그널링 서버의 차이점을 모르겠어
👨🏫 STUN 서버와 시그널링 서버는 WebRTC 연결에서 서로 다른 역할을 수행하며, 둘 다 P2P 연결을 설정하는 데 필수적입니다. 두 서버의 차이점을 쉽게 설명해 드릴게요.
시그널링 서버 (Signaling Server)
역할: 두 클라이언트가 WebRTC 연결을 시작할 때 필요한 통신 정보를 교환하도록 도와주는 서버예요.
어떤 정보가 오가나?:
SDP(Session Description Protocol): 오디오/비디오 코덱 정보, 해상도, 트랙 정보 등 연결 설정에 필요한 세부 정보
ICE Candidate: 두 클라이언트가 서로 연결될 수 있는 네트워크 경로 정보
주요 기능: 시그널링 서버는 WebRTC 연결을 시작할 때 서로 다른 두 클라이언트가 자신의 통신 정보를 교환하는 데만 사용돼요. WebSocket, HTTP 등을 사용해 구현할 수 있어요.
쉽게 말하면: 시그널링 서버는 두 친구가 "만날 약속을 잡는 과정"을 도와주는 역할이에요. 예를 들어, "우리 어디서 만나자, 이 시간에 만나자!"라고 서로 약속을 정하는 것과 같아요.
STUN 서버 (Session Traversal Utilities for NAT)
역할: 클라이언트가 자신의 공인 IP 주소와 포트 번호를 알아내도록 도와주는 서버입니다.
어떤 정보가 오가나?:
클라이언트가 NAT(Network Address Translation) 뒤에 있을 때, 자신의 내부 IP 주소는 알지만 공인 IP 주소는 모릅니다. STUN 서버는 이 공인 IP 주소와 포트 번호를 알려줘요.
주요 기능: NAT나 방화벽을 통과하기 위해 두 클라이언트가 자신을 외부에서 어떻게 볼 수 있는지(공인 IP와 포트)를 알 수 있게 해줍니다.
쉽게 말하면: STUN 서버는 "내가 인터넷 세상에서 어떻게 보이는지 알려주는 안내소" 역할을 해요. 예를 들어, "나는 이 주소에 살고 있어!"라고 자신을 상대방에게 알리는 것과 비슷해요.
차이점 정리
특징 | 시그널링 서버 | STUN 서버 |
---|---|---|
역할 | 두 클라이언트 간에 통신 설정 정보를 교환함 | 클라이언트에게 자신의 공인 IP 주소와 포트 정보를 알려줌 |
통신 내용 | SDP 정보, ICE Candidate 정보 교환 | 공인 IP 주소와 포트 정보를 알려줌 |
필요한 시점 | WebRTC 연결을 시작할 때 (초기 연결 설정 단계) | 연결을 설정하기 위해 공인 IP를 알아야 할 때 |
사용 방식 | WebSocket, HTTP 등을 사용해 구현 | STUN 프로토콜을 통해 작동 |
연결 이후 | P2P 연결이 성립되면 더 이상 필요 없음 | P2P 연결 시 경로 설정에만 사용되고 이후에는 사용되지 않음 |
핵심 차이
시그널링 서버는 클라이언트 간에 연결 설정에 필요한 정보를 교환하는 역할을 합니다.
STUN 서버는 클라이언트가 자신의 공인 IP 주소를 알아내도록 도와주는 역할을 합니다.
한마디로 요약
시그널링 서버는 두 클라이언트가 서로 연결하기 위한 약속을 잡는 역할을 하고,
STUN 서버는 내가 인터넷에서 어떻게 보이는지 알려주는 역할을 합니다.
이렇게 서로 다른 목적을 가지고 있어, WebRTC에서 P2P 연결을 성립시키기 위해 두 서버 모두 필요한 거예요.
🧐 내부 ip주소랑 공인 ip주소의 차이점이 뭔데
👨🏫 내부 IP 주소와 공인 IP 주소는 인터넷에서 기기를 식별하는 방법이지만, 이 둘은 서로 다른 네트워크 범위에서 사용됩니다. 차이점을 쉽게 설명해 드릴게요.
내부 IP 주소 (Private IP Address)
역할: 집, 회사, 카페 등 특정 네트워크 안에서만 사용하는 IP 주소예요. 라우터가 각 기기에 부여하며, 이 네트워크 안에서만 유효합니다.
사용 범위: 동일한 네트워크에 연결된 기기들끼리 서로 통신할 때 사용합니다. 예를 들어, 집에서 사용하는 Wi-Fi에 연결된 스마트폰, 노트북, 스마트 TV 등이 각자 내부 IP 주소를 받습니다.
인터넷에서는 사용되지 않음: 내부 IP 주소는 외부 인터넷에서 직접 접근할 수 없습니다. 외부에서 인터넷을 통해 이 주소로 접근하려고 해도 그 기기를 찾을 수 없어요.
내부 IP 주소의 예
192.168.0.2
192.168.1.10
10.0.0.5
쉽게 말하면: 내부 IP 주소는 집 안에서만 사용하는 주소와 같아요. 우리 집에서 각 방마다 "방 번호"를 부여하는 것과 비슷해요. 다른 집에서는 이 방 번호를 알 수 없고, 오직 우리 집 안에서만 유효한 주소입니다.
공인 IP 주소 (Public IP Address)
역할: 인터넷에서 모든 기기를 고유하게 식별하기 위한 주소예요. 인터넷 서비스 제공업체(ISP)에서 라우터에게 할당하며, 이 공인 IP 주소를 통해 전 세계 인터넷과 통신할 수 있습니다.
사용 범위: 인터넷에 직접 연결되는 모든 기기는 공인 IP 주소를 통해 다른 기기와 통신할 수 있습니다. 예를 들어, 웹사이트 서버, 유튜브 서버, 게임 서버 등은 공인 IP 주소를 가지고 있어서 우리 컴퓨터나 스마트폰이 해당 서버에 연결할 수 있습니다.
고유함: 전 세계에서 공인 IP 주소는 중복되지 않고 고유하게 할당됩니다.
공인 IP 주소의 예
152.67.12.34
203.217.178.56
- 쉽게 말하면: 공인 IP 주소는 우리 집의 실제 "집 주소"와 같아요. 이 주소를 통해 다른 사람이나 택배 회사가 우리 집을 찾아올 수 있죠.
차이점 요약
특징 | 내부 IP 주소 | 공인 IP 주소 |
---|---|---|
역할 | 내부 네트워크(가정, 회사 등)에서 기기를 식별 | 인터넷에서 기기를 고유하게 식별 |
사용 범위 | 라우터 내부의 네트워크에서만 유효 | 인터넷 전반에서 사용 가능 |
중복 가능성 | 다른 네트워크에서는 중복 가능 (예: 여러 집에 동일한 내부 IP 사용) | 전 세계에서 유일하게 고유함 |
예시 | 192.168.0.10 , 10.0.0.5 |
203.217.178.56 , 152.67.12.34 |
내부 IP와 공인 IP가 함께 작동하는 이유
- 라우터는 집이나 회사의 네트워크에 연결된 모든 기기에게 내부 IP 주소를 할당하고, 인터넷과 통신할 때는 공인 IP 주소를 사용해요.
이렇게 하면 내부 네트워크에 여러 기기가 있어도 하나의 공인 IP 주소로 인터넷에 연결할 수 있게 되죠. 이를 NAT(Network Address Translation)라고 해요.
요약
내부 IP 주소는 네트워크 내부에서 기기를 식별하기 위한 주소로, 외부 인터넷에서는 볼 수 없습니다.
공인 IP 주소는 인터넷에서 고유하게 사용되는 주소로, 외부 기기와 통신할 때 필요합니다.
이렇게 내부 IP와 공인 IP를 구분함으로써 인터넷 자원을 효율적으로 사용할 수 있고, 여러 기기가 한 번에 인터넷에 연결될 수 있어요.
'CS > 짤막지식' 카테고리의 다른 글
2. 자료구조 / 알고리즘 - 코드 (1) | 2024.10.28 |
---|---|
restful API vs websocket (0) | 2024.09.25 |
2. webRTC의 SDP, ICE, 시그널링에 대해서 (0) | 2024.09.20 |
1. webRTC 기초 정리 (0) | 2024.09.19 |
변수 쓸 때 숫자는 Int, Double로 다양하게 받으면서, 왜 문자는 String으로 퉁치죠? (0) | 2024.07.30 |