2021-02-10(Wed)

ํ•ญ๋ชฉ

๋‚ด์šฉ

ํ•™์Šต ๋‚ ์งœ

2021-02-10(์ˆ˜)

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

11:00~24:00

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

Active Admin gem, BCrypt gem, Rails Active Record, Backbone

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

Signup ๋ชจ๋“ˆ์„ ๊ตฌํ˜„์™„๋ฃŒํ•œ๋‹ค.

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

eunhkim, sanam, jujeong๋‹˜๊ณผ ํŽ˜์–ดํ”„๋กœ๊ทธ๋ž˜๋ฐ

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

Active admin์œผ๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ํ…Œ์ŠคํŠธ์— ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ•™์Šตํ–ˆ๋‹ค.

rails generate active_admin:resource ChatBan

์œ„ ๋ช…๋ น์–ด๋กœ active_admin์„ ํ™œ์šฉํ•˜๋ฉด ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  Password๋ฅผ ์•”ํ˜ธํ™”ํ•ด์„œ DB์— ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด BCrypt๋ฅผ ํ™œ์šฉํ–ˆ๋‹ค. ์•„๋ž˜๋Š” ๋‚ด๊ฐ€ ์ •๋ฆฌํ•œ BCrypt ํ™œ์šฉ ํ”Œ๋กœ์šฐ.

BCrypt๋Š” ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ๋ณตํ˜ธํ™”๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•ด์‹ฑ ํ›„ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ฒŒ ๋˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋”๋ผ๋„ ์›๋ณธ ๊ฐ’์„ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋•๋ถ„์— ๊ฐœ๋ฐœ์ž๊ฐ€ ๋‚˜์œ ๋งˆ์Œ์„ ๋จน๊ณ  ํŠน์ • ์œ ์ €์˜ Password ๋ ˆ์ฝ”๋“œ๋ฅผ ๋œฏ์–ด๋ณธ๋‹ค๊ณ  ํ•ด๋„ ๋ณตํ˜ธํ™”๋œ ์›๋ณธ Password๋ฅผ ์•Œ ์ˆ˜ ์—†๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด์ฃ .
โ€‹
๊ทธ๋Ÿผ ์œ ์ €๊ฐ€ Password๋ฅผ ์ž…๋ ฅํ–ˆ์„ ๊ฒฝ์šฐ ๋งž๋Š” Password์ธ์ง€ ์—ฌ๋ถ€๋Š” ์–ด๋–ป๊ฒŒ ํ™•์ธํ•˜๋Š๋ƒ! 
DB์— ์ €์žฅํ•ด๋’€๋˜ '๋””์ง€ํ„ธ ํ•‘๊ฑฐํ”„๋ฆฐํŠธ'๋กœ BCrypt::Password Object๋ฅผ ์ƒ์„ฑํ•œ ํ›„ == ์—ฐ์‚ฐ์ž๋กœ ๋น„๊ตํ•˜๋ฉด BCrypt::Password Object์˜ ๋‚ด๋ถ€ ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด  ํ•ด๋‹น password๊ฐ€ ๋งž๋Š”์ง€ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
โ€‹
๊ฒฐ๊ณผ์ ์œผ๋กœ ํšŒ์›๊ฐ€์ž…/๋กœ๊ทธ์ธ ์•”ํ˜ธ ์ฒ˜๋ฆฌ๋Š” ์•„๋ž˜ ๊ณผ์ •์œผ๋กœ ์ด๋ค„์ง‘๋‹ˆ๋‹ค.
โ€‹
1. ํšŒ์›๊ฐ€์ž…์‹œ ์ž…๋ ฅํ•œ password๋Š” BCrypt::Password.create ๋ฉ”์„œ๋“œ์— ์ธ์ž๋กœ ๋„˜๊ฒจ์ง€๊ณ , BCrypt::Password Object๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค.
2. ์ด BCrypt::Password Object์˜ 'Digital fingerprint'๋ฅผ String์œผ๋กœ DB์— ์ €์žฅํ•œ๋‹ค.
3. ์ดํ›„ ๋กœ๊ทธ์ธ์‹œ ์œ ์ €๊ฐ€ Password๋ฅผ ์ž…๋ ฅํ•˜๋ฉด, ํ•ด๋‹น ์œ ์ €์˜ DB Password ํ•„๋“œ์— ์ €์žฅํ•ด๋’€๋˜ 'Digital fingerprint'๋ฅผ ๋ถˆ๋Ÿฌ์˜จ๋‹ค. ์ด๋ฅผ BCrypt::Password.new ๋ฉ”์„œ๋“œ์˜ ์ธ์ž๋กœ ๋„˜๊ฒจ BCrypt::Password Object๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, ์ด Object์— ์œ ์ €๊ฐ€ ์ž…๋ ฅํ•œ Password๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ํ•ด์‹œ๊ฒ€์ฆํ•˜๋„๋ก ํ•œ๋‹ค.

์ฐธ๊ณ  1 ์ฐธ๊ณ  2

๋ฌธ์ œ)

๋ฒ„ํŠผ์„ ์—ฌ๋Ÿฌ๋ฒˆ ๋ˆ„๋ฅด๋ฉด ์ด๋ฒคํŠธ๊ฐ€ ์—ฌ๋Ÿฌ๋ฒˆ ํŠธ๋ฆฌ๊ฑฐ ๋˜์–ด๋ฒ„๋ฆฌ๋ฉฐ Appearance View์— ๋กœ๊ทธ์ธํ•œ ์œ ์ €๊ฐ€ ์—ฌ๋Ÿฌ๋ช… ์ƒ๊ฒจ๋ฒ„๋ฆฐ๋‹ค. ์ด๊ฑธ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ๊ฒƒ์ธ๊ฐ€?

ํ•ด๊ฒฐ)

๋ฐฉ๋ฒ•์„ ํ™•์ธํ•ด๋ณด๋‹ˆ ์ผ์ข…์˜ flag๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๊ตฌํ˜„๋„ ์šฉ์ดํ•˜๊ณ  ์ผ๋ฐ˜์ ์ธ ๊ฒƒ์ด๋ผ ํŒ๋‹จํ–ˆ๋‹ค.

button์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” view ๊ฐ์ฒด์— status ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. ์ดํ›„ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ์ ์˜ status ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๊ฐ’์„ ์กฐ์‚ฌํ•ด์„œ ๋™์ž‘ํ•  ์•ก์…˜์„ ๊ฒฐ์ •ํ•˜๊ณ , ๊ณง๋ฐ”๋กœ status ๊ฐ’์„ ์ˆ˜์ •ํ•ด์ฃผ๋Š” ์‹์œผ๋กœ ํ•ด๊ฒฐํ–ˆ๋‹ค.

Rails ํ…Œํฌ๋‹‰ ํ•œ ํ† ๋ง‰

์—ฐ๊ด€ ํ…Œ์ด๋ธ” ๊ฒ€์ƒ‰์‹œ ์ž๊ธฐ ์ž์‹ ์„ ์ฐธ์กฐํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด?

ํŠน์ • ์œ ์ €์™€ ๊ทธ ์œ ์ €์˜ ์นœ๊ตฌ๋“ค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์™€์•ผํ–ˆ๋‹ค. ์•„๋ž˜์ฒ˜๋Ÿผ ๋ช…์‹œํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

class Friendship < ApplicationRecord
  belongs_to :user
  belongs_to :friend, class_name: "User", foreign_key: "friend_id"
end
class User < ApplicationRecord
  has_many :friendships
  has_many :friends, through: :friendships, source: :friend
  ...
end

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

ํŽ˜์–ดํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ ๊ทน ํ™œ์šฉํ•˜๊ณ  ์žˆ๋Š”๋งŒํผ ์ปค๋ฐ‹ ๋กœ๊ทธ์— ๋‚ด ์ด๋ฆ„์„ ๋‚จ๊ธฐ๊ธฐ๋Š” ์‰ฝ์ง€ ์•Š์œผ๋‚˜, ๋™๋ฃŒ๋กœ๋ถ€ํ„ฐ ๋ฐฐ์šฐ๋Š” ์ ์ด ๋งŽ์•„์„œ ์ข‹๋‹ค. ๊ณง ์„ค์—ฐํœด๋‹ค. ํ”„๋กœ์ ํŠธ ๋ชจ๋“ˆ ์ฐธ์—ฌ๊ฐ€ ์–ด๋ ค์›Œ์ง€๋”๋ผ๋„ ํ”„๋กœ์ ํŠธ ์ง„ํ–‰์— ํ•„์š”ํ•œ ์ฑ…์„ ์ฝ๋Š” ์‹์œผ๋กœ ์–ด๋–ป๊ฒŒ๋“  ํ•™์Šต์„ ๋ฉˆ์ถ”์ง€ ๋ง์ž.

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

  • ๋ฃจ๋น„๋กœ ๋ฐฐ์šฐ๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ๋””์ž์ธ ์ฑ•ํ„ฐ 3 ์ฝ๊ธฐ

  • ํ”„๋กœ์ ํŠธ ๋ชจ๋“ˆ ์ฐธ์—ฌ๋Š” ๋ฏธ์ •

Last updated