Docker ๋ž€? ๐Ÿค”

๊น€๊ธฐ๋Œ€ยท2022๋…„ 2์›” 19์ผ
0

Docker ๋ž€?

๋ฆฌ๋ˆ…์Šค ์ปจํ…Œ์ด๋„ˆ(Linux Container) ๊ธฐ์ˆ ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์˜คํ”ˆ ์†Œ์Šค ์„œ๋น„์Šค. ๋„์ปค๋ฅผ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, OS๋ฅผ ๊ฒฉ๋ฆฌํ™”ํ•˜์—ฌ ๊ด€๋ฆฌํ•จ.

Linux Container ๋ž€?

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

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

๊ทธ๋ ‡๋‹ค๋ฉด ๋ฆฌ๋ˆ…์Šค ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ธฐ์กด์— ์ด์šฉํ•ด์˜ค๋˜ ๊ฐ€์ƒ ๋จธ์‹ ๊ณผ ๋น„์Šทํ•˜์ง€ ์•Š๋‚˜?
=> ๋น„์Šทํ•ด ๋ณด์ผ ๋ฟ, ๊ฐ€์ƒํ™”์™€๋Š” ๋‹ค๋ฅธ ๊ธฐ์ˆ .

Docker ๋Š” ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‚˜?

  1. ํ™˜๊ฒฝ ํ‘œ์ค€ํ™”
  2. ์ˆ˜์ž‘์—…์œผ๋กœ ์ผ์น˜์‹œํ‚ค๋Š” ํ™˜๊ฒฝ ๊ตฌ์„ฑ
  3. ๋ฆฌ์†Œ์Šค ๊ฒฉ๋ฆฌ์„ฑ

๊ฐ€์ƒ๋จธ์‹ ๊ณผ ๋„์ปค?

๋ฆฌ์†Œ์Šค ๊ฒฉ๋ฆฌ์„ฑ์„ ์ œ๊ณตํ•˜๋Š” ๊ธฐ์ˆ ๋กœ๋Š” ๊ฐ€์ƒ๋จธ์‹ , ๋„์ปค ๋“ฑ์ด ์žˆ์Œ.
๊ฐ€์ƒ ๋จธ์‹ ๊ณผ ๋„์ปค๋Š” ๊ฒฉ๋ฆฌ์„ฑ์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋งˆ๋‹ค ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ IP๋‚˜ Port ๋“ฑ์„ ๋‹ค๋ฅด๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Œ.

๊ทธ๋ ‡๋‹ค๋ฉด,

๋„์ปค์™€ ๊ฐ€์ƒ ๋จธ์‹ ์˜ ์ฐจ์ด๋Š”?

  • ๋„์ปค๋Š” ๊ฐ€์ƒ ๋จธ์‹ ๋งŒํผ ๊ฒฌ๊ณ ํ•œ ๊ฒฉ๋ฆฌ์„ฑ์„ ์ œ๊ณตํ•˜์ง€๋Š” ์•Š์Œ.
  • ๋„์ปค๋Š” ๋ฆฌ๋ˆ…์Šค์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ด์šฉํ•œ ๊ธฐ์ˆ ๋กœ, OS ์œ„์— ๋‹ค๋ฅธ OS๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ฏ€๋กœ ๊ฐ€์ƒ ๋จธ์‹ ๋ณด๋‹ค ์ข‹์€ ์„ฑ๋Šฅ์„ ๋‚ผ ์ˆ˜ ์žˆ์Œ.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ํ™˜๊ฒฝ ๊ฒฉ๋ฆฌ์„ฑ์„ ์ค‘์‹ฌ์œผ๋กœ ํ•œ VM๊ณผ๋Š” ๋‹ฌ๋ฆฌ, ๋„์ปค๋Š” Container ์˜ ๊ด€์ ์—์„œ ๊ฐœ๋ฐœ์ž์™€ ์‚ฌ์šฉ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ํ˜œํƒ์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ ์žˆ์Œ.

Docker Container Lifecycle

๋„์ปค ์ปจํ…Œ์ด๋„ˆ์˜ ๋…๋ฆฝ์ ์ธ ํŠน์ง•์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ๋ผ์ดํ”„์‚ฌ์ดํด์ด ์žˆ์Œ.
์ปจํ…Œ์ด๋„ˆ์˜ ์ƒ์„ฑ, ์‹คํ–‰, ์ข…๋ฃŒ์˜ ๊ณผ์ •.

ํ•ต์‹ฌ ํ‚ค์›Œ๋“œ

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

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

    ์ด๋ฏธ์ง€๋Š” ๊ธฐ๋ณธ ์ด๋ฏธ์ง€(base image)๋กœ๋ถ€ํ„ฐ (๋งˆ์น˜ git์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ) ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ถ”๊ฐ€/์ปค๋ฐ‹ํ•ด์„œ ๋˜ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์Œ. ์˜ˆ๋ฅผ ๋“ค์–ด node.js๋กœ ์ž‘์„ฑ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ด๋ฏธ์ง€๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ, nodejs ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€๋กœ ์‚ผ๊ณ  ๋‚ด๊ฐ€ ๋งŒ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ถ”๊ฐ€ํ•ด ๋„ฃ๊ณ , ์ด๋ฏธ์ง€ํ™”ํ•  ์ˆ˜ ์žˆ์Œ.

  • ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ
    ์ด๋ฏธ์ง€๋Š” ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์ €์žฅ๋จ. ๋Œ€ํ‘œ์ ์ธ ์ด๋ฏธ์ง€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋กœ๋Š” Docker Hub, Amazon ECR์ด ์žˆ์Œ. ๋„์ปค CLI์—์„œ ์ด๋ฏธ์ง€๋ฅผ ์ด์šฉํ•ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ, ํ˜ธ์ŠคํŠธ ์ปดํ“จํ„ฐ์— ์ด๋ฏธ์ง€๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๊ธฐ๋ณธ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋กœ๋ถ€ํ„ฐ ๋‹ค์šด๋กœ๋“œ ๋ฐ›๊ฒŒ ๋จ.

์‚ฌ์šฉ๋ฒ•

  • ์‚ฌ์šฉ๋ฒ• : Docker CLI, Docker-Compose CLI, API Reference

  • ํ™˜๊ฒฝ ๋ฐ ๋นŒ๋“œ ํŒŒ์ผ ๊ตฌ์„ฑ : DockerFile, Docker-Compose File

  • ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ(Registry)

Docker Hub : https://hub.docker.com/
๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ณต๊ฐ„.
ํŠน๋ณ„ํžˆ ๋‹ค๋ฅธ ๊ฒƒ์„ ์ง€์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๋„์ปค ํ—ˆ๋ธŒ(Docker Hub)๋ฅผ ๊ธฐ๋ณธ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋กœ ์„ค์ •.
๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋Š” Docker Hub, Private Docker Hub, ํšŒ์‚ฌ ๋‚ด๋ถ€์šฉ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋“ฑ์œผ๋กœ ๋‚˜๋‰  ์ˆ˜ ์žˆ์Œ.

  • ๋ ˆํฌ์ง€ํ† ๋ฆฌ(Repository)

๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋‚ด์— ๋„์ปค ์ด๋ฏธ์ง€๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„.
์ด๋ฏธ์ง€ ์ด๋ฆ„์ด ์‚ฌ์šฉ๋˜๊ธฐ๋„ ํ•จ.
GitHub์˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋จ.

  • ํƒœ๊ทธ(Tag)

๊ฐ™์€ ์ด๋ฏธ์ง€๋ผ๊ณ  ํ• ์ง€๋ผ๋„ ๋ฒ„์ „ ๋ณ„๋กœ ์•ˆ์˜ ๋‚ด์šฉ์ด ์กฐ๊ธˆ์€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Œ.
ํ•ด๋‹น ์ด๋ฏธ์ง€๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋ฒ„์ „ ์ •๋ณด๋ฅผ ์ฃผ๋กœ ์ž…๋ ฅ.
ํŠน๋ณ„ํžˆ ๋‹ค๋ฅธ ๊ฒƒ์„ ์ง€์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด latest ํƒœ๊ทธ๋ฅผ ๋ถ™์ธ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์˜ด.

docker/whalesay:latest =>
Docker Hub๋ผ๋Š” ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ
docker๋ผ๋Š” ์œ ์ €๊ฐ€ ๋“ฑ๋กํ•œ whalesay ์ด๋ฏธ์ง€ ํ˜น์€ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์—์„œ
latest ํƒœ๊ทธ๋ฅผ ๊ฐ€์ง„ ์ด๋ฏธ์ง€

ex) docker image pull docker/whalesay:latest
=> docker/whalesay์˜ ์ตœ์‹  ์ด๋ฏธ์ง€๋ฅผ ๋ฐ›์•„์˜ด.

pull : ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ์ด๋ฏธ์ง€ ํ˜น์€ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๊ฐ€์ ธ์˜ด.

ex) docker image ls
=> ์ด๋ฏธ์ง€ ๋ฆฌ์ŠคํŠธ ์ถœ๋ ฅ.

ex) docker container run --name ์ปจํ…Œ์ด๋„ˆ์ด๋ฆ„ docker/whalesay:latest cowsay boo
=> ์ปจํ…Œ์ด๋„ˆ
์ด๋ฆ„ ์„ ์ด๋ฆ„์œผ๋กœ ๊ฐ–๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰.

run : ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰
--name : ์ปจํ…Œ์ด๋„ˆ์˜ ์ด๋ฆ„์„ ํ• ๋‹น
cowsay : ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์‹œ cowsay ๋ช…๋ น์–ด๋ฅผ ํ˜ธ์ถœ. node๋ฅผ ํ˜ธ์ถœํ•˜๋“ฏ ์ด์šฉ.
boo : COMMAND์ธ cowsay ์— ๋„˜๊ฒจ์งˆ ํŒŒ๋ผ๋ฏธํ„ฐ

ex) docker container ps -a
=> ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์˜ ๋ฆฌ์ŠคํŠธ ์ถœ๋ ฅ

ex) docker container rm ์ปจํ…Œ์ด๋„ˆ์ด๋ฆ„
=> ์ปจํ…Œ์ด๋„ˆ
์ด๋ฆ„์ด๋ผ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง„ ์ปจํ…Œ์ด๋„ˆ ์‚ญ์ œ

ex) docker image rm docker/whalesay
=> docker/whalesay ์ด๋ฏธ์ง€ ์ง€์šฐ๊ธฐ

  • docker image pull
  • docker image ls
  • docker container run
  • docker container ls
  • docker container rm
  • docker image rm

ex) docker container run --name ์ปจํ…Œ์ด๋„ˆ_์ด๋ฆ„ --rm docker/whalesay cowsay boo
=> ์„ธ ๊ฐ€์ง€ ์ž‘์—…์„ ํ•œ ๋ฒˆ์— ์‹คํ–‰ํ•˜๋Š” ๋ช…๋ น์–ด

(container) run : ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰. ์ด๋ฏธ์ง€๊ฐ€ ์—†๋‹ค๋ฉด ์ด๋ฏธ์ง€๋ฅผ ๋ฐ›์•„์˜จ ๋’ค(pull) ์‹คํ–‰
--rm : ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ผํšŒ์„ฑ์œผ๋กœ ์‹คํ–‰. ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ค‘์ง€๋˜๊ฑฐ๋‚˜ ์ข…๋ฃŒ๋  ๋•Œ, ์ปจํ…Œ์ด๋„ˆ์™€ ๊ด€๋ จ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ชจ๋‘ ์ œ๊ฑฐ

ex) docker image rm docker/whalesay
=> ์ง€์ •๋œ ๋„์ปค ์ด๋ฏธ์ง€ ์‚ญ์ œ

ex) docker container run -it --rm danielkraic/asciiquarium:latest
=> danielkraic/asciiquarium ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰

docker-compose CLI

ex) docker-compose up
=> -d ์˜ต์…˜์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด, ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
=> docker-compose.yaml ์— ์ •์˜๋œ ์ด๋ฏธ์ง€๋ฅผ ์ปจํ…Œ์ด๋„ˆ๋กœ ์‹คํ–‰

ex) docker-compose down
=> docker-compose.yaml ์— ์ •์˜๋œ ์ด๋ฏธ์ง€๋ฅผ ์ด์šฉํ•ด ์‹คํ–‰๋œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ข…๋ฃŒ

ex) docker-compose up {ํŠน์ • ์ด๋ฏธ์ง€}
=> ํŠน์ • ์ด๋ฏธ์ง€๋งŒ ์ปจํ…Œ์ด๋„ˆ๋กœ ์‹คํ–‰

ex) .yaml ํŒŒ์ผ ์ƒ์„ฑ ํ›„ ์ž‘์„ฑ

version: '3.8'

services:
  nginx:
    image: sebcontents/client
    restart: 'always'
    ports:
      - "8080:80"
    container_name: client

  node:
    image: sebcontents/server
    restart: 'always'
    ports:
      - "5000:3000"
    container_name: server

docker-compose up -d ๋ช…๋ น์–ด ์‹คํ–‰ (yaml ํŒŒ์ผ ์‹คํ–‰)
ํ›„ localhost:8080 or 127.0.0.1:8080 ํด๋ผ์ด์–ธํŠธ ํ™”๋ฉด ํ™•์ธ.

๋„์ปค๋ฅผ ์˜ˆ์ „์— ์ž ๊น ์จ๋ดค๋‹ค๊ฐ€ ์ด๋ฒˆ์— ๋‹ค์‹œ ์จ๋ณด๋ฉด์„œ ๊ณ„์† ์จ๋ด์•ผ๊ฒ ๋‹ค.

profile
๋ธ”๋ก์ฒด์ธ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž

0๊ฐœ์˜ ๋Œ“๊ธ€