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๋์ด ์ ๋ฆฌํด์ฃผ์ ๋ด์ฉ.
consumer์ ๋ํ ์ดํด ๋ ์ผ์ฆ๋ ์ก์ ์ผ์ด๋ธ์ ๋ํด ๊ณต์์ ์ผ๋ก 'consumer'๋ผ๋ ๊ฐ๋ ์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. consumer๋ ์๋น์ค ์ด์ฉ์(current_user) ์์ ํฌํจ๋๋ ๊ฐ๋ ์ผ๋ก ํ๋์ ๋๋ฐ์ด์ค๋ ๋ธ๋ผ์ฐ์ ์ ํญ์ ๋์ํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ๋ธ๋ผ์ฐ์ ํญ 5๊ฐ๋ฅผ ์ด๊ณ ๋ชจ๋ฐ์ผ, ํ๋ธ๋ฆฟ, ํธ๋ํฐ์ผ๋ก๋ ํ๋์ ์๋น์ค๋ฅผ ์ด์ฉ(๊ฐ์ ๊ณ์ ์ด๋ ์๋๋ ๊ฐ์)ํ๋ค๋ฉด ํ ์ ์ ๊ฐ ์ฌ๋ ๋ช ์ ์ปจ์๋จธ๋ก์จ ์์ฉํ๊ณ ์๋ ๊ฒ์ ๋๋ค.
conection์ ๋ํ ์ดํด connection์ด๋ consumer์ rails server๊ฐ ๋งบ๊ณ ์๋ ๊ด๊ณ๋ฅผ ์๋ฏธํ๋ฉฐ, ๋ง ๊ทธ๋๋ก ์๋ฒ์ ํด๋ผ์ด์ธํธ websocket ๊ฐ์ '์ฐ๊ฒฐ'์ ์๋ฏธํฉ๋๋ค. ํ๋์ ์ปจ์๋จธ๋ ์ฑ๋ ์์ ๋ฌด๊ดํ๊ฒ ํ๋์ ์ปค๋ฅ์ ๋ง์ ์ด์ฉํฉ๋๋ค.
consumer์ connection์ ์ธ์ ๋ง๋ค์ด์ง๋๊ฐ? consumer๋ ์ดํ๋ฆฌ์ผ์ด์ ์ด ์๋์ฐ์ ๋ก๋๋๋ ์ฆ์ ๋ง๋ค์ด์ง๋๋ค. ๋ ์ผ์ฆ๋ ํ๋ ์ด์์ ์ฑ๋์ ๊ตฌ๋ ํ ๋์๋ง connection์ ์ด์ด๋๋ ๊ฒ์ ๊ถ์ฅํ๋ฏ๋ก, ์๋์ฐ์ ๋ก๋๋๋ ์์ ์ ์ฆ์ ์ฑ๋์ ๊ตฌ๋ ํ์ง ์๋๋ค๋ฉด connection์ ๋ฐ๋ก ์์ฑ๋์ง ์์ต๋๋ค. xx_channel.js ํ์ผ์ ๋ณด๋ฉด consumer.subscriptions(channel_name, mixin object)๋ฅผ ํตํด ๊ตฌ๋ ์ ๋ง๋ ๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ์ด ๋ ์ปค๋ฅ์ ์ด ์ฐ๊ฒฐ๋์ด ์์ง ์๋ค๋ฉด ๋ด๋ถ์ ์ผ๋ก consumer์ connect ๋ฉ์๋๋ฅผ ํตํด ์น์์ผ์ด ์์ฑ๋๊ณ ์ฑ๋์ด ์ฐ๊ฒฐ๋ฉ๋๋ค. connection.rb์ connect ๋ฉ์๋๊ฐ ์คํ๋๋ ์์ ์ด ๋ฐ๋ก ์ด ํ์ด๋ฐ์ ๋๋ค.
๊ทธ๋์, ์ค๋ ๊ฐ์ ๋ฌธ์ ๋ ์ ์ผ์ด๋ฌ๋? subscription์ ํด์ ํ๋ ๊ฒ์ด connection์ close๋ฅผ ๋ณด์ฅํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฟ ํค๊ฐ ์ด๊ธฐํ๋๋๋ผ๋ SPA์์๋ connection์ด ์ฒ์ ์น์์ผ์ ์ฐ๊ฒฐํ ๋๋ฅผ ์ ์ธํ๊ณ ๋ค์ ์ฐ๊ฒฐ์ ์ธ์ฆํ ์ผ์ด ์์ต๋๋ค. ๊ทธ๋๋ง ์๋ก๊ณ ์นจํ๋ฉด ์ ์์ ์ผ๋ก ๋์๊ฐ๋ ๊ฒ๋ ์๋์ฐ ๋ก๋์ ์ฟ ํค๋ฅผ ์ด๊ธฐํํ๋๋ก ์ ํฌ๊ฐ ์ฒ๋ฆฌ๋ฅผ ํด๋์๊ธฐ ๋๋ฌธ์ด๊ณ ์.
๊ทธ๋ฌ๋ฉด ์ปค๋ฅ์ ์ ๋ซ์ผ๋ฉด ๋๊ฒ ๋ค? ๋ค. ์ฐ๋ฆฌ๊ฐ ์ผ์ด๋ธ์ ์ด์ฉํ๊ธฐ ์ํด this.channel = connectChannel ๋ฉ์๋๋ฅผ ์ด์ฉํด ์์ฑํ subscription์ consumer ๊ฐ์ฒด๊ฐ ๊ฐ์ง subscriptions ์ปฌ๋ ์ ์ ์๋ฆฌ๋จผํธ์ด๋ฉฐ, consumer๋ฅผ ์ฐธ์กฐํ๊ณ ์์ต๋๋ค. ์ฆ, this.channel.consumer์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ ๊ฐ์ฒด์ ๋๋ค. consumer๋ ์์ ์ด ๊ฐ์ง ํ๋์ connection์ ๋ํ ์ฐธ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , consumer.connection.close() ๋ฉ์๋๋ฅผ ๋ช ์์ ์ผ๋ก ํธ์ถํจ์ผ๋ก์จ ์ปค๋ฅ์ ์ ๋ซ์ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ฉด ์ ๋ง ํด๊ฒฐ๋๋? ์๋์. connection.close() ๋ฉ์๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฒ์ ์ํ ์๋ ์ฌ์ฐ๊ฒฐ์ ํ๋ฝํ๋ ๋ด๋ถ ์ต์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ ๊น ๋๊ธธ ๋ฟ ๊ณง ๋ค์ ์ฐ๊ฒฐ๋ฉ๋๋ค. ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ consumer ๊ฐ์ฒด๋ฅผ ๋ฐ๋ก ๋ณด๊ดํ๊ณ , consumer ๊ฐ์ฒด๊ฐ ๊ตฌ๋ ํ๋ subscriptions array์ ๊ฐ subscription์ ๋ํด ๋ช ์์ ์ผ๋ก undescribeํ ๋ค, consumer๊ฐ ๊ฐ์ง disconnect ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๊ฒ์ ๋๋ค. ๋ด๋ถ์ ์ผ๋ก ๋ณด๋ฉด consumer.connection.close ๋ฉ์๋๋ฅผ ์ฌ์ฐ๊ฒฐ ํ๋ฝ์ ๊ฑฐ๋ถํ๋ ์ต์ ์ผ๋ก ํธ์ถํ๋ ๋ฉ์๋์ ๋๋ค.
๋๋ ์ด๋ฐ ๊ฑธ ์ด๋ป๊ฒ ์์๋? window์ channel์ด๋ consumer๋ฅผ ๋ด์์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋ค์ฌ๋ค๋ณด๋ฉด ๋ฉ๋๋ค. appearance channel์ new๋ก ๋ง๋ ํ๋์ ๋ ธ๋๋ง ์๋๋ผ๋ ์๋น์ค์ ๊ด์ฌํ๋ connection, consumer, ๋ชจ๋ subscriptions๋ฅผ ์ฐธ์กฐํ๊ณ ์ํฅ๋ ฅ์ ํ์ฌํ ์ ์์ต๋๋ค.
ํ์ต ๋ด์ฉ์ ๋ํ ๊ฐ์ธ์ ์ธ ์ดํ
๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด ๊ณ๋จ์์ผ๋ก ์งํ๋๋ ๊ฒ ๊ฐ๋ค. ์์กฐ๋กญ๊ฒ ์งํํ๋ค๊ฐ ์ด์๊ฐ ์๊ธฐ๋ฉด ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์๊ฐ์ ํ์ฐธ ๋ณด๋ด๊ณ ๋ค์ ์ด์๋ฅผ ํด๊ฒฐํ๊ณ ๋๋ฉด ์์กฐ๋กญ๊ฒ ์งํํ๋ค๊ฐ ์ด์๊ฐ ๋ ์๊ธฐ๋ฉด ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์๊ฐ์ ๋ณด๋ด๊ณ .. ๊ทธ๋๋ ๋๋ฃ๋ค๊ณผ ํจ๊ปํ๋ ๋น ๋ฅด๊ฒ ํด๋ต์ ์ฐพ์๋ผ ์ ์์ด์ ๋คํ์ด๋ค. ๋์ฑ ๋คํ์ธ๊ฑด eunhkim๋์ฒ๋ผ ๊นจ๋ฌ์ ๋ฐ๋ฅผ ์ ์ ํํ๋ ๋๋ฃ๋ฅผ ๋๋ค๋ ๊ฒ์ด๋ค. ์ด๋ฐ๊ฑธ ์ ํก์ํด์ผ์ง.
๋ค์ ํ์ต ๊ณํ
AppearanceView ๊ตฌํ ์๋ฃ
Last updated