window 객체에는 수 많은 속성값이 존재한다.
이 중 mediaDevices 의 특징은
1. 읽기 전용 속성이다.
2. 카메라, 마이크, 화면 공유와 같이 현재 연결된 미디어 입력 장치에 접근할 수 있는 MediaDevices 객체를 반환한다.
이때, localhost(127.0.0.1) 와 같은 개발 서버에서는 http
로도 돌아간다.
하지만 본인 ip 예를 들어 http://192.168.1.xxx:3000
로 들어가게 되면 MediaDevices 가 존재하지 않을 것이다.
이는 보안
때문이다.
참고로 127.0.0.1 과 본인 ip 로 접속했을 때의 차이점은 브라우저는 localhost
와 127.0.0.1
을 "보안 예외 도메인" 으로 보고, 이때만 HTTP에서도 mediaDevices 접근을 허용한다.
하지만 192.168.x.x
, 10.x.x.x
, 172.16.x.x
같은 사설 IP는 외부 환경일 수도 있다고 판단해서, HTTPS가 아니면 허용하지 않는다.
브라우저는 사이트가 보안이 제대로 된 환경인지 판단할 때, Secure Context라는 기준을 사용하는데,
✅ Secure Context:
https://example.com
http://localhost
http://127.0.0.1
❌ Not Secure:
http://192.168.1.x
http://example.com
navigator.mediaDevices.getUserMedia()는 Secure Context에서만 사용 가능한 대표적인 API 이다.
따라서 일단 개발 환경에서 잠깐 테스트 해보기 위해 http 로 접속하며, 원격으로 붙어야할 경우엔 다음과 같은 step 을 따라하면 된다.
Insecure origins treated as secure
를 검색 참고로 http://192.168.1.xxx:3000 처럼 포트번호까지 명확하게 입력해줘야한다.
테스트가 다 끝나면 다시 원래대로
사용 X
으로 재설정하는 것이 좋습니다.