[프로젝트 수행] webRTC ec2업로드 (1)

Nam_JU·2022년 11월 6일
0

WebRTC-Project

목록 보기
3/18
post-thumbnail

배경 & 목적

로컬에서 실행되는 webRTC 플젝을 ec2에 올려 peer to peer가 잘 작동되는지 확인하고자함

  • 로컬에서 프로젝트를 실행 할 경우 방생성, 카메라, 사운드 모두 잘 작동됨
  • https, 클라우드 상에서도 WebRTC가 제대로 동작되는지 확인해야한다
    샘플코드 : https://github.com/Benkoff/WebRTC-SS

단순 EC2업로드


  • https가 적용되지 않으면 카메라가 안켜짐

결과

EC2에 그냥 업로드 했을 경우 카메라가 켜지지 않았음
webRTC는 HTTPS가 되는 환경에서 실행가능하다는 정보를 얻고 HTTPS를 적용해보기로함


EC2 Https 적용


ec2자체에 SSL적용시키기 위해 로드밸런서를 사용하기로 했다
Route53, LB, 가비아도메인 사용

  • 도메인 구매, 로드밸런서 구축, SSL 적용 완료
  • 적용결과 bad Gateway가 뜸
  • 에러 내용: java.lang.IllegalArgumentException: Invalid character found in method name. HTTP method names must be tokens
    서버자체는 https가 되어있는데 스프링부트 상에서는 http로만 되어있어 오류가 난것으로 보임


시행착오1


그렇다면 nginx 를 띄워서 리버스 프록시로 https 4040으로 오는것을 http 4040으로 바꿔서 스프링부트에 보내주면 되지 않을까?

  • 로드밸런서 리스너 그룹에 4040 추가, nginx(81) 추가

  • nginx 설정
    도메인:4040을 http로 바꿔서 보내주기

  • 결과
    오류가 똑같다 ...


시행착오2


TLS 터미네이션 부분을 수정하자
로드밸런서 자체가 https -> http, http->https 를 해주는데 nginx가 굳이 필요한가에 대한 지적을 받았다


  • nginx삭제 후 LB에 적용된 필요없는 포트는 전부 삭제, https:4040부분을 http:4040으로 바꿔주었다
    클라이언트에서 LB로 갈때는 Https:443 -> LB에서 ec2로 갈 때는 http:4040으로 만들어주기 위함.

  • LB 타겟그룹도 새로 생성했다
    이전에는 https:443, 4040으로 되어있었는데 http:4040으로 변경해봄


결과적으로 HTTPS적용에는 성공했다!
그러나... webrtc를 https에 올리면 카메라가 나올 줄 알았는데 다른 원인이 터졌다 ㅎㅎ
GET, POST 메소드 모두 제대로 작동함



WebRTC 카메라 띄우기


에러내용을 살펴보면 was loaded over HTTPS, but attempted to connect to the insecure WebSocket endpoint 'ws:도메인'
HTTPS를 통해 로드되었지만 보안되지 않은 WebSocket endpoint 'ws://도메인'에 연결을 시도했습니다. 이 요청은 차단되었습니다. WSS를 통해 사용 가능해야 합니다. 라는 오류를 볼 수 있다

aws 공식 페이지를 보면 websocket에서 사용되는 ws, wss가 기본적으로 지원을 해준다고 한다 즉 LB설정을 다시 파야함..

https://docs.aws.amazon.com/ko_kr/elasticloadbalancing/latest/application/load-balancer-listeners.html


시행착오1


  • LB의 http버전을 업그레이드 해주면 되지 않을까? 해서 설정을 확인 해본 결과 HTTP/2로 이미 활성화된 상태다. 따라서 버전 문제는 아님

AWS ALB WSS에 관한 모든 자료를 검색해봤지만 자동으로 지원해준다는 ALB의 WSS기능 설정은 어디에도 보이지 않았다.

에러 내용을 자세히보면 ws 부분의 엔드포인트가 제대로 인증되지 않았다는 에러가 있다. 따라서 ws부분의 코드를 wss로 바꿔주면 어떨까?
http환경에는 ws, https 환경에는 wss로 맞춰줘야 한다

  • ws로 설정되어있던 코드를 전부 wss로 변경해주었다

성공함!


설정 정리


  • 타겟 그룹 : http:4040


  • 로드밸런서 설정


  • HTTP: 80 규칙


  • HTTP: 443 규칙


  • HTTP: 4040 규칙




해결하지 못한 문제


호스트의 컴퓨터로 각각 크롬과 사파리에서 도메인 접속을 했을때 카메라 두대가 전부 나타난 것을 볼 수 있다

하지만 다른 사람의 컴퓨터 브라우저로 접속했을 때 카메라 통신이 되지 않았다. (단일 카메라만 뜸)

profile
개발기록

0개의 댓글