๐Ÿ“š ์ฑ…/๋„์ปค ๊ต๊ณผ์„œ

๋„์ปค ๊ต๊ณผ์„œ 21์žฅ ๋ฉ”์‹œ์ง€ ํ๋ฅผ ์ด์šฉํ•œ ๋น„๋™๊ธฐ ํ†ต์‹ 

MyeongDev 2025. 1. 19. 22:34
728x90
๋ฐ˜์‘ํ˜•

21์žฅ ๋ฉ”์‹œ์ง€ ํ๋ฅผ ์ด์šฉํ•œ ๋น„๋™๊ธฐ ํ†ต์‹ 

21.1 ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง•์ด๋ž€?

๋™๊ธฐ ํ†ต์‹ 

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

๋น„๋™๊ธฐ ํ†ต์‹ 

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

Redis Message Queue

  • Redis ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง€ ํ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฉ”์‹œ์ง€ ํ์—๋Š” ํฌ๊ฒŒ Publisher ์™€ Subscriber ๊ฐ€ ์กด์žฌํ•œ๋‹ค.
  • ๋ฐœํ–‰์ž(Publisher) ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋Š” ์ฃผ์ฒด์ด๋ฉฐ, ๊ตฌ๋…์ž(Subscriber) ๋Š” ๋ฉ”์‹œ์ง€๋ฅด ๋ฐ›๋Š” ์ฃผ์ฒด์ด๋‹ค.
$ docker network create ch21

$ docker container run -d --name redis --network ch21 diamol/redis

$ docker logs redis --tail 1

# Publisher ์ปจํ…Œ์ด๋„ˆ
$ docker run -d --name publisher --network ch21 diamol/redis-cli -r 50 -i 5 PUBLISH channel21 ping

$ docker logs publisher

# Subscriber ์ปจํ…Œ์ด๋„ˆ
$ docker run -it --name subscriber --network ch21 diamol/redis-cli SUBSCRIBE channel21

Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel21"
3) (integer) 1
1) "message"
2) "channel21"
3) "ping"
1) "message"
2) "channel21"
3) "ping"

21.2 ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์‹œ์ง€ ํ ์‚ฌ์šฉํ•˜๊ธฐ

NATS

  • NATS ๋Š” CNCF ์žฌ๋‹จ์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋กœ, ๋†’์€ ์™„์„ฑ๋„์™€ ์‹ ๋ขฐ๋„๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค.
  • NATS ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๋ฉฐ, ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฅด๊ณ  ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์˜ ํ†ต์‹ ์— ์ ํ•ฉํ•˜๋‹ค.
  • NATS ์—๋Š” ์ฑ„๋„ ๊ฐœ๋…์ด ์กด์žฌํ•˜์ง€ ์•Š๊ณ , ๋ชจ๋“  ๋ฉ”์‹œ์ง€์— Subject ๋ฅผ ๋ถ€์—ฌํ•œ๋‹ค.
  • subject ๋ฅผ ํ†ตํ•ด์„œ ๋ฉ”์‹œ์ง€ ์œ ํ˜•์„ ๊ตฌ๋ถ„ํ•˜๋ฉฐ, ์›ํ•˜๋Š” ๋ช…๋ช… ๊ทœ์น™์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ด๋ฅผ ํ†ตํ•ด Subscriber ๋Š” ํ•ด๋‹น Subject ๋ฅผ ๊ตฌ๋…ํ•˜๋ฉด ๋œ๋‹ค.
$ vi message-queue

version: "3.7"

services:
  todo-web:
    image: diamol/ch21-todo-list
    ports:
      - 8080:80
    networks:
      - app-net

  todo-db:
    image: diamol/postgres:11.5
    networks:
      - app-net

  message-queue:
    image: diamol/nats
    ports:
      - "8222:8222"
    networks:
      - app-net

  save-handler:
    image: diamol/ch21-save-handler
    networks:
      - app-net

networks:
  app-net:

$ docker compose up -d message-queue

$ docker logs todo-list-message-queue_1

[1] 2025/01/16 04:46:10.381523 [INF] Starting nats-server version 2.1.9
[1] 2025/01/16 04:46:10.381536 [INF] Git commit [7c76626]
[1] 2025/01/16 04:46:10.381640 [INF] Starting http monitor on 0.0.0.0:8222
[1] 2025/01/16 04:46:10.381661 [INF] Listening for client connections on 0.0.0.0:4222
[1] 2025/01/16 04:46:10.381666 [INF] Server id is NBPKEDLHJMXTO3NDKAXR6OERYRJXK2N5XIS5Z7YFBQ3G3JOH544I5SKG
[1] 2025/01/16 04:46:10.381667 [INF] Server is ready
[1] 2025/01/16 04:46:10.381753 [INF] Listening for route connections on 0.0.0.0:6222

$ curl <http://localhost:8222/connz>

๋งŒ์•ฝ, ๋ฉ”์‹œ์ง€ ํ์— ์ „๋‹ฌํ–ˆ์ง€๋งŒ ํ๋ฅผ ๊ตฌ๋…ํ•˜๋Š” ๊ตฌ๋…์ž๊ฐ€ ์—†์„ ๊ฒฝ์šฐ

  • ๋ณดํ†ต์˜ ๋ฉ”์‹œ์ง€ ํ๋Š” ๊ตฌ๋…์ž๊ฐ€ ์—†์„ ๊ฒฝ์šฐ DLQ(Dead Letter Queue) ์— ๋ฉ”์‹œ์ง€๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜, Redis ์™€ NATS ์˜ ๊ฒฝ์šฐ ๊ตฌ๋„์ž๊ฐ€ ์—†์œผ๋ฉด ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฒ„๋ฆฐ๋‹ค.
  • ์ฆ‰, Redis ์™€ NATS ๋Š” ๊ตฌ๋…ํ•œ ์‹œ์  ์ดํ›„๋ถ€ํ„ฐ ๋ฐœํ–‰๋œ ๋ฉ”์‹œ์ง€๋งŒ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค.

21.3 ๋ฉ”์‹œ์ง€ ์ˆ˜์‹  ๋ฐ ์ฒ˜๋ฆฌ

  • Message Queue ๋ฅผ ๊ตฌ๋…ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฉ”์‹œ์ง€ ํ•ธ๋“ค๋Ÿฌ๋ผ๊ณ  ํ•œ๋‹ค.
  • ๋Œ€๊ฒŒ ๋ฉ”์‹œ์ง€์˜ ์ข…๋ฅ˜๋งˆ๋‹ค ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฉ”์‹œ์ง€ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ํ•˜๋‚˜์”ฉ ํ•„์š”ํ•˜๋‹ค.
  • ์˜ˆ์‹œ์—์„œ ์‚ฌ์šฉ๋˜๋Š” to-do ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—๋Š” ํ•  ์ผ ์ด๋ฒคํŠธ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์•„, DB ์— ์ถ”๊ฐ€ํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๋ฉ”์‹œ์ง€ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
  • ์ด๋ ‡๋“ฏ ๋ฉ”์‹œ์ง€ ํ•ธ๋“ค๋Ÿฌ(Worker) ๋ฅผ ๋”ฐ๋กœ ๋‘๊ฒŒ ๋˜๋ฉด ์Šค์ผ€์ผ ์•„์›ƒ์— ์šฉ์ดํ•˜๋‹ค.
  • ๋ฉ”์‹œ์ง€ ํ๊ฐ€ ๊ธ‰์ฆํ•˜๋Š” ๋ถ€ํ•˜์˜ ๋ฒ„ํผ์™€ ๊ฐ™์€ ์—ญํ• ์„ ํ•œ๋‹ค.
  • ์‚ฌ์šฉ์ž๊ฐ€ ์•„๋ฌด๋ฆฌ ๋งŽ์•„๋„ ๋™์‹œ์— ๋ฉ”์‹œ์ง€ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํ†ตํ•ด ๋ฉ”์‹œ์ง€๊ฐ€ ํ•˜๋‚˜์”ฉ ์†Œ๋น„๋˜๋ฏ€๋กœ ๋“ค์–ด์˜ค๋Š” SQL ์ปค๋„ฅ์…˜์€ ๋ฉ”์‹œ์ง€ ํ•ธ๋“ค๋Ÿฌ ๊ฐœ์ˆ˜๋กœ ์ œํ•œ๋œ๋‹ค.

๊ฒฐ๊ณผ์  ์ผ๊ด€์„ฑ

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

21.4 ๋ฉ”์‹œ์ง€ ํ•ธ๋“ค๋Ÿฌ๋กœ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ํ•˜๊ธฐ

์ด๋ฒคํŠธ ์ง€ํ–ฅ ์•„ํ‚คํƒ์ฒ˜

  • ์ด๋ฒคํŠธ ์ง€ํ–ฅ ์•„ํ‚คํ…์ฒ˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ชจ๋“  ์ผ์„ ์ฆ‰๊ฐ ๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋Œ€์‹  ์ด๋ฒคํŠธ๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ๊ตฌ์„ฑ ์š”์†Œ์— ์ž์‹ ์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ์•Œ๋ฆฌ๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰ํ•˜๋Š” ๋กœ์ง์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ ๋„ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์„ฑ ์š”์†Œ ๊ฐ„ ๊ฒฐํ•ฉ๋„๋ฅผ ๋А์Šจํ•˜๊ฒŒ ํ•˜๋Š” ํšจ๊ณผ๊ฐ€ ์žˆ๋‹ค.

๋ฉ”์‹œ์ง€ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ƒˆ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ํ•˜๊ธฐ

  • ๋ฉ”์‹œ์ง€ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ ์ƒˆ๋กœ์šด ๋ฉ”์‹œ์ง€ ํ•ธ๋“ค๋Ÿฌ์˜ ๊ทธ๋ฃน์„ ๋งŒ๋“ค๊ณ , ๋ชจ๋“  ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•˜๋„๋ก ํ•˜๋˜ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ์ด๋ ‡๊ฒŒํ•˜๋ฉด ๊ธฐ์กด ์ปจํ…Œ์ด๋„ˆ์—๋Š” ์ˆ˜์ •์ด ์ผ์–ด๋‚˜์ง€ ์•Š๊ณ , ์‹ ๊ทœ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ปจํ…Œ์ด๋„ˆ๋งŒ ์‹คํ–‰์‹œํ‚ค๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐํฌ์˜ ๋ถ€๋‹ด์ด ํฌ๊ฒŒ ๋‚ฎ์•„์ง„๋‹ค.

21.5 ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง• ํŒจํ„ด ์ดํ•ดํ•˜๊ธฐ

Pub-Sub (Publish-Subscribe) ํŒจํ„ด

  • ๋ฐœํ–‰์ž(Publisher) ๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ํŠน์ • ์ฃผ์ œ(Topic) ์ด๋‚˜ ์ฑ„๋„ (Channel) ์— ๊ฒŒ์‹œํ•˜๋ฉด, ํ•ด๋‹น ์ฃผ์ œ๋ฅผ ๊ตฌ๋…(Subscribe) ํ•œ ๋ชจ๋“  ๊ตฌ๋…์ž(Subscriber) ๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • ์ด ํŒจํ„ด์—์„œ๋Š” ํผ๋ธ”๋ฆฌ์…”๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒƒ์ด ๋ˆ„๊ตฌ๊ณ , ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ์–ธ์ œ ์ฒ˜๋ฆฌ๊ฐ€ ๋๋‚˜๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค.
  • ํ•œ ๋ช…์˜ ๋ฐœํ–‰์ž๊ฐ€ ์—ฌ๋Ÿฌ ๊ตฌ๋…์ž์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•˜๋Š” ๋‹ค๋Œ€๋‹ค ํ†ต์‹ ์— ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ƒํ™ฉ์— ๋”ฐ๋ผ Pub/Sub ํŒจํ„ด์ด ์ ํ•ฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.

Rquest-Response ํŒจํ„ด

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฉ”์‹œ์ง€ ํ์— ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.
  • ๋ฉ”์‹œ์ง€ ํ•ธ๋“ค๋Ÿฌ๋Š” ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•œ ๋‹ค์Œ ๋ฉ”์‹œ์ง€ ํ์— ์‘๋‹ตํ•œ๋‹ค.
  • ๋ฉ”์‹œ์ง€ ํ๋Š” ๋‹ค์‹œ ์‘๋‹ต์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.
  • ํ•˜๋‚˜์˜ ์š”์ฒญ์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ ์‘๋‹ต์ด ๋งคํ•‘๋˜๋Š” ์ผ๋Œ€์ผ ํ†ต์‹ ์ด๋‹ค.
  • ํ•ธ๋“ค๋Ÿฌ์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง•์˜ ์žฅ์ ์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ์ผ๋ฐ˜์ ์ธ ๋™๊ธฐ ์„œ๋น„์Šค ํ˜ธ์ถœ์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค.
728x90
๋ฐ˜์‘ํ˜•