์๋ค ์ -
์ด์ ๋ํ ์๋ฃจ์ ์ ์ฐพ์ ์ ์๋ ๊ฒ ๊ฐ์ง๋ง ๋ก๋ ๋ฐธ๋ฐ์ ๋ค์์ ๋ด ์ฑ์ ์คํํ ๋ ํด๋ผ์ด์ธํธ์์ ๋ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
WebSocket connection to 'wss://fakedomain.com/socket.io/?EIO=3&transport=websocket&sid=QH8VmXbiEcp3ZyiLAAAD' failed: Error during WebSocket handshake: Unexpected response code: 400
๋ก๋ ๋ฐธ๋ฐ์ ๋ฐ ์ด์ EC2 ์ธ์คํด์ค์ ํต์ ํ๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์ ์ค๋ฅ๋ฅผ ์ดํดํฉ๋๋ค. ์ค๋ฅ๊ฐ ํ์๋์ง ์์ต๋๋ค!
๊ทผ๋ณธ ์์ธ์ ์์ ํ๊ณ ์ถ์ง๋ง ํ์ฌ๋ก์๋ ์๊ฐ์ด ์๋ ๋ชจ๋ ์ค์๊ฐ ์์ ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ณ๋์ ์ ์ฉ socket.io ์๋ฒ๊ฐ ํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด ์ค๋ฅ?
ํด๋ง์ผ๋ก ๋์๊ฐ๊ณ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ํด๋ง์ ์ ๋๋ก ์๋ํ๋ ๊ฒ ๊ฐ์ง๋ง(์์ผ ์ฐ๊ฒฐ์ด ์ฐ๊ฒฐ๋์ด ์๊ณ ์คํ๋จ) ์ฝ์์์ ๋นจ๊ฐ์ ์ค๋ฅ๋ก ์์ํ๊ณ ์ถ์ง ์์ต๋๋ค.
์กฐ์ธ์ ํด์ฃผ์ ์ ๋ฏธ๋ฆฌ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
๋ํ ์ค์ํ ๊ฒฝ์ฐ bower๋ฅผ ํตํด ์ค์นํ์ต๋๋ค.
"socket.io-client": "~1.1.0",
์๋ฒ์ ๊ณ ์ ์ฐ๊ฒฐ์ด ์์ต๋๊น?
Elastic Beanstalk๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๊ณ ๊ฐ์ ํฉ๋๋ค(์ง์นจ์ด ํจ์ฌ ์ฌ์ธ ๊ฒ์ ๋๋ค).
EC2->๋คํธ์ํฌ ๋ฐ ๋ณด์->๋ก๋ ๋ฐธ๋ฐ์๋ก ์ด๋ํฉ๋๋ค.
๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ์ ํํ๊ณ ๋ฆฌ์ค๋๋ก ์ด๋ํ์ญ์์ค. ๋ก๋ ๋ฐธ๋ฐ์ ํ๋กํ ์ฝ๊ณผ ์ธ์คํด์ค ํ๋กํ ์ฝ์ด HTTP ๋ฐ HTTPS๊ฐ ์๋ ํฌํธ 80์ ๊ฒฝ์ฐ TCP๋ก, ํฌํธ 443์ ๊ฒฝ์ฐ SSL๋ก ์ค์ ๋์ด ์๋์ง ํ์ธํ์ญ์์ค.
์ด๋ฐ. ์ด๊ฒ์ ๋ด๊ฐ ๋ค๋ฅธ ๊ณณ์์ ๋ณธ ์ ์๋ ํ์คํ ์กฐ์ธ์
๋๋ค. ์ค์ ์ ํด๋ณผ๊ฒ
๊ทธ๋ฆฌ๊ณ ๋ค์ ๋ณด๊ณ ํฉ๋๋ค. ๊ฐ์ฌํฉ๋๋ค!
2014๋
10์ 29์ผ ์์์ผ ์คํ 7:48 Vadim Kazakov [email protected]
์ผ๋ค:
Elastic Beanstalk๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๊ณ ๊ฐ์ ํฉ๋๋ค(์ฌ๊ธฐ์ ์๋ ์ง์นจ์
ํจ์ฌ ์ฝ๊ฒ).EC2->๋คํธ์ํฌ ๋ฐ ๋ณด์->๋ก๋ ๋ฐธ๋ฐ์๋ก ์ด๋ํฉ๋๋ค.
๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ์ ํํ๊ณ ๋ฆฌ์ค๋๋ก ์ด๋ํ์ญ์์ค. ๋ ๋ก๋ ๋ชจ๋
๋ฐธ๋ฐ์ ํ๋กํ ์ฝ ๋ฐ ์ธ์คํด์ค ํ๋กํ ์ฝ์ ํฌํธ 80์ ๋ํด TCP๋ก ์ค์ ๋๊ณ
HTTP ๋ฐ HTTPS๊ฐ ์๋ ํฌํธ 443์ฉ SSL.โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/Automattic/socket.io/issues/1846#issuecomment -61038664
.
๊ทธ๋์ ๋ด๊ฐ ํ๋ ธ์ ์๋ ์์ง๋ง ์ฐ๋ฆฌ ์ฌ์ดํธ๋ HTTPS์์ ์คํ๋๊ณ ์์ต๋๋ค(SSL ์ธ์ฆ์ ์ฌ์ฉ). ๊ทธ๊ฒ๋ค์ ๋ณ๊ฒฝํ๋ฉด ๋ง์ ๊ฒ๋ค์ด ์ค๋จ๋ฉ๋๋ค. ๋ด ์ฑ์์ X-Forwarded-Proto๋ฅผ ํ์ธํ์ฌ ์์ฒญ์ด HTTPS์ธ์ง ํ์ธํ๊ณ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ๊ฐ์ ๋ก ๋ฆฌ๋๋ ์ ํ์ต๋๋ค. ๋ถ๋ช ํ SSL/TCP๊ฐ ์๋ X-Forwarded-Proto ํค๋๊ฐ ์๊ณ Express๋ req.secure๋ฅผ false๋ก ๋ณด๊ณ ํฉ๋๋ค(๋ด๊ฐ https๋ฅผ ์ ๋ ฅํ์์๋ ๋ถ๊ตฌํ๊ณ ).
์ ์?
ํ์คํ์ง ์์ต๋๋ค. ์์ผ์ HTTP๊ฐ ์๋ TCP/SSL ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ฏ๋ก ์น ์์ผ์ด ์๋ํ๋ ค๋ฉด TCP/SSL๋ก ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค. ์ฑ์ ๋๋จธ์ง ๋ถ๋ถ์ ์์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด์๋ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๋์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์๋ก์ด ํ๊ฒฝ์ ๋ง๋ค๊ณ ์ข ์ด์ง๋ฝํ์ผ ๊ฒ ์ต๋๋ค. ๊ธฐ๊ณ์ ํฑ๋๊ฐ ๋ง์ด ์์ต๋๋ค!
์น ์์ผ์ ์์ฒด ํฌํธ์์ ์คํํ ์ ์์ต๋๊น? ๊ทธ๋ ๋ค๋ฉด ๋ช ๊ฐ์ง ๋ฌธ์๋ฅผ ์ฐ๊ฒฐํ ์ ์์ต๋๊น? (์์์๋ ์์ง๋ง ํ๋ฆด์๋ ์์)
์ํ๋ ํฌํธ์์ ์๋ํ ์ ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ํฌํธ๋ฅผ ์ฐ๊ฒฐํ ๋ ์ง์ ํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
io('https://myserver:123');
Elasticbeanstalk๋ฅผ ์ฌ์ฉ ์ค์ด๊ณ ๋์ผํ ๋ฌธ์ ์ ์ง๋ฉดํด ์์ต๋๋ค. SSL์ด ์ค์น๋์ด ์์ง ์์ง๋ง ์ผ๋ฐ http๋ฅผ ํตํด ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค.
์๋
,
SockJS๋ฅผ ์ฌ์ฉํ๊ณ ์์ง๋ง ๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๋ด ์์ฉ ํ๋ก๊ทธ๋จ์ Java Spring 4 ์์ฉ ํ๋ก๊ทธ๋จ์ด๋ฉฐ ๊ฐ๋ฐ ์์คํ
์์ ์๋ํ๋ฉฐ
AWS์์ ๋์ผํ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋๊ตฐ๊ฐ๊ฐ ์
๊ทธ๋ ์ด๋ ํค๋๋ฅผ ์ญ์ ํ ๊ฒ ๊ฐ์ต๋๋ค. ํด๋ผ์ด์ธํธ์์ ๋ณผ ์ ์์ต๋๋ค.
์์ง ํด๊ฒฐ์ฑ ์ ์ฐพ์ ์ ์์ต๋๋ค ...
์ ๋ ๊ฐ์ ๋ฐฐ๋ฅผ ํ๊ณ AWS ์์ง๋์ด์ ์ค์๊ฐ ์ฑํ ์ ํ๊ณ ์๋๋ฐ ๋ ๋ค ์ด๋ฆฌ๋ฅ์ ํฉ๋๋ค. ELB๋ฅผ HTTP/HTTPS์์ TCP(๋๋ SSL(Secure TCP))๋ก ๋ณ๊ฒฝํด์ผ ํจ์ ํ์ธํ์ง๋ง ์ฌ์ ํ 400 ์ค๋ฅ๊ฐ ์์ฃผ ๋ฐ์ํฉ๋๋ค. Elastic Beanstalk ๋ถํ ๋ถ์ฐ ํด๋ฌ์คํฐ๋ก ์ด๋ํ ๋๊น์ง ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์์ต๋๋ค.
app.use ๋ฏธ๋ค์จ์ด ํญ๋ชฉ(ํค๋/cors ๊ด๋ จ)์ด ์๋ ๊ฒฝ์ฐ, ๋๋ app.get("/", ์ด๋ ๊ฒ์ด ์ ์๊ฒ ํจ๊ณผ๊ฐ ์์๋์ง ํ์คํ์ง ์์ง๋ง ๊ฒฐ๊ณผ๋ฅผ ๊ฒ์ํด ์ฃผ์ญ์์ค.
์ ๋ฐ์ดํธ: HTTP ๋๋ HTTPS ํธ๋ํฝ์ ๋ํด ๊ตฌ์ฑ๋์๋์ง ์ฌ๋ถ์ ๊ด๊ณ์์ด socket.io๊ฐ ์คํจํ๋ ELB์์ ํ์ธํ์ต๋๋ค. EC2 ์ค ํ๋๋ก ์ง์ ์ด๋ํ๋ฉด ๋ชจ๋ ๊ฒ์ด ํ๋ฅญํ๊ฒ ์๋ํฉ๋๋ค.
์ฒจ๋ถ ํ์ผ์ ELB๋ฅผ ํต๊ณผํ ๋ ๋ณด๊ณ ์๋ ๊ฒ์
๋๋ค.
๋ก๋ ๋ฐธ๋ฐ์ ์์ Route53 ์ธ์คํด์ค๋ฅผ ์ถ๊ฐํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ฒ ๊ฐ์ต๋๋ค.
์ด์ AWS ํ๊ฒฝ์์ ๋ณด์ ์ฐ๊ฒฐ๋ก ์๋ํ๋ ์น ์์ผ์ด ์์ต๋๋ค.
Route 53์ ์ถ๊ฐํด ๋ณด์ญ์์ค. ์ด๋ ๊ฒ ํด๋ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์ผ๋ฉด ๊ตฌ์ฑ์ ๊ณต์ ํด ๋๋ฆฌ๊ฒ ์ต๋๋ค.
@yoav200 ๋น์ ์ ์ํด ์ผํ๊ฒ ๋ง๋ ๋น์ ์ ์ ์ฒด ๊ตฌ์ฑ์ ๊ณต์ ํ ์ ์๋ค๊ณ ์๊ฐํ์ญ๋๊น? ์ฆ, EBS ๋ณด์ + ํ๋กํ ์ฝ(http/tcp)์ ํฌํธ, ํ์ํ ๋ชจ๋ .ebextensions ๋ฑ. ์ ๊ทธ๋ ์ด๋ ํค๋๋ฅผ ์ ์งํ๊ณ ๋ ธ๋๋ก ๋ณด๋ด๊ธฐ ์ํด ๋ด nginx ๊ตฌ์ฑ์ ํดํนํ๊ธฐ ์ํด ์๋ง์ ๋ค๋ฅธ ์ผ์ ์๋ํ์ง๋ง ์๋ฌด ๊ฒ๋ ํจ๊ณผ๊ฐ ์์์ต๋๋ค. . FWIW - wiki ํ์ด์ง๋ ์ด๊ฒ์ ์ ๋ง, ์ ๋ง ๋์์ด ๋ ๊ฒ์ ๋๋ค. ํจ๊ณผ๊ฐ ์์๋ ๊ฒ์ ๋ด EC2 ์ธ์คํด์ค๋ก ์ง์ ์ด๋ํ๋ ๊ฒ๋ฟ์ด์์ต๋๋ค.
๋ด ๋๋ฉ์ธ์ ๊ด๋ฆฌํ๋ Route 53 ์ธ์คํด์ค๋ฅผ ์ค์ ํ์ต๋๋ค.
๋ด ๋๋ฉ์ธ์ด ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ์ง์ ๊ฐ๋ฆฌํค๋ ๋ ์ฝ๋๋ก ํธ์คํ
์์ญ์ ๊ตฌ์ฑํ์ต๋๋ค.
๋ก๋ ๋ฐธ๋ฐ์๋ ๋ค์๊ณผ ๊ฐ์ด ๋ด Tomcat ์ธ์คํด์ค์ ์์ฒญ์ ์ ๋ฌํ๋๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
ELB์ฉ ๋ณด์ ๊ทธ๋ฃน์ ๋งค์ฐ ํ์ค์ ์
๋๋ค.
nginx๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๊น? ํน๋ณํ ๊ตฌ์ฑ์ ํด์ผ ํ๋?
์ง๋ 2์ผ ๋์ AWS ์ง์ ์์ง๋์ด์ ๊ฑฐ์ 8์๊ฐ์ ๋ณด๋์ต๋๋ค. ํผํฉ์์ nginx๋ฅผ ์ถ์ถํด์ผ ํ์ง๋ง ๋งค์ฐ ๊ฐ๊น๊ณ ์์ผ์ http๋ฅผ ํตํด ELB๋ฅผ ํตํด ์ ์๋ํฉ๋๋ค. ๋ด์ผ์ ELB ์์ค ๋์ ์๋ฒ ์ธก์์ https ํญ๋ชฉ์ ์ฒ๋ฆฌํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋๋ ๋์ ๋ฐ๊ฒฌ๊ณผ ํจ๊ป ๋ค์ ๋ณด๊ณ ํ ๊ฒ์ด๋ค.
๋๋ nginx๋ฅผ ์ฌ์ฉํ์ง ์๊ณ Amazon์์ ๋ชจ๋ ๊ฒ์ ๊ด๋ฆฌํ๊ณ ๋ด ๋๋ฉ์ธ๋ Amazon์ผ๋ก ์ฎ๊ฒผ์ต๋๋ค.
๊ทธ๋ฌ๋ ์ธ์คํด์ค์ AWS๋ฅผ ์ฌ์ฉํ์ง๋ง nginx๋ก ๋ถํ๋ฅผ ๊ด๋ฆฌํ๋ ํธ์คํ
๋ ํด๋ผ์ฐ๋ ํ๊ฒฝ์์ ๋ด ์ ํ๋ฆฌ์ผ์ด์
์ ๋ง์ด๊ทธ๋ ์ด์
ํ๋๋ฐ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค.
์ด๋ป๊ฒ ์๋ํ๋์ง ๋ฌผ์์ ๋ ๊ทธ๋ค์ ๋๋ต์ ๋ค์๊ณผ ๊ฐ์์ต๋๋ค.
์ฐ๋ฆฌ๋ Amazon Elastic Load Balancer๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์์ฒด NGinx ๋ก๋ ๋ฐธ๋ฐ์ฑ ๊ณ์ธต์ ์ฌ์ฉํฉ๋๋ค.
์๋ฃจ์ ์ ELB ๋์ Nginx ๋๋ HAProxy ์๋ฒ๋ฅผ ์ฌ์ฉํ๊ณ 1๊ฐ์ haproxy/nginx ๋ ธ๋๊ฐ ์๋ ์๋ ํฌ๊ธฐ ์กฐ์ ๊ทธ๋ฃน์ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑ ์์์ ๊ณ ๊ฐ์ฉ์ฑ์ ๋ณด์ฅํ๋ ๊ฒ์ผ ์ ์์ต๋๋ค.
์, HAProxy๊ฐ ๋ ๋ค๋ฅธ ์ต์ ์ด๋ผ๊ณ ๋ค์์ง๋ง ํ๋ฃจ๊ฐ ๋๋ ๋๊น์ง ๋ค์ ์๋น์ค์ ํจ๊ป ์๋ํ๊ฒ ํ ๊ฒ์ด๋ผ๊ณ ํ์ ํฉ๋๋ค.
๋ ธ๋ ์ฑ์ ํ์ฌ ์ด๋ฌํ ๋ชจ๋ ์๋น์ค์ ํจ๊ป ์๋ํ๊ณ ์์ง๋ง ๋ด๊ฐ ๋งํ๋ฏ์ด HTTP๋ฅผ ํตํด์๋ง ๊ฐ๋ฅํ๋ฏ๋ก ํ๋ก๋์ ์ค๋น๋ฅผ ์ํด ํ ์ผ์ด ๋ง์ง ์์ต๋๋ค. ๋์ค์ ์ฐพ์ ๊ฒฐ๊ณผ/๊ตฌ์ฑ์ผ๋ก ๋ค์ ๋ณด๊ณ ํ๊ฒ ์ต๋๋ค.
@niczak ์ด๋ป๊ฒ ์๋ํ๋์ง ์กฐ๊ธ ๊ณต์ ํด ์ฃผ์๊ฒ ์ต๋๊น?
์ง๊ธ์ ElastiCache์ Redis๋ฅผ ์ฌ์ฉํ์ฌ EC2์ Node ์ธ์คํด์ค์์ Socket.IO์ ์ฐ๊ฒฐํ๋ ค๊ณ ํฉ๋๋ค.
์์ผ(http://coding-ceo.ghost.io/how-to-run-socket-io-behind)์ ์ฝ๊ฒ ์ฐ๊ฒฐํ ์ ์๋๋ก ๊ณต๊ฐ IP ์ฃผ์๋ก ์๋ต๊ณผ ํจ๊ป EC2 ์ธ์คํด์ค๋ฅผ ๊ณต๊ฐํ์ต๋๋ค. -elb-on-aws/). ๋ด ELB์์ ๊ณ ์ ์ธ์ ์ ์ฌ์ฉํ๊ณ ์์ง๋ง(์ฐ๊ฒฐ๋ ์ํ๋ก ์ ์ง๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค) ์์ผ์ด ์ฌ์ ํ ์ฐ๊ฒฐ๋์ง ์๊ณ ๋ฉ์ง ์คํจ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค. ํธ๋์ ฐ์ดํฌ ์๋ต์ ๋ฐ๊ธฐ ์ ์ ์ฐ๊ฒฐ์ด ๋ซํ์ต๋๋ค.
ํด๋ง์ ์ ์๋ํ์ง๋ง ์์ผ๊ณผ ์ ์ฒด ๊ฒฝ๋ก๊ฐ ์ ๋๋ก ์๋ํ๋๋ก ํ๋ ค๊ณ ํฉ๋๋ค.
์ฌ๊ธฐ์์ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๋ณด๊ณ ์ถ์ต๋๋ค. ๊ทธ๋์ ๋ด ์ธ์คํด์ค๋ฅผ ์ ์ ํ๊ฒ ๊ตฌ์ฑํ ์ ์์ต๋๋ค(http ๋ฐ https๊ฐ ์๋ HTTP์๋ง ์๋ ๊ฒฝ์ฐ์๋). ์ง๊ธ ๊ฝค ์ค๋ซ๋์ ์ค์ค๋ก๋ฅผ ๋ชฐ์๋ถ์ด๊ณ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋์ ์ฃผ์ ์ ์ ๋ง ๊ฐ์ฌํฉ๋๋ค!
@ํํธ๋ก๊ฐ๋
์ด๋ด ํผํธ!
๋ด ELB ๋ฆฌ์ค๋๋ ๊ฐ๋ฅํ ํ ๊ฐ๋จํ๋ฉฐ(์ด๋ฏธ์ง ์ฐธ์กฐ) ๊ธฐ๋ณธ์ ์ผ๋ก EC2 ํฌํธ 80์์ iptables๋ฅผ ์ฌ์ฉํ์ฌ 8080์ผ๋ก ์ ๋ฌ๋ฉ๋๋ค. ์ฆ, HTTPS์์ ๋ด ์๋ฒ์ ๋๋ฌํ๋ฉด ๋ด ๋ ธ๋ ์ฑ์ด 8080์์ ์์ ๋๊ธฐํ๊ณ SSL ์ธ์ฆ์ ์์ฒด๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ธ์ฆ์ ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ ธ๋ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
files = ["COMODOHigh-AssuranceSecureServerCA.crt", "AddTrustExternalCARoot.crt"];
ca = (function() {
var _i, _len, _results;
_results = [];
for (_i = 0, _len = files.length; _i < _len; _i++) {
file = files[_i];
_results.push(fs.readFileSync('/etc/ssl/tcerts/' + file));
}
return _results;
})();
httpsOptions = {
ca: ca,
key: fs.readFileSync('/etc/ssl/tcerts/multidomain.key', 'utf8'),
cert: fs.readFileSync('/etc/ssl/tcerts/14432575.crt', 'utf8')
};
this.serverPort = 8080;
var httpsServer = https.createServer(httpsOptions, apiInstance);
httpsServer.listen(this.serverPort);
startSockets(httpsServer);
์น ์์ผ์ด ์๋ํ๋ ค๋ฉด(๊ธด ํด๋ง์ผ๋ก ๋์๊ฐ์ง ์๊ณ ) Cross-Zone Load Balancing์ ๋นํ์ฑํํด์ผ ํ์ต๋๋ค. ๋ถํํ๋ AWS๋ ELB๋ฅผ ํตํด ์น ์์ผ์ ์ง์ํ๋ค๊ณ ์ฃผ์ฅํ์ง ์์ผ๋ฏ๋ก ์ด๋ฌํ ์ ํ์ ๊ตฌ์ฑ "ํดํน"์ด ํ์ํฉ๋๋ค. ๋ฐ๋ผ๊ฑด๋ ์ด๊ฒ์ ๋น์ ์ ์์ํ๊ณ ์คํํ๊ธฐ์ ์ถฉ๋ถํ ๊ฒ์ ๋๋ค!
@niczak ๊ฐ์ฌ
๋ชจ๋ ๊ฒ์ด ์๋ฒฝํ๊ฒ ์๋ํ๊ณ HTTP ํธ๋ํฝ์ด ๋ฐ์ํ์ฌ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๋ํ ์ฌ๋ฌ ์ธ์คํด์ค์์ redis๊ฐ ์๋ํฉ๋๋ค. ๋ง์ง๋ง์ reCluster์์ ์์ ํ๊ณ tcp ๊ฒฝ๋ก๊ฐ ํน์ ์์ ์์ ๊ณ ์ ๋๋๋ก ํ์ฉํ๋ ๊ฒ์ ๋๋ค.
์ด๊ฒ์ผ๋ก ๋ง์ ์ฑ๊ณต์ ๊ฑฐ๋์ จ์ต๋๊น? ๋๋ ์ต์คํ๋ ์ค๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฏ๋ก ๊ณ ์ ์ธ์ ์ด ์ ์๋ํ์ง ์์ต๋๋ค. ๊ทธ๋ฐ ํ์ด์ด ์์๋์?
๋ค์ ํ ๋ฒ ๊ฐ์ฌ๋๋ฆฌ๋ฉฐ ์ด ๋ชจ๋ ๊ฒ์ด ์๋ฃ๋๋ฉด ์ ์ฌํ ํญ๋ชฉ์ผ๋ก ์ด๋ ค์์ ๊ฒช๊ณ ์๋ ๋ค๋ฅธ ์ฌ๋๋ค์ ์ํด ๋ฉ์ง ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ์ป์ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
@niczak ๊ฐ์ฌ
๋๋์ด ๋๋ ์ผ์ ํ๊ฒ ๋์๋ค. ๊ทธ๋ฌ๋ ๊ตฌ์ฑ์ ์ถ๊ฐ๋ก
1) TCP ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ ๋ก๋ ๋ฐธ๋ฐ์
2) ๊ต์ฐจ ์์ญ ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ๋นํ์ฑํํ๋ ๋ก๋ ๋ฐธ๋ฐ์
๋๋ ์ค์ ํด์ผ์ง
3) ์ํํธ์จ์ด ๊ตฌ์ฑ ์น์
์์ ํ๋ก์ ์๋ฒ๊ฐ "์์"์ด์ด์ผ ํฉ๋๋ค.
์ข์ ์์์ ๋๋ค @aidanbon ๋ฐ @petrogad , AWS์ ์์ผ์ ๋ํ ํ์์ ๋๋ค! :+1:
์ ๋ง ๊ฐ์ฌํฉ๋๋ค! ํ์ฑ ์ฝฉ๋๋ฌด๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค. nginx ํ๋ก์๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ ๋๋ค.
๋ด ์๋ ๊ฒ์๋ฌผ์ ์ ๋ฐ์ดํธ:
๋ด HTTPS๋ฅผ SSL(443 ---> ๋ด ์ฌ์ฉ์ ์ง์ ํฌํธ)๋ก ๋ณ๊ฒฝํ๊ณ HTTP(80 ---> ๋ด ์ฌ์ฉ์ ์ง์ ํฌํธ)๋ฅผ ๋จ๊ฒผ์ต๋๋ค.
์ต์คํ๋ ์ค !req.secure && X-Forwarded-Proto !=== ํฌํธ 80์ผ๋ก ๋ค์ด์ค๋ ๊ฒฝ์ฐ HTTPS๋ก ๋ฆฌ๋๋ ์ ํ๋ https๋ก ํ์ธํ๋ ์ฝ๋๊ฐ ์์ต๋๋ค...
ํ์ง๋ง
SSL๋ก ๋ณ๊ฒฝํ๋ฉด X-Forwarded-Proto๊ฐ ์ ์๋์ง ์์ ์ํ๋ก ๋์์ต๋๋ค.... ์ด ์ฐ๊ฒฐ์ด ๋์ด์ง๋๋ค. (๋ํ req.secure๊ฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค)
๊ทธ๋์ ์ง๊ธ:
if (req.get('X-Forwarded-Proto') === 'http') {
res.redirect('https://' + req.get('Host') + req.url);
}
์ ์๋ํ๋ ๊ฒ ๊ฐ๊ณ ์ฝ์์ ๋ ์ด์ 400 ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค.
Hullo - ๋ค์์ ์ํํ๋ Elastic Beanstalk์ Node, NGINX, SSL ๋ฐ ELB๋ฅผ ์ฌ์ฉํ์ฌ ์ด ์์ ์ ์ํํ์ต๋๋ค.
.ebextensions์์ ์ปจํ ์ด๋ ๋ช ๋ น์ ๋ง๋ค์ด ํ๋ก์ ์น ์์ผ์ ํฌํจํ๋๋ก nginx ๊ตฌ์ฑ ์คํฌ๋ฆฝํธ๋ฅผ ์์ ํฉ๋๋ค.
container_commands:
00proxy:
command: sed -i 's/proxy_http_version.*/proxy_http_version\ 1.1\;\n\ \ \ \ \ \ \ \ proxy_set_header\ \ \ \ \ \ \ \ Upgrade\ \ \ \ \ \ \ \ \ \$http_upgrade\;\n\ \ \ \ \ \ \ \ proxy_set_header\ \ \ \ \ \ \ \ Connection\ \ \ \ \ \ \"upgrade\"\;/g' /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf
Elastic Beanstalk ์น ์ฝ์์ ์ฌ์ฉํ์ฌ ๋ก๋ ๋ฐธ๋ฐ์์ SSL ์ธ์ฆ์๋ฅผ ์ค์นํฉ๋๋ค.
๊ทธ๋ฐ ๋ค์ EC2 ์น ์ฝ์๋ก ์ด๋ํ์ฌ SSL 443 -> TCP 80์์ ์์ ๋๊ธฐํ๋๋ก ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค. EB ์น ์ฝ์์์ ๋ณ๊ฒฝํ ๋๋ ์๋ํ์ง ์์๊ณ EC2์์ ์ง์ ๋ณ๊ฒฝํด์ผ ํ์ต๋๋ค.
๋ชจ๋ ๊ฒ์ด ์๋ํด์ผ ํฉ๋๋ค. ๋ฆฌ๋๋ ์ ์ ์ํํ ํ์๊ฐ ์์๊ณ NGINX๋ ์๋ํ๋๋ก ํ์ต๋๋ค.
@ChrisEdson ์ด ์๋ฃจ์
์ ์ฌ์ฉํ๊ธฐ ์ํด ํจํค์ง์ ํฌํจํ ๋ค๋ฅธ ๊ฒ์ด ์์ต๋๊น?
์๋ํ์ง๋ง ์ค๋ฅ๋ก ์ธํด ๋ฐฐํฌ์ ์คํจํ์ต๋๋ค. ๋ก๊ทธ์๋ ๋ค์ ํ์ด ํ์๋ฉ๋๋ค.
/etc/init.conf: Unable to load configuration: No such file or directory
์ฝ๋๋ฅผ ๊ฒ์ํ ์ ์์ต๋๊น?
2015๋ 9์ 4์ผ ๊ธ์์ผ ์คํ 1์ 13๋ถ์ Treyone [email protected]์์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
@ChrisEdson ์ด ์๋ฃจ์ ์ ์ฌ์ฉํ๊ธฐ ์ํด ํจํค์ง์ ํฌํจํ ๋ค๋ฅธ ๊ฒ์ด ์์ต๋๊น?
์๋ํ์ง๋ง ์ค๋ฅ๋ก ์ธํด ๋ฐฐํฌ์ ์คํจํ์ต๋๋ค. ๋ก๊ทธ์๋ ๋ค์ ํ์ด ํ์๋ฉ๋๋ค./etc/init.conf: Unable to load configuration: No such file or directory
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/socketio/socket.io/issues/1846#issuecomment -137718880
์ฑ ์ฝ๋๋ ๋งค์ฐ ๊ธฐ๋ณธ์ ์ธ socket.io ๊ตฌํ์ผ๋ก ๊ฑฐ์ ์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅํ ์์ ์ฌ์ฉ๋ฒ์
๋๋ค.
๋ด๊ฐ ์ถ๊ฐํ ์ ์ผํ ๊ฒ์ .ebextensions์ .config ํ์ผ์
๋๋ค. ์ด ํ์ผ์์ ์์ ์ธ์ฉํ ์ฝ๋ ์กฐ๊ฐ์ ๋ณต์ฌํ์ต๋๋ค.
๊ทธ๋์ ํฌ์คํ
ํ ๊ฒ ๋ณ๋ก ์๋ค์ :)
๊ฑฑ์ ํ์ง ๋ง์ธ์. ์ฝ๋๋ ๋ก๊ทธ ์์ด๋ ๋๋ฒ๊ทธํ๊ธฐ ์ด๋ ต์ต๋๋ค. ๋ก๊ทธ๋ฅผ ๊ฒ์ํ ์ ์์ต๋๊น? ์๋ง๋ ์ฌ๊ธฐ์ ๋ถ์ด๊ธฐ์ ์ ํฉํ์ง ์์ ๊ฒ์ ๋๋ค. ์๋ง๋ ๋ถ์ฌ๋ฃ๊ธฐ ์์์ ๋ฃ์ ๊ฒ์ ๋๋ค.
2015๋ 9์ 4์ผ ๊ธ์์ผ ์คํ 3์ 26๋ถ์ Treyone [email protected]์์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
์ฑ ์ฝ๋๋ ๋งค์ฐ ๊ธฐ๋ณธ์ ์ธ socket.io ๊ตฌํ์ผ๋ก ๊ฑฐ์ ์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅํ ์์ ์ฌ์ฉ๋ฒ์ ๋๋ค.
๋ด๊ฐ ์ถ๊ฐํ ์ ์ผํ ๊ฒ์ .ebextensions์ .config ํ์ผ์ ๋๋ค. ์ด ํ์ผ์์ ์์ ์ธ์ฉํ ์ฝ๋ ์กฐ๊ฐ์ ๋ณต์ฌํ์ต๋๋ค.๊ทธ๋์ ํฌ์คํ ํ ๊ฒ ๋ณ๋ก ์๋ค์ :)
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/socketio/socket.io/issues/1846#issuecomment -137749890
ํ , ์๋ ํจํค์ง ๋์ grunt๋ฅผ ํตํด ์ฝ๋๋ฅผ ๊ฒ์ํ์ผ๋ฉฐ ๋งค๋ ฅ์ฒ๋ผ ์๋ํฉ๋๋ค. ์๋ํ๋ ํ์์ ๋๋ค ;)
๊ทธ๊ฒ์ ๋ฃ๊ณ ๊ธฐ๋ป!
2015๋ 9์ 8์ผ ํ์์ผ ์คํ 3์ 14๋ถ์ Treyone [email protected]์์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
ํ , ์๋ ํจํค์ง ๋์ grunt๋ฅผ ํตํด ์ฝ๋๋ฅผ ๊ฒ์ํ์ผ๋ฉฐ ๋งค๋ ฅ์ฒ๋ผ ์๋ํฉ๋๋ค. ์๋ํ๋ ํ์์ ๋๋ค ;)
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/socketio/socket.io/issues/1846#issuecomment -138572724
๋ด ํ๋ฃจ๋ฅผ ์ ์ฅ!
์ฐ๋ฆฌ๋ ์ด ๊ธฐ๋ณธ์ ์ธ ๋ฌธ์ ๋ ๋ณด์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก SocketIO๋ ์น ์์ผ ์ฐ๊ฒฐ์ ์ค์ ํ๊ธฐ ์ํด ๋ ๊ฐ์ ์์ฒญ์ ๋ณด๋ด๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ํธ์ถ์ด ์ธ์คํด์ค ๊ฐ์ ์ฐํฉ๋๋ฉด ์ธ์ ID๊ฐ ์ธ์๋์ง ์๊ณ ํธ๋์ ฐ์ดํฌ๊ฐ ์คํจํ์ฌ SocketIO๊ฐ ๊ธด ํด๋ง์ผ๋ก ๋๋์๊ฐ๋๋ค. ์ด๊ฒ์ ws ๋๋ wss๋ฅผ ์ฌ์ฉํ๋์ง ์ฌ๋ถ์ ๊ด๊ณ์์ด ์ฌ์ค์ ๋๋ค. ์น ์์ผ๊ณผ ์๋ํ๋๋ก ๋ ์ด์ด 7(HTTP) ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ๊ฐ์ ธ์ฌ ์ ์์ผ๋ฏ๋ก ๋ ์ด์ด 4(TCP)์์ ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ์ค์ ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
์์ ์ฌํญ์ ๊ณ ์ ์ธ์ ์ ํ์ฑํํ์ฌ ํธ์ถ์ด ์ธ์คํด์ค๋ก ๋์ด๊ฐ๋ฉด ๋ก๋ ๋ฐธ๋ฐ์๊ฐ ๊ณ์ํด์ ํด๋น ์์ฒญ์ ๋์ผํ ์ธ์คํด์ค๋ก ๋ณด๋ด๋๋ก ํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ AWS์ ELB๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ ์ด์ด 4 ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ๊ณ ์ ์ธ์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ๊ฒฐ๊ตญ ํ ๊ฒ์ SocketIO๊ฐ ์๋ ์์ ์น ์์ผ์ ์ฌ์ฉํ๋ ๊ฒ์ด์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ํธ์ถ ๊ฐ์ ์ง์๋์ด์ผ ํ๋ ์ธ์ ๋ฐ์ดํฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋๋ค(๋จ ํ ๋ฒ์ ํธ์ถ, ํธ๋์ ฐ์ดํฌ๊ฐ ๋ฐ์ํ๊ณ ์๋ํจ).
AWS ์ธก์ ์์ ์ฌํญ์ ๊ณ ์ ์ธ์ ์ด ๋ ์ด์ด 4 ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ์ด๋ค ๋ฐฉ์์ผ๋ก๋ ์ฌ์ฉ๋ ์ ์๋๋ก ํ๋ ๊ฒ์ ๋๋ค.
SocketIO ์ธก์ ์์ ์ฌํญ์ websocket ํธ๋์ ฐ์ดํฌ๊ฐ ์ด์ sessionID์ ์ปจํ ์คํธ๋ฅผ ํ์๋ก ํ์ง ์๋๋ก ๋ง๋๋ ๊ฒ์ ๋๋ค. ์ฐ๊ฒฐ ์ข ๋ฃ ์ ์ ์ํ๊ฒ ์ฌ์ฐ๊ฒฐ, ํด๋ผ์ด์ธํธ๊ฐ ์ฐ๊ฒฐ์ด ๋์ด์ก๋ค๊ณ ํ๋จํ๋ฉด ์ฐ๊ฒฐ์ด ์ด๋ฏธ ์กด์ฌํ๋ค๊ณ ๋ฏฟ์๊ธฐ ๋๋ฌธ์ ๋ฐฑ์๋๊ฐ ํธ๋์ ฐ์ดํฌ๋ฅผ ๊ฑฐ๋ถํ๋๋ก ํ๋ ๋์ ์ ์ธ์ ์ ์์ฑํ๊ณ ์ฑ๊ณต์ ์ผ๋ก ๋ค์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
์ ์ฌ์ ์์ ์ Redis๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ์ธ์คํด์ค์์ ์ธ์ ์ํ๋ฅผ ์ ์งํ๋ ๊ฒ์ ๋๋ค. ๋๋ ์ด๊ฒ์ ํ ์คํธํ์ง ์์๋ค.
๋ถํ๊ฐ ํ์ฉํ๋ ๊ฒฝ์ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๊ฐ์ฉ์ฑ ์์ญ๋น ๋จ์ผ ๋ ธ๋ ์ธ์คํด์ค๋ง ํ์ธํ๊ณ ์์ญ ๊ฐ ๋ถํ ๋ถ์ฐ์ ๋นํ์ฑํํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ ๊ฒ ํ๋ฉด ๋ชจ๋ ํธ์ถ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ๋จ์ผ ๋ ธ๋๋ก ์ค์ ๋์ด ์ด ๋ฌธ์ ๋ฅผ ํผํ ์ ์์ต๋๋ค.
@aidanbon Proxy server to be "none" in the Software Configuration section
์ฐพ์ ์ ์์ต๋๊น?
๋๋ ๋จ์ํ ์ฐ๋ถํฌ ์๋ฒ์ mup ๋ฐฐํฌ์ ํจ๊ป MeteorJS๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๋งํฌ๋ฅผ ์ฃผ์๊ฒ ์ต๋๊น ??
๊ฑด๋ฐฐ
@sahanDissanayake ๋ค์์ ํตํด ํ๋ก์ ์๋ฒ ๊ตฌ์ฑ ์ต์ ์ ์ฐพ์์ต๋๋ค.
์ฐธ๊ณ : ๋ด ํ๊ฒฝ์ ๊ฑฐ์ 1๋ ์ ์ ํ๋ก๋น์ ๋๋์์ต๋๋ค. AWS ํจ๋์ด ์ต์ ํ๊ฒฝ์ ๋ง๊ฒ ์ ๋ฐ์ดํธ๋์๋์ง ํ์คํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ค๋๋ ์๋ ๋ด ํ๊ฒฝ์์ ์ด ๋๋กญ๋ค์ด์ ๋ณผ ์ ์์ต๋๋ค.
@aidanbon ๋๋ ec2.. ์ด์ธ์ ๋ค๋ฅธ ์๋น์ค๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฏ๋ก ์ค์ ์ด ๋์ ๊ด๋ จ์ด ์์ต๋๊น? ์๋๋ฉด ์ด poxy ์๋ฒ๋ฅผ ์ฌ์ฉํ๊ธฐ ์์ํด์ผ ํฉ๋๊น?
๊ทธ๋์ ๋ด๊ฐ ๊ฐ์ง ๋ฌธ์ ๋ ๋ด ์น ์ฑ ์น ์์ผ์ด ํฌํธ 8080์์ ์๋ํ์ง๋ง ํฌํธ 80์์๋ ์๋ํ์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค.
์ด๊ฒ์ด ๋ฌธ์ ๋ค
@lostcolony ์์ฝ ๊ฐ์ฌํฉ๋๋ค. ๋๋ ๊ฐ์ ๊ฒฐ๋ก ์ ๋๋ฌํ๋ค. ์ด ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ์ฝ์์ต๋๊น? https://medium.com/@Philmod/load -balancing-websockets-on-ec2-1da94584a5e9#.hd2ectz8t? ๊ทธ๋ ๋ณธ์ง์ ์ผ๋ก ๋ ์ด์ด 4(TCP)๋ฅผ HAProxy ์ธ์คํด์ค๋ก ์ ๋ฌํ ์ ์๋ค๊ณ ๋งํ๊ณ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด HAProxy ์ธ์คํด์ค๋ PROXY ํค๋๋ฅผ ์ ๊ฑฐํ๊ณ ๊ณ ์ ์ธ์ ์ ์ฌ์ฉํ์ฌ ํธ๋ํฝ์ ์ฌ๋ฐ๋ฅธ ์ธ์คํด์ค๋ก ๋ผ์ฐํ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ HAProxy๊ฐ "๋ฐฑ์๋" ์๋ฒ ๋ชฉ๋ก์ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ๊ณผ ์คํ ์์น ๋ฐ ์ค์ socket.io ์๋ฒ๊ฐ ์คํ๋๋ ์์น๋ ๋ถ๋ช ํ์ง ์์ต๋๋ค. ๋น์ ์ ๊ทธ๊ฒ์ ์ดํดํ ์ ์์ต๋๊น?
ํธ์ง: ๋๋ ์ง๊ธ ํด๋ฆญํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ ์๋ ค์ง ์๋ฒ ์ธํธ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ ์๋ ํฌ๊ธฐ ์กฐ์ ์ ๋ํด ์ ๊ฒฝ ์ฐ์ง ์๊ธฐ ๋๋ฌธ์ ๋ชฉ๋ก์ ์๊ณ ์์ต๋๋ค...
์๋ฒ ๋ชฉ๋ก์ ๊ฐ HAproxy ์์์ ๊ตฌ์ฑ๋ฉ๋๋ค. ์ ๋ชจ๋ฅด๊ฒ ์ด
์ผ๋ถ๋ฅผ ์์ฑํ์ง ์๋ ํ Auto Scaling ec2 ์ธ์คํด์ค์์ ์๋ํ๋๋ก ํ๋ ค๋ฉด
์ ์๋ฒ๊ฐ ์์ ๋ ํด๋น ๋ชฉ๋ก์ ์
๋ฐ์ดํธํ๊ธฐ ์ํ ์ถ๊ฐ ์ธํ๋ผ
์จ๋ผ์ธ. Socket.io ๊ทธ๋ค์ ์น ์ฑ๊ณผ ๋์ผํ ์๋ฒ์์ ์คํ ์ค์ด๋ฏ๋ก
Elb๋ฅผ ํตํด ๋ค์ด์ค๋ ์ฐ๊ฒฐ์ HAproxy ์ธ์คํด์ค์ ์ฐํฉ๋ฉ๋๋ค.
HAproxy ์ธ์คํด์ค๋ IP ์ฐ๊ฒฐ์ด ํญ์ ๋์ผํ ์์น๋ก ์ด๋ํ๋๋ก ํฉ๋๋ค.
socket.io๊ฐ ์ค์ ๋ ์น/์ฑ ์๋ฒ์
๋๋ค.
2016๋
1์ 13์ผ ์ค์ 2์ 50๋ถ์ "Felix Schlitter" [email protected]์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
@lostcolony https://github.com/lostcolony ์์ฝ ๊ฐ์ฌํฉ๋๋ค. ๋
๊ฐ์ ๊ฒฐ๋ก ์ ๋๋ฌํ์ต๋๋ค. ์ด ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ์ฝ์์ต๋๊น?
https://medium.com/@Philmod/load -balancing-websockets-on-ec2-1da94584a5e9#.hd2ectz8t?
๊ทธ๋ ๋ณธ์ง์ ์ผ๋ก ๋ ์ด์ด 4(TCP)๋ฅผ
HAProxy ์ธ์คํด์ค๋ PROXY ํค๋๋ฅผ ์ ๊ฑฐํ๊ณ
๊ณ ์ ์ธ์ ์ ์ฌ์ฉํ์ฌ ์ฌ๋ฐ๋ฅธ ์ธ์คํด์ค๋ก ํธ๋ํฝ์ ์ ์กํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๋ ์ง ์๋ค
๋ HAProxy๊ฐ "๋ฐฑ์๋" ์๋ฒ ๋ชฉ๋ก์ ์ป๋ ๋ฐฉ๋ฒ์ด ๋ถ๋ช ํฉ๋๋ค.
๊ตฌ์ฑ๋๊ณ ์คํ๋๋ ์์น์ ์ค์ socket.io ์๋ฒ๊ฐ ์คํ๋๋ ์์น.
๋น์ ์ ๊ทธ๊ฒ์ ์ดํดํ ์ ์์ต๋๊น?โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/socketio/socket.io/issues/1846#issuecomment -171208211
.
@lostcolony ์ข์์, . ๋ด๊ฐ ์ป์ง ๋ชปํ๋ ๊ฒ์ HAProxy ์์์ ELB๋ฅผ ์ฌ์ฉํ๋ ์ด์ ์ ๋๋ค. HAProxy ์ธ์คํด์ค๋ ํ๋๋ง ์์ด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ELB๊ฐ ์ฌ๋ฐ๋ฅธ HAProxy ์ธ์คํด์ค๋ก ํธ๋ํฝ์ ์ ์กํ๋ค๊ณ ์ด๋ป๊ฒ ๋ณด์ฅํ ์ ์์ต๋๊น? ๊ทธ๋ค(HAProxy ์ธ์คํด์ค)์ด ElastiCache ๋๋ Redis ๋๋ ์ด๋ฌํ ๋ผ์ธ์ ๋ฐ๋ผ ๋ฌด์ธ๊ฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ป๊ฒ๋ ๊ณตํต ๊ณ ์ ํ ์ด๋ธ์ ๊ณต์ ํ์ง ์๋ ํ? ... ์ฐ๋ฆฌ๊ฐ ์ฃผ์ ์์ _way_ ๊ฐ๊ณ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค.
IP๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฐ๊ฒฐ์ ๋ผ์ฐํ
ํ๋๋ก ๊ตฌ์ฑ๋ HAProxies๊ฐ ์๋ ๊ฒฝ์ฐ
๊ฐ์ ์ธ์คํด์ค์์ ๋๋ ๊ฒ์ด๋ผ๊ณ ๋ณด์ฅํ ์ ์์ต๋๋ค. ์ฆ, HAProxies๊ฐ
๋ชจ๋ ip ABCD๊ฐ ์ธ์คํด์ค 1๋ก ์ฐ๊ฒฐ๋๋ค๋ ๋์ผํ ๊ท์น์ ๊ฐ์ก์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ ์ด๋ค HAProxy๊ฐ ELB ํํธ์ ๊ด๊ณ์์ด ๋์ผํ๊ฒ ์ข
๋ฃ๋ฉ๋๋ค.
์ฅ์. ๊ทธ๊ฒ์ด ๋น์ ์ด ๋ณด๋ธ ๋งํฌ์์ ์ผ์ด๋๋ ์ผ์
๋๋ค. ๊ท ํ์ ์ก๊ณ ์์ต๋๋ค.
์์ค๋ฅผ ํตํด, ์ฆ HAProxy ์ธ์คํด์ค๊ฐ IP๋ฅผ ํด์ํ๊ณ ์ด๋ฅผ ์ฌ์ฉํ์ฌ
์ด๋ค ์ธ์คํด์ค๋ก ์ด๋ํ๋์ง ๊ฒฐ์ ํฉ๋๋ค. ์ฌ๋ฌ HAProxies(๋ชจ๋ ์ ๊ณต๋จ)
๋์ผํ ์ธ์คํด์ค์ ๋ํด ์๊ณ ์์ผ๋ฏ๋ก ํ ์์น์์ ๋ค์์ผ๋ก ํธ๋ํฝ์ ๋ณด๋
๋๋ค.
๋์ผํ ๋ฐฑ์๋ ์ธ์คํด์ค.
2016๋
1์ 13์ผ ์์์ผ ์คํ 1:19, Felix Schlitter [email protected]
์ผ๋ค:
@lostcolony https://github.com/lostcolony ์ข์ต๋๋ค .
HAProxy๋ฅผ ์ฌ์ฉํ์ฌ Amazon์ ์๋ ํฌ๊ธฐ ์กฐ์ ๊ณผ ๊ด๋ จ๋ ํฅ๋ฏธ๋ก์ด ํ๋ก์ ํธ -
์ต์ํ ์ฐธ์กฐ์ฉ์ผ๋ก ์ ์ฉํฉ๋๋ค.
https://github.com/markcaudill/haproxy-autoscale. ๋ด๊ฐ ์ดํดํ์ง ๋ชปํ๋ ์ด์ ๋
HAProxy ์์์ ELB๋ฅผ ์ฌ์ฉํ์๊ฒ ์ต๋๊น? HAProxy ์ธ์คํด์ค๋ ํ๋๋ง ์์ด์ผ ํฉ๋๋ค.
๊ทธ๋ ์ง ์์ผ๋ฉด ELB๊ฐ ํธ๋ํฝ์ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ณด๋ด๋ ๊ฒ์ ์ด๋ป๊ฒ ๋ณด์ฅํ ์ ์์ต๋๊น?
HAProxy ์ธ์คํด์ค? ๊ทธ๊ฒ๋ค(HAProxy ์ธ์คํด์ค)์ด ๊ณตํต
์ด๋ป๊ฒ ๋ ElastiCache ๋๋ Redis ๋๋ ๊ทธ์ ํจ๊ป ๋ฌด์ธ๊ฐ๋ฅผ ์ฌ์ฉํ๋ ๊ณ ์ ํ ์ด๋ธ
์ค๊ณฝ? ... ์ฐ๋ฆฌ๊ฐ ์ฃผ์ ์์ _way_ ๊ฐ๊ณ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค.โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/socketio/socket.io/issues/1846#issuecomment -171386260
.
@lostcolony ํด์๊ฐ ์ฃผ์ด์ง IP์ ๋ํด ๊ฒฐ์ ์ ์ผ๋ก ํ์๋๋ค๋ ๊ฒ์ ์ดํดํ์ง๋ง "ํด์ -> ์ธ์คํด์ค"์ ๋งคํ์ด ์์ด์ผ ํฉ๋๋ค. ๊ทํ์ ๊ฒฝ์ฐ "ABCD๋ ์ธ์คํด์ค 1๋ก ์ง์ ๋ฉ๋๋ค"๋ผ๋ ๊ท์น์ด ์์ง๋ง ์ฌ์ฉ ๊ฐ๋ฅํ ์๋ฒ ๋ชฉ๋ก์ด ์ฃผ์ด์ง๋ฉด HAProxy๊ฐ ๋ฆฌ๋๋ ์ ํ ์์น๋ฅผ ์ค์ค๋ก ๊ฒฐ์ ํ๋ ๊ฒ์ ์ํ์ง ์์ต๋๊น? ๊ฒฐ๊ตญ "ABCD"๋ ์ผ๋ถ ํด๋ผ์ด์ธํธ์ IP์ผ ๋ฟ์ด๋ฉฐ ์ฌ์ ์ ์๋ ค์ง์ง ์์์ต๋๋ค.
ํด์๋ฅผ ์ธ์คํด์ค์ ๋งคํํ๋ ๊ท์น์ ๋ชจ๋ HAProxy์์ ๋์ผํฉ๋๋ค.
์ธ์คํด์ค. ์ฆ, ABCD๋ ๊ฒฐ๊ณผ์ ๊ด๊ณ์์ด ๋์ผํ ํด์๋ฅผ ์์ฑํฉ๋๋ค.
์ ์คํ๋ HAProxy ์ธ์คํด์ค ๋ฐ ํด๋น ํด์๋ ๋์ผํ ์๋ฒ์ ๋งคํ๋ฉ๋๋ค.
๋ชจ๋ HAProxy๊ฐ ์๊ณ ์๋ ๊ฒฝ์ฐ ์ฌ์ฉ ์ค์ธ HAProxy ์ธ์คํด์ค ๋ฌธ์
๊ฐ์ ์ธ์คํด์ค(๊ทธ๋ฆฌ๊ณ ์๋ง๋ ๊ฐ์ ์์/๊ฐ์ ์ด๋ฆ์ผ๋ก). ๊ทธ๋งํผ
์ค์ IP๋ ์ค์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฏธ๋ฆฌ ์ ํ์๊ฐ ์์ต๋๋ค.
๋ชจ๋ IP๋ ์ ๋ฌํ๋ HAProxy์ ๊ด๊ณ์์ด ๋์ผํ ์๋ฒ๋ก ํด์๋ฉ๋๋ค.
์ ํตํด.
์์ ํ ์์กฐ๋ ์์ ๊ฒฝ์ฐ(HAProxy๋ ๊ทธ๋ ์ง ์์ ๊ฒ์ ์ฌ์ฉํฉ๋๋ค.
์์ธก ๊ฐ๋ฅ, ํ์ ํฉ๋๋ค), 3๊ฐ์ ์๋ฒ๊ฐ ์๋ค๊ณ ์์ํด ๋ณด์ญ์์ค.
server0, server1, serve2์ ์์๋ก (์ค์ ์ธ๋ถ ์ฌํญ์ ์ค์ํ์ง ์์ต๋๋ค.
๋ช
ํํ ์์๊ฐ ์๋ค๋ ๊ฒ๋ง์ผ๋ก ์์์ ์ด๋ฉด ๊ด์ฐฎ์ต๋๋ค). ๋ชจ๋ HAProxy
์ธ์คํด์ค์๋ ๋์ผํ ์์๋ก ๋์ผํ ์๋ฒ๊ฐ ์์ต๋๋ค. ๊ทธ๋ค๋ ๊ฐ์
๋ค์ด์ค๋ IP ์ฃผ์๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ท์น์
๋๋ค. ์ด ์ง๋ถํ ์์ ๊ฒฝ์ฐ,
์ฃผ์์ ๋ค ๋ถ๋ถ์ ๋ชจ๋ ์ ์๋ก ๋ํฉ๋๋ค(์ฝ๊ฒ ํ์ฅ ๊ฐ๋ฅ
IPv6 ์ง์, ๋ชจ๋ 16์ง์๋ก 10์ง๋ฒ์ผ๋ก ํฉ์ฐ), 3์ผ๋ก ๋๋๊ธฐ
๋๋จธ์ง. ๋ฐ๋ผ์ IP 123.12.61.24 = (123+12+61+24) % 3 ๋๋ 1์
๋๋ค. ๋ฐ๋ผ์ ๋ผ์ฐํ
๋ฉ๋๋ค.
server1์. ๋ฐ๋ผ์ ์ด๋ค HAProxy ์ธ์คํด์ค๊ฐ ๋ค์ด์ค๋๋ผ๋
์ฐ๊ฒฐ์ server1๋ก ์ ์ก๋ฉ๋๋ค.
์ด์ server1์ด ์คํ๋ผ์ธ์ด ๋๋ฉด ์๊ณ ๋ฆฌ์ฆ์ด ๋ชจ๋ HAProxy์์ ๋ณ๊ฒฝ๋ฉ๋๋ค.
๋ชจ๋ ๋ถ๋ถ์ ์ถ๊ฐํ๋ ค๋ฉด ๋ชจ๋๋ฌ์ค 2.
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก netsplit์ ์ป์ง ์๋ ํ ์๋ํฉ๋๋ค.
HAProxy ์ธ์คํด์ค๋ ๋ค๋ฅธ ์๋ฒ ๋ชฉ๋ก์ ๊ฐ์ต๋๋ค). ํ๋์ HAProxy๊ฐ ๋ณด๋ ์์น
3๊ฐ์ ์ธ์คํด์ค, ๋ค๋ฅธ ํ๋๋ 2๊ฐ์ ์ธ์คํด์ค๋ฅผ ๋ด
๋๋ค. ๊ทธ๋ฐ ์ผ์ด ๋ฐ์ํ๋ฉด ๋ณด์ฅํ ์ ์์ต๋๋ค.
๋์ผํ ๋ฐฑ์๋์ ๋๋ฌํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ค์ ๋ก ๊ทธ๊ฒ์ ๋ฌธ์ ๊ฐ ๋ ์ ์์ต๋๋ค. ํ์ง๋ง
๊ทธ๊ฒ์ด ๋งํฌ์์ ์ค๋ช
ํ๋ ์๋ฃจ์
์
๋๋ค.
2016๋
1์ 13์ผ ์์์ผ ์คํ 3์ 51๋ถ, Felix Schlitter [email protected]
์ผ๋ค:
@lostcolony https://github.com/lostcolony ํด์๊ฐ
์ฃผ์ด์ง IP์ ๋ํด ๊ฒฐ์ ์ ์ผ๋ก ํ์๋์ง๋ง ๋งคํ์ด ์์ด์ผ ํฉ๋๋ค.
"ํด์ -> ์ธ์คํด์ค". ๊ทํ์ ๊ฒฝ์ฐ์๋ ๋ค์๊ณผ ๊ฐ์ ๊ท์น์ด ์๋ค๊ณ ๋งํฉ๋๋ค.
"ABCD๋ ์ธ์คํด์ค 1๋ก ์ฐ๊ฒฐ๋ฉ๋๋ค"๋ผ๊ณ ๋งํ์ง๋ง ์ํ์ง ์์ต๋๊น?
HAProxy๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชฉ๋ก์ด ์ฃผ์ด์ง๋ฉด ๋ฆฌ๋๋ ์ ํ ์์น๋ฅผ ์ค์ค๋ก ๊ฒฐ์ ํฉ๋๋ค.
์๋ฒ? ๊ฒฐ๊ตญ "ABCD"๋ ์ผ๋ถ ํด๋ผ์ด์ธํธ์ IP์ผ ๋ฟ์ด๊ณ ์๋ ค์ง์ง ์์์ต๋๋ค.
์.โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/socketio/socket.io/issues/1846#issuecomment -171428465
.
Elastic Beanstalk์์ ์น ์ธํฐํ์ด์ค์์ TCP ๋ฐ SSL์ ์ฌ์ฉํ๋๋ก ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ์ค์ ํ๋๋ฐ๋ ๋ก๋ ๋ฐธ๋ฐ์ ๊ตฌ์ฑ์ ์ง์ ํ์ธํ์ ๋ ๋ณด์ ๋ฆฌ์ค๋์ ๋ํด ์ฌ์ ํ HTTPS๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ ๊ฒ์ ์์์ต๋๋ค. ๋ฐ๋ผ์ EC2 > ๋ก๋ ๋ฐธ๋ฐ์ ์น์ ์์ ํฌํธ๊ฐ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ๋์ด ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
์ ๋ ฌ๋๋ฉด .ebextensions์ ๋ค์์ ์ถ๊ฐํ๋ฉด ๋ชจ๋ ์ ์๋ํฉ๋๋ค. :)
container_commands:
01_nginx_static:
command: |
sed -i '/\s*proxy_set_header\s*Connection/c \
proxy_set_header Upgrade $http_upgrade;\
proxy_set_header Connection "upgrade";\
' /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf
๊ทธ๋ฌ๋ ๊ณ ์ ์ธ์ ์ง์์ด TCP๋ฅผ ํตํด ์๋ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ธ์คํด์ค๊ฐ ํ๋๋ง ์๋ ๊ฒฝ์ฐ์๋ง 100% ์๋ํฉ๋๋ค.
@lostcolony , @williamcoates ๊ฒ์๋ฌผ์ ์ง๊ธ ์ค๋ช ๊ฐ์ฌํฉ๋๋ค. ๋ด๊ฐ ๊ทธ๊ฒ์ ํ๋ ๊ฒ์ ์์๋ค๋ ๊ฒ์ ๋ฏฟ์ ์ ์๋ค. ๊ทํ์ ์ค๋ช ์ด ํฐ ๋์์ด ๋์์ต๋๋ค. ์๊ฐ ๋ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
๊ทธ๋์ ๋๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์๊ณ HTTPS๋ฅผ ์ฌ์ฉํ๋๋ก ECB๋ฅผ ์ค์ ํ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค.
HTTPS๋ฅผ SSL๋ก ๋ณ๊ฒฝํ๋๋ฐ ๋ ์ด์ ๋ฉ์์ง๊ฐ ํ์๋์ง ์์ต๋๋ค.
๋ฐ๋ผ์ HTTP/HTTPS๊ฐ ์๋ TCP/SSL์ ์ฌ์ฉํ์ญ์์ค.
2016๋ 8์๋ถํฐ "ํด๋์" ELB ๋์ Amazon์ ALB(Application Load Balancer)๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. HTTP 80 ๋ฐ HTTPS 443์ ๋ฆฌ์ค๋์ ํจ๊ป "์ฆ์" ์์ ํ์ต๋๋ค.
@trans1t ์ค์๋งจ, ์ ๋ณด ๊ฐ์ฌํฉ๋๋ค! ๋๋ ๊ทธ๊ฒ์ ํ์ธํด์ผ ํ ๊ฒ์ ๋๋ค.
@niczak - ๋ํ ์์ผ ํธ๋ํฝ ๊ณ ์ ์ ์ํด ALB๋ก ์ ํํ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ์ฒ์์ ALB ๊ณ ์ ์ธ์ ๊ตฌ์ฑ์ ์ด๋ ค์์ ๊ฒช์์ต๋๋ค(์ด ์ฃผ์ ์ ๋ํ ๋ฌธ์๊ฐ ๋๋ฌด ๋ง์ง ์์๊ธฐ ๋๋ฌธ์ ์ต์ ๋ช ๋ฌ ์ ์๋). ๋ง์นจ๋ด ๊ทธ๊ฒ์ ์์ ๋์ต๋๋ค. ํต์ฌ์ "๊ณ ์ ์ฑ์ ๋์ ๊ทธ๋ฃน ์์ค์์ ์ ์๋จ"์ด๋ฏ๋ก ํธ๋ํฝ์ ์ ๊ณตํ ๋์ ๊ทธ๋ฃน์ ๋ง๋ ๋ค์ ๊ณ ์ ์ฑ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
@aidanbon ํ์์ ์ธ ์ ๋ณด์ ๋๋ค. ๊ณต์ ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
AWS Application Load Balancer์ ์ฌ์ ํ ๋ฌธ์ ๊ฐ ์๋ ์ฌ๋์ ์ํด ๋ณด์ ์ ์ฑ ์ ์ ๋ฐ์ดํธํด ๋ณด์ญ์์ค. ๋ค๋ฅธ ์น ์ฌ์ดํธ์ ์ ํํ ์ค์ ์์๋ ์๋ฒฝํ๊ฒ ์๋ํ์ง๋ง ๋ณด์ ์ ์ฑ ์ด ์ฝ 1๋ ๋ค์ณ์ ธ ์์์๋ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ์ต์ ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ ๊ฒ ๊ฐ์ต๋๋ค.
@michaelmitchell ์๋ฌด๊ฑฐ๋ ๋ณ๊ฒฝ
๋ด ์ ํ๋ฆฌ์ผ์ด์ ์์ ์๋ฌด ๊ฒ๋ ๋ณ๊ฒฝํ์ง ์์์ต๋๋ค. ๋ด๊ฐ ์ทจํ ์ ์ผํ ์ถ๊ฐ ๋จ๊ณ๋ ์ ์ ์ฑ ์ผ๋ก ๋ณ๊ฒฝํ ํ ์๋ํ์ง ์๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ๊ธฐ ๋๋ฌธ์ ALB์์ HTTPS ๋ฆฌ์ค๋๋ฅผ ์ ๊ฑฐํ๋ค๊ฐ ๋ค์ ์ถ๊ฐํ๋ ๊ฒ์ด์์ต๋๋ค.
๊ทธ๋ฌ๋ ๋ณด์ ์ ์ฑ ์ ์ ๋ฐ์ดํธํ ํ์๋ ์ค๋ฅ๊ฐ ํ์๋๋ ๊ฒ์ ๋ด ๋ธ๋ผ์ฐ์ ์ธ์ ์ด ์ด์ ๋ณด์ ์ ์ฑ ์ ์ ์งํ๊ณ ์์ ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ ๊ฒ์ ๋ฐฐ์ ์ผ๋ฏ๋ก ๋ฆฌ์ค๋๋ฅผ ์ถ๊ฐ/๋ค์ ์ถ๊ฐํ๋ ๊ฒ์ด ์ค์ ๋ก ํ์ํ์ง ํ์คํ์ง ์์ง๋ง ์ํฌ๋ฆฟ ๋ชจ๋๋ฅผ ์ฌ๋ ๊ฒ์ ์ ์๋ํ๊ณ ๊ทธ ํ์ ๋ด ๋ชจ๋ ํฌ๋กฌ ์ธ์ ์ ๋ซ๊ณ ๋ค์ ์ด๋ฉด ์ ๋๋ก ์๋ํ์ผ๋ฉฐ ๊ทธ ์ดํ๋ก ๋ณด์ง ๋ชปํ์ต๋๋ค.
์ข์ ์ ๋ณด ๊ฐ์ฌํฉ๋๋ค!
๋ฅด ๋ฒค. 2017๋
3์ 31์ผ ร 12:02, Michael Mitchell [email protected] a
์ํฌ๋ฆฌํธ :
๋ด ์์ฉ ํ๋ก๊ทธ๋จ์์ ์๋ฌด๊ฒ๋ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ด๊ฐ ํ ์ ์ผํ ์ถ๊ฐ ๋จ๊ณ
๋ค์๊ณผ ๊ฐ์ด ALB์์ HTTPS ๋ฆฌ์ค๋๋ฅผ ์ ๊ฑฐํ๊ณ ๋ค์ ์ถ๊ฐํ์ต๋๋ค.
์ ์ ์ฑ ์ผ๋ก ๋ณ๊ฒฝํด๋ ์๋ํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.๊ทธ๋ฌ๋ ๋ณด์์ ์ ๋ฐ์ดํธํ ํ์๋ ์ค๋ฅ๊ฐ ํ์๋๋ค๋ ๊ฒ์ ๋ฐฐ์ ์ต๋๋ค.
์ ์ฑ ์ ์ด์ ๋ณด์ ์ ์ฑ ์ ์ ์งํ๋ ๋ด ๋ธ๋ผ์ฐ์ ์ธ์ ์ผ ๊ฐ๋ฅ์ฑ์ด ํฝ๋๋ค.
๊ทธ๋์ ๋ฆฌ์ค๋๋ฅผ ์ถ๊ฐ/์ฌ์ถ๊ฐํ๋ ๊ฒ์ด ์ ๋ง๋ก ํ์ํ์ง ํ์คํ์ง ์์ง๋ง,
์ํฌ๋ฆฟ์ ์ฌ๋ ๊ฒ์ ์ ์๋ํ๊ณ ๋ชจ๋ ํฌ๋กฌ ์ธ์ ์ ๋ซ์ ํ์
๋ค์ ์ด๋ฉด ์ ์๋ํ๊ณ ๊ทธ ์ดํ๋ก ๋ณด์ง ๋ชปํ์ต๋๋ค.โ
๋น์ ์ด ๋๊ธ์ ๋ฌ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/socketio/socket.io/issues/1846#issuecomment-290672158 ,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/ADrIi_SXqccWOLUMIWF1IhClGXvKAGMcks5rrM8sgaJpZM4C0swP
.
์ด ์ค๋ ๋๊ฐ AWS/socket.io์ ๋ฌธ์ ๋ฅผ ํ์ ํ๋ ์ฅ์๊ฐ ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ด ์ค์ ์ ํด๋ผ์ด์ธํธ๊ฐ socket.io ์ฐ๊ฒฐ์ ๋ํ ๋ฐ์ดํฐ๋ก HTTPS ์์ฒญ์ ํ๋ค๋ ๊ฒ์
๋๋ค.
HTTPS ์์ฒญ์ ๊ณ ์ ์ธ์
์ ํ์ํ ์ฟ ํค๋ก ์๋ตํด์ผ ํฉ๋๋ค. ๋ฌธ์ ๋ socket.io ์ฐ๊ฒฐ์์ cookie
ํค๋๋ฅผ ์ ๋ฌํ ์ ์๋ค๋ ๊ฒ์
๋๋ค.
๋ค์ ๋ฆฌ์ค๋์ ํจ๊ป ALB๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์ฑ๋ ๊ณ ์ ์ฑ์ ๊ฐ์ง ๋์ ๊ทธ๋ฃน์ ๊ฐ๋ฆฌํต๋๋ค.
๋ค์์ ์ฌ์ฉํ์ฌ ๋จผ์ HTTPS ๋์ ์ ๋๋ฌํ์ต๋๋ค.
fetch(`https://${url}/hub/api/spinup/${uuid}`, {
method: 'GET',
headers: headers,
})
๊ทธ๋ฐ ๋ค์ ์์ผ์ ์ด๊ธฐํํ์ญ์์ค.
connection = io(`wss://${url}:443/`, {
path: `/user/${uuid}/spawn`,
})
HTTPS ์์ฒญ์ด ์ ์คํ๋ ์ธ์คํด์ค๋ _๋ฐ๋์_ ์์ผ ์ฐ๊ฒฐ์ด ์ ์คํ๋ ์ธ์คํด์ค์ฌ์ผ ํฉ๋๋ค.
์์ผ์ด ์ค์ ๋๋ฉด(์ด์ด ์ข์ง ์์ ์ฌ๋ฐ๋ฅธ ์ธ์คํด์ค์ ๋๋ฌํ๋ ๊ฒฝ์ฐ) ๊ทธ๊ณณ์ ๋จธ๋ฌผ๊ณ ๋ชจ๋ ๊ฒ์ด ์ ์๋ํ์ง๋ง ๋ฌธ์ ๋ ์น ์์ผ์ด HTTPS ์์ฒญ๊ณผ ๋์ผํ ์๋ํฌ์ธํธ์ ๋๋ฌํ๋๋ก ํ๋ ๊ฒ์ ๋๋ค.
๋ด ์ฒซ ๋ฒ์งธ ๋ณธ๋ฅ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
connection = io(`wss://${url}:443/`, {
path: `/user/${uuid}/spawn`,
extraHeaders: {
cookie: cookieValueFromFetchResponse
}
})
์ด๊ฒ์ node
์์ ์๋ํ์ง๋ง ๋ธ๋ผ์ฐ์ ์์ cookie
๋ XMLHTTPRequests์์ ๊ธ์ง๋ ํค๋์ด๋ฏ๋ก ํจ๊ป ๋ณด๋ผ ์ ์์ต๋๋ค.
๋น์ทํ ์ผ์ ํ ์ฌ๋์ด ์์ต๋๊น?
๋น์ทํ ์์ ์ ํ์ง ์์์ง๋ง ALB์๋ ์ฌ์ ํ ํค๋ ๊ธฐ๋ฐ ๋ผ์ฐํ ์ด ์์ง๋ง ํธ์คํธ ๊ธฐ๋ฐ ๋ผ์ฐํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ๋งค์ฐ ํดํน์ ์ด์ง๋ง ๊ธฐ๋ณธ์ ์ผ๋ก ALB ๋ค์ ๊ฐ ์ธ์คํด์ค๊ฐ ํด๋น ์ธ์คํด์ค์ ๋ํด ์๊ณ ์๋ ๋ช ์์ ๊ฒฝ๋ก๋ฅผ ๊ฐ๋๋ก ๋ง๋ค ์ ์์ต๋๋ค. ์ด๊ธฐ HTTP ์์ฒญ์ด ๋๊ฐ๋ฉด ์๋ต์ ์ผ๋ถ์ ๊ฒฝ๋ก๊ฐ ํฌํจ๋๊ณ ์น ์์ผ์ ๋ํ ์ฐ๊ฒฐ์๋ ํด๋น ๊ฒฝ๋ก๊ฐ ํฌํจ๋ฉ๋๋ค. ์ฆ, HTTP ์์ฒญ์ ์ธ์คํด์ค '5'์ ๋๋ฌํ๊ณ (์ด๋ค ๊ธฐ์ค์ ๋ฐ๋ผ ์์ฑ๋ UUID๊ฐ ๋ ์ข์) ์๋ต์ ์ผ๋ถ๋ก '5'๋ฅผ ๋ฐํํ๊ณ ์น ์์ผ์ url/5๋ก ์ด๋ฆฝ๋๋ค. ALB์๋ url/5๊ฐ ์ธ์คํด์ค 5๋ก ๋ผ์ฐํ ๋๋ค๋ ๊ท์น์ด ์์ต๋๋ค.
์๋ ํฌ๊ธฐ ์กฐ์ ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ(์ธ์คํด์ค๊ฐ ์ ์๋๋ฌผ์ด ์๋ ์์ธ ๊ฒฝ์ฐ) ์ธ์คํด์ค์์ ์คํ ์ค์ธ ์ฝ๋๊ฐ ALB ์ค์ ์ ์์ ํ์ฌ ์ ์ ํ ๋๋ฉ์ธ์ ํด๋น ๋๋ฉ์ธ์ผ๋ก ๋ผ์ฐํ ํ๋๋ก ํด์ผ ํฉ๋๋ค.
https://aws.amazon.com/blogs/aws/new-host-based-routing-support-for-aws-application-load-balancers/์์ ์์ธํ ์ฝ์ด๋ณด์ญ์์ค.
๊ทธ๋ฌ๋ ๊ฐ๋ฅํ ํ ์ฌ์ฉํ๊ณ ์๋ ํจํด์ ํผํ๊ณ ์ถ์ ์๋ ์์ต๋๋ค. HTTP ์์ฒญ์ผ๋ก ๋ค์ด์ค๋ ๋ฐ์ดํฐ๋ ๋ชจ๋ ์ธ์คํด์ค(DB ๋๋ ์ด์ ์ ์ฌํ ๊ฒ)์ ์ก์ธ์คํ ์ ์๋ ๋ฐฉ์์ผ๋ก ์ ์ฅ๋๊ฑฐ๋ ์ผ๋จ ์ค์ ๋๋ฉด ์น ์์ผ ์ฐ๊ฒฐ์ ํตํด ์ ์ก๋์ด์ผ ํฉ๋๋ค. ๊ทธ๋๋ก, HTTP ์์ฒญ๊ณผ ์น ์์ผ์ด ์ด๋ฆฌ๋ ์ฌ์ด์ ์ธ์คํด์ค๊ฐ ์ฃฝ์ ์ ์์ผ๋ฉฐ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค(ํจ์ฌ ๋ ์์ฃผ).
@lostcolony ์กฐ์ธ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์๋ํด ๋ณผ ๊ฐ์น๊ฐ ์์ต๋๋ค.
http ์์ฒญ์ websocket ์๋ฒ๊ฐ ํ์ ํ๋๋ก ํ๋ ๊ฒ์ ๋๋ค(์ค์ ๋ก๋ ๋์ปค ์ปจํ ์ด๋์ ์์ง๋ง ์ถ์ํ๋์ด ์์ต๋๋ค). ์ฐ๊ฒฐ๋๋ ์ธ์คํด์ค์ ์น ์์ผ ์๋ฒ๊ฐ ์กด์ฌํ๋๋ก ๋ ์์ฒญ์ ๋์ผํ ์ธ์คํด์ค๋ก ๋ผ์ฐํ ํด์ผ ํฉ๋๋ค.
์ด ์ค์ ์ฌ์ฉํ๋ฉด jupyter ์๋ฒ๋ฅผ elb ๋ค์ ๋ฐฐ์นํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp
๋๊ตฐ๊ฐ๊ฐ aws์์ kubernetes๋ฅผ ์ฌ์ฉํ์ฌ ์ด ํฐ์ผ์ ์ฌ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ์ฌ.
HTTP2
๋ฅผ ๋นํ์ฑํํ๋ฉด ๊ด์ฐฎ์ต๋๋ค. ELB์ ๋ํด ๋ค๋ฅธ ์์
์ ์ํํ ํ์๊ฐ ์์ต๋๋ค.
์๋ ,
SockJS๋ฅผ ์ฌ์ฉํ๊ณ ์์ง๋ง ๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๋ด ์์ฉ ํ๋ก๊ทธ๋จ์ Java Spring 4 ์์ฉ ํ๋ก๊ทธ๋จ์ด๋ฉฐ ๊ฐ๋ฐ ์์คํ ์์ ์๋ํ๋ฉฐ
AWS์์ ๋์ผํ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋๊ตฐ๊ฐ๊ฐ ์ ๊ทธ๋ ์ด๋ ํค๋๋ฅผ ์ญ์ ํ ๊ฒ ๊ฐ์ต๋๋ค. ํด๋ผ์ด์ธํธ์์ ๋ณผ ์ ์์ต๋๋ค.์์ง ํด๊ฒฐ์ฑ ์ ์ฐพ์ ์ ์์ต๋๋ค ...
์๋ ํ์ธ์ @yoav200 ์ ๋๋ค .
๋ ์ข ๊ตฌํด์ค.
๋๋ ๊ฐ์ ๋ฌธ์ ์ ๊ฐํ์๋ค. ๋์์ฃผ์ธ์
Websocket์ Springboot 2.x ๋ฐ SockJ๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
aws์ ๋ฐฐํฌ๋ tomcat ์ ํ๋ฆฌ์ผ์ด์
์ ๋ง๋ค์์ต๋๋ค.
ํด๋์ ๋ก๋ ๋ฐธ๋ฐ์๊ฐ ์๋ Elastic beantalk
์ด์ ๋ฌธ์ ๋
iOS ๊ฐ๋ฐ์๊ฐ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. ๋ฐฑ์๋์ ๋๋ฌํ์ง๋ง ํธ๋์
ฐ์ดํฌ ์ค์ ์คํจํฉ๋๋ค.
์๋๋ CLB์ ALB ๋ชจ๋์์ ์ป์ ๋ก๊ทธ์
๋๋ค.
2019-12-13 15:21:22.662 DEBUG 27543 --- [nio-8080-exec-2] oswsDispatcherServlet: GET "/wtchat/websocket", ๋งค๊ฐ๋ณ์={}
2019-12-13 15:21:22.701 DEBUG 27543 --- [nio-8080-exec-2] oswsssWebSocketHandlerMapping : org.springframework.web.socket.sockjs.support์ ๋งคํ๋ฉ๋๋ค. SockJsHttpRequestHandler@30c6a17
2019-12-13 15:21:22.714 DEBUG 27543 --- [nio-8080-exec-2] oswssthDefaultSockJsService : ์ ์ก ์์ฒญ ์ฒ๋ฆฌ ์ค: GET http://mydomain.com/wtchat/websocket
2019-12-13 15:21:22.716 ์ค๋ฅ 27543 --- [nio-8080-exec-2] cwcMyHandshakeHandler : ์๋ชป๋ ์
๊ทธ๋ ์ด๋ ํค๋๋ก ์ธํด ํธ๋์
ฐ์ดํฌ ์คํจ: null
๋๋ ๋น์ ์ด ๋งํ ๊ฒ์ ๋ฐ๋์ต๋๋ค.
๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ์ง์ ๊ฐ๋ฆฌํค๋ Route 53์ ๋ ์ฝ๋ ์ธํธ๋ฅผ ์์ฑํ์ต๋๋ค.
์ด ์์ ์ ์ํํ ํ์๋ ์์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ด๊ฐ ๋ญ ๋ ํด์ผ ํฉ๋๊น?
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
Elastic Beanstalk๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๊ณ ๊ฐ์ ํฉ๋๋ค(์ง์นจ์ด ํจ์ฌ ์ฌ์ธ ๊ฒ์ ๋๋ค).
EC2->๋คํธ์ํฌ ๋ฐ ๋ณด์->๋ก๋ ๋ฐธ๋ฐ์๋ก ์ด๋ํฉ๋๋ค.
๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ์ ํํ๊ณ ๋ฆฌ์ค๋๋ก ์ด๋ํ์ญ์์ค. ๋ก๋ ๋ฐธ๋ฐ์ ํ๋กํ ์ฝ๊ณผ ์ธ์คํด์ค ํ๋กํ ์ฝ์ด HTTP ๋ฐ HTTPS๊ฐ ์๋ ํฌํธ 80์ ๊ฒฝ์ฐ TCP๋ก, ํฌํธ 443์ ๊ฒฝ์ฐ SSL๋ก ์ค์ ๋์ด ์๋์ง ํ์ธํ์ญ์์ค.