2020-12-21(Mon)

  1. ํ•™์Šต ๋‚ ์งœ // 2020-12-21(์›”)

  2. ํ•™์Šต์‹œ๊ฐ„ // 9:00~22:00

  3. ํ•™์Šต ๋ฒ”์œ„ ๋ฐ ์ฃผ์ œ // Getting started with Rails

  4. ๋™๋ฃŒ ํ•™์Šต ๋ฐฉ๋ฒ• // -

  5. ํ•™์Šต ๋ชฉํ‘œ // Getting started with Rails ๋‹ค ํ›‘๊ธฐ

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

๋ฃจ๋น„์˜จ๋ ˆ์ผ์Šค ํŠœํ† ๋ฆฌ์–ผ์ธ Getting started with Rails๋ฅผ ๋น ๋ฅด๊ฒŒ ํ›‘์—ˆ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜์ฒ˜๋Ÿผ ๊ณผ์ •์„ ์ •๋ฆฌํ•˜๋‹ค๊ฐ€ ํ•™์Šต ํšจ์œจ์ด ๋–จ์–ด์ง€๋Š” ๊ฑธ ๋Š๊ปด์„œ ์ •๋ฆฌํ•˜๋Š”๊ฑธ ๋‚ด๋ ค๋†“์•˜์Šต๋‹ˆ๋‹ค.

Rails guides

๋ฃจ๋น„์˜จ๋ ˆ์ผ์Šค ํŠœํ† ๋ฆฌ์–ผ์ธ Getting started with Rails๋ฅผ ๋น ๋ฅด๊ฒŒ ํ›‘๋Š”๋‹ค.

๋ ˆ์ผ์Šค๋ž€?

๋ฃจ๋น„ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์›น์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.

'The Rails Way'๋ฅผ ํ•™์Šตํ•˜๋ฉด ์ƒ์‚ฐ์„ฑ์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋  ๊ฒƒ์ด๋‹ค! 'The Rails Way'๋Š” ๋‹ค์Œ ๋‘ ๊ฐœ์˜ ๊ฐ€์ด๋“œ ์›์น™์„ ํฌํ•จํ•œ๋‹ค.

  • Don't Repeat Yourself(DRY)

    ๋ชจ๋“  ์ง€์‹์€ ํ•˜๋‚˜์˜ ์‹œ์Šคํ…œ ์•ˆ์—์„œ ์œ ์ผํ•ด์•ผ ํ•˜๊ณ , ๋ชจํ˜ธ์„ฑ์ด ์—†์–ด์•ผํ•˜๋ฉฐ, ๊ถŒ์œ„๋ฅผ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.

  • Convention Over Configuration

    ๋ ˆ์ผ์ฆˆ๋Š” ์›น์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์‹œ ์ตœ์„ ์˜ ๋ฐฉ๋ฒ•์„ ์„ค์ • ๋‚ด์šฉ์œผ๋กœ ๋ช…์‹œํ•˜์ง€ ์•Š๋Š”๋‹ค, ๋Œ€์‹  ๋””ํดํŠธ ์ปจ๋ฒค์…˜์œผ๋กœ ์ œ์‹œํ•œ๋‹ค.

๋ ˆ์ผ์Šค ํ”„๋กœ์ ํŠธ ์ƒ์„ฑํ•˜๊ธฐ

์šฐ์„  ruby ๋ฅผ ์ตœ์†Œ 2.5.0 ์ด์ƒ ๋ฒ„์ „์œผ๋กœ ์„ค์น˜ํ•˜์ž.

mac os ์นดํƒˆ๋ฆฌ๋‚˜์˜ ๊ฒฝ์šฐ ruby 2.6.0 ๋ฒ„์ „์ด ๊ธฐ๋ณธ์œผ๋กœ ์„ค์น˜๋˜์–ด์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ ํŒ€์€ ruby 2.7.1 ๋ฒ„์ „์œผ๋กœ ์ง„ํ–‰ํ•˜๊ธฐ๋กœ ํ•˜์˜€์œผ๋ฏ€๋กœ ๋ณ„๋„๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์ž‘์—…์„ ๊ฑฐ์ณค๋‹ค.

์ด ๋•Œ ๊ทธ๋ƒฅ brew๋กœ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ๊ผฌ์ด๋Š” ๋“ฑ ๋Œ€์ฐธ์‚ฌ๊ฐ€ ๋‚  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

๋ฃจ๋น„ ๋ฒ„์ „ ๊ด€๋ฆฌ RVM ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•์„ ์ฐธ๊ณ ํ•˜์—ฌ RVM(ruby version Manager)์„ ํ†ตํ•ด ์—…๋ฐ์ดํŠธํ•˜์ž!

์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑํ•œ ๋’ค์— ๋ ˆ์ผ์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์กฐ์— ๋”ฐ๋ผ ๋‹ค์ˆ˜์˜ ํŒŒ์ผ๊ณผ ํด๋”๊ฐ€ ์ž๋™ ์ƒ์„ฑ๋œ๋‹ค. ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

ํŒŒ์ผ/ํด๋”

์šฉ๋„

app/

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ปจํŠธ๋กค๋Ÿฌ, ๋ชจ๋ธ, ๋ทฐ, ํ—ฌํผ, ๋ฉ”์ผ๋Ÿฌ, ์ฑ„๋„, ์ž‘์—… ๋ฐ ์• ์…‹์„ ํฌํ•จํ•œ๋‹ค.

bin/

์•ฑ์„ ์‹œ์ž‘ํ•˜๋Š” ๋ ˆ์ผ์Šค ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํฌํ•จํ•˜๋ฉฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์ •, ์—…๋ฐ์ดํŠธ, ๋ฐฐํฌ ๋˜๋Š” ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํฌํ•จ ํ•  ์ˆ˜ ์žˆ๋‹ค.

config/

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ผ์šฐํŠธ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“ฑ์„ ๊ตฌ์„ฑํ•œ๋‹ค. Configuring Rails Applications์— ์ž์„ธํžˆ ์„ค๋ช…๋˜์–ด ์žˆ๋‹ค.

config.ru

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ž™(Rack) ๊ธฐ๋ฐ˜ ์„œ๋ฒ„์˜ ๋ž™ ๊ตฌ์„ฑ. ๋ž™์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ Rack ์›น ์‚ฌ์ดํŠธ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.

db/

ํ˜„์žฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

Gemfile Gemfile.lock

์ด ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ ˆ์ผ์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ•„์š”ํ•œ ์ ฌ(gem) ์˜์กด์„ฑ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ํŒŒ์ผ์€ Bundler ์ ฌ์—์„œ ์‚ฌ์šฉํ•œ๋‹ค. Bundler์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ Bundler ์›น ์‚ฌ์ดํŠธ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค

lib/

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ํ™•์žฅ ๋ชจ๋“ˆ.

log/

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ๊ทธ ํŒŒ์ผ

package.json

์ด ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ ˆ์ผ์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ•„์š”ํ•œ npm ์ข…์†์„ฑ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ํŒŒ์ผ์€ Yarn์—์„œ ์‚ฌ์šฉํ•œ๋‹ค. Yarn์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ Yarn ์›น ์‚ฌ์ดํŠธ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.

public/

๋ˆ„๊ตฌ๋ผ๋„ ์ ‘๊ธ‰ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ํด๋”์ด๋‹ค. ์ •์  ํŒŒ์ผ ๋ฐ ์ปดํŒŒ์ผ ๋œ ์• ์…‹์„ ํฌํ•จํ•œ๋‹ค.

Rakefile

์ด ํŒŒ์ผ์€ ์ปค๋งจ๋“œ ๋ผ์ธ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํƒœ์Šคํฌ(task)๋ฅผ ์ฐพ์•„์„œ ๋กœ๋“œํ•œ๋‹ค. ํƒœ์Šคํฌ ์ •์˜๋Š” ๋ ˆ์ผ์Šค์˜ ๊ตฌ์„ฑ ์š”์†Œ ์ „์ฒด์— ๊ฑธ์ณ ์ •์˜๋œ๋‹ค. Rakefile์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋Œ€์‹  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ lib/tasks ๋””๋ ‰ํ† ๋ฆฌ์— ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•œ ํ›„ ์ž์‹ ์˜ ํƒœ์Šคํฌ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค.

README.md

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ ์„ค๋ช…์„œ์ด๋‹ค. ์ด ํŒŒ์ผ์„ ํŽธ์ง‘ํ•˜์—ฌ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์—๊ฒŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋Šฅ, ์„ค์ • ๋ฐฉ๋ฒ• ๋“ฑ์„ ์•Œ๋ ค ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

storage/

๋””์Šคํฌ ์„œ๋น„์Šค์šฉ ์•กํ‹ฐ๋ธŒ ์Šคํ† ๋ฆฌ์ง€ ํŒŒ์ผ. ์ด์— ๋Œ€ํ•ด์„œ๋Š” Active Storage Overview์—์„œ ๋‹ค๋ฃฌ๋‹ค.

test/

์œ ๋‹› ํ…Œ์ŠคํŠธ, ํ”ฝ์Šค์ณ(fixtures, ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ) ๋ฐ ๊ธฐํƒ€ ํ…Œ์ŠคํŠธ ์žฅ์น˜. ์ด๊ฒƒ๋“ค์€ Testing Rails Applications์—์„œ ๋‹ค๋ฃฌ๋‹ค.

tmp/

์ž„์‹œ ํŒŒ์ผ (์บ์‹œ(cache)์™€ pid ํŒŒ์ผ).

vendor/

๋ชจ๋“  ๋ฒค๋”(ํƒ€์‚ฌ) ์ฝ”๋“œ๋ฅผ ์œ„ํ•œ ์žฅ์†Œ์ด๋‹ค. ์ „ํ˜•์ ์ธ ๋ ˆ์ผ์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ๋ฒค๋”์—์„œ ์ œ๊ณตํ•˜๋Š” ์ ฌ์„ ์—ฌ๊ธฐ์— ํฌํ•จํ•œ๋‹ค.

.ruby-version

์ด ํŒŒ์ผ์—๋Š” ๊ธฐ๋ณธ ๋ฃจ๋น„ ๋ฒ„์ „์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

"Hello" ๋ฌธ์ž๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ตœ์†Œํ•œ ํ•˜๋‚˜์˜ controller(์ปจํŠธ๋กค๋Ÿฌ) ์™€ ํ•˜๋‚˜์˜ view(๋ทฐ) ๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค.

์ปจํŠธ๋กค๋Ÿฌ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ํŠน์ • ์š”์ฒญ๋ฅผ ๋ฐ›๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. Routing(๋ผ์šฐํŒ…) ์€ ์–ด๋–ค ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์–ด๋–ค ์š”์ฒญ์„ ๋ฐ›์„ ๊ฒƒ์ธ๊ฐ€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. ์ข…์ข… ํ•˜๋‚˜์˜ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ผ์šฐํŠธ๋กœ ์—ฐ๊ฒฐ๋˜๊ธฐ๋„ ํ•˜๋Š”๋ฐ ์ด ๋•Œ ํŠน์ • ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ผ์šฐํŠธ๋“ค์€ ๊ฐ๊ธฐ ๋‹ค๋ฅธ actions(์•ก์…˜) ์„ ํ˜ธ์ถœํ•˜์—ฌ ์„œ๋น„์Šคํ•œ๋‹ค. ์•ก์…˜์€ ์ •๋ณด๋ฅผ ๋ชจ์•„์„œ ๋ทฐ์— ์ œ๊ณตํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๋ทฐ๋Š” ์ด๋Ÿฌํ•œ ์ •๋ณด๋ฅผ ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ํ‘œ์‹œํ•˜๋Š”๋ฐ ์ค‘์š”ํ•œ ์ฐจ์ด์ ์€ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ๊ณณ์ด ๋ทฐ๊ฐ€ ์•„๋‹ˆ๊ณ  ์ปจํŠธ๋กค๋Ÿฌ ๋ผ๋Š” ์ ์ด๋‹ค. ๋ทฐ๋Š” ๋ฐ”๋กœ ์ด๋Ÿฌํ•œ ์ •๋ณด๋ฅผ ๋‹จ์ง€ ํ‘œ์‹œ๋งŒํ•ด์•ผ ํ•œ๋‹ค. ๋ณดํ†ต ๋ทฐ ํ…œํ”Œ๋ฆฟ์€ eRuby(Embeded Ruby)๋กœ ์ž‘์„ฑํ•˜๋Š”๋ฐ ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ๋ณด๋‚ด์ง€๊ธฐ ์ „์— ๋ ˆ์ผ์Šค ์—”์ง„์ด ์š”์ฒญ ์ฃผ๊ธฐ์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค.

4.3 ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ™ˆ ํŽ˜์ด์ง€ ์„ค์ •ํ•˜๊ธฐ

ํŠœํ† ๋ฆฌ์–ผ๋Œ€๋กœ ์ง„ํ–‰ํ•˜๊ณ  http://localhost:3000/articles ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ์ˆœ๊ฐ„ ์œ„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค!

error Command "webpack" not found ๋ผ๊ณ  ํ•˜์—ฌ, ์•„๋ž˜ ์ปค๋งจ๋“œ๋ฅผ ์ž…๋ ฅํ•˜์—ฌ webpack์„ ๋‹ค์šด๋กœ๋“œํ•ด๋ณด์•˜๋‹ค.

rails webpacker:install

๊ทธ๋Ÿฐ๋ฐ ์•„๋ž˜์ฒ˜๋Ÿผ gyp ERR! ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค.

์•„๋‹ˆ๋‚˜๋‹ค๋ฅผ๊นŒ webpacker ์„ค์น˜๋Š” ์™„๋ฃŒ๋˜์—ˆ์ง€๋งŒ http://loaclhost:3000/articles ์š”์ฒญ์ด ์ œ๋Œ€๋กœ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š๋Š”๋‹ค.

์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€๋ฅผ ์ฐฌ์ฐฌํžˆ ์ฝ์–ด๋ณด๋ฉด Xcode or CLT version ์ด ๊ฐ์ง€๋˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์›์ธ์ธ ๊ฒƒ์œผ๋กœ ์ถ”์ •๋œ๋‹ค.

์ด๋ฅผ ํžŒํŠธ์‚ผ์•„ ๊ฒ€์ƒ‰ํ–ˆ๋”๋‹ˆ macOS ์นดํƒˆ๋ฆฌ๋‚˜์˜ ๊ณ ์งˆ์ ์ธ ๋ฌธ์ œ๋กœ ๋ณด์ธ๋‹ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ xcode ์‚ญ์ œ ํ›„ ์žฌ์„ค์น˜๋ฅผ ์ง„ํ–‰ํ•˜์˜€๋”๋‹ˆ ๊น”๋”ํ•˜๊ฒŒ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค!

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

๋„ˆ๋ฌด ๋ชจ๋“  ๊ฒƒ์„ ์ •๋ฆฌํ•˜๋ฉด์„œ ํ•™์Šตํ•˜๋ ค๋Š” ์Šต๊ด€์„ ๋ฒ„๋ ค์•ผํ•˜๋Š”๋ฐ ํŒ€ ํ•™์Šต์„ ํ•˜๋ฉด์„œ ๋„์ง„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ๊ฐ€๋ณ๊ณ  ๋น ๋ฅด๊ฒŒ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค.

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

  • ๋ฃจ๋น„์˜จ๋ ˆ์ผ์ฆˆ ํ•™์Šต

Last updated