2021-01-01(Fri)
ํญ๋ชฉ | ๋ด์ฉ |
ํ์ต ๋ ์ง | 2021-01-01(๊ธ) |
ํ์ต ์๊ฐ | 09:00~22:00 |
ํ์ต ๋ฒ์ ๋ฐ ์ฃผ์ | ๋ฃจ๋น์จ๋ ์ผ์ฆ ์ปจํธ๋กค๋ฌ |
ํ์ต ๋ชฉํ | ํผํํธ ๋ฃจ๋น์จ๋ ์ผ์ฆ ์ปจํธ๋กค๋ฌ ์ฑํฐ๋ฅผ ๋ ํํ๋ค. |
๋๋ฃ ํ์ต ๋ฐฉ๋ฒ | eunhkim, sanam, yohlee, jujeong๋๊ณผ ์๊ฒฉํ์๋ก ๊ถ๊ธํ ์ ์ ๋๋ |
์์ธ ํ์ต ๋ด์ฉ
์ฑ ์ ํ์ผ๋ฉฐ ์๋์ฒ๋ผ ๊ฐ๋จํ๊ฒ ๋ฉ๋ชจ๋ฅผ ์งํํ๋ค.
์ปจํธ๋กค๋ฌ ๊ฐ๋ฐ
์์ฒญ ์ ๋ณด ์ถ์ถ - params ๋ฉ์๋
ํด๋ผ์ด์ธํธ์์ ์ ๋ฌ๋ ์์ฒญ ์ ๋ณด์ params[:<๋งค๊ฐ ๋ณ์ ์ด๋ฆ>]์ ํ์์ผ๋ก ์ ๊ทผํ ์ ์๋ค.
params ๋ฉ์๋์์ ์ถ์ถํ ์ ์๋ ์์ฒญ ์ ๋ณด๋ ์๋์ ๊ฐ๋ค.
์ข ๋ฅ | ์ค๋ช |
ํฌ์คํธ ๋ฐ์ดํฐ | <form method="POST">๋ก ์ ์๋ ์ ๋ ฅ ์์์์ ์ ๋ฌ๋ ๊ฐ |
์ฟผ๋ฆฌ ์ ๋ณด | URL ๋์ "?"์ด ๋ถ๊ณ , "<ํค ๊ฐ>=<๊ฐ>&.."ํ์์ผ๋ก ์ง์ ๋ ์ ๋ณด |
๋ผ์ฐํธ ๋งค๊ฐ ๋ณ์ | ๋ผ์ฐํธ์์ ์ ์ํ ๋งค๊ฐ ๋ณ์("/books/1"์์ "1" ๋ถ๋ถ) |
params ๋ฉ์๋๋ก ๋ฐฐ์ด์ ์ ๋ฌํ ๋๋ ๋ค์๊ณผ ๊ฐ์ด ํค ์ด๋ฆ์ ๋ค์ ๋ฅผ ๋ถ์ฌ์ค์ผํ๋ค.
๋๋ ํ ๋น ์ทจ์ฝ์ฑ์ ํผํ๋ ๋ฐฉ๋ฒ
๋๋ ํ ๋น(Mass Assignment)๋ ์กํฐ๋ธ ๋ ์ฝ๋์ ์๋ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ ์ค ํ๋๋ก, ๋ชจ๋ธ์ ํ๋๋ฅผ ํ๊บผ๋ฒ์ ์ค์ ํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
๋ง์ฝ ์๋์ฒ๋ผ new, update_attributes ๋ฑ์ ๋ฉ์๋์ "<ํ๋ ์ด๋ฆ>: <๊ฐ>" ํํ๋ก ๊ตฌ์ฑ๋ ํด์๋ฅผ ์ ๋ฌํ๋ฉด ํด๋น ์์ฑ์ ์ฌ์ฉํด ๊ฐ์ฒด๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ์ด๋ค๊ณ ๊ฐ์ ํด๋ณด์.
์ด ๊ฒฝ์ฐ ์ฐ๋ฆฌ ์๋์ ๋ฌ๋ฆฌ params์ role ๋ฑ์ ๊ถํ๊ณผ ๊ด๋ จ๋ ํ๋๋ฅผ ์์ ํ๋ ํด์๊ฐ ํฌํจ๋๋ฉด ๋ณด์๋ฌธ์ ๊ฐ ๋ฐ์ํ ์์ง๊ฐ ํฌ๋ค. ์ด๋ฅผ ๋๋ ํ ๋น ์ทจ์ฝ์ฑ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
Rails๋ ์ด๋ฅผ ๋ง๊ธฐ ์ํด StrongParameters๋ฅผ ์ ๊ณตํ๋ค.
StrongParameters
StrongParameters๋ ๋๋ ํ ๋น ์ทจ์ฝ์ฑ์ ๋ํ ํ์ดํธ ๋ฆฌ์คํธ ๋์ฑ ๋ฐฉ๋ฒ์ด๋ค. ํ๋ ๊ฐ์ ์ผ๊ด ์ค์ ํ๊ธฐ ์ ์ ์ค์ ํด๋ ๊ด์ฐฎ์ ๊ฐ์ ๋ช ์์ ์ผ๋ก ์ ๋ ฅํด ์ฃผ๋ ๊ฒ์ด ํ์ํ๋ค.
์ค์บํด๋ฉ์ผ๋ก ์ฑ์ ๋ง๋ค์์ ๋ ์ปจํธ๋กค๋ฌ์ ํฌํจ๋๋ params.require(model).permit(attr, ..)
์ด StrongParameters์ด๋ค.
์์ฒญ์ ๋ค์ํ ์ ๋ณด ์ถ์ถ
ํํธ headers ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์์ฒญ์ ํฌํจ๋ ํค๋๋ฅผ ์ฝ๊ฒ ์ถ์ถํ ์ ์๋ค.
์ ๋ก๋๋ ํ์ผ์ ์ถ์ถํ ๋๋ params ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ด ๊ฒฝ์ฐ params ๋ฉ์๋๋ ์ ๋ก๋๋ ํ์ผ์ ๊ฐ์ฒด๋ก ๋ฆฌํดํ๋ค.
1) ํ์ผ ์์คํ ์ ํ์ผ์ ์ ๋ก๋ํ๋ ๊ฒฝ์ฐ ์์
ํผ์ multipart ์ต์ ์ ์ง์ ํด์ ํ์ผ์ ์ ๋ก๋ํ์. ๊ทธ ๋ค ์๋์ฒ๋ผ ๋ฐ์ผ๋ฉด ๋๋ค.
2) ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ์ผ์ ์ ๋ก๋ํ๋ ๊ฒฝ์ฐ ์์
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํฌ๊ธฐ๊ฐ ํฐ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ ๋ํด์๋ ์ฅ๋จ์ ์ ๋ฐ์ ธ์ผํ๋ค.
์ฅ์ : ํ์ผ ์ ๊ทผ ์ ์ฝ์ ๊ฑธ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ธฐ๋ฅ์ ๊ทธ๋๋ก ํ์ฉํ ์ ์๋ค.(ํ์ผ ์์คํ ์ผ๋ก ๊ฑธ๋ ค๋ฉด ๋ฒ๊ฑฐ๋ก์.)
๋จ์ : ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฒด์ ํฌ๊ธฐ๊ฐ ๋น๋ํ๋๋ค.
์๋ต
์ก์ ์์์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ํ ๋ฉ์๋๋ค์ด ์๋ค. ํธ์์ ์๋ต ๋ฉ์๋๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ ๋ฉ๋ชจํ์.
๋ฉ์๋ | ์ค๋ช |
render | ํ ํ๋ฆฟ ํธ์ถ ๋๋ ๊ธ์/์คํฌ๋ฆฝํธ ์ถ๋ ฅ ๋ฑ, ๋ฒ์ฉ์ ์ธ ์ถ๋ ฅ |
redirect_to | ์ง์ ๋ ์ฃผ์๋ก ์ฒ๋ฆฌ๋ฅผ ๋ฆฌ๋ค์ด๋ ํธ |
send_file | ์ง์ ๋ ํ์ผ์ ์ถ๋ ฅ |
send_data | ์ง์ ๋ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅ |
render ๋ฉ์๋
์ก์ ์์ ๋ช ์์ ์ผ๋ก ์๋ต ๋ฉ์๋๋ฅผ ํธ์ถํ์ง ์์ผ๋ฉด ์๋์ผ๋ก render ๋ฉ์๋๊ฐ ํธ์ถ๋์ด ํ ํ๋ฆฟ ํ์ผ์ ์คํํ๊ฒ ๋๋ค.
render ๋ฉ์๋๋ ํ ํ๋ฆฟ์ ํธ์ถํ๊ฑฐ๋ ์๋ต์ ์ธ๋ผ์ธ์ผ๋ก ์ค์ ํ๋ ๋ฑ ๋ค์ํ ์ต์ ์ ๊ฐ์ง๊ณ ์๋ค. ํ์์ ๊ฒฝ์ฐ MVC ๊ด์ ์์ ์ด๊ธ๋๋ ์ฃผ์ํ์. ๋๋ฒ๊ทธ์ฉ์ผ๋ก๋ง ์ธ ๊ฒ.
! ๋ทฐ์ yield ๊ตฌ๊ฐ ํ๋๋ง ์๋๋ฐ render๋ฅผ ์ฌ๋ฌ๋ฒ ํธ์ถํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ ์ฃผ์ํ์.
! render๋ฅผ head ๋ฉ์๋์ฒ๋ผ ์๋ต ์ํ๊ฐ์ ๋ฐ๋ ์ฉ๋๋ก๋ ์ธ ์ ์๋ค.
redirect_to ๋ฉ์๋
redirect_to
๋ฉ์๋๋ ์ง์ ๋ ํ์ด์ง๋ก์ฒ๋ฆฌ๋ฅผ ๋ฆฌ๋ค์ด๋ ํธ์ํจ๋ค.
๋ฉ์๋์ ์ธ์๋ก ๋ค์ด๊ฐ๋ url์ ๋ฌธ์์ด ๋๋ ํด์ ํ์์ผ๋ก ์ง์ ํ๋ฉด ๋๋ค. ์์๋ฅผ ๋ณด์.
send_file ๋ฉ์๋
์ง์ ํ ๊ฒฝ๋ก์ ์๋ ํ์ผ์ ์ฝ์ด ๋ค์ฌ ๊ทธ ๋ด์ฉ์ ํด๋ผ์ด์ธํธ์๊ฒ ์ ์กํ๋ค.
! ์์ฒญ ์ ๋ณด๋ก ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ง์ ์ง์ ํ๋ฉด ์ฌ์ฉ์๊ฐ ์๋ฒ ๋ด๋ถ์ ํ์ผ์ ์ ๊ทผํ ์๋ ์๊ฒ๋๋ฏ๋ก ๊ต์ฅํ ์ํํ๋ค. ์๋ ๊ฐ์ ์ฝ๋๋ ํผํ์.
send_data ๋ฉ์๋
๋งค๊ฐ ๋ณ์๋ก ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ณ ์๋ตํ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ด๋๋ฆฌ ์๋ฃํ์ ์ถ์ถํ๊ณ ํด๋ผ์ด์ธํธ์๊ฒ ์๋ตํ๋ ๊ฒฝ์ฐ ๋ ์ฝ๋๋ฅผ ์ถ์ถํ๊ณ , ์ฝํ ์ธ ํ์ ์ ๋ํ๋ด๋ ํ๋(ctype ํ๋)๋ฅผ ๋งค๊ฐ ๋ณ์ type์, ๋ฐ์ด๋๋ฆฌ ํ๋๋ฅผ ๋งค๊ฐ ๋ณ์ data์ ์ ๋ฌํด์ฃผ๋ฉด ๋๋ค.
logger ๊ฐ์ฒด
logger ๊ฐ์ฒด๋ ๋ก๊ทธ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด Rails๊ฐ ์ ๊ณตํ๋ ๊ฐ์ฒด์ด๋ค. ๋ก๊ทธ์ ์ค์๋์ ๋ฐ๋ผ 6๊ฐ์ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๊ณ ์๋ค. ์๋๋ ์ฐ์ ์์๊ฐ ๋์ ์์์ ๋ฎ์ ์์ผ๋ก ์ ๋ฆฌํ ๋ฉ์๋.
unknown(msg)
: ์ ์ ์๋ ์ค๋ฅfatal(msg)
: ์น๋ช ์ ์ธ ์ค๋ฅerror(msg)
: ์ค๋ฅwarn(msg)
: ๊ฒฝ๊ณinfo(msg)
: ์ ๋ณดdebug(msg)
: ๋๋ฒ๊ทธ ์ ๋ณด
๋ก๊ทธ ์ถ๋ ฅ ๋ ๋ฒจ์ ๋ณ๊ฒฝํ๋ ค๋ฉด development.rb
์ config.log_level = :error
๊ฐ์ ๋ด์ฉ์ ์ถ๊ฐํ๋ฉด ๋๋ค. ๋ํ filter_parameter_logging.rb
๋ฅผ ์์ ํ์ฌ ํจ์ค์๋ ๋ฑ์ ํ์ผ์ ๋ก๊ทธ์ ๊ธฐ๋ก๋์ง ์๋๋ก ์ค์ ํ ์๋ ์๋ค.
HTML ์ด์ธ์ ์๋ต ์ฒ๋ฆฌ
์ถ์ถํ ๋ชจ๋ธ์ ๋ด์ฉ์ XML ๋๋ JSON ํ์์ผ๋ก ์ถ๋ ฅํ๋ ๊ฒ์ ๊ต์ฅํ ๊ฐ๋จํ๋ค.
render ๋ฉ์๋์ xml ๋๋ json ์ต์ ์ ์ง์ ํ๊ธฐ๋ง ํ๋ฉด ๋๋ค. ๊ฐ๋ น xml ์ต์ ์ ์ง์ ํ๊ณ ์ผ๋ฐ์ ์ธ ๋ชจ๋ธ์ ๋ฃ์ด์ฃผ๋ฉด ์๋ ์ฒ๋ฆฌ๋ฅผ ์๋์ผ๋ก ์ํํ๋ค.
to_xml
๋ฉ์๋๋ก ๋ชจ๋ธ์ XML ํ์์ผ๋ก ๋ณํContent-Type ํค๋๋ฅผ "application/xml"๋ก ์ง์
๊ทธ๋ฌ๋ ์ด์ฒ๋ผ render ๋ฉ์๋์ json๊ณผ xml ์ต์ ์ ์ง์ ํด์ JSON ๋๋ XML ํ์์ ์๋ต์ ์์ฑํ๋ ๊ฒ์ ํธ๋ฆฌํ์ง๋ง, ๊ฒฐ๊ณผ ์์ฑ์ ๋ทฐ์์ ์ฒ๋ฆฌํ๋ค๋ MVC์ ๊ธฐ๋ณธ ์ ์ฑ ์๋ ์๋ฐ๋๋ค. ๋ํ, json๊ณผ xml ์ต์ ์ผ๋ก ๋ชจ๋ธ์ ์ถ๋ ฅํ๋ ๋ฐฉ์์ ๋ชจ๋ธ์ ๋ด์ฉ์ ๊ธฐ๊ณ์ ์ผ๋ก ๋ณํํ๋ ๊ฒ๋ฟ์ด๋ฏ๋ก ์ํ๋ ํ์์ ๋ง๋ค์ด ๋ด๋ ๋ฐ๋ ๋ฌธ์ ๊ฐ ์๋ค.
ํ
ํ๋ฆฟ์ผ๋ก JSON๊ณผ XML ๋ฐ์ดํฐ ์์ฑ - Jbuilder/Builder
ERB๋ก HTML ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ ๊ฒ์ฒ๋ผ ํ ํ๋ฆฟ์ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ JSON๊ณผ XML ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค. ์ด๋ฅผ ์์ ํ๋ ๊ฒ์ด ๋ฐ๋ก JBuilder์ Builder ํ ํ๋ฆฟ์ด๋ค. ๊ฐ๊ฐ JSON ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋๋ฐ, XML ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ ๋ฐ์ ํนํ๋ ํ ํ๋ฆฟ์ด๋ค.
ํํธ Builder์ ์๋ ๋ทฐ ํฌํผ์ธ atom_feed ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด Atom ํผ๋๋ฅผ ์ฝ๊ฒ ์์ฑํ ์ ์๋ค.
๋ฉํฐ ํฌ๋งท์ผ๋ก ์ถ๋ ฅ - response_to ๋ฉ์๋
Rails์์ ๋ฉํฐ ํฌ๋งท์ ์ฌ์ฉํ ๋๋ ERB, Jbuilder, Builder, Ruby ๋ฑ์ ํ ํ๋ฆฟ์ ์ฌ์ฉํด ์ํ๋ ๋ทฐ๋ฅผ ์ฌ๋ฌ ๊ฐ ์ค๋นํด๋๋ ๊ฒ์ด ๊ธฐ๋ณธ์ด๋ค.
ํ์ง๋ง ์๋ ๊ฒฝ์ฐ์๋ respond_to
๋ฉ์๋๋ฅผ ์ด์ฉํด ๊ฐ๋จํ๊ฒ ๋ถ๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋ค.
๋๋ฒ๊ทธ ์ ์ฉ ์ค๋ฅ ๊ธ์๋ฅผ ์ถ๋ ฅํ๊ณ ์ถ์ ๊ฒฝ์ฐ
ํ ํ๋ฆฟ์ ์ค๋นํ ๊ฒ๋ ์๋ ๊ฒฝ์ฐ
๊ฐ๊ฐ์ ํ์์ ๋ฐ๋ผ ๋ฆฌ๋ค์ด๋ ํธ๋ฅผ ํ๊ณ ์ถ์ ๊ฒฝ์ฐ
ํค๋๋ง ์ถ๋ ฅํ๊ณ ์ถ์ ๊ฒฝ์ฐ
respond_to
๋ฉ์๋์ ๋ด๋ถ ๋ธ๋ก์๋ format.type ํ์์ผ๋ก ์ํ๋ ํ์ type์ ์ ๋๋ค. ์ดํ statements ๋ถ๋ถ์๋ ํ์์ ๋ฐ๋ผ ์ํ๋ ์ฒ๋ฆฌ ์ฝ๋๋ฅผ ์
๋ ฅํ๋ค.
์ด ๋ respond_to
๋ฉ์๋์์ ์ฌ์ฉํ ์ ์๋ ํ์์ Rails์ actions_dispatch/http/mime_types.rb
์ ์ ์๋์ด ์๋ค. ๋ง์ฝ ๊ธฐ์กด์ ์ ์๋ ํ์ ์ธ์ ๋ค๋ฅธ ํ์์ ์ฌ์ฉํ๊ณ ์ถ์ ๊ฒฝ์ฐ์๋ /config/initializers/mime_types.rb
์์ ์๋ ํ์์ผ๋ก ํฌ๋งท์ ๋ฑ๋กํ๋ฉด ๋๋ค.
์ํ ๊ด๋ฆฌ
์ํ ๊ด๋ฆฌ๋ ์ฌ๋ฌ ๊ฐ์ ํ์ด์ง(์ก์ ) ์ฌ์ด์์ ์ ๋ณด๋ฅผ ์ ์งํ๊ธฐ ์ํ ๊ตฌ์กฐ๋ฅผ ๋งํ๋ค. ์ํ ๊ด๋ฆฌ๊ฐ ํ์ํ ์ด์ ๋ HTTP์ ํน์ฑ์ ๊ธฐ์ธํ๋ค.
HTTP๋ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์์ฒญ์ ๋ฐ์ผ๋ฉด ์๋ฒ์์ ์๋ต์ ๋ณด๋ด๊ณ ๋๋๋ค. ๋ฐ๋ผ์ ๊ฐ์ ํด๋ผ์ด์ธํธ์์ ์์ฒญ์ ์ฌ๋ฌ ๋ฒ ๋ณด๋ด๋ ๊ทธ๋ฌํ ์์ฒญ์ ๋์ผํ ๊ฒ์ผ๋ก ์ธ์ํ์ง ๋ชปํ๋ค. ์ฆ, HTTP๋ ๋ฌด์ํ ํ๋กํ ์ฝ(Stateless protocol)๋ก ์ํ๋ฅผ ์ ์งํ์ง ์๋ ํ๋กํ ์ฝ์ด๋ค.
ํ์ง๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด ๋๋ ํน์ ํ ๊ธฐ๋ฅ์์ ์ฌ์ฉ์๊ฐ ๋๊ตฌ์ธ์ง๋ผ๋ "์ํ"๋ฅผ ์ ์งํด์ผํ ์ํฉ์ ๋ง๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ํ์ด์ง์ ์ ๊ทผํ ๋๋ง๋ค ๋ก๊ทธ์ธ์ ํด์ผํ๊ธฐ ๋๋ฌธ์ด๋ค.
Rails๋ ์๋ HTTP์ ์๋ ์ํ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์ถฉํ๊ณ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ์๋ค.
๊ธฐ๋ฅ | ์ค๋ช |
์ฟ ํค | ๋ธ๋ผ์ฐ์ ์ ์ ์ฅ๋๋ ์์ ๊ธ์ ์ ๋ณด(Rails ์ด์ธ์ ํ๊ฒฝ์์๋ ์ฌ์ฉํ ์ ์๋ ๋ฒ์ฉ์ ์ธ ํํ์ ๊ด๋ฆฌ ๋ฐฉ๋ฒ) |
์ธ์ | ์ฟ ํค, ์บ์, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ์ ์ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๊ตฌ์กฐ(๊ฐ์ฅ ์์ฃผ ์ฌ์ฉํ๋ ๊ด๋ฆฌ ๋ฐฉ๋ฒ) |
ํ๋์ | ํ์ฌ์ ๋ค์ ์์ฒญ์์๋ง ์ ์ง๋๋ ํน๋ณํ ํํ์ ์ธ์ ์ ๋ณด |
๋ฌผ๋ก ์ฟผ๋ฆฌ ์ ๋ณด ๋๋ ์จ๊ฒจ์ง ํ๋ ๋ฑ์ ๊ธฐ๋ฅ๋ ์ํ ๊ด๋ฆฌ์ ํ ๋ฐฉ๋ฒ์ธ๋ฐ ์ด๊ฒ๋ค์ ์ฌ์ฉ์ด ๊ต์ฅํ ํ์ ์ ์ด๋ฏ๋ก ์ ์ธํด๋ณธ๋ค.
์ฟ ํค ์ถ์ถ๊ณผ ์ค์ ํ๊ธฐ - cookies ๋ฉ์๋
์ฟ ํค๋ ํด๋ผ์ด์ธํธ ์ชฝ์ ์ ์ฅ๋๋ ๊ฐ๋จํ ํ ์คํธ ํ์ผ์ด๋ค. ์ฟ ํค๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ํ์ด์ง์ ๊ฑธ์ณ ์ฌ์ฉ์๋ฅผ ์๋ณํ๊ฑฐ๋, ํด๋ผ์ด์ธํธ ๋จ์๋ก ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
์ฟ ํค๋ฅผ ์ค์ ํ ๋๋ cookies ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
cookies ๋ฉ์๋์ ์ค์ ๊ฐ๋ฅํ ์ต์ ๊ณผ ํจ๊ป ์์๋ฌ์ผํ ์ฌ์ค์ ๋ฉ๋ชจํ์๋ฉด ์๋์ ๊ฐ๋ค.
values, expires๋ ์ฌ์ค์ ๋ฐ๋์ ์ ๋ ฅํด์ผ ํ๋ ์ต์ ์ด๋ค. expires ์ต์ ์ ์๋ตํ๋ฉด ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ซํ ๋ ์ฟ ํค๋ ํจ๊ป ์ฌ๋ผ์ง๋ค๋ ์ ์์ ์ฃผ์ํด์ผํ๋ค.
domain๊ณผ path๋ ์ฟ ํค๊ฐ ์ ํจํ ๋๋ฉ์ธ๊ณผ ๊ฒฝ๋ก๋ฅผ ์ค์ ํ๋ค. ๋๋ฉ์ธ ์ด๋ฆ์ ๊ณต์ ํ๋ ์๋ฒ๋ฅผ ์ด์ฉํ๋ ๊ฒฝ์ฐ, ์ฟ ํค๊ฐ ๋ค๋ฅธ ์ฌ์ฉ์์๊ฒ ์ ์ถ๋ ์ ์์ผ๋ฏ๋ก path๋ ๋ฐ๋์ ์ง์ ํด๋ฌ์ผ ํ๋ค.
secure๋ ํต์ ์ ์ํธํํ ๊ฒฝ์ฐ์๋ true๋ก ์ ๋ ฅํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ํธํ๋์ง ์์ ํ์ด์ง๊ฐ ํผ์ฌํ๋ ๊ฒฝ์ฐ์๋ ์ํธํ๋ ์ฟ ํค๋ ์ก์ ๋์ง ์์ผ๋ฏ๋ก ์์ ํ๋ค.
httponly๋ HTTP ํต์ ์ผ๋ก๋ง ์ ๊ทผํ ์ ์๋ HTTP ์ฟ ํค๋ฅผ ์ ํจํํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ๋ก๋ถํฐ ์ฟ ํค์ ์ ๊ทผํ ์ ์๊ฒ ๋๋ฏ๋ก ํฌ๋ก์ค ์ฌ์ดํธ ์คํฌ๋ฆฝํ ์ทจ์ฝ์ฑ์ ์ด์ฉํ ์ฟ ํค ๋์ฒญ์ ๋ง์ ์ ์๋ค.
permanent
์ encrypted
๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์์ํ ์ฟ ํค์ ์ํธํ ์ฟ ํค๋ฅผ ์์ฑํ ์ ์๋ค.
์์ํ ์ฟ ํค๋ ์ ํํ ๋งํ๋ฉด ์ ํจ ๊ธฐ๊ฐ์ด 20๋
์ผ๋ก ์ค์ ๋ ์ฟ ํค์ด๋ค. expire ์ต์
์ด ์ง์ ๋ ๊ฒฝ์ฐ์๋ permanent
์ค์ ์ด ์ฐ์ ๋๋ค. ํธ๋ฆฌํ์ง๋ง ์ ํจ ๊ธฐ๊ฐ์ด ๊ธด ์ฟ ํค๋ ๋ณด์์ ์ธ ์ธก๋ฉด์์ ์ข์ง ์์ผ๋ฏ๋ก ๋จ์ฉํ๋ฉด ์๋๋ค.
์ํธํ ์ฟ ํค๋ฅผ ์ฌ์ฉํ๋ฉด ์ฟ ํค๋ฅผ ๋ณด๋ค ์์ ํ๊ฒ ์ฌ์ฉํ ์ ์๋ค. ์ด ๋ ์ฟ ํค ์ํธํ๋ ํด๋
์ ์ฌ์ฉํ๋ ํ ํฐ์ config/initializers/secret_token.rb
์ Rails.application.config.secret_key_base
๋งค๊ฐ ๋ณ์๋ก ์ค์ ํด๋ฌ์ผํ๋ค.
์๋ ์ฒ๋ผ ์์ฑํ๋ฉด ์์์ฑ ์ฟ ํค์ ์ํธํ ์ฟ ํค๋ฅผ ๋์์ ์ค์ ํ ์ ์๋ค.
์ธ์
์ฌ์ฉ - session ๋ฉ์๋
ํ์ด์ง๋ผ๋ฆฌ์ ์ ๋ณด๋ฅผ ๊ณต์ ํ๊ธฐ ์ํด ์ฟ ํค ์ธ์๋ ์ธ์ ์ด๋ผ๋ ๊ฒ์ ์ ๊ณตํ๋ค. ์ธ์ ์ด๋, ์ฌ์ฉ์(ํด๋ผ์ด์ธํธ) ๋จ์๋ก ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ๊ธฐ๋ฅ์ผ๋ก ์ต๊ทผ์ ํ๋ ์์ํฌ๋ ๋๋ถ๋ถ ์ง์ํ๊ณ ์๋ ๊ธฐ๋ฅ์ด๋ค.
Rails์ ์ธ์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฟ ํค์ ๋ชจ๋ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ฏ๋ก ํ์ค ํํ์์๋ ์ฟ ํค์ ๊ฑฐ์ ์ฐจ์ด๊ฐ ์๋ค. ํ์ง๋ง ์ธ์ ์์๋ ์ค์ ์ ๋ณ๊ฒฝํด์ ์ ์ฅ ๋์(๋ฐ์ดํฐ ์ ์ฅ์)์ ๋ณ๊ฒฝํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ ์ด๋ ค์๋ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์งํ๊ณ ์ถ์ ๊ฒฝ์ฐ์๋ ์ผ๋จ ์ธ์ ์ ์ฐ์ ์ ์ผ๋ก ์ฌ์ฉํ์.
์ธ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๋ฐ์ดํฐ ์ ์ฅ์๋ ์๋์ ๊ฐ๋ค.
์ ์ฅ ๋์ | ์ค๋ช |
์ฟ ํค(CookieStore) | ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ํด๋ผ์ด์ธํธ์ ์ฟ ํค๋ก ์ธ์ ์ ์ ์ฅ(๊ธฐ๋ณธ). ๊ณ ์์ผ๋ก ๋์ํ์ง๋ง ํด๋ผ์ด์ธํธ ์ธก์ ์ ์ฅํ๋ฏ๋ก ๋น๋ฐ ์ ๋ณด ์ ์ฅ์๋ ์ ํฉํ์ง ์์. ์ ์ฅ ์ฌ์ด์ฆ๋ 4KB๋ก ์ ํ๋จ. |
์บ์(CacheStore) | ์๋ฒ ์ฌ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์บ์์ ์ธ์ ์ ์ ์ฅ. ๊ทธ๋ค์ง ์ค์ํ์ง ์์ ์๋ช ์ด ์งง์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ์ฌ์ฉ. |
๋ฐ์ดํฐ๋ฒ ์ด์ค(ActiveRecordStore) | ์๋ฒ ์ฌ์ด๋ ์กํฐ๋ธ ๋ ์ฝ๋๋ก ์ ๊ทผํ ์ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ธ์ ์ ์ ์ฅ. ์๋ฒ์ ์ ์ฅํ๋ฏ๋ก ๋น๋ฐ ์ ๋ณด๋ฅผ ์ ์ฅํ ๋ ์ ํฉํจ. |
์ธ์ ์ฒ๋ฆฌ๋ ์๋ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
์ฒซ ๋ฒ์งธ ์์ฒญ (ํด๋ผ์ด์ธํธ -> ์๋ฒ)
์ธ์ ID๋ฅผ ๋ฐ๊ธ (์๋ฒ -> ํด๋ผ์ด์ธํธ)
๋ ๋ฒ์งธ ์ดํ๋ถํฐ์ ์์ฒญ (ํด๋ผ์ด์ธํธ -> ์๋ฒ)
์ธ์ ID๋ฅผ ํค๋ก ์ธ์ ์ ๋ณด๋ฅผ ์ถ์ถ (์๋ฒ)
์ธ์ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅ (์๋ฒ -> ํด๋ผ์ด์ธํธ)
ํฌ์ธํธ๋ ์๋ฒ ์ฌ์ดํธ์์ ์ธ์ ์ ๊ด๋ฆฌํ ๋๋ ํค๋ ์ฟ ํค๋ฅผ ์ฌ์ฉํ๋ค๋ ์ ์ด๋ค. ์ด๋ ๊ฒ ํด๋ผ์ด์ธํธ์๊ฒ ๋ฐํ๋๋ ์ฟ ํค๋ฅผ ์ธ์ ID๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์๋ฒ ์ธก์์๋ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ฐ์ก๋ ์ธ์ ID๋ฅผ ํค๋ก ์ฌ์ฉ์๋ฅผ ์๋ณํ๊ณ , ํด๋น ์ฌ์ฉ์์ ์ธ์ ์ ๋ณด๋ฅผ ์ถ์ถํ๋ค.
flash ๋ฉ์๋
๋ฆฌ๋ค์ด๋ ํธ ์ฒ๋ฆฌ๋ฅผ ์ ํ๋ก ์ผ์์ ์ผ๋ก๋ง ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ถ์ ๋ ์ด๋ค.
์๋ฅผ ๋ค์ด ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ ๋๋ ์์ ํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌ๋ค์ด๋ ํธ ๋์์ ํ๋ฉด์์ "~์ ์ ์ฅ์ ์ฑ๊ณตํ์ต๋๋ค."์ ๊ฐ์ด ํ์ํ๊ณ ์ถ์ ๊ฒฝ์ฐ!
ํ๋์๋ redirect_to ๋ฉ์๋์ ํจ๊ป ์ฌ์ฉํด์ผํ๋ค. ์๋์ฒ๋ผ redirect_to ๋ฉ์๋์ notice ์ต์ ์ผ๋ก ์ง์ ํ ๋ฌธ์์ด์ ๋ฆฌ๋ค์ด๋ ํธ ๋์์ ํ๋์๋ก ์ ๋ฌ๋๋ค.
ํํฐ
ํํฐ๋ ์ก์ ๋ฉ์๋๊ฐ ์คํ๋๊ธฐ ์ด์ ๊ณผ ์ดํ์ ๋ถ๊ฐ ์ฒ๋ฆฌ๋ฅผ ์ํด์ ์ฌ์ฉํ๋ค. ์ฌ๋ฌ ์ก์ ์ ๊ณตํต์ ์ธ ์ฒ๋ฆฌ๋ฅผ ์ก์ ๋ง๋ค ๊ฐ๋ณ์ ์ผ๋ก ์์ฑํ ํ์ ์์ด, ํ๊บผ๋ฒ์ ์์ฑํ ์ ์๋ค.
before
, after
, around
ํํฐ๋ฅผ ์ฌ์ฉํ์.
ํํฐ๋ ์ ์๋ ์ปจํธ๋กค๋ฌ ๋๋ ํด๋น ์ปจํธ๋กค๋ฌ์์ ํ์๋ ์ปจํธ๋กค๋ฌ์ ์ ์ฉ๋๋ค. ๋ถ๋ชจ ํด๋์ค -> ์์ ํด๋์ค ์์๋ก ํํฐ๊ฐ ์คํ๋๋ค. ๋ฌผ๋ก skip_xxxx_action
๋ฉ์๋๋ก ๋ถ๋ชจ ์ปจํธ๋กค๋ฌ๋ก๋ถํฐ ์ ๋ฌ๋ ํํฐ๋ฅผ ์ ๊ฑฐํ ์๋ ์๋ค.
์ ํ๋ฆฌ์ผ์ด์
๊ณตํต ๊ธฐ๋ฅ ์ ์ - Application ์ปจํธ๋กค๋ฌ
Application ์ปจํธ๋กค๋ฌ๋ ๋ชจ๋ ์ปจํธ๋กค๋ฌ์ ๋ถ๋ชจ ํด๋์ค๊ฐ ๋๋ฉฐ, ๋ชจ๋ ์ปจํธ๋กค๋ฌ์ ๊ทผ์์ด ๋๋ค๋ ์๋ฏธ์์ ๋ฃจํธ ์ปจํธ๋กค๋ฌ๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค.
์์น์ ์ผ๋ก Application ์ปจํธ๋กค๋ฌ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ณตํต ๊ธฐ๋ฅ๋ง ์์ฑํ๋ ๊ฒ์ด ์ข๋ค.
์์
๊ฐ๊ฐ์ ์ปจํธ๋กค๋ฌ์์ ์ฌ์ฉํ ํฌํผ๋ฉ์๋
๋ชจ๋ (๋๋ ๋๋ถ๋ถ) ์ปจํธ๋กค๋ฌ์์ ์ด์ฉํ๋ ํํฐ
์ ํ๋ฆฌ์ผ์ด์ ์ ๊ณตํต ์ค์
๊ณตํต ํํฐ๋ก ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๊ฒ๋ ์ข์ ์์๋ค. Application ์ปจํธ๋กค๋ฌ์ before ํํฐ์ check_logined ๋ฅผ ์ค์ ํ๋ฉด ๋ชจ๋ ์ปจํธ๋กค๋ฌ์์ ์ธ์ฆ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค. ์ด ๋, login_controller์์๋งํผ์ skip_before_action :check_logined
ํ๋๋ก ํด์ผํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ก๊ทธ์ธ ํ์ด์ง์์ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ๋ฌดํ ๋ฆฌ๋ค์ด๋ ํธ ๋ ์ ์์ผ๋ฏ๋ก ์ฃผ์ํด์ผํ๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด ๋๋ ์ฌ๋ฌ ๊ฐ์ ์ปจํธ๋กค๋ฌ๋ ๋ชจ๋ธ์์ ๊ณตํต์ผ๋ก ์ฌ์ฉํ๋ ๋ก์ง์ด ์๋ค๋ฉด ์ด๋ฐ ๊ณตํต ๋ก์ง์ ๋๋ ํ์ค ์ฅ์๊ฐ ์๋ค. ๊ณตํต ๋ก์ง์ ๋ชจ๋๋ก ๋ง๋ค์ด ์๋ ๊ฒฝ๋ก์ ๋ฃ์ด๋์.
app/controllers/concerns
app/models/concerns
ํ์ต ๋ด์ฉ์ ๋ํ ๊ฐ์ธ์ ์ธ ์ดํ
Rails ๊ณต์๋ฌธ์ ํํ ๋ฆฌ์ผ์์ ์ดํด๊ฐ ์ ๊ฐ๋ ๋ถ๋ถ์ ํ ๋ก ์ ํตํด ๋ต์ ๊ตฌํด๋ณด๋ คํ์์ผ๋, ๊ฒฐ๊ตญ ์ฐ๋ฆฌ๋ผ๋ฆฌ ๋ ผ์ํด์๋ ๊ฐ์ค๋ง ์ธ์ธ ์ ์์ ๋ฟ, ์ค์ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌํํ๋ ๊ณผ์ ์์ ๊ฒ์ฆํด์ผํ๋ค๋ ์ ๋ง ์ธ์ํ์ต๋๋ค.
ํ๋ฃจํ๋ฃจ ์กฐ๊ธ์ด๋ผ๋ ์๋ผ๋ ๊ฒ. ์ํด๊ฐ ๋์์ด๋ ํด์ผ๋ ๊ฒ์ ๋ง์ฐฌ๊ฐ์ง ์ ๋๋ค. ๋ค๋ง ๊ฐ์ฅ์ผ๋ก์ ์ทจ์ ์ ํด์ผํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฌ ์ด๋ ฅ์, ์ฝ๋ฉํ ์คํธ ๋ฑ์ ์ค๋นํด์ผ๊ฒ ๋ค์.
๋ค์ ํ์ต ๊ณํ
๋ฃจ๋น์จ๋ ์ผ์ฆ
Last updated