일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- sequelize
- react
- 정규표현식
- 웹팩
- 회고
- 반응형웹
- socket.io
- 웹크롤링
- npx
- graphql
- component
- javascript animation
- typescript
- AWS
- scrapping
- 성능최적화
- cicd
- Redux
- Modal
- docker
- CDN
- go
- express
- styled-component
- Recoil
- route
- 포트포워딩
- Today
- Total
프로그래밍 공부하기
배포했는데 웹소켓이 안 됨 본문
최근 실시간 웹소켓 통신을 활용한 프로젝트를 진행하였다. 그런데 AWS EC2와 S3에 배포하니 웹소켓부분에서 오류가 발생했다! 왜 이런일이 발생했는지 찾아보았더니 다음과 같은 자료를 얻었다.
기능 | Application Load Balancer | Network Load Balancer | Gateway Loac Balancer | Classic Load Balancer |
로드 밸런서 유형 | 계층 7 | 계층 4 | 계층 3 게이트웨이 + 계층 4 로드 밸런싱 | 계층 4/7 |
대상 유형 | IP, 인스턴스, Lambda | IP, 인스턴스 | IP, 인스턴스 | |
WebSocket | ✔ | ✔ | ✔ | |
지원 네트워크/플랫폼 | VPC | VPC | VPC | EC2-Classic, VPC |
표를 보면 CLB는 WebSocket을 지원하지 않는다는 사실을 발견할 수 있다! 원인을 발견했으니 해결해보자. 방법은 2가지다.
- CLB에서 http, https 프로토콜을 TCP(80, 443)로 바꾼다
- WebSocket을 지원하는 ELB로 교체한다.(ALB, NLB)
1. CLB에서 해결
로드밸런서의 리스너 항목에서 원래 HTTP, HTTPS로 되어있던 부분을 위와 같이 TCP, TCP(with SSL)로 변경하면 CLB를 쓰는 환경에서도 웹소켓을 사용할 수 있다.(물론 HTTP에서 지원하던 스티키세션 옵션 등은 사용할 수 없게된다.)
2. 다른 ELB로 교체
ALB와 NLB 등 이미 웹소켓을 지원하는 ELB 인스턴스로 교체하는 방식이다. 나는 이번에 ELB를 처음 써봐서 어떤 블로그 글을 따라했는데 글에서 CLB를 쓰길래 큰 고민없이 일단 CLB를 썼다. 하지만 더 알아보니 CLB를 쓰지 않고 ALB를 써서 웹서버 배포를 진행하는 글도 많았다. 사실 AWS에서 위 그림처럼 CLB는 이전세대라면서 비활성화된 것처럼 회색으로 표시하길래 '요즘에는 안쓰나?'라는 생각도 들었긴 했다... 배포가 급해서 마음의 여유가 없어 충분한 조사를 하지 못했던 것 같다. 이젠 마음이 급해도 여러 개의 글을 보고 확실하게 기술에 대해 안 다음에 적용해야겠다.
이번에는 이미 CLB로 배포해서 CLB옵션을 변경해서 문제를 해결했지만, 다음 기회가 있다면 ALB나 NLB를 사용하여 배포해봐야겠다. 또한 ALB, NLB, GLB에 대해서도 공부해봐야겠다.
+서버를 재배포했는데 CLB가 제대로 작동하지 않는 오류가 생겨 이 기회에 ALB로 새로 작성했더니 바로 성공했다!
aws.amazon.com/ko/elasticloadbalancing/features/
'ErrorLog' 카테고리의 다른 글
[PowerShell] UnauthorizedAccess (0) | 2021.05.14 |
---|---|
ELB 502 Error (3) | 2021.04.30 |
ELB 503 Error (0) | 2021.04.27 |
[VMware] Ubuntu 네트워크 아이콘이 사라졌을 때 (0) | 2021.04.20 |
Command 'go' not found, but can be installed with: (0) | 2021.03.13 |