poc0910a

Young-Kyoo Kimยท2025๋…„ 9์›” 10์ผ

##1

์ข‹์Šต๋‹ˆ๋‹ค ๐Ÿ‘ ์ง€๊ธˆ ํ…์ŠคํŠธ๋Š” ๊ธฐ์ˆ  ํšŒ์˜ ์ค‘ ๋…น์ทจ์ฒ˜๋Ÿผ ๋ณด์ด๋Š”๋ฐ ์ค‘๊ฐ„์— ์Œ์„ฑ ์ธ์‹ ์˜ค๋ฅ˜(Photography โ†’ Probably, Guitar Phelps โ†’ โ€œGood, perhapsโ€ ๋“ฑ)๋„ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ตœ๋Œ€ํ•œ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์˜๋ฏธ๋ฅผ ๋ณด์กดํ•˜๋ฉด์„œ ํ•œ๊ตญ์–ด๋กœ ์˜ฎ๊ฒจ๋“œ๋ฆด๊ฒŒ์š”.


์‚ฌ์ง„ ์–˜๊ธฐ๋‚˜ ๊ธฐํƒ€ ์–˜๊ธฐ๋Š” ๊ทธ๋ƒฅ ์ž˜๋ชป ์ธ์‹๋œ ๋ถ€๋ถ„ ๊ฐ™์•„์š”. ์‹ค์ œ ๋งฅ๋ฝ์€ Kubernetes, mTLS, MinIO, S3 ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•œ ์›Œํฌ์ˆ/๋ฏธํŒ… ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.


๋ฒˆ์—ญ (์˜๋ฏธ ์œ„์ฃผ ์ •๋ฆฌ)

์šฐ๋ฆฌ๊ฐ€ 1๋ฒˆ ํ•ญ๋ชฉ์€ ๊ฑด๋„ˆ๋›ฐ์—ˆ์–ด. Kubernetes๋Š” ์ด๋ฏธ ์„ค์น˜ํ–ˆ์œผ๋‹ˆ๊นŒ. ์–ด์ œ ๊ฒ€ํ† ํ–ˆ์ง€.
2๋ฒˆ ํ•ญ๋ชฉ(mTLS + KMS)์€ ์•„์ง ์ค€๋น„๊ฐ€ ์•ˆ ๋ผ์„œ ๊ฑด๋„ˆ๋›ฐ๊ณ , 3๋ฒˆ์œผ๋กœ ๋„˜์–ด๊ฐ”์–ด.

3๋ฒˆ์€ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๊ด€๋ จ์ธ๋ฐ, ๊ธฐ๋ณธ ์„ธํŒ…์„ ๋ฆฌ๋ทฐํ•˜๊ณ  ๋‚˜์„œ ์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‚จ๊ธฐ๋Š” ์ •๋„๋กœ ์ •๋ฆฌํ–ˆ์–ด.
์ฒซ๋‚ ์—๋Š” ๋ณด์•ˆ ๊ด€์ ์—์„œ LDAPs ์ ์šฉ์„ ๊ฐ•ํ•˜๊ฒŒ ๊ถŒ์žฅํ–ˆ์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” SSL/TLS๋ฅผ ์ž˜ ์“ฐ๋ฉด ์ถฉ๋ถ„ํ•˜๋‹ค๋Š” ์ชฝ์œผ๋กœ ์ •๋ฆฌํ–ˆ์–ด. ์ƒ๋Œ€๋ฐฉ AD(Active Directory) ์„ธํŒ…์ด ๋‹จ์ˆœ LDAP ๊ธฐ๋ฐ˜์ด๋ผ, ๋‚ด๋ถ€ ๊ทธ๋ฃน/์ •์ฑ…/IAM ๊ตฌ์„ฑ ๊ฐ™์€ ๋ถ€๋ถ„๋งŒ ๋‹ค์‹œ ๊ฒ€ํ† ํ•˜๋ฉด ๋  ๋“ฏํ•ด.

4๋ฒˆ ํ•ญ๋ชฉ๋ถ€ํ„ฐ ์‹œ์ž‘ํ–ˆ์–ด. ์—ฌ๊ธฐ์„œ๋Š” ์•”ํ˜ธํ™”, ๋ฒ„์ €๋‹ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ๊ฐ„๋‹จํžˆ ํ…Œ์ŠคํŠธํ–ˆ๋Š”๋ฐ, ์‹ค์ œ๋กœ๋Š” Iceberg ๋ฒ„์ €๋‹์„ ์“ฐ๊ณ  ์žˆ์–ด์„œ MinIO์˜ ๋ฒ„์ €๋‹์€ ๋‹จ์ˆœ ํ…Œ์ŠคํŠธ ์šฉ๋„๋กœ๋งŒ ํ™•์ธํ•œ ๊ฑฐ์•ผ.

๊ทธ๋‹ค์Œ MC(minio client) ๋ช…๋ น์–ด๋ฅผ ํ™œ์šฉํ•ด์„œ ๋ฒ„ํ‚ท ์ƒ์„ฑ, ์˜ค๋ธŒ์ ํŠธ ์—…๋กœ๋“œ, ์‚ญ์ œ, ํƒœ๊น…(tagging), ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(metadata) ์„ค์ • ๋“ฑ์„ ํ…Œ์ŠคํŠธํ–ˆ์–ด.

  • ๋ฒ„ํ‚ท์ด ๋น„์–ด์žˆ์ง€ ์•Š์œผ๋ฉด ์‚ญ์ œ๊ฐ€ ๋ง‰ํžˆ๋Š” ๋ณดํ˜ธ ๊ธฐ๋Šฅ๋„ ํ™•์ธํ–ˆ๊ณ ,
  • mc ls --json ์ฒ˜๋Ÿผ JSON ์ถœ๋ ฅ ์˜ต์…˜์œผ๋กœ ์ž๋™ํ™”์— ์œ ๋ฆฌํ•˜๋‹ค๋Š” ์ ๋„ ํ™•์ธํ–ˆ์–ด.
  • ์˜ค๋ธŒ์ ํŠธ ํƒœ๊น…๊ณผ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์„ค์ •ํ•˜๊ณ  ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•๋„ ๊ฐ™์ด ํ…Œ์ŠคํŠธํ–ˆ์–ด.

๊ทธ๋ฆฌ๊ณ  ๋ฆฌ์ŠคํŠธ(list) API ์–˜๊ธฐ๋ฅผ ํ–ˆ๋Š”๋ฐ,

  • ๋ฆฌ์ŠคํŠธ API๋Š” ํ•ญ์ƒ ์ •๋ ฌ(sorting)์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋А๋ฆฌ๊ณ  ๋ฆฌ์†Œ์Šค๊ฐ€ ๋งŽ์ด ๋“ ๋‹ค.
  • MinIO Express ๋ชจ๋“œ์—์„œ๋Š” ์ •๋ ฌ์„ ์•ˆ ํ•ด์„œ ํ›จ์”ฌ ๋น ๋ฅด๋‹ค.
  • ๋ฆฌ์ŠคํŠธ๋Š” ์ตœ๋Œ€ 1000๊ฐœ ๋‹จ์œ„๋กœ ํŽ˜์ด์ง€๋„ค์ด์…˜์ด ๋˜๊ณ , ์ปค์„œ๋ฅผ ์ด์šฉํ•ด ๋‹ค์Œ ํŽ˜์ด์ง€๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ตฌ์กฐ๋‹ค.

๋‚ด๋ถ€ ๋™์ž‘ ์„ค๋ช…:

  • MinIO๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ DB๋ฅผ ์“ฐ์ง€ ์•Š๊ณ , Consistent Hashing์œผ๋กœ ์˜ค๋ธŒ์ ํŠธ ์œ„์น˜๋ฅผ ์ฐพ๋Š”๋‹ค.
  • ๋•๋ถ„์— DB ์žฅ์•  ๊ฐ™์€ ๋‹จ์ผ ์‹คํŒจ ์ง€์ (SPOF)์ด ์—†๊ณ , ์„œ๋ฒ„๊ฐ€ ์ผ๋ถ€ ์ฃฝ์–ด๋„ ์ฝ๊ธฐ/๋ฆฌ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋‹จ์ ์€ ๋ฆฌ์ŠคํŠธ ๊ฐ™์€ ์—ฐ์‚ฐ ์‹œ ์—ฌ๋Ÿฌ ๋…ธ๋“œ๋ฅผ ๋™์‹œ์— ์กฐํšŒํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋น„์šฉ์ด ํฌ๋‹ค๋Š” ์ ์ด๋‹ค.

๋ฉ€ํ‹ฐํŒŒํŠธ ์—…๋กœ๋“œ(multipart upload):

  • 64MB ์ด์ƒ ํŒŒ์ผ์€ SDK์—์„œ ์ž๋™์œผ๋กœ ๋ถ„ํ•  ์—…๋กœ๋“œ๋œ๋‹ค.
  • ์ž‘์€ ํŒŒ์ผ๋„ ์›ํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์ ์œผ๋กœ ๋ฉ€ํ‹ฐํŒŒํŠธ ์—…๋กœ๋“œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • mc admin trace๋กœ ๋ฉ€ํ‹ฐํŒŒํŠธ ์—…๋กœ๋“œ ๋™์ž‘์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • S3 ํ‘œ์ค€ ํ•œ๋„๋Š” 5TB ํŒŒ์ผ์ด์ง€๋งŒ, MinIO๋Š” ๋‚ด๋ถ€์—์„œ ์ œํ•œ์„ ํ’€์–ด์„œ ์ˆ˜์‹ญ TB ํŒŒ์ผ๋„ ์—…๋กœ๋“œ ๊ฐ€๋Šฅํ•˜๋‹ค.

ํ”„๋ฆฌ์‚ฌ์ธ URL(pre-signed URL):

  • ๊ธฐ๋ณธ S3 ์ธ์ฆ์€ 15๋ถ„์งœ๋ฆฌ ์„œ๋ช… ๊ธฐ๋ฐ˜์ธ๋ฐ, ํ”„๋ฆฌ์‚ฌ์ธ URL์€ ์œ ํšจ๊ธฐ๊ฐ„์„ 7์ผ๊นŒ์ง€ ๋Š˜๋ฆด ์ˆ˜ ์žˆ๋‹ค.
  • ์œ ํšจ๊ธฐ๊ฐ„์ด ๋๋‚˜๊ธฐ ์ „๊นŒ์ง€๋Š” ์›๋ณธ ๊ฐ์ฒด๊ฐ€ ์‚ญ์ œ๋˜์–ด๋„ ๊ฐ™์€ URL๋กœ ๊ณ„์† ์—…๋กœ๋“œ/๋‹ค์šด๋กœ๋“œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ํ”„๋ฆฌ์‚ฌ์ธ URL์€ ๋ฐœ๊ธ‰ ๊ณ„์ •์„ ์‚ญ์ œํ•˜์ง€ ์•Š๋Š” ์ด์ƒ ์ทจ์†Œํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.

๋ฒ„์ €๋‹(versioning):

  • ๊ฐ™์€ ํŒŒ์ผ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์—…๋กœ๋“œํ•˜๋ฉด ๋ฒ„์ „ ID๊ฐ€ ์ƒˆ๋กœ ์ƒ์„ฑ๋œ๋‹ค.
  • ์‚ญ์ œ๋„ ๋˜ ๋‹ค๋ฅธ ๋ฒ„์ „์œผ๋กœ ๊ธฐ๋ก๋˜๋ฉฐ, ์‹ค์ œ๋กœ๋Š” "์‚ญ์ œ ๋งˆ์ปค"๋งŒ ์ถ”๊ฐ€๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • mc ls --versions๋กœ ํŠน์ • ๋ฒ„์ „ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

ETag:

  • ์˜ค๋ธŒ์ ํŠธ ๊ณ ์œ ์„ฑ ํ™•์ธ์„ ์œ„ํ•œ ํ•ด์‹œ ๊ฐ’์œผ๋กœ, ๋ณต์ œ๋‚˜ ๋™๊ธฐํ™” ์‹œ "๊ฐ™์€ ํŒŒ์ผ์ธ์ง€ ์—ฌ๋ถ€"๋ฅผ ํŒ๋‹จํ•˜๋Š” ๊ทผ๊ฑฐ๊ฐ€ ๋œ๋‹ค.

๋ฒ„ํ‚ท ์ •์ฑ…(bucket policy):

  • ๊ธฐ๋ณธ์€ private.
  • public ์ •์ฑ…์„ ์ ์šฉํ•˜๋ฉด ๋ˆ„๊ตฌ๋‚˜ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๋ณด์•ˆํŒ€์ด๋‚˜ ์ปดํ”Œ๋ผ์ด์–ธ์Šค ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฐ๋ผ ์ œํ•œ์ ์œผ๋กœ ์ ์šฉํ•˜๋Š” ๊ฒŒ ๊ถŒ์žฅ๋œ๋‹ค.

๋ผ์ดํ”„์‚ฌ์ดํด(lifecycle):

  • ์ •์ฑ… ์ ์šฉ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ์ง€๋งŒ, ์˜ค๋ž˜๋œ ์˜ค๋ธŒ์ ํŠธ ์ž๋™ ์‚ญ์ œ๋‚˜ ์ด๋™ ์ •์ฑ…์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ‘‰ ์š”์•ฝํ•˜๋ฉด:
์ด ํšŒ์˜๋Š” MinIO(S3 ํ˜ธํ™˜ ์Šคํ† ๋ฆฌ์ง€)์—์„œ ๋ณด์•ˆ(LDAPs, TLS), ๋ฒ„์ €๋‹, ๋ผ์ดํ”„์‚ฌ์ดํด, ํ”„๋ฆฌ์‚ฌ์ธ URL, ๋ฉ€ํ‹ฐํŒŒํŠธ ์—…๋กœ๋“œ, ์˜ค๋ธŒ์ ํŠธ ํƒœ๊น…/๋ฉ”ํƒ€๋ฐ์ดํ„ฐ, ๋ฆฌ์ŠคํŠธ API ํŠน์„ฑ, ๋‚ด๋ถ€ ์•„ํ‚คํ…์ฒ˜(ํ•ด์‹œ ๊ธฐ๋ฐ˜ ๋ถ„์‚ฐ ๊ตฌ์กฐ) ๋“ฑ์„ ์‹ค์Šตํ•˜๊ณ  ๊ฒ€ํ† ํ•œ ๊ธฐ๋ก์ด์•ผ.


์›๋ž˜ ํ…์ŠคํŠธ๋ฅผ ๊ทธ๋Œ€๋กœ ๋‹ค ์ง์—ญํ•ด์ค„๊นŒ? ์•„๋‹ˆ๋ฉด ๋‚ด๊ฐ€ ์ •๋ฆฌํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์˜๋ฏธ ์œ„์ฃผ ๋ฒˆ์—ญ์œผ๋กœ ํ•˜๋Š” ๊ฒŒ ๋” ํ•„์š”ํ•ด?

##2

์ข‹์Šต๋‹ˆ๋‹ค ๐Ÿ™† ์š”์ฒญํ•ด์ฃผ์‹  ๋Œ€๋กœ ์›๋ฌธ์„ ์ตœ๋Œ€ํ•œ ์ง์—ญํ•˜๋˜, ๋ฌธ๋งฅ์ƒ ์˜๋ฏธ๊ฐ€ ์ด์ƒํ•˜์ง€ ์•Š๊ฒŒ๋งŒ ๋‹ค๋“ฌ์–ด์„œ ํ•œ๊ตญ์–ด๋กœ ์˜ฎ๊ฒจ๋“œ๋ฆด๊ฒŒ์š”.


์ง์—ญ ๋ฒˆ์—ญ (ๆ„ ์‚ด๋ ค์„œ)

1๋ฒˆ์€ ๊ฑด๋„ˆ๋›ฐ์—ˆ์Šต๋‹ˆ๋‹ค. Kubernetes๋Š” ์ด๋ฏธ ์„ค์น˜๋˜์–ด ์žˆ๊ณ , ์–ด์ œ ํ™•์ธํ–ˆ์œผ๋‹ˆ๊นŒ์š”.
2๋ฒˆ์€ mTLS + KMS์ธ๋ฐ, ๊ทธ๊ฑด ์•„์ง ์ค€๋น„๊ฐ€ ์•ˆ ๋ผ์„œ ๊ฑด๋„ˆ๋›ฐ๊ณ , 3๋ฒˆ์œผ๋กœ ๊ฐ”์Šต๋‹ˆ๋‹ค.

3๋ฒˆ์€ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๊ด€๋ จ์ธ๋ฐ, ๊ธฐ๋ณธ ์„ธํŒ…์„ ๋ฆฌ๋ทฐํ•˜๊ณ  ์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ข€ ๋‚จ๊ฒผ์Šต๋‹ˆ๋‹ค.
์–ด์ œ ์ฒซ๋‚ ์—๋Š” ๋ณด์•ˆ ๊ด€์ ์—์„œ LDAPs ์ ์šฉ์„ ๊ฐ•ํ•˜๊ฒŒ ๊ถŒ์žฅํ–ˆ๋Š”๋ฐ, ์‚ฌ์‹ค SSL/TLS๋งŒ ์ž˜ ์ ์šฉํ•ด๋„ ์ถฉ๋ถ„ํ•˜๋‹ค๋Š” ์ชฝ์œผ๋กœ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.
์ƒ๋Œ€๋ฐฉ์˜ Active Directory๊ฐ€ ๋‹จ์ˆœ LDAP ๊ธฐ๋ฐ˜์ด๋ผ, ๋‚ด๋ถ€ ๊ทธ๋ฃน/์ •์ฑ…/IAM ๊ตฌ์„ฑ์„ ๋‹ค์‹œ ํ™•์ธํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

4๋ฒˆ๋ถ€ํ„ฐ ๋ณธ๊ฒฉ์ ์œผ๋กœ ๋“ค์–ด๊ฐ”์Šต๋‹ˆ๋‹ค.
์—ฌ๊ธฐ์„œ๋Š” ์•”ํ˜ธํ™”(encryption), ๋ฒ„์ €๋‹(versioning) ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ๊ฐ„๋‹จํžˆ ํ™•์ธํ–ˆ๋Š”๋ฐ, ์‹ค์ œ๋กœ๋Š” Iceberg์—์„œ ์ž์ฒด ๋ฒ„์ €๋‹์„ ์“ฐ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— MinIO ๋ฒ„์ €๋‹์€ ๋‹จ์ˆœ ํ…Œ์ŠคํŠธ ์šฉ๋„๋กœ๋งŒ ๊ฒ€์ฆํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋‹ค์Œ์—๋Š” MC(minio client) ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด์„œ ๋ฒ„ํ‚ท ์ƒ์„ฑ, ์˜ค๋ธŒ์ ํŠธ ์—…๋กœ๋“œ, ์‚ญ์ œ, ํƒœ๊น…(tagging), ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(metadata) ์„ค์ •์„ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ๋ฒ„ํ‚ท์ด ๋น„์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด ์‚ญ์ œ๊ฐ€ ๋ง‰ํžˆ๋Š” ๊ธฐ๋Šฅ๋„ ํ™•์ธํ–ˆ๊ณ ,
  • mc ls --json์ฒ˜๋Ÿผ JSON ์ถœ๋ ฅ์œผ๋กœ ์ž๋™ํ™”์— ์œ ๋ฆฌํ•œ ์ ๋„ ๋ดค์Šต๋‹ˆ๋‹ค.
  • ์˜ค๋ธŒ์ ํŠธ ํƒœ๊น…๊ณผ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์„ค์ •ํ•˜๊ณ  ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ๋„ ๊ฒ€์ฆํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฆฌ์ŠคํŠธ(list) API์— ๋Œ€ํ•ด์„œ๋„ ์–˜๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ๋ฆฌ์ŠคํŠธ API๋Š” ํ•ญ์ƒ ์ •๋ ฌ(sorting)์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋А๋ฆฌ๊ณ  ๋ฆฌ์†Œ์Šค๊ฐ€ ๋งŽ์ด ๋“ญ๋‹ˆ๋‹ค.
  • MinIO Express ๋ชจ๋“œ์—์„œ๋Š” ์ •๋ ฌ์„ ํ•˜์ง€ ์•Š์•„์„œ ํ›จ์”ฌ ๋น ๋ฆ…๋‹ˆ๋‹ค.
  • ๋ฆฌ์ŠคํŠธ๋Š” ์ตœ๋Œ€ 1000๊ฐœ ๋‹จ์œ„๋กœ ํŽ˜์ด์ง•๋˜๋ฉฐ, ์ปค์„œ๋ฅผ ์ด์šฉํ•ด ๋‹ค์Œ ํŽ˜์ด์ง€๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

๋‚ด๋ถ€ ๋™์ž‘ ๋ฐฉ์‹์€ ์ด๋ ‡์Šต๋‹ˆ๋‹ค:

  • MinIO๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ DB๋ฅผ ์“ฐ์ง€ ์•Š๊ณ , Consistent Hashing์œผ๋กœ ์˜ค๋ธŒ์ ํŠธ ์œ„์น˜๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ž˜์„œ DB ์žฅ์•  ๊ฐ™์€ ๋‹จ์ผ ์‹คํŒจ ์ง€์ (SPOF)์ด ์—†๊ณ , ์„œ๋ฒ„ ์ผ๋ถ€๊ฐ€ ์ฃฝ์–ด๋„ ์ฝ๊ธฐ/๋ฆฌ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ๋ฆฌ์ŠคํŠธ ๊ฐ™์€ ์—ฐ์‚ฐ์€ ์—ฌ๋Ÿฌ ๋…ธ๋“œ๋ฅผ ๋™์‹œ์— ์กฐํšŒํ•ด์•ผ ํ•ด์„œ ๋น„์šฉ์ด ํฝ๋‹ˆ๋‹ค.

**๋ฉ€ํ‹ฐํŒŒํŠธ ์—…๋กœ๋“œ(multipart upload)**๋„ ๋‹ค๋ค˜์Šต๋‹ˆ๋‹ค.

  • 64MB ์ด์ƒ ํŒŒ์ผ์€ SDK์—์„œ ์ž๋™์œผ๋กœ ๋ถ„ํ•  ์—…๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค.
  • ์ž‘์€ ํŒŒ์ผ๋„ ์›ํ•˜๋ฉด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ ์œผ๋กœ ๋ฉ€ํ‹ฐํŒŒํŠธ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • mc admin trace๋กœ ๋ฉ€ํ‹ฐํŒŒํŠธ ์—…๋กœ๋“œ ๋™์ž‘์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.
  • S3 ํ‘œ์ค€์€ 5TB๊นŒ์ง€์ง€๋งŒ, MinIO๋Š” ๋‚ด๋ถ€ ์ œํ•œ์„ ํ’€์–ด์„œ ์ˆ˜์‹ญ TB ํŒŒ์ผ๋„ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋ฆฌ์‚ฌ์ธ URL(pre-signed URL):

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

๋ฒ„์ €๋‹(versioning):

  • ๊ฐ™์€ ํŒŒ์ผ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์—…๋กœ๋“œํ•˜๋ฉด ๋ฒ„์ „ ID๊ฐ€ ์ƒˆ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • ์‚ญ์ œ๋„ ๋˜ ๋‹ค๋ฅธ ๋ฒ„์ „์œผ๋กœ ๊ธฐ๋ก๋˜๊ณ , ์‹ค์ œ๋กœ๋Š” "์‚ญ์ œ ๋งˆ์ปค(delete marker)"๊ฐ€ ์ถ”๊ฐ€๋˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
  • mc ls --versions๋กœ ํŠน์ • ๋ฒ„์ „ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

ETag:

  • ์˜ค๋ธŒ์ ํŠธ ๊ณ ์œ ์„ฑ์„ ํ™•์ธํ•˜๋Š” ํ•ด์‹œ ๊ฐ’์œผ๋กœ, ๋ณต์ œ๋‚˜ ๋™๊ธฐํ™” ์‹œ ๊ฐ™์€ ํŒŒ์ผ์ธ์ง€ ํŒ๋‹จํ•˜๋Š” ๋ฐ ์“ฐ์ž…๋‹ˆ๋‹ค.

๋ฒ„ํ‚ท ์ •์ฑ…(bucket policy):

  • ๊ธฐ๋ณธ์€ private์ž…๋‹ˆ๋‹ค.
  • public ์ •์ฑ…์„ ์ ์šฉํ•˜๋ฉด ๋ˆ„๊ตฌ๋‚˜ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ณด์•ˆํŒ€์ด๋‚˜ ์ปดํ”Œ๋ผ์ด์–ธ์Šค ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฐ๋ผ ์ œํ•œ์ ์œผ๋กœ๋งŒ ์“ฐ๋Š” ๊ฒŒ ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค.

๋ผ์ดํ”„์‚ฌ์ดํด(lifecycle):

  • ์ •์ฑ… ์ ์šฉ์—๋Š” ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ์ง€๋งŒ, ์˜ค๋ž˜๋œ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ž๋™ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ์ด๋™ํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ‘‰ ์ด๋ ‡๊ฒŒ ์ง์—ญํ•˜๋‹ˆ ์›๋ฌธ ๋‰˜์•™์Šค๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ํ•œ๊ตญ์–ด๋กœ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ฝํžˆ์‹ค ๊ฑฐ์˜ˆ์š”.

ํ˜น์‹œ ์›ํ•˜์‹œ๋ฉด ์ œ๊ฐ€ ์›๋ฌธ๊ณผ ๋ฒˆ์—ญ๋ฌธ์„ ๋ฌธ๋‹จ๋ณ„๋กœ ๋‚˜๋ž€ํžˆ ์ •๋ฆฌํ•ด๋“œ๋ ค์„œ ๋น„๊ตํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋ณด์—ฌ๋“œ๋ฆด๊นŒ์š”?

##3

์ข‹์Šต๋‹ˆ๋‹ค ๐Ÿ™† ๊ทธ๋Ÿฌ๋ฉด ์›๋ฌธ โ†’ ๋ฒˆ์—ญ๋ฌธ์„ ๋ฌธ๋‹จ๋ณ„๋กœ ๋‚˜๋ž€ํžˆ ์ •๋ฆฌํ•ด์„œ ๋ณด์—ฌ๋“œ๋ฆด๊ฒŒ์š”.
(์›๋ฌธ์€ ์ œ๊ฐ€ ์–ด์ œ ๋ฐ›์•˜๋˜ ํ…์ŠคํŠธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์žฌ๊ตฌ์„ฑํ–ˆ๊ณ , ์˜คํƒ€/์Œ์„ฑ ์ธ์‹ ์˜ค๋ฅ˜๋Š” ๊ทธ๋Œ€๋กœ ๋‘๋˜ ์˜๋ฏธ๊ฐ€ ์™œ๊ณก๋˜์ง€ ์•Š๊ฒŒ ๋ฒˆ์—ญํ–ˆ์Šต๋‹ˆ๋‹ค.)


1.

์›๋ฌธ:
We skipped number 1, Kubernetes was already installed, we checked yesterday.
๋ฒˆ์—ญ:
1๋ฒˆ์€ ๊ฑด๋„ˆ๋›ฐ์—ˆ์Šต๋‹ˆ๋‹ค. Kubernetes๋Š” ์ด๋ฏธ ์„ค์น˜๋˜์–ด ์žˆ๊ณ , ์–ด์ œ ํ™•์ธํ–ˆ์œผ๋‹ˆ๊นŒ์š”.


2.

์›๋ฌธ:
Number 2 was mTLS plus KMS, not ready yet, so we skipped it and went to number 3.
๋ฒˆ์—ญ:
2๋ฒˆ์€ mTLS + KMS์ธ๋ฐ, ์•„์ง ์ค€๋น„๊ฐ€ ์•ˆ ๋ผ์„œ ๊ฑด๋„ˆ๋›ฐ๊ณ  3๋ฒˆ์œผ๋กœ ๊ฐ”์Šต๋‹ˆ๋‹ค.


3.

์›๋ฌธ:
Number 3 was about the control plane. We reviewed the basic setup and left comments.
On the first day we pushed LDAPs strongly from a security point of view,
but actually SSL/TLS is enough. Their AD is simple LDAP-based, so only group, policy, IAM setup need to be checked.
๋ฒˆ์—ญ:
3๋ฒˆ์€ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๊ด€๋ จ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์„ธํŒ…์„ ๋ฆฌ๋ทฐํ•˜๊ณ  ์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‚จ๊ฒผ์Šต๋‹ˆ๋‹ค.
์ฒซ๋‚ ์—๋Š” ๋ณด์•ˆ ๊ด€์ ์—์„œ LDAPs ์ ์šฉ์„ ๊ฐ•ํ•˜๊ฒŒ ๊ถŒ์žฅํ–ˆ๋Š”๋ฐ, ์‚ฌ์‹ค SSL/TLS๋งŒ์œผ๋กœ๋„ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.
์ƒ๋Œ€๋ฐฉ์˜ AD๋Š” ๋‹จ์ˆœ LDAP ๊ธฐ๋ฐ˜์ด๋ผ, ๊ทธ๋ฃน/์ •์ฑ…/IAM ๊ตฌ์„ฑ์„ ๋‹ค์‹œ ํ™•์ธํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.


4.

์›๋ฌธ:
We started with number 4. We tested encryption and versioning quickly,
but in practice Iceberg versioning is used, so MinIO versioning was just for test.
๋ฒˆ์—ญ:
4๋ฒˆ๋ถ€ํ„ฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์•”ํ˜ธํ™”์™€ ๋ฒ„์ €๋‹ ๊ธฐ๋Šฅ์„ ๊ฐ„๋‹จํžˆ ํ…Œ์ŠคํŠธํ–ˆ๋Š”๋ฐ,
์‹ค์ œ๋กœ๋Š” Iceberg ๋ฒ„์ €๋‹์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ MinIO ๋ฒ„์ €๋‹์€ ๋‹จ์ˆœ ๊ฒ€์ฆ ์šฉ๋„์˜€์Šต๋‹ˆ๋‹ค.


5.

์›๋ฌธ:
We used mc command to create bucket, put object, delete, tagging, metadata.
Bucket cannot be deleted when not empty. JSON output of mc ls --json is good for automation.
We tested tagging and metadata set/get.
๋ฒˆ์—ญ:
MC ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฒ„ํ‚ท ์ƒ์„ฑ, ์˜ค๋ธŒ์ ํŠธ ์—…๋กœ๋“œ, ์‚ญ์ œ, ํƒœ๊น…, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.
๋ฒ„ํ‚ท์ด ๋น„์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด ์‚ญ์ œ๋˜์ง€ ์•Š๋Š” ๊ฒƒ๋„ ํ™•์ธํ–ˆ๊ณ , mc ls --json ๊ฐ™์€ JSON ์ถœ๋ ฅ์€ ์ž๋™ํ™”์— ์œ ๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.
ํƒœ๊น…๊ณผ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์˜ ์„ค์ • ๋ฐ ์กฐํšŒ๋„ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.


6.

์›๋ฌธ:
List API always does sorting, so it is slow and resource heavy.
MinIO Express mode doesnโ€™t sort, so it is faster.
List is paginated by 1000 and uses cursor to get next.
๋ฒˆ์—ญ:
๋ฆฌ์ŠคํŠธ API๋Š” ํ•ญ์ƒ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋А๋ฆฌ๊ณ  ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŽ์ด ์”๋‹ˆ๋‹ค.
MinIO Express ๋ชจ๋“œ๋Š” ์ •๋ ฌ์„ ํ•˜์ง€ ์•Š์•„ ๋” ๋น ๋ฆ…๋‹ˆ๋‹ค.
๋ฆฌ์ŠคํŠธ๋Š” 1000๊ฐœ ๋‹จ์œ„๋กœ ํŽ˜์ด์ง€๊ฐ€ ๋‚˜๋‰˜๊ณ , ์ปค์„œ๋ฅผ ์ด์šฉํ•ด ๋‹ค์Œ ํŽ˜์ด์ง€๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.


7.

์›๋ฌธ:
MinIO has no metadata DB. It uses consistent hashing to find objects.
No single point of failure. Even if some servers die, read/list still works.
But list is expensive because many nodes are queried.
๋ฒˆ์—ญ:
MinIO๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ DB๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , Consistent Hashing์œผ๋กœ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ๋‹จ์ผ ์‹คํŒจ ์ง€์ ์ด ์—†๊ณ  ์ผ๋ถ€ ์„œ๋ฒ„๊ฐ€ ์ฃฝ์–ด๋„ ์ฝ๊ธฐ/๋ฆฌ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
๋‹ค๋งŒ ๋ฆฌ์ŠคํŠธ ์—ฐ์‚ฐ์€ ๋งŽ์€ ๋…ธ๋“œ๋ฅผ ๋™์‹œ์— ์กฐํšŒํ•ด์•ผ ํ•ด์„œ ๋น„์šฉ์ด ํฝ๋‹ˆ๋‹ค.


8.

์›๋ฌธ:
Multipart upload: over 64MB SDK uploads automatically in parts.
Small files can also be multipart by code.
mc admin trace shows multipart requests.
S3 standard is 5TB max, but MinIO allows tens of TB.
๋ฒˆ์—ญ:
๋ฉ€ํ‹ฐํŒŒํŠธ ์—…๋กœ๋“œ: 64MB ์ด์ƒ ํŒŒ์ผ์€ SDK๊ฐ€ ์ž๋™์œผ๋กœ ๋ถ„ํ•  ์—…๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
์ž‘์€ ํŒŒ์ผ๋„ ์ฝ”๋“œ๋กœ ๋ฉ€ํ‹ฐํŒŒํŠธ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
mc admin trace๋กœ ๋ฉ€ํ‹ฐํŒŒํŠธ ์š”์ฒญ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.
S3 ํ‘œ์ค€์€ 5TB๊นŒ์ง€์ง€๋งŒ, MinIO๋Š” ๋‚ด๋ถ€ ์ œํ•œ์„ ํ’€์–ด ์ˆ˜์‹ญ TB๋„ ์—…๋กœ๋“œ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


9.

์›๋ฌธ:
Pre-signed URL: normal S3 signature is 15 min, pre-signed allows up to 7 days.
Before expiration, even if object is deleted, same URL can still upload/download.
Pre-signed URL cannot be revoked unless the issuing account is deleted.
๋ฒˆ์—ญ:
ํ”„๋ฆฌ์‚ฌ์ธ URL: ์ผ๋ฐ˜ S3 ์„œ๋ช…์€ 15๋ถ„ ์œ ํšจํ•˜์ง€๋งŒ, ํ”„๋ฆฌ์‚ฌ์ธ URL์€ ์ตœ๋Œ€ 7์ผ๊นŒ์ง€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
๋งŒ๋ฃŒ ์ „์—๋Š” ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์‚ญ์ œ๋ผ๋„ ๊ฐ™์€ URL๋กœ ์—…๋กœ๋“œ/๋‹ค์šด๋กœ๋“œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
ํ”„๋ฆฌ์‚ฌ์ธ URL์€ ๋ฐœ๊ธ‰ ๊ณ„์ •์„ ์‚ญ์ œํ•˜์ง€ ์•Š๋Š” ์ด์ƒ ์ทจ์†Œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.


10.

์›๋ฌธ:
Versioning: each upload creates new version ID.
Delete also creates a new version, just adds a delete marker.
mc ls --versions can check versions.
๋ฒˆ์—ญ:
๋ฒ„์ €๋‹: ์—…๋กœ๋“œํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๋ฒ„์ „ ID๊ฐ€ ์ƒ๊น๋‹ˆ๋‹ค.
์‚ญ์ œ๋„ ์ƒˆ๋กœ์šด ๋ฒ„์ „์œผ๋กœ ๊ธฐ๋ก๋˜๊ณ , ์‚ฌ์‹ค์€ ์‚ญ์ œ ๋งˆ์ปค๊ฐ€ ์ถ”๊ฐ€๋˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
mc ls --versions๋กœ ๋ฒ„์ „ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


11.

์›๋ฌธ:
ETag is the hash, used to check object identity, important for replication and sync.
๋ฒˆ์—ญ:
ETag๋Š” ํ•ด์‹œ ๊ฐ’์œผ๋กœ, ์˜ค๋ธŒ์ ํŠธ ๋™์ผ์„ฑ ํ™•์ธ์— ์“ฐ์ด๊ณ , ๋ณต์ œ๋‚˜ ๋™๊ธฐํ™”์—์„œ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.


12.

์›๋ฌธ:
Bucket policy: default is private.
Public makes it open, but security/compliance usually restrict usage.
๋ฒˆ์—ญ:
๋ฒ„ํ‚ท ์ •์ฑ…: ๊ธฐ๋ณธ์€ private์ž…๋‹ˆ๋‹ค.
Public์„ ์ ์šฉํ•˜๋ฉด ๋ˆ„๊ตฌ๋‚˜ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๋ณด์•ˆ/์ปดํ”Œ๋ผ์ด์–ธ์Šค ๋•Œ๋ฌธ์— ์ œํ•œ์ ์œผ๋กœ๋งŒ ์”๋‹ˆ๋‹ค.


13.

์›๋ฌธ:
Lifecycle: applying takes time, but it can delete or move old objects automatically.
๋ฒˆ์—ญ:
๋ผ์ดํ”„์‚ฌ์ดํด: ์ •์ฑ… ์ ์šฉ์—๋Š” ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ์ง€๋งŒ, ์˜ค๋ž˜๋œ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ž๋™ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ์ด๋™์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


โœ… ์ด๋ ‡๊ฒŒ ์›๋ฌธ๊ณผ ๋ฒˆ์—ญ์„ ๋‚˜๋ž€ํžˆ ๋‘๋‹ˆ๊นŒ ๋น„๊ต๊ฐ€ ํ›จ์”ฌ ์‰ฌ์šฐ์‹ค ๊ฑฐ์˜ˆ์š”.

ํ˜น์‹œ ์ œ๊ฐ€ ์ด๊ฑธ ํ‘œ ํ˜•์‹(์›๋ฌธ | ๋ฒˆ์—ญ๋ฌธ) ์œผ๋กœ ๋งŒ๋“ค์–ด๋“œ๋ฆด๊นŒ์š”? (์ฝ์œผ๋ฉด์„œ ๋ฐ”๋กœ๋ฐ”๋กœ ๋Œ€์‘๋˜๋Š” ๋ถ€๋ถ„ ๋ณด์‹ค ์ˆ˜ ์žˆ๊ฒŒ)

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