Kubernetes

๐Ÿ”ญKubernetes ํด๋Ÿฌ์Šคํ„ฐ ์ •์ฑ…๊ณผ Kyverno

Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ์ •์ฑ…์ด๋ž€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ณด๊ณ , Kubernetes ์ „์šฉ ์ •์ฑ… ์—”์ง„ Kyverno๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

2024.03.04 | ์กฐํšŒ 98 |
0
|

DevOps ์—ฌํ–‰์„ ์œ„ํ•œ ์†Œ์‹์ง€

DevOps, ํด๋ผ์šฐ๋“œ, IT ๊ธฐ์ˆ  ๊ด€๋ จ ์ตœ์‹  ์†Œ์‹๊ณผ ์ •๋ณด๋ฅผ ์ •๋ฆฌํ•ด์„œ ์ฃผ 1ํšŒ ์ด๋ฉ”์ผ๋กœ ์ „ํ•ด๋“œ๋ฆฝ๋‹ˆ๋‹ค๐Ÿ˜บ

์•ˆ๋…•ํ•˜์„ธ์š” ๊ตฌ๋…์ž๋‹˜, ์ตœ์‹  DevOps ์†Œ์‹์„ ์ •๋ฆฌํ•ด์„œ ๊ณต์œ ํ•ด๋“œ๋ฆฌ๋Š” DevOps ์—ฌํ–‰์„ ์œ„ํ•œ ์†Œ์‹์ง€์ž…๋‹ˆ๋‹ค.

์ด๋ฒˆ ์†Œ์‹์ง€์—์„  Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ํ”ํžˆ ๋งํ•˜๋Š” ์ •์ฑ… ์ˆ˜ํ–‰(Admission Control)์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ , Kubernetes ์ „์šฉ ์ •์ฑ… ์—”์ง„์ธ Kyverno์— ๋Œ€ํ•ด ์†Œ๊ฐœํ•ด๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

โš Kubernetes์—์„œ ์™ธ๋ถ€ ์ ‘๊ทผ์„ ์ œ์–ดํ•˜๋Š” ๋ฐฉ๋ฒ•

k8s ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์™ธ๋ถ€ ์ ‘๊ทผ์— ๋Œ€ํ•ด 3๋‹จ๊ณ„์˜ ๊ฒ€์ฆ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
k8s ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์™ธ๋ถ€ ์ ‘๊ทผ์— ๋Œ€ํ•ด 3๋‹จ๊ณ„์˜ ๊ฒ€์ฆ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์—๋Š” ์‹ค์ œ ์„œ๋น„์Šคํ•˜๋Š” App๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค์–‘ํ•œ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์™ธ๋ถ€ ์ ‘๊ทผ์„ ์ œ์–ดํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ค€๋น„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด 3๋‹จ๊ณ„๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๊ฐ ๋‹จ๊ณ„๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ธ์ฆ(Authentication, Authn): ํด๋Ÿฌ์Šคํ„ฐ์— ์ ‘๊ทผํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€, ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์‹ ๋ถ„์ธ์ง€ ํ™•์ธํ•˜๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.
  • ์ธ๊ฐ€(Authorization, Authz): ํ•ด๋‹น ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ ๋‚ด์šฉ์— ๋Œ€ํ•ด ์–ด๋–ค ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด ์–ด๋–ค ํ–‰๋™์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. (ex: Pod ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด Create ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€)
  • Admission Control: ์ธ์ฆ๊ณผ ์ธ๊ฐ€๊นŒ์ง€ ๊ฑฐ์นœ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ ๋‚ด์šฉ์— ๋Œ€ํ•ด ๋ฏธ๋ฆฌ ์ •์˜๋œ ์ •์ฑ…์— ๋”ฐ๋ผ ๊ฒ€์ฆ ๋˜๋Š” ๋ณ€๊ฒฝํ•˜๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.

 

๐Ÿ”Admission Controller๋ž€?

Admission Controller๋Š” k8s API ์„œ๋ฒ„ ์š”์ฒญ์— ๋Œ€ํ•ด ๋ณ€๊ฒฝ(Mutate)๊ณผ ๊ฒ€์ฆ(Validate)์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. 
Admission Controller๋Š” k8s API ์„œ๋ฒ„ ์š”์ฒญ์— ๋Œ€ํ•ด ๋ณ€๊ฒฝ(Mutate)๊ณผ ๊ฒ€์ฆ(Validate)์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. 

Admission Controller๋Š” ์œ„์—์„œ ์‚ดํŽด๋ดค๋˜ Admission Control์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด k8s ํด๋Ÿฌ์Šคํ„ฐ์—์„  ์™œ ์ธ์ฆ(Authentication)๊ณผ ์ธ๊ฐ€(Authorization) ๊ณผ์ • ์™ธ๋กœ๋„ Admission Control ๊ณผ์ •์„ ๋‘์—ˆ์„๊นŒ์š”?

์ฒซ ๋ฒˆ์งธ๋กœ ๋ณด์•ˆ์„ฑ ์ธก๋ฉด์—์„œ ์œ ๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ธ์ฆ๊ณผ ์ธ๊ฐ€๋ฅผ ๊ฑฐ์นœ ์š”์ฒญ์— ๋Œ€ํ•ด ์‚ฌ์ „ ์ •์˜ํ•œ ์ •์ฑ…์„ ํ•œ ๋ฒˆ ๋” ์ ์šฉํ•˜๋ฏ€๋กœ ์›์น˜ ์•Š๋Š” ๋™์ž‘์„ ์‚ฌ์ „์— ์˜ˆ๋ฐฉํ•˜์—ฌ ๋ณด์•ˆ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

๋‘ ๋ฒˆ์งธ๋กœ ์ œ์–ด์„ฑ ์ธก๋ฉด์—์„œ๋„ Admission Control์ด ์œ ๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ธ๋ฐ์š”. ํด๋Ÿฌ์Šคํ„ฐ์— ๋ฐฐํฌํ•˜๋Š” App์— ์ ์ ˆํ•œ Label์„ ์ž๋™์œผ๋กœ ๊ธฐ์ž…ํ•˜๊ฑฐ๋‚˜ App์ด ์‚ฌ์šฉํ•  Memory๋‚˜ CPU์˜ ๊ทœ๋ชจ๋ฅผ ๋ฏธ๋ฆฌ ์ œํ•œํ•˜๋Š” ๋“ฑ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ๋ฆฌ์†Œ์Šค๋ฅผ ๋”์šฑ ํšจ๊ณผ์ ์œผ๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ฃ .

 

Admission Control์€ 2๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ  ๋™์ž‘๋ฉ๋‹ˆ๋‹ค.

๊ฐ€์žฅ ๋จผ์ € ๋ณ€๊ฒฝ(Mutate) ๋‹จ๊ณ„๊ฐ€ ์ง„ํ–‰๋˜๋Š”๋ฐ์š”. k8s API ์„œ๋ฒ„๋กœ ๋“ค์–ด์˜จ ์š”์ฒญ๊ณผ ๋งค์นญ๋˜๋Š” ์ •์ฑ…์ด ํ•ด๋‹น ์š”์ฒญ์˜ ์ผ๋ถ€ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” Mutate ์ •์ฑ…์ผ ๊ฒฝ์šฐ, ํ•ด๋‹น ์š”์ฒญ์—์„œ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์„ ์•Œ๋ ค์ฃผ๋Š” ๊ฐ’์„ k8s API ์„œ๋ฒ„๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ๋‹ค์Œ ์ง„ํ–‰๋˜๋Š” ๊ฒ€์ฆ(Validate) ๋‹จ๊ณ„์—์„  ํ•ด๋‹น ์š”์ฒญ๊ณผ ๋งค์นญ๋˜๋Š” ์ •์ฑ…์ด ์š”์ฒญ์„ ํ—ˆ์šฉ/๊ฑฐ๋ถ€ํ•˜๋Š” Validate ์ •์ฑ…์ผ ๊ฒฝ์šฐ, ํ•ด๋‹น ์š”์ฒญ์ด ์ •์ฑ…์— ๋ถ€ํ•ฉํ•˜๋Š”์ง€์— ๋Œ€ํ•ด true/false ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

 

Admission Controller๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ด์ ๊ณผ ๋™์ž‘ ๋ฐฉ์‹์— ๋Œ€ํ•ด ์•Œ์•„๋ดค๋Š”๋ฐ, ๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”?

๊ธฐ๋ณธ์ ์œผ๋กœ k8s ํด๋Ÿฌ์Šคํ„ฐ์—๋Š” Pod์ด๋‚˜ ์ธ์ฆ์„œ ๋“ฑ์— ๊ด€ํ•œ ๋‹ค์–‘ํ•œ Admission Controller๊ฐ€ ์ค€๋น„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” k8s API ์„œ๋ฒ„์—์„œ ๋ฐ”๋กœ ์„ค์ •ํ•˜์—ฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์•„๋‹ˆ๋ฉด Admission Controller๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž„์˜์˜ ์„œ๋ฒ„๋ฅผ ๊ตฌํ˜„ํ•œ ๋‹ค์Œ k8s API ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์„ ๋ฐ›๋„๋ก ์„ค์ •ํ•˜๊ณ , ํ•ด๋‹น ์š”์ฒญ์— ๋Œ€ํ•ด ํŠน์ • ์ •์ฑ… ๋กœ์ง์„ ๊ตฌํ˜„ํ•œ ๋‹ค์Œ k8s API ์„œ๋ฒ„๊ฐ€ Admission Control ๊ฒฐ๊ณผ๋ผ๊ณ  ์ธ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ์–‘์‹์— ๊ฒฐ๊ณผ๊ฐ’์„ ๋‹ด์•„ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์ด์ฃ .

์„œ๋“œํŒŒํ‹ฐ ํˆด์„ ์‚ฌ์šฉํ•˜๋Š” ์„ ํƒ์ง€๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์—์„œ ์†Œ๊ฐœํ•  Kyverno๋„ k8s ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์‚ฌ์šฉ๋˜๋„๋ก ๊ฐœ๋ฐœ๋œ ์ •์ฑ… ์—”์ง„์ž…๋‹ˆ๋‹ค.

 

๐Ÿ’กKubernetes๋ฅผ ์œ„ํ•œ ์ •์ฑ… ์—”์ง„, Kyverno

Kyverno์˜ ์•„ํ‚คํ…์ฒ˜๋Š” ์œ„ Admission Controller ์•„ํ‚คํ…์ฒ˜์™€ ํ•จ๊ป˜ ๋ณด๋ฉด ๋”์šฑ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. 
Kyverno์˜ ์•„ํ‚คํ…์ฒ˜๋Š” ์œ„ Admission Controller ์•„ํ‚คํ…์ฒ˜์™€ ํ•จ๊ป˜ ๋ณด๋ฉด ๋”์šฑ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. 

์œ„์—์„œ Kyverno๊ฐ€ Admission Controller๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์„œ๋“œํŒŒํ‹ฐ ํˆด์ด๋ผ๊ณ  ํ–ˆ๋Š”๋ฐ์š”. k8s ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” Admission Controller ๋ง๊ณ  Kyverno๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ด์ ์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ํด๋Ÿฌ์Šคํ„ฐ ์ •์ฑ…์„ k8s ๋ฆฌ์†Œ์Šค๋กœ ์ƒ์„ฑ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด ์–ธ์–ด๋ฅผ ํ•™์Šตํ•˜์ง€ ์•Š๊ณ ๋„ ์ •์ฑ… ์ •์˜ ๊ฐ€๋Šฅ
  • ์ •์ฑ…์„ ํ†ตํ•ด์„œ ๊ฒ€์ฆ(Validate)๊ณผ ๋ณ€๊ฒฝ(Mutate)๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ(Generate) ๋˜๋Š” ์ œ๊ฑฐ(Cleanup)๋„ ๊ฐ€๋Šฅ
  • ์ถ”๊ฐ€๋กœ ์ œ๊ณต๋˜๋Š” Kyverno CLI๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ • ์ •์ฑ…์„ ํด๋Ÿฌ์Šคํ„ฐ์— ์ ์šฉํ•˜๊ธฐ ์ „์— ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ

 

Kyverno๋Š” Helm ๋˜๋Š” ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ(YAML ํŒŒ์ผ)๋กœ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์— ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ํŠน์ • Namespace(kyverno) ์•ˆ์— Kyverno ๋™์ž‘์— ํ•„์š”ํ•œ ์—ฌ๋Ÿฌ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์„ค์น˜๋˜๋Š” ๋ฐฉ์‹์ธ๋ฐ์š”. ๊ฐ ๊ตฌ์„ฑ์š”์†Œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Admission Controller
    • k8s API ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ Admission Control ์š”์ฒญ์„ ๋ฐ›๋Š” ์—ญํ•  ์ˆ˜ํ–‰
    • Validate, Mutate ๋“ฑ์˜ ์ •์ฑ… ์ˆ˜ํ–‰
  • Reports Controller
    • ์ •์ฑ…์— ๋Œ€ํ•œ ๋ฆฌํฌํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์—ญํ•  ์ˆ˜ํ–‰
  • Background Controller
    • ์ •์ฑ… ์ถ”๊ฐ€, ์—…๋ฐ์ดํŠธ, ์‚ญ์ œ ๋‹ด๋‹น
  • Cleanup Controller
    • Cleanup ์ •์ฑ… ์ˆ˜ํ–‰

 

๐Ÿ”ญ๋งˆ์น˜๋ฉฐ...

์ด๋ฒˆ ์†Œ์‹์ง€์—์„  Kubernetes์—์„œ ์กฐ๊ธˆ์€ ๊นŠ์€ ๋‚ด์šฉ์ธ Admission Control๊ณผ ๊ด€๋ จ ์„œ๋“œํŒŒํ‹ฐ ํˆด์— ๋Œ€ํ•ด ๋‹ค๋ค„๋ดค์Šต๋‹ˆ๋‹ค. ์ง๊ด€์ ์œผ๋กœ ์ดํ•ดํ•˜๊ธด ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋…์ด์ง€๋งŒ k8s์—์„œ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ด๋‹ˆ ํ•œ ๋ฒˆ์ฏค ์งš์–ด๊ฐ€๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์„œ ์ด๋ฒˆ ์ฃผ์ œ๋กœ ์žก์•„๋ดค์Šต๋‹ˆ๋‹ค.๐Ÿค“

ํ˜น์‹œ ์ด๋ฒˆ ๋‚ด์šฉ ๊ด€๋ จํ•ด์„œ ๋” ๊ถ๊ธˆํ•œ ์ ์ด ์žˆ์œผ์‹œ๋‹ค๋ฉด ์•„๋ž˜ ๋ฉ”์ผ๋ฆฌ ๋Œ“๊ธ€ ๋‚จ๊ฒจ์ฃผ์„ธ์š”.๐Ÿ˜€

๊ทธ๋Ÿผ, ๋‹ค์Œ ์†Œ์‹์ง€์—์„œ ๋ณด๋‹ค ์•Œ์ฐจ๊ณ  ํฅ๋ฏธ๋กœ์šด ๋‚ด์šฉ์œผ๋กœ ์ฐพ์•„๋ต™๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ˜บ

 

๐Ÿ”—References

Admission Controllers Reference

A Guide to Kubernetes Admission Controllers

Cloud Native Live: Kyverno 1.12 and beyond!

https://main.kyverno.io/docs/introduction/

 

๋‹ค๊ฐ€์˜ฌ ๋‰ด์Šค๋ ˆํ„ฐ๊ฐ€ ๊ถ๊ธˆํ•˜์‹ ๊ฐ€์š”?

์ง€๊ธˆ ๊ตฌ๋…ํ•ด์„œ ์ƒˆ๋กœ์šด ๋ ˆํ„ฐ๋ฅผ ๋ฐ›์•„๋ณด์„ธ์š”

โœ‰๏ธ

์ด๋ฒˆ ๋‰ด์Šค๋ ˆํ„ฐ ์–ด๋– ์…จ๋‚˜์š”?

DevOps ์—ฌํ–‰์„ ์œ„ํ•œ ์†Œ์‹์ง€ ๋‹˜์—๊ฒŒ โ˜•๏ธ ์ปคํ”ผ์™€ โœ‰๏ธ ์ชฝ์ง€๋ฅผ ๋ณด๋‚ด๋ณด์„ธ์š”!

๋Œ“๊ธ€

์˜๊ฒฌ์„ ๋‚จ๊ฒจ์ฃผ์„ธ์š”

ํ™•์ธ
์˜๊ฒฌ์ด ์žˆ์œผ์‹ ๊ฐ€์š”? ์ œ์ผ ๋จผ์ € ๋Œ“๊ธ€์„ ๋‹ฌ์•„๋ณด์„ธ์š” !

ยฉ 2024 DevOps ์—ฌํ–‰์„ ์œ„ํ•œ ์†Œ์‹์ง€

DevOps, ํด๋ผ์šฐ๋“œ, IT ๊ธฐ์ˆ  ๊ด€๋ จ ์ตœ์‹  ์†Œ์‹๊ณผ ์ •๋ณด๋ฅผ ์ •๋ฆฌํ•ด์„œ ์ฃผ 1ํšŒ ์ด๋ฉ”์ผ๋กœ ์ „ํ•ด๋“œ๋ฆฝ๋‹ˆ๋‹ค๐Ÿ˜บ

๋‰ด์Šค๋ ˆํ„ฐ ๋ฌธ์˜ : eduukulelekim@gmail.com

์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ ์˜ค๋ฅ˜ ๋ฐ ๊ธฐ๋Šฅ ๊ด€๋ จ ์ œ๋ณด

์„œ๋น„์Šค ์ด์šฉ ๋ฌธ์˜admin@team.maily.so

๋ฉ”์ผ๋ฆฌ (๋Œ€ํ‘œ์ž: ์ดํ•œ๊ฒฐ) | ์‚ฌ์—…์ž๋ฒˆํ˜ธ: 717-47-00705 | ์„œ์šธ ์„œ์ดˆ๊ตฌ ๊ฐ•๋‚จ๋Œ€๋กœ53๊ธธ 8, 8์ธต 11-7ํ˜ธ

์ด์šฉ์•ฝ๊ด€ | ๊ฐœ์ธ์ •๋ณด์ฒ˜๋ฆฌ๋ฐฉ์นจ | ์ •๊ธฐ๊ฒฐ์ œ ์ด์šฉ์•ฝ๊ด€ | 070-8027-2840