Skip to content

Latest commit

ย 

History

History
158 lines (129 loc) ยท 7.58 KB

File metadata and controls

158 lines (129 loc) ยท 7.58 KB

์ดˆ๋ณด์ž๋ฅผ ์œ„ํ•œ ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ ์ƒ˜ํ”Œ on Node.js & Express

Node.js & Express์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒŒ์‹œํŒ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
์ดˆ๋ณด์ž ๋ถ„๋“ค์„ ์œ„ํ•ด, DB๋Š” Mongoose(MongoDB), SQL, Sequelize๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒŒ์‹œํŒ ์ƒ˜ํ”Œ์„ ๋งŒ๋“ค์–ด๋ดค์Šต๋‹ˆ๋‹ค..
์•ฝ๊ฐ„์˜ ๋„์›€์ด๋‚˜๋งˆ ๋˜์—ˆ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค. (ํ–ฅํ›„ ์•ผ๊ธˆ์•ผ๊ธˆ ์—ฌ๋Ÿฌ ๊ธฐ์ˆ ๋“ค์„ ์ถ”๊ฐ€ํ•ด๋ณผ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค)

๐Ÿ”จ Tech Stack (1-3๋ฒˆ ํด๋”์—์„œ ์‚ฌ์šฉํ•  ๊ธฐ์ˆ  ์Šคํƒ์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค)

Tech Description Version
express ์›น ํ”„๋ ˆ์ž„์›Œํฌ 4.17.2
mongoose MongoDB ODM 6.1.8
mongoose-sequence mongoose lib 5.3.1
mysql2 MySQL 6.1.8
sequelize MySQL ORM 6.17.0
sequelize-cli sequelize-cli 6.4.1
ejs ํ…œํ”Œ๋ฆฟ ์—”์ง„ 3.1.6
bcrypt ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™” 5.0.1
joi ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ 2.8.5
cors ๊ต์ฐจ ๋ฆฌ์†Œ์Šค ๊ณต์œ  2.8.5
dotenv ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ด€๋ฆฌ 16.0.0
jsonwebtoken ์„œ๋ช… ์•”ํ˜ธํ™” 8.5.1
prettier ํด๋ฆฐ ์ฝ”๋“œ 2.6.1
eslint ํด๋ฆฐ ์ฝ”๋“œ 8.13.0
eslint-config-prettier,
eslint-plugin-prettier
eslint, prettier ์ถฉ๋Œ๋ฐฉ์ง€ 8.5.0, 4.0.0

โš™๏ธ AWS RDS ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์œผ์‹  ๋ถ„ ์ฐธ๊ณ 

  • ํ˜น์‹œ RDS๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์œผ์‹  ๋ถ„์ด ๊ณ„์‹œ๋‹ค๋ฉด, ์•„๋ž˜์˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ๋„์ „ํ•ด๋ณด์„ธ์š”-! ์ˆœ์„œ๋Œ€๋กœ ์ตœ๋Œ€ํ•œ ์ž์„ธํ•˜๊ฒŒ ์ ์–ด๋†จ์Šต๋‹ˆ๋‹ค โ˜บ๏ธ
  • RDS๋ž€ ๋ฌด์—‡์ธ๊ฐ€ (https://haksae.tistory.com/208)
  • RDS ์…‹ํŒ… ๋ฐ EC2์™€ ์—ฐ๋™ํ•˜๊ธฐ (https://haksae.tistory.com/207)
  • Workbench๋กœ RDS ์—ฐ๊ฒฐํ•˜๊ธฐ (https://haksae.tistory.com/209)

๐Ÿ“‹ Installation

ํ”„๋กœ์ ํŠธ ์‹คํ–‰์„ ์œ„ํ•ด ํ•˜๋‹จ์˜ ์ƒ์„ธ ์„ค๋ช…์„ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”.

  1. ํ”„๋กœ์ ํŠธ ํด๋ก 
$ git clone https://github.com/Haksae90/Board_sample_on_node-express.git
  1. ํŒจํ‚ค์ง€ ์„ค์น˜ (1-3๋ฒˆ ์ค‘์— ์›ํ•˜๋Š” ํ™˜๊ฒฝ์„ ์„ ํƒํ•˜์„ธ์š”)
$ cd Board_sample_on_node-express
$ cd 1.\ on\ Mongoose
$ npm install
  1. ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
  1. .env ์„ค์ •
// 1-3๋ฒˆ ํด๋” ์•ˆ์— .env ํŒŒ์ผ ์ƒ์„ฑ ํ›„ ์•„๋ž˜์˜ ๋‚ด์šฉ์„ ๊ธฐ์ž… ํ›„ ์ €์žฅํ•ด์ฃผ์„ธ์š”.

1. on Mongoose
PORT='์›ํ•˜๋Š” ํฌํŠธ ์„ค์ •'
TOKENKEY='์›ํ•˜๋Š” JWT ํ† ํฐ ๊ฐ’ ์„ค์ •'
MONGO_URL='์›ํ•˜๋Š” ๋ชฝ๊ณ  DB URL ์„ค์ •' ex) 'mongodb://localhost:27017/board_project'

2. on MySQL
PORT='์›ํ•˜๋Š” ํฌํŠธ ์„ค์ •'
TOKENKEY='์›ํ•˜๋Š” JWT ํ† ํฐ ๊ฐ’ ์„ค์ •'
mysql_host='ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ์˜ HOST ์ฃผ์†Œ'
mysql_user='ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ์˜ MySQL ID'
mysql_password='ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ์˜ MySQL ํŒจ์Šค์›Œ๋“œ'
mysql_database='์—ฐ๊ฒฐํ•  DB๋ช…'

3. on Sequelize
PORT='์›ํ•˜๋Š” ํฌํŠธ ์„ค์ •'
TOKENKEY='์›ํ•˜๋Š” JWT ํ† ํฐ ๊ฐ’ ์„ค์ •'

  1. Sequelize config ์„ค์ •
// sequelize๋Š” ์ถ”๊ฐ€๋กœ config ์„ค์ •์„ ํ•ด์ฃผ์…”์•ผํ•ฉ๋‹ˆ๋‹ค.

sequelize cli ์„ค์น˜
$npm i sequelize sequelize-cli sqlite3

sequelize CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ config, ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๋ฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜, ํ…Œ์ดํ„ฐ ์ถ”๊ฐ€
$npx sequelize init

// config ํŒŒ์ผ์„ ์ƒ์„ฑ๋๋‹ค๋ฉด config๋ฅผ ์„ค์ •ํ•ด์ฃผ์„ธ์š”. ๋ฉ”์ธ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ config ํด๋” ์•ˆ์—, config.json ํŒŒ์ผ์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์…‹ํŒ…ํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค
{
  "development": {
    "username": "ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ์˜ MySQL ID",
    "password": "ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ์˜ Password",
    "database": "์—ฐ๊ฒฐํ•  DB๋ช…",
    "host": "ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ์˜ HOST ์ฃผ์†Œ",
    "dialect": "mysql"
  },

// ์„œ๋ฒ„๋ฅผ ๋Œ๋ฆฌ๊ธฐ ์ „์— sequelize๋กœ DB ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๋„ ์žŠ์ง€๋งˆ์…”์š”
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์„ฑ
$npx sequelize db:migrate

๐Ÿ“‹ ์„œ๋น„์Šค ๊ด€๋ จ

  1. ํšŒ์› ๊ฐ€์ž… ํŽ˜์ด์ง€
    • ํšŒ์›๊ฐ€์ž… ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๊ธฐ
    • ๋‹‰๋„ค์ž„, ๋น„๋ฐ€๋ฒˆํ˜ธ, ๋น„๋ฐ€๋ฒˆํ˜ธ ํ™•์ธ์„ ์ž…๋ ฅํ•˜๊ธฐ
    • ๋‹‰๋„ค์ž„์€ ์ตœ์†Œ 3์ž ์ด์ƒ, ์•ŒํŒŒ๋ฒณ ๋Œ€์†Œ๋ฌธ์ž(a~z, A~Z), ์ˆซ์ž(0~9)๋กœ ๊ตฌ์„ฑํ•˜๊ธฐ
    • ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์ตœ์†Œ 4์ž ์ด์ƒ์ด๋ฉฐ, ๋‹‰๋„ค์ž„๊ณผ ๊ฐ™์€ ๊ฐ’์ด ํฌํ•จ๋œ ๊ฒฝ์šฐ ํšŒ์›๊ฐ€์ž…์— ์‹คํŒจ๋กœ ๋งŒ๋“ค๊ธฐ
    • ๋น„๋ฐ€๋ฒˆํ˜ธ ํ™•์ธ์€ ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ์ •ํ™•ํ•˜๊ฒŒ ์ผ์น˜ํ•˜๊ธฐ
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์กด์žฌํ•˜๋Š” ๋‹‰๋„ค์ž„์„ ์ž…๋ ฅํ•œ ์ฑ„ ํšŒ์›๊ฐ€์ž… ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ ๊ฒฝ์šฐ "์ค‘๋ณต๋œ ๋‹‰๋„ค์ž„์ž…๋‹ˆ๋‹ค." ๋ผ๋Š” ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ๋ณด์—ฌ์ฃผ๊ธฐ
    • ํšŒ์›๊ฐ€์ž… ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ณ  ์—๋Ÿฌ๋ฉ”์„ธ์ง€๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™์‹œํ‚ค๊ธฐ
  2. ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€
    • ๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž… ๋ฒ„ํŠผ์„ ๋งŒ๋“ค๊ธฐ
    • ๋‹‰๋„ค์ž„, ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ๋ž€ ๋งŒ๋“ค๊ธฐ
    • ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ ๊ฒฝ์šฐ ๋‹‰๋„ค์ž„๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋“ฑ๋ก๋๋Š”์ง€ ํ™•์ธํ•œ ๋’ค, ํ•˜๋‚˜๋ผ๋„ ๋งž์ง€ ์•Š๋Š” ์ •๋ณด๊ฐ€ ์žˆ๋‹ค๋ฉด "๋‹‰๋„ค์ž„ ๋˜๋Š” ํŒจ์Šค์›Œ๋“œ๋ฅผ ํ™•์ธํ•ด์ฃผ์„ธ์š”"๋ผ๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ๋ณด์—ฌ์ฃผ๊ธฐ
    • ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์„œ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ „์ฒด ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก ์กฐํšŒ ํŽ˜์ด์ง€๋กœ ์ด๋™์‹œํ‚ค๊ธฐ
  3. ๋กœ๊ทธ์ธ ๊ฒ€์‚ฌ
    • ์•„๋ž˜ ํŽ˜์ด์ง€๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋ชจ๋‘ ๋กœ๊ทธ์ธ ํ•œ ๊ฒฝ์šฐ๋งŒ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ
      • ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€
      • ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€
      • ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก ์กฐํšŒ ํŽ˜์ด์ง€
      • ๊ฒŒ์‹œ๊ธ€ ์กฐํšŒ ํŽ˜์ด์ง€
    • ๋กœ๊ทธ์ธ์„ ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ฒฝ๋กœ๋กœ ์ ‘์†ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ์ด ํ•„์š”ํ•œ ๊ฒฝ๋กœ์— ์ ‘์†ํ•œ ๊ฒฝ์šฐ "๋กœ๊ทธ์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค." ๋ผ๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ๋„์›Œ์ฃผ๊ณ  ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™์‹œํ‚ค๊ธฐ
    • ๋กœ๊ทธ์ธ ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋˜๋Š” ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€์— ์ ‘์†ํ•œ ๊ฒฝ์šฐ "์ด๋ฏธ ๋กœ๊ทธ์ธ์ด ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค."๋ผ๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ๋„์šฐ๊ณ  ์ „์ฒด ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก ์กฐํšŒ ํŽ˜์ด์ง€๋กœ ์ด๋™์‹œํ‚ค๊ธฐ
  4. ๊ฒŒ์‹œ๊ธ€ ์กฐํšŒ ํŽ˜์ด์ง€ > ๋Œ“๊ธ€ ๋ชฉ๋ก ์กฐํšŒ
    • ๋กœ๊ทธ์ธ ํ•˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž๋„ ๋Œ“๊ธ€ ๋ชฉ๋ก ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๊ธฐ
    • ํ˜„์žฌ ์กฐํšŒ์ค‘์ธ ๊ฒŒ์‹œ๊ธ€์— ์ž‘์„ฑ๋œ ๋ชจ๋“  ๋Œ“๊ธ€์„ ๋ชฉ๋ก ํ˜•์‹์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ
    • ๋Œ“๊ธ€ ๋ชฉ๋ก ์œ„์— ๋Œ“๊ธ€ ์ž‘์„ฑ๋ž€ ๋งŒ๋“ค๊ธฐ
      • ๋Œ“๊ธ€ ์ž‘์„ฑ์— ๊ด€ํ•œ ๊ธฐ๋Šฅ์€ 5๋ฒˆ ์š”๊ตฌ์‚ฌํ•ญ์œผ๋กœ ์—ฐ๊ฒฐํ•˜๊ธฐ
    • ๋Œ“๊ธ€ ๋ชฉ๋ก ์ค‘, ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ๋Œ“๊ธ€์ธ ๊ฒฝ์šฐ ๋Œ“๊ธ€ ์ˆ˜์ •, ๋Œ“๊ธ€ ์‚ญ์ œ ๋ฒ„ํŠผ ๋งŒ๋“ค๊ธฐ
      • ๋Œ“๊ธ€ ์ˆ˜์ • ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด 6๋ฒˆ ์š”๊ตฌ์‚ฌํ•ญ์œผ๋กœ ์—ฐ๊ฒฐํ•˜๊ธฐ
      • ๋Œ“๊ธ€ ์‚ญ์ œ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด 7๋ฒˆ ์š”๊ตฌ์‚ฌํ•ญ์œผ๋กœ ์—ฐ๊ฒฐํ•˜๊ธฐ
    • ์ œ์ผ ์ตœ๊ทผ ์ž‘์„ฑ๋œ ๋Œ“๊ธ€์„ ๋งจ ์œ„์— ๋„์šฐ๊ธฐ
  5. ๊ฒŒ์‹œ๊ธ€ ์กฐํšŒ ํŽ˜์ด์ง€ > ๋Œ“๊ธ€ ์ž‘์„ฑ
    • ๋กœ๊ทธ์ธ ํ•œ ์‚ฌ์šฉ์ž๋งŒ ๋Œ“๊ธ€ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๊ธฐ
    • ๊ฒŒ์‹œ๊ธ€ ์กฐํšŒ ํŽ˜์ด์ง€ ํ•˜๋‹จ์— ๋Œ“๊ธ€ ๋‚ด์šฉ์„ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ“๊ธ€ ์ž‘์„ฑ ๋ฒ„ํŠผ ๋งŒ๋“ค๊ธฐ
    • ๋กœ๊ทธ์ธ ํ•˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋Œ“๊ธ€ ์ž‘์„ฑ๋ž€์„ ๋ˆ„๋ฅด๋ฉด "๋กœ๊ทธ์ธ์ด ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค." ๋ผ๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ๋„์šฐ๊ณ  ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™์‹œํ‚ค๊ธฐ
    • ๋Œ“๊ธ€ ๋‚ด์šฉ๋ž€์„ ๋น„์›Œ๋‘” ์ฑ„ ๋Œ“๊ธ€ ์ž‘์„ฑ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด "๋Œ“๊ธ€ ๋‚ด์šฉ์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”" ๋ผ๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ๋„์šฐ๊ธฐ
    • ๋Œ“๊ธ€ ๋‚ด์šฉ์„ ์ž…๋ ฅํ•˜๊ณ  ๋Œ“๊ธ€ ์ž‘์„ฑ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ ๊ฒฝ์šฐ ์ž‘์„ฑํ•œ ๋Œ“๊ธ€์„ ์ถ”๊ฐ€ํ•˜๊ธฐ
  6. ๊ฒŒ์‹œ๊ธ€ ์กฐํšŒ ํŽ˜์ด์ง€ > ๋Œ“๊ธ€ ์ˆ˜์ •
    • ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ๋Œ“๊ธ€๋งŒ ์ˆ˜์ • ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๊ธฐ
    • ๋Œ“๊ธ€ ๋ณธ๋ฌธ์ด ์‚ฌ๋ผ์ง€๊ณ , ๋Œ“๊ธ€ ๋‚ด์šฉ, ์ €์žฅ ๋ฒ„ํŠผ ์ƒ์„ฑํ•˜๊ธฐ
    • ๋Œ“๊ธ€ ๋‚ด์šฉ์—๋Š” ์ด์ „์— ์ž…๋ ฅํ–ˆ๋˜ ๋Œ“๊ธ€ ๋‚ด์šฉ์„ ๊ธฐ๋ณธ ๊ฐ’์œผ๋กœ ์ฑ„์šฐ๊ธฐ
    • ์ˆ˜์ •ํ•  ๋Œ“๊ธ€ ๋‚ด์šฉ์€ ๋น„์–ด ์žˆ์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ
    • ์ €์žฅ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ ๊ฒฝ์šฐ ๊ธฐ์กด ๋Œ“๊ธ€์˜ ๋‚ด์šฉ์„ ์ƒˆ๋กœ ์ž…๋ ฅํ•œ ๋Œ“๊ธ€ ๋‚ด์šฉ์œผ๋กœ ๋ฐ”๊พธ๊ธฐ
  7. ๊ฒŒ์‹œ๊ธ€ ์กฐํšŒ ํŽ˜์ด์ง€ > ๋Œ“๊ธ€ ์‚ญ์ œ
    • ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ๋Œ“๊ธ€๋งŒ ์‚ญ์ œ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๊ธฐ
    • "์ •๋ง๋กœ ์‚ญ์ œํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?" ๋ฉ”์„ธ์ง€๋ฅผ ๋„์šฐ๊ณ , ํ™•์ธ/์ทจ์†Œ ๋ฒ„ํŠผ ์ค‘ "ํ™•์ธ" ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ ๊ฒฝ์šฐ ๋ชฉ๋ก์—์„œ ํ•ด๋‹น ๋Œ“๊ธ€์„ ์‚ญ์ œํ•˜๊ธฐ
    • ์ทจ์†Œ๋ฅผ ๋ˆ„๋ฅธ ๊ฒฝ์šฐ ์‚ญ์ œ๋˜์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๊ธฐ