2021-02-03(Wed)

ํ•ญ๋ชฉ

๋‚ด์šฉ

ํ•™์Šต ๋‚ ์งœ

2021-02-03(์ˆ˜)

ํ•™์Šต ์‹œ๊ฐ„

11:00~24:00

ํ•™์Šต ๋ฒ”์œ„ ๋ฐ ์ฃผ์ œ

backbone, ActionCable

ํ•™์Šต ๋ชฉํ‘œ

appearance ์œ ์ € ์ƒํƒœ๋ฐ”๋ฅผ ๋งŒ๋“ ๋‹ค.

๋™๋ฃŒ ํ•™์Šต ๋ฐฉ๋ฒ•

sanam, jujeong๋‹˜๊ณผ appearance_view๋ฅผ liveshare๋กœ ํ•จ๊ป˜ ๊ตฌํ˜„

์ƒ์„ธ ํ•™์Šต ๋‚ด์šฉ

์•ก์…˜ ์ผ€์ด๋ธ”์„ ํ™œ์šฉํ•˜์—ฌ ์œ ์ € ์ƒํƒœ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค.

์ด ๊ณผ์ •์—์„œ ์•„๋ž˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๊ธด ์‹œ๊ฐ„์„ ์ผ๋Š”๋ฐ, ๋™๋ฃŒ ๋ถ„๋“ค ๋•์— ๊ฒฐ๊ตญ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค.

๋ฌธ์ œ)

์ตœ์ดˆ์— ๋กœ๊ทธ์ธํ•˜๋ฉฐ websocket ์—ฐ๊ฒฐ & Appearance channel์„ ๊ตฌ๋…ํ•œ current_user๊ฐ€ window๋ฅผ ์ข…๋ฃŒํ•  ๋•Œ๊นŒ์ง€ ์œ ์ง€๋œ๋‹ค. ๋•Œ๋ฌธ์— ๋กœ๊ทธ์•„์›ƒ ํ›„ ๋‹ค๋ฅธ ์•„์ด๋””๋กœ ๋กœ๊ทธ์ธํ•ด๋„ ์ตœ์ดˆ์— ๋กœ๊ทธ์ธํ–ˆ๋˜ user๊ฐ€ current_user๋กœ ์ธ์‹๋œ๋‹ค.

์›์ธ)

  • websocket์— connectํ•˜๋Š” ๊ณผ์ •์—์„œ current_user๊ฐ€ ์ดˆ๊ธฐํ™”๋œ๋‹ค.

  • ๊ทธ๋Ÿฐ๋ฐ ๋กœ๊ทธ์•„์›ƒ์‹œ channel ๊ตฌ๋…์€ ๋Š์—ˆ์ง€๋งŒ, websocket์˜ connect๋ฅผ ๋Š์ง€๋Š” ์•Š์•˜๋‹ค.

  • ๋”ฐ๋ผ์„œ ๋‹ค์‹œ ๋กœ๊ทธ์ธ ํ–ˆ์„ ๋•Œ websocket์„ connectํ•˜๋Š” ๊ณผ์ •์ด ์—†์–ด์„œ current_user๊ฐ€ ์ดˆ๊ธฐํ™”๋˜๋Š” ๊ณผ์ •๋„ ์ƒ๋žต๋œ ๊ฒƒ์ด ์›์ธ์ด์—ˆ๋‹ค.

ํ•ด๊ฒฐ)

์•„๋ž˜ ๋‚ด์šฉ์€ eunhkim๋‹˜์ด ์ •๋ฆฌํ•ด์ฃผ์‹  ๋‚ด์šฉ.

  1. consumer์— ๋Œ€ํ•œ ์ดํ•ด ๋ ˆ์ผ์ฆˆ๋Š” ์•ก์…˜ ์ผ€์ด๋ธ”์— ๋Œ€ํ•ด ๊ณต์‹์ ์œผ๋กœ 'consumer'๋ผ๋Š” ๊ฐœ๋…์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. consumer๋ž€ ์„œ๋น„์Šค ์ด์šฉ์ž(current_user) ์•ˆ์— ํฌํ•จ๋˜๋Š” ๊ฐœ๋…์œผ๋กœ ํ•˜๋‚˜์˜ ๋””๋ฐ”์ด์Šค๋‚˜ ๋ธŒ๋ผ์šฐ์ €์˜ ํƒญ์— ๋Œ€์‘ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๋ธŒ๋ผ์šฐ์ € ํƒญ 5๊ฐœ๋ฅผ ์—ด๊ณ  ๋ชจ๋ฐ”์ผ, ํƒœ๋ธ”๋ฆฟ, ํ•ธ๋“œํฐ์œผ๋กœ๋„ ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๋ฅผ ์ด์šฉ(๊ฐ™์€ ๊ณ„์ •์ด๋“  ์•„๋‹ˆ๋“  ๊ฐ„์—)ํ•œ๋‹ค๋ฉด ํ•œ ์œ ์ €๊ฐ€ ์—ฌ๋Ÿ ๋ช…์˜ ์ปจ์Šˆ๋จธ๋กœ์จ ์ž‘์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  2. conection์— ๋Œ€ํ•œ ์ดํ•ด connection์ด๋ž€ consumer์™€ rails server๊ฐ€ ๋งบ๊ณ  ์žˆ๋Š” ๊ด€๊ณ„๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ๋ง ๊ทธ๋Œ€๋กœ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ websocket ๊ฐ„์˜ '์—ฐ๊ฒฐ'์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์ปจ์Šˆ๋จธ๋Š” ์ฑ„๋„ ์ˆ˜์— ๋ฌด๊ด€ํ•˜๊ฒŒ ํ•˜๋‚˜์˜ ์ปค๋„ฅ์…˜๋งŒ์„ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.

  3. consumer์™€ connection์€ ์–ธ์ œ ๋งŒ๋“ค์–ด์ง€๋Š”๊ฐ€? consumer๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์œˆ๋„์šฐ์— ๋กœ๋“œ๋˜๋Š” ์ฆ‰์‹œ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค. ๋ ˆ์ผ์ฆˆ๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์ฑ„๋„์„ ๊ตฌ๋…ํ•  ๋•Œ์—๋งŒ connection์„ ์—ด์–ด๋‘๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•˜๋ฏ€๋กœ, ์œˆ๋„์šฐ์— ๋กœ๋“œ๋˜๋Š” ์‹œ์ ์— ์ฆ‰์‹œ ์ฑ„๋„์„ ๊ตฌ๋…ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด connection์€ ๋ฐ”๋กœ ์ƒ์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. xx_channel.js ํŒŒ์ผ์„ ๋ณด๋ฉด consumer.subscriptions(channel_name, mixin object)๋ฅผ ํ†ตํ•ด ๊ตฌ๋…์„ ๋งŒ๋“ ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋•Œ ์ปค๋„ฅ์…˜์ด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๋‚ด๋ถ€์ ์œผ๋กœ consumer์˜ connect ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์›น์†Œ์ผ“์ด ์ƒ์„ฑ๋˜๊ณ  ์ฑ„๋„์ด ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. connection.rb์˜ connect ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์‹œ์ ์ด ๋ฐ”๋กœ ์ด ํƒ€์ด๋ฐ์ž…๋‹ˆ๋‹ค.

  4. ๊ทธ๋ž˜์„œ, ์˜ค๋Š˜ ๊ฐ™์€ ๋ฌธ์ œ๋Š” ์™œ ์ผ์–ด๋‚ฌ๋‚˜? subscription์„ ํ•ด์ œํ•˜๋Š” ๊ฒƒ์ด connection์˜ close๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ฟ ํ‚ค๊ฐ€ ์ดˆ๊ธฐํ™”๋˜๋”๋ผ๋„ SPA์—์„œ๋Š” connection์ด ์ฒ˜์Œ ์›น์†Œ์ผ“์„ ์—ฐ๊ฒฐํ•  ๋•Œ๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋‹ค์‹œ ์—ฐ๊ฒฐ์„ ์ธ์ฆํ•  ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋‚˜๋งˆ ์ƒˆ๋กœ๊ณ ์นจํ•˜๋ฉด ์ •์ƒ์ ์œผ๋กœ ๋Œ์•„๊ฐ”๋˜ ๊ฒƒ๋„ ์œˆ๋„์šฐ ๋กœ๋“œ์‹œ ์ฟ ํ‚ค๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋„๋ก ์ €ํฌ๊ฐ€ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด๋†“์•˜๊ธฐ ๋•Œ๋ฌธ์ด๊ณ ์š”.

  5. ๊ทธ๋Ÿฌ๋ฉด ์ปค๋„ฅ์…˜์„ ๋‹ซ์œผ๋ฉด ๋˜๊ฒ ๋„ค? ๋„ค. ์šฐ๋ฆฌ๊ฐ€ ์ผ€์ด๋ธ”์„ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด this.channel = connectChannel ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด ์ƒ์„ฑํ•œ subscription์€ consumer ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง„ subscriptions ์ปฌ๋ ‰์…˜์˜ ์—˜๋ฆฌ๋จผํŠธ์ด๋ฉฐ, consumer๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, this.channel.consumer์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค. consumer๋Š” ์ž์‹ ์ด ๊ฐ€์ง„ ํ•˜๋‚˜์˜ connection์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , consumer.connection.close() ๋ฉ”์„œ๋“œ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ˜ธ์ถœํ•จ์œผ๋กœ์จ ์ปค๋„ฅ์…˜์„ ๋‹ซ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  6. ๊ทธ๋Ÿฌ๋ฉด ์ •๋ง ํ•ด๊ฒฐ๋˜๋‚˜? ์•„๋‹ˆ์š”. connection.close() ๋ฉ”์„œ๋“œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์„œ๋ฒ„์— ์˜ํ•œ ์ž๋™ ์žฌ์—ฐ๊ฒฐ์„ ํ—ˆ๋ฝํ•˜๋Š” ๋‚ด๋ถ€ ์˜ต์…˜์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ž ๊น ๋Š๊ธธ ๋ฟ ๊ณง ๋‹ค์‹œ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ consumer ๊ฐ์ฒด๋ฅผ ๋”ฐ๋กœ ๋ณด๊ด€ํ•˜๊ณ , consumer ๊ฐ์ฒด๊ฐ€ ๊ตฌ๋…ํ•˜๋Š” subscriptions array์˜ ๊ฐ subscription์— ๋Œ€ํ•ด ๋ช…์‹œ์ ์œผ๋กœ undescribeํ•œ ๋’ค, consumer๊ฐ€ ๊ฐ€์ง„ disconnect ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด๋ถ€์ ์œผ๋กœ ๋ณด๋ฉด consumer.connection.close ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์—ฐ๊ฒฐ ํ—ˆ๋ฝ์„ ๊ฑฐ๋ถ€ํ•˜๋Š” ์˜ต์…˜์œผ๋กœ ํ˜ธ์ถœํ•˜๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค.

  7. ๋„ˆ๋Š” ์ด๋Ÿฐ ๊ฑธ ์–ด๋–ป๊ฒŒ ์•Œ์•˜๋‹ˆ? window์— channel์ด๋‚˜ consumer๋ฅผ ๋‹ด์•„์„œ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ๋“ค์—ฌ๋‹ค๋ณด๋ฉด ๋ฉ๋‹ˆ๋‹ค. appearance channel์„ new๋กœ ๋งŒ๋“  ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋งŒ ์žˆ๋”๋ผ๋„ ์„œ๋น„์Šค์— ๊ด€์—ฌํ•˜๋Š” connection, consumer, ๋ชจ๋“  subscriptions๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์˜ํ–ฅ๋ ฅ์„ ํ–‰์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ 

์ฐธ๊ณ 2

ํ•™์Šต ๋‚ด์šฉ์— ๋Œ€ํ•œ ๊ฐœ์ธ์ ์ธ ์ดํ‰

๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋ฉด ๊ณ„๋‹จ์‹์œผ๋กœ ์ง„ํ–‰๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ์ˆœ์กฐ๋กญ๊ฒŒ ์ง„ํ–‰ํ•˜๋‹ค๊ฐ€ ์ด์Šˆ๊ฐ€ ์ƒ๊ธฐ๋ฉด ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์‹œ๊ฐ„์„ ํ•œ์ฐธ ๋ณด๋‚ด๊ณ  ๋‹ค์‹œ ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ๋‚˜๋ฉด ์ˆœ์กฐ๋กญ๊ฒŒ ์ง„ํ–‰ํ•˜๋‹ค๊ฐ€ ์ด์Šˆ๊ฐ€ ๋˜ ์ƒ๊ธฐ๋ฉด ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์‹œ๊ฐ„์„ ๋ณด๋‚ด๊ณ .. ๊ทธ๋ž˜๋„ ๋™๋ฃŒ๋“ค๊ณผ ํ•จ๊ป˜ํ•˜๋‹ˆ ๋น ๋ฅด๊ฒŒ ํ•ด๋‹ต์„ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ์–ด์„œ ๋‹คํ–‰์ด๋‹ค. ๋”์šฑ ๋‹คํ–‰์ธ๊ฑด eunhkim๋‹˜์ฒ˜๋Ÿผ ๊นจ๋‹ฌ์€ ๋ฐ”๋ฅผ ์ž˜ ์ „ํŒŒํ•˜๋Š” ๋™๋ฃŒ๋ฅผ ๋’€๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฐ๊ฑธ ์ž˜ ํก์ˆ˜ํ•ด์•ผ์ง€.

๋‹ค์Œ ํ•™์Šต ๊ณ„ํš

  • AppearanceView ๊ตฌํ˜„ ์™„๋ฃŒ

Last updated