Socket.io: ELB ๋’ค์— ์žˆ๋Š” AWS EC2๋Š” ํ•ญ์ƒ ์˜ค๋ฅ˜๋ฅผ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์‘๋‹ต ์ฝ”๋“œ: 400

์— ๋งŒ๋“  2014๋…„ 10์›” 30์ผ  ยท  66์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: socketio/socket.io

์–˜๋“ค ์•„ -

์ด์— ๋Œ€ํ•œ ์†”๋ฃจ์…˜์„ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ๋’ค์—์„œ ๋‚ด ์•ฑ์„ ์‹คํ–‰ํ•  ๋•Œ ํด๋ผ์ด์–ธํŠธ์—์„œ ๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

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 ์„œ๋ฒ„๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ค๋ฅ˜?

ํด๋ง์œผ๋กœ ๋Œ์•„๊ฐ€๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ํด๋ง์€ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ(์†Œ์ผ“ ์—ฐ๊ฒฐ์ด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ณ  ์‹คํ–‰๋จ) ์ฝ˜์†”์—์„œ ๋นจ๊ฐ„์ƒ‰ ์˜ค๋ฅ˜๋กœ ์‹œ์ž‘ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์กฐ์–ธ์„ ํ•ด์ฃผ์…”์„œ ๋ฏธ๋ฆฌ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

Elastic Beanstalk๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค(์ง€์นจ์ด ํ›จ์”ฌ ์‰ฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค).

EC2->๋„คํŠธ์›Œํฌ ๋ฐ ๋ณด์•ˆ->๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์„ ํƒํ•˜๊ณ  ๋ฆฌ์Šค๋„ˆ๋กœ ์ด๋™ํ•˜์‹ญ์‹œ์˜ค. ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ํ”„๋กœํ† ์ฝœ๊ณผ ์ธ์Šคํ„ด์Šค ํ”„๋กœํ† ์ฝœ์ด HTTP ๋ฐ HTTPS๊ฐ€ ์•„๋‹Œ ํฌํŠธ 80์˜ ๊ฒฝ์šฐ TCP๋กœ, ํฌํŠธ 443์˜ ๊ฒฝ์šฐ SSL๋กœ ์„ค์ •๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

๋ชจ๋“  66 ๋Œ“๊ธ€

๋˜ํ•œ ์ค‘์š”ํ•œ ๊ฒฝ์šฐ 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๋ฅผ ํ†ต๊ณผํ•  ๋•Œ ๋ณด๊ณ  ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
snipimage

๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์•ž์— Route53 ์ธ์Šคํ„ด์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์ด์ œ AWS ํ™˜๊ฒฝ์—์„œ ๋ณด์•ˆ ์—ฐ๊ฒฐ๋กœ ์ž‘๋™ํ•˜๋Š” ์›น ์†Œ์ผ“์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Route 53์„ ์ถ”๊ฐ€ํ•ด ๋ณด์‹ญ์‹œ์˜ค. ์ด๋ ‡๊ฒŒ ํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์œผ๋ฉด ๊ตฌ์„ฑ์„ ๊ณต์œ ํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

@yoav200 ๋‹น์‹ ์„ ์œ„ํ•ด ์ผํ•˜๊ฒŒ ๋งŒ๋“  ๋‹น์‹ ์˜ ์ „์ฒด ๊ตฌ์„ฑ์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ? ์ฆ‰, EBS ๋ณด์•ˆ + ํ”„๋กœํ† ์ฝœ(http/tcp)์˜ ํฌํŠธ, ํ•„์š”ํ•œ ๋ชจ๋“  .ebextensions ๋“ฑ. ์—…๊ทธ๋ ˆ์ด๋“œ ํ—ค๋”๋ฅผ ์œ ์ง€ํ•˜๊ณ  ๋…ธ๋“œ๋กœ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด ๋‚ด nginx ๊ตฌ์„ฑ์„ ํ•ดํ‚นํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜๋งŽ์€ ๋‹ค๋ฅธ ์ผ์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์•„๋ฌด ๊ฒƒ๋„ ํšจ๊ณผ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. . FWIW - wiki ํŽ˜์ด์ง€๋Š” ์ด๊ฒƒ์— ์ •๋ง, ์ •๋ง ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ๋˜ ๊ฒƒ์€ ๋‚ด EC2 ์ธ์Šคํ„ด์Šค๋กœ ์ง์ ‘ ์ด๋™ํ•˜๋Š” ๊ฒƒ๋ฟ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ๋„๋ฉ”์ธ์„ ๊ด€๋ฆฌํ•˜๋Š” Route 53 ์ธ์Šคํ„ด์Šค๋ฅผ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
๋‚ด ๋„๋ฉ”์ธ์ด ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์ง์ ‘ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ ˆ์ฝ”๋“œ๋กœ ํ˜ธ์ŠคํŒ… ์˜์—ญ์„ ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚ด Tomcat ์ธ์Šคํ„ด์Šค์— ์š”์ฒญ์„ ์ „๋‹ฌํ•˜๋„๋ก ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
lb-listeners

ELB์šฉ ๋ณด์•ˆ ๊ทธ๋ฃน์€ ๋งค์šฐ ํ‘œ์ค€์ ์ž…๋‹ˆ๋‹ค.
lb-security-group

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๊ฐ€ ๋˜ ๋‹ค๋ฅธ ์˜ต์…˜์ด๋ผ๊ณ  ๋“ค์—ˆ์ง€๋งŒ ํ•˜๋ฃจ๊ฐ€ ๋๋‚  ๋•Œ๊นŒ์ง€ ๋‹ค์Œ ์„œ๋น„์Šค์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๊ฒŒ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

  • Elastic Beanstalk
  • ELB
  • EC2 Autoscaling ๊ทธ๋ฃน(EB์—์„œ ์ƒ์„ฑ)
  • RDS
  • ์—˜๋ผ์Šคํ‹ฐ์บ์‹œ

๋…ธ๋“œ ์•ฑ์€ ํ˜„์žฌ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ์„œ๋น„์Šค์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๊ณ  ์žˆ์ง€๋งŒ ๋‚ด๊ฐ€ ๋งํ–ˆ๋“ฏ์ด 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 ์ธ์ฆ์„œ ์ž์ฒด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

elb

์ธ์ฆ์„œ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๋…ธ๋“œ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

        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) ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์„ฑ ์„น์…˜์—์„œ ํ”„๋ก์‹œ ์„œ๋ฒ„๊ฐ€ "์—†์Œ"์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

screen shot 2015-01-09 at 10 28 56 am

์ข‹์€ ์†Œ์‹์ž…๋‹ˆ๋‹ค @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. ๊ด€์‹ฌ ํ™˜๊ฒฝ์—์„œ "๊ตฌ์„ฑ"์„ ํด๋ฆญํ•˜์‹ญ์‹œ์˜ค.
  2. ๊ตฌ์„ฑ ํŽ˜์ด์ง€์—์„œ "์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์„ฑ"์„ ํด๋ฆญํ•˜์‹ญ์‹œ์˜ค.
  3. ์ด์ „ ์Šคํฌ๋ฆฐ์ƒท๊ณผ ๊ฐ™์ด "ํ”„๋ก์‹œ ์„œ๋ฒ„" ๋“œ๋กญ๋‹ค์šด์ž…๋‹ˆ๋‹ค.

์ฐธ๊ณ : ๋‚ด ํ™˜๊ฒฝ์€ ๊ฑฐ์˜ 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 > ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์„น์…˜์—์„œ ํฌํŠธ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

screen shot 2016-03-08 at 16 08 34

์ •๋ ฌ๋˜๋ฉด .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๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
image

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑ๋œ ๊ณ ์ •์„ฑ์„ ๊ฐ€์ง„ ๋Œ€์ƒ ๊ทธ๋ฃน์„ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.
image

๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋จผ์ € 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์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

Screen Shot 2019-12-13 at 16 12 49

์•ˆ๋…•,
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

2019-12-13 15:21:22.717 DEBUG 27543 --- [nio-8080-exec-2] oswsDispatcherServlet : 400 BAD_REQUEST ์™„๋ฃŒ

๋‚˜๋Š” ๋‹น์‹ ์ด ๋งํ•œ ๊ฒƒ์„ ๋”ฐ๋ž์Šต๋‹ˆ๋‹ค.
image
image

๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์ง์ ‘ ๊ฐ€๋ฆฌํ‚ค๋Š” Route 53์— ๋ ˆ์ฝ”๋“œ ์„ธํŠธ๋ฅผ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ํ›„์—๋„ ์œ„์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋ญ˜ ๋” ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰