쀑간

[1] ν΄λΌμš°λ“œ μ»΄ν“¨νŒ…μ˜ 탄생 배경을 Public Cloud μ œκ³΅μ—…μžμ˜ μΈ‘λ©΄μ—μ„œ μ„€λͺ…ν•©λ‹ˆλ‹€.

AWS λ₯Ό μ˜ˆμ‹œλ‘œ λ“€ 수 μžˆλŠ”λ°, 온라인 μ‡Όν•‘λͺ°μ„ μœ„ν•œ νšŒμ‚¬ λ‚΄μ—μ„œμ˜ Private ν΄λΌμš°λ“œλ₯Ό μ‚¬μš©ν•˜λ©΄μ„œ μ‚¬μš©μžλ“€μ΄ 온라인 μ‡Όν•‘λͺ°μ„ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μ‹œκ°„μ˜ 경우 λ…ΈλŠ” λ¦¬μ†ŒμŠ€λ“€μ΄ λ§Žμ•˜λ‹€. ν•΄λ‹Ή μ‹œκ°„λŒ€μ— μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” λ¦¬μ†ŒμŠ€λ“€μ„ μˆ˜μ΅μ„ μ–»μœΌλ©° μž„λŒ€ν•¨μœΌλ‘œμ¨ Public ν΄λΌμš°λ“œ μ»΄ν“¨νŒ…μ΄ νƒ„μƒν–ˆλ‹€.

[2] ν΄λΌμš°λ“œ μ»΄ν“¨νŒ…μ˜ μ„œλΉ„μŠ€ λͺ¨λΈ 3 κ°€μ§€λ₯Ό λ‚˜μ—΄ν•˜κ³ , 각각 무엇을 μ œκ³΅ν•˜λŠ”μ§€ μ„€λͺ…ν•©λ‹ˆλ‹€.

SaaS(Software as a Service) : ꡬ글 λ…μŠ€, 유튜브 λ“± μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ„œλΉ„μŠ€λ‘œ μ œκ³΅ν•œλ‹€. PaaS(Platform as a Service) : κ°œλ°œμžκ°€ API λ₯Ό ν™œμš©ν•΄ 더 νŽΈλ¦¬ν•˜κ²Œ κ°œλ°œν•  수 μžˆλ„λ‘ 라이브러리, νˆ΄λ“€μ„ μ„œλΉ„μŠ€λ‘œ μ œκ³΅ν•œλ‹€. IaaS(Infrastructure as a Service) : 기초적인 μ»΄ν“¨νŒ… μžμ›μ„ μ œκ³΅ν•΄ 슀슀둜 μ œμ–΄ν•˜λ©° μ‚¬μš©ν•˜λ„λ‘ ν•œλ‹€.

[3] ν΄λΌμš°λ“œ μ»΄ν“¨νŒ…μ—μ„œ Public Cloud, Private Cloud 및 Hybrid Cloud κ°€ 무엇인지 μ„€λͺ…ν•©λ‹ˆλ‹€.

Public Cloud λŠ” ꡬ글, μ•„λ§ˆμ‘΄κ³Ό 같이 제 3 자의 ν΄λΌμš°λ“œλ₯Ό λŒ€κ°€λ₯Ό μ§€λΆˆν•˜κ³  μ‚¬μš©ν•˜λŠ” 것을 λ§ν•œλ‹€. Private Cloud λŠ” λ‹€μˆ˜μ˜ μ‚¬μš©μžλ“€λ‘œ κ΅¬μ„±λœ 쑰직이 μ†Œμœ ν•˜κ³ , 쑰직 λ‚΄μ—μ„œ μ‚¬μš©ν•˜λŠ” ν˜•νƒœλ₯Ό λ§ν•œλ‹€. Hybrid Cloud λŠ” Private Cloud λ₯Ό κ°€μ§€λ©΄μ„œ ν•„μš”μ— μ˜ν•΄ Public Cloud λ₯Ό μ„ νƒμ μœΌλ‘œ ν™œμš©ν•˜λŠ” ν˜•νƒœλ₯Ό λ§ν•œλ‹€.

[4] Pet λͺ¨λΈκ³Ό Cattle λͺ¨λΈμ€ 무엇이며, μ‹€μ œ Container 의 μš΄μ˜μ‹œ μ–΄λ–»κ²Œ μ μš©λ˜λŠ”μ§€ μ„€λͺ…ν•©λ‹ˆλ‹€.Β 

Pet λͺ¨λΈμ€ 각 μ„œλ²„λ₯Ό κ³ μœ ν•œ μ‹œμŠ€ν…œμœΌλ‘œ μΈμ‹ν•˜κ³  이름을 λΆ™μ—¬ 직접 μ κ²€ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” λͺ¨λΈμ„ λ§ν•œλ‹€. Cattle λͺ¨λΈμ€ μ„œλ²„λŠ” λ™μΌν•œ μ‹œμŠ€ν…œμœΌλ‘œ μΈμ‹ν•˜κ³  νƒœκ·Έλ‘œ κ΅¬λΆ„λ˜λ©° λ¬Έμ œκ°€ 생길 경우 ν•΄λ‹Ή μ»¨ν…Œμ΄λ„ˆλ₯Ό μž¬μ‹œμž‘ν•˜μ—¬ μ‚¬λžŒμ˜ κ°œμž…μ—†μ΄ ν•΄κ²°ν•œλ‹€.

[5] IaC κ°€ 무엇이며, 기쑴의 데이터센터λ₯Ό κ΅¬μΆ•ν•˜κ³  μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μš΄μ˜ν•˜λŠ” 방식과 μ–΄λ–»κ²Œ λ‹€λ₯Έμ§€ μ„€λͺ…ν•©λ‹ˆλ‹€.

IaC λŠ” Infrastructure as Code 둜, μ½”λ“œλ₯Ό ν†΅ν•΄μ„œ ν•„μš”ν•œ ν™˜κ²½μ„ κ΅¬μΆ•ν•˜λŠ” 것을 λ§ν•œλ‹€. κ³Όκ±°μ—λŠ” 데이터센터λ₯Ό ꡬ좕할 λ•Œ ν•˜λ“œμ›¨μ–΄λ₯Ό μˆ˜λ™μœΌλ‘œ μ„€μ •ν•˜κ³ , μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό λ°°ν¬ν•˜λŠ” λ“± μž‘μ—…μ„ μ‚¬λžŒμ΄ 직접 μˆ˜λ™μœΌλ‘œ ꡬ좕해야 ν–ˆμ§€λ§Œ, IaC λŠ” μ„œλ²„, λ„€νŠΈμ›Œν¬ λ“± infrastructure λ₯Ό μ†Œν”„νŠΈμ›¨μ–΄λ‘œ λ‹€λ£¨λ©΄μ„œ μ„€μ • μ½”λ“œλ₯Ό 톡해 μžλ™μœΌλ‘œ λ™μΌν•œ ν™˜κ²½μ„ μ„€μ •ν•  수 μžˆλ‹€.

[6] Mutable infrastructure 와 Immutable infrastructure λŠ” 무엇이며, μ™œ Immutable infrastructure λ₯Ό μ§€ν–₯ν•˜λŠ”μ§€ μ„€λͺ…ν•©λ‹ˆλ‹€.

μ—¬λŸ¬ μ„œλ²„λ₯Ό 톡해 μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•˜λ©΄μ„œ Mutable 은 λŠμž„μ—†μ΄ 각 μ„œλ²„μ— λŒ€ν•΄ μ—…λ°μ΄νŠΈν•˜κ³  μ‘°μ •λ˜λŠ” ν™˜κ²½μ„ λ§ν•˜κ³ , Immutable 은 λ³€ν™”ν•˜μ§€ μ•Šκ³  각 μ„œλ²„μ˜ ν™˜κ²½μ„ λ™μΌν•˜κ²Œ μœ μ§€ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€. Mutable 의 경우 각 μ„œλ²„κ°€ μ—…λ°μ΄νŠΈλ˜κΈ° λ•Œλ¬Έμ— 각 μ„œλ²„λ§ˆλ‹€ μ„œλΉ„μŠ€μ—μ„œ 차이가 생기고, κ΄€λ¦¬ν•˜κΈ° μ–΄λ ΅λ‹€. ν•˜μ§€λ§Œ, Immutable 의 경우 λ™μΌν•œ ν™˜κ²½μ„ κ°–κΈ° λ•Œλ¬Έμ— μ—…λ°μ΄νŠΈλ₯Ό ν•œ λ²ˆμ— ν•΄μ£Όκ³ , λ‹€μ‹œ λ‘€λ°±ν•˜λŠ” λ“± 관리가 μ‰½λ‹€λŠ” μΈ‘λ©΄μ—μ„œ Immutable 을 μ§€ν–₯ν•œλ‹€.

[7] Hypervisor λ₯Ό μˆ˜μ—…μ—μ„œ 두 κ°€μ§€ νƒ€μž…μœΌλ‘œ μ •μ˜ν•˜μ˜€μŠ΅λ‹ˆλ‹€ (type.1 & type.2). 각각이 μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ” μ§€ μ„€λͺ…ν•©λ‹ˆλ‹€.

Type1 은 ν•˜λ“œμ›¨μ–΄ μœ„μ— λ°”λ‘œ Hypervisor κ°€ μ˜¬λΌκ°„ λͺ¨μ–‘이고, Type2 λŠ” Host OS μœ„μ— Hypervisor κ°€ μ˜¬λΌκ°„ 방식이닀.

[8] Guest Linux OS over Host Linux OS λ¬Έμ œκ°€ 무엇인지 μ„€λͺ…ν•©λ‹ˆλ‹€.

데이터 μ„Όν„°μ˜ 경우 Public Cloud λ₯Ό μ œκ³΅ν•˜λŠ”λ°, 기본적으둜 무료인 λ¦¬λˆ…μŠ€λ₯Ό μ‚¬μš©ν•œλ‹€. μ‚¬μš©μžμ—κ²Œ μ„œλ²„λ₯Ό μž„λŒ€ν•  경우 μ‚¬μš©μžκ°€ μ›ν•˜λŠ” ν™˜κ²½μ„ κ°–μΆ°μ€˜μ•Ό ν•˜λ―€λ‘œ VM 을 μ‚¬μš©ν•œλ‹€. μ΄λ•Œ Guest OS 둜 λ¦¬λˆ…μŠ€κ°€ 올라갈 경우 λ™μΌν•œ OS κ°€ μ€‘λ³΅λ˜λŠ” κ²½μš°κ°€ λ°œμƒν•΄ 더 λ§Žμ€ λΉ„μš©μ„ μ‚¬μš©ν•˜κ²Œ λ˜λŠ” 문제λ₯Ό λ§ν•œλ‹€.

[9] λ°μ΄ν„°μ„Όν„°μ—μ„œμ˜ μ†Œν”„νŠΈμ›¨μ–΄ 개발과 μš΄μ˜μ—μ„œ, Container 기술이 가상 λ¨Έμ‹  기술의 λŒ€μ•ˆμ΄ 될 수 μžˆλŠ” 이유λ₯Ό μ„€λͺ…ν•©λ‹ˆλ‹€.

Guest Linux OS over Host Linux OS 의 OS 쀑볡 문제둜 인해 더 λ§Žμ€ λΉ„μš©μ„ μ†Œλͺ¨ν•˜λ‚˜, μ»¨ν…Œμ΄λ„ˆ κΈ°μˆ μ€ OS λ₯Ό 호슀트 OS 와 κ³΅μœ ν•˜κ³  ν”„λ‘œκ·Έλž¨ μ½”λ“œ, 라이브러리λ₯Ό νŒ¨ν‚€μ§•ν•˜μ—¬ 각 μ»¨ν…Œμ΄λ„ˆλ§ˆλ‹€ λ…λ¦½λœ ν”„λ‘œμ„ΈμŠ€λ‘œ λ™μž‘ν•  수 μžˆλ‹€λŠ” μ μ—μ„œ λΉ λ₯Έ 속도, 적은 μš©λŸ‰μ˜ μž₯점을 κ°€μ§€κ³  있기 λ•Œλ¬Έμ— λΉ„μš©λ„ κ°μ†Œν•˜λŠ” 효과λ₯Ό κ°€μ Έμ˜€λ©° 가상 λ¨Έμ‹  기술의 λŒ€μ•ˆμ΄ 될 수 μžˆλ‹€.

[10] Docker λ₯Ό κ΅¬μ„±ν•˜λŠ” CLI/Daemon 및 REST API 에 λŒ€ν•΄μ„œ, 각각 무엇인지 μ„€λͺ…ν•©λ‹ˆλ‹€.

CLI(Command-Line Interface) λŠ” κΈ€μžλ‘œ μž…λ ₯ν•΄ 컴퓨터에 λͺ…령을 λ‚΄λ¦¬λŠ” λ°©μ‹μœΌλ‘œ, λ„μ»€μ˜ ν΄λΌμ΄μ–ΈνŠΈ 역할을 ν•œλ‹€. Daemon 은 ν΄λΌμ΄μ–ΈνŠΈλ‘œλΆ€ν„° 온 λͺ…령을 λ“£κ³  λͺ…령을 μˆ˜ν–‰ν•œλ‹€. REST API λŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ—κ²Œ μš”μ²­μ„ λ³΄λƒˆμ„ λ•Œ 그에 λ”°λ₯Έ 응닡을 λŒλ €μ£ΌλŠ” ν˜•μ‹μ„ μ˜λ―Έν•œλ‹€.

[11] IaC λŠ” μ†Œν”„νŠΈμ›¨μ–΄ 개발과 μœ μ‚¬ν•œ 과정을 κ±°μΉ˜λŠ” κ²ƒμœΌλ‘œ μ„€λͺ…ν•˜κ²Œ λ©λ‹ˆλ‹€. Docker container λ₯Ό κ°œλ°œν•˜κ³  μ‹€ν–‰ν•˜λŠ” 과정을 python/C++ λ“±μ˜ ν”„λ‘œκ·Έλž¨μ„ κ°œλ°œν•˜κ³  μ‹€ν–‰ν•˜λŠ” κ³Όμ •κ³Ό λΉ„κ΅ν•˜μ—¬ μ„€λͺ…ν•΄ λ΄…λ‹ˆλ‹€.

python/C++ 의 μ†ŒμŠ€μ½”λ“œλ₯Ό λ§Œλ“œλŠ” 것과 같이 ν•„μš”ν•œ μ»€λ©˜λ“œλ₯Ό ν¬ν•¨ν•œ Dockerfile 을 λ§Œλ“ λ‹€. Dockerfile 을 μ΄μš©ν•΄ 이미지λ₯Ό λ§Œλ“€κ³ , python/C++ 의 컴파일, λΉŒλ“œλ‘œ μ‹€ν–‰νŒŒμΌμ„ λ§Œλ“œλŠ” 것과 같이 이미지λ₯Ό μ΄μš©ν•΄ μ»¨ν…Œμ΄λ„ˆλ₯Ό λ§Œλ“ λ‹€. 이후, ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜λŠ” 것과 같이, μ»¨ν…Œμ΄λ„ˆμ— μ‹€ν–‰ λͺ…령을 μ£Όμ–΄ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰μ‹œν‚¨λ‹€.

[12] Docker compose λŠ” 볡수의 μ»¨ν…Œμ΄λ„ˆ (μ„œλΉ„μŠ€) λ₯Ό ν•˜λ‚˜μ˜ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ²˜λŸΌ κ΅¬λ™ν•˜λ„λ‘ ν•©λ‹ˆλ‹€. λ„€νŠΈμ›Œν¬ μΈ‘λ©΄μ—μ„œ 이λ₯Ό μœ„ν•˜μ—¬ μ–΄λ–€ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ”μ§€ κ°„λ‹¨ν•˜κ²Œ μ„€λͺ…ν•©λ‹ˆλ‹€.

볡수의 μ»¨ν…Œμ΄λ„ˆλ₯Ό κ΅¬λ™ν•˜κΈ° λ•Œλ¬Έμ— μ»¨ν…Œμ΄λ„ˆ DNS(Domain Name Service) μ„œλ²„λ₯Ό λ§Œλ“€μ–΄ μ΄λ¦„μœΌλ‘œ μ»¨ν…Œμ΄λ„ˆλ₯Ό ꡬ뢄할 수 μžˆλ„λ‘ ν•œλ‹€.

[13] PAT κ°€ 무엇인지 μ„€λͺ…ν•˜κ³ , Docker μ»¨ν…Œμ΄λ„ˆμ—μ„œ μ™œ ν•„μš”ν•œμ§€ μ„€λͺ…ν•©λ‹ˆλ‹€.

PAT(Port Address Translation) λŠ” private ν¬νŠΈμ™€ public 포트λ₯Ό μ—°κ²°ν•˜λŠ” 역할을 ν•œλ‹€. μ»¨ν…Œμ΄λ„ˆλŠ” ν˜ΈμŠ€νŠΈμ™€ λ–¨μ–΄μ Έ λ…λ¦½μ μœΌλ‘œ νŒ¨ν‚€μ§•λ˜μ—ˆκΈ° λ•Œλ¬Έμ— 포트λ₯Ό 섀정해도 μ™ΈλΆ€μ—μ„œλŠ” λ‚΄λΆ€μ˜ 포트λ₯Ό μΈμ‹ν•˜μ§€ λͺ»ν•œλ‹€. λ•Œλ¬Έμ—, λ‚΄λΆ€μ˜ ν¬νŠΈλ„ μ™ΈλΆ€μ˜ 톡신과 μ—°κ²°ν•  수 μžˆλ„λ‘ private ν¬νŠΈμ™€ public 포트λ₯Ό μ—°κ²°ν•΄ 톡신이 κ°€λŠ₯ν•˜λ„λ‘ λ§Œλ“ λ‹€.

[14] curl ν”„λ‘œκ·Έλž¨μ΄ 무엇이며, μˆ˜μ—…μ—μ„œ μ–΄λ–€ μš©λ„λ‘œ ν™œμš©ν•  수 μžˆλŠ”μ§€ μ„€λͺ…ν•©λ‹ˆλ‹€.

curl(Client URL) ν”„λ‘œκ·Έλž¨μ€ μ—¬λŸ¬ ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜λŠ” 데이터듀을 μ „μ†‘ν•˜κΈ° μœ„ν•œ 라이브러리, μ»€λ©˜λ“œ 라인 도ꡬλ₯Ό μ œκ³΅ν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄ ν”„λ‘œμ νŠΈμ΄λ‹€. μ„œλ²„ ν΄λΌμ΄μ–ΈνŠΈλ₯Ό 띄웠을 경우 μ„œλ²„μ— 데이터λ₯Ό μš”μ²­ν•˜κ³  λ°›μ•„μ˜€λŠ” http ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•  수 μžˆλ‹€.

[15] Docker μ—μ„œ Volume 은 μ–΄λ–€ μš©λ„λ‘œ ν™œμš©ν•˜λ©°, 물리적으둜 μ–΄λ–»κ²Œ κ΅¬ν˜„λ˜λŠ”μ§€ μ„€λͺ…ν•©λ‹ˆλ‹€.

Volume 은 μ»¨ν…Œμ΄λ„ˆλ₯Ό 생성해 μ‚¬μš©ν•˜κ±°λ‚˜, 데이터 볡사본을 μ €μž₯ν•΄ μ‚¬μš©ν•˜κ³ , μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‚­μ œν–ˆμ„ λ•Œ 데이터가 μ—†μ–΄μ§€μ§€ μ•Šκ²Œ ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜κ³ , 호슀트 νŒŒμΌμ‹œμŠ€ν…œμ˜ ν•œ 뢀뢄을 도컀가 μ μœ ν•˜μ—¬ μ €μž₯λœλ‹€.

[16] Docker μ—μ„œ Bind Mounts λŠ” μ–΄λ–€ μš©λ„λ‘œ ν™œμš©ν•˜λ©°, Volume 과의 차이점은 무엇인지 μ„€λͺ…ν•©λ‹ˆλ‹€.

Bind Mounts λŠ” 호슀트 μ»΄ν“¨ν„°μ˜ μŠ€ν† λ¦¬μ§€ 쀑 νŠΉμ • μœ„μΉ˜λ₯Ό μ§€μ •ν•΄ μ—°κ²°ν•œλ‹€. λ―Όκ°ν•œ νŒŒμΌμ— μ ‘κ·Όν•˜κ±°λ‚˜, μ»¨ν…Œμ΄λ„ˆκ°€ λ§Œλ“€μ–΄μ§€κΈ° 전에 μƒμ„±λœ νŒŒμΌμ„ μ‚¬μš©ν•  λ•Œ ν™œμš©ν•œλ‹€. Volumn 의 경우 도컀 ν”„λ‘œμ„ΈμŠ€κ°€ μ•„λ‹ˆλΌλ©΄ νŒŒμΌμ„ μˆ˜μ •ν•΄μ„œλŠ” μ•ˆ λ˜μ§€λ§Œ, Bind Mounts λŠ” 도컀 ν”„λ‘œμ„ΈμŠ€κ°€ μ•„λ‹ˆλ”λΌλ„ μ–Έμ œλ‚˜ μˆ˜μ •ν•  수 μžˆλ‹€.

[17] Docker Machine 은 μ–΄λ–€ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λ©°, μ–΄λ–€ μš©λ„λ‘œ ν™œμš©ν•˜λŠ”μ§€ μ„€λͺ…ν•©λ‹ˆλ‹€.

가상 머신에 도컀 엔진을 μ„€μΉ˜ν•  수 μžˆλ„λ‘ ν•œλ‹€. 도컀 머신은 였래된 λ¦¬λˆ…μŠ€ λ°μŠ€ν¬νƒ‘μ„ κ°€μ§€κ³  있고, λ§₯μ΄λ‚˜ μœˆλ„μš°μ—μ„œ 도컀λ₯Ό μ‹€ν–‰ν•˜κ³  싢은 경우. ν˜Ήμ€ 원격 μ‹œμŠ€ν…œμ— 도컀 호슀트λ₯Ό κ³΅κΈ‰ν•˜κ³  싢은 κ²½μš°μ— ν™œμš©ν•œλ‹€.

[18] Jenkins λ₯Ό μ‚¬μš©ν•˜μ—¬ CI/CD λ₯Ό κ΅¬ν˜„ν•  수 μžˆλ‹€λŠ” 것은 μ–΄λ–€ μ˜λ―ΈμΈμ§€ μ„€λͺ…ν•©λ‹ˆλ‹€.

μ½”λ“œ μž‘μ„±μ„ 마치고 κΉƒν—ˆλΈŒμ— 올린 ν›„ 컴파일, λΉŒλ“œ, ν…ŒμŠ€νŠΈ, 배포 λ“±μ˜ μž‘μ—…μ„ μ‚¬λžŒμ˜ κ°œμž… 없이 μžλ™μœΌλ‘œ μˆ˜ν–‰ν•˜λŠ” 과정을 κ΅¬ν˜„ν•  수 μžˆλ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€. μ‹œκ°„μ„ μ„€μ •ν•΄μ„œ λ°°ν¬ν•˜λŠ” λ“± μ„€μ •ν•  수 μžˆλ‹€.

기말

[1] Docker Swarm μ—μ„œ manager 와 worker(slave) λŠ” μ–΄λ–€ 역할을 μˆ˜ν–‰ν•˜λŠ”μ§€ μ„€λͺ…ν•©λ‹ˆλ‹€.

manager λŠ” Worker 와 논리적 연결을 λ§Œλ“€κ³  Worker 듀을 κ΄€λ¦¬ν•œλ‹€.
Worker λŠ” Swarm 의 μ„œλΉ„μŠ€λ₯Ό μ‹€ν–‰ν•˜λŠ” 역할을 μˆ˜ν–‰ν•œλ‹€.

[2] Docker Swarm μ—μ„œ join κ³Ό leave λŠ” μ–΄λ–€ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ”μ§€ μ„€λͺ…ν•©λ‹ˆλ‹€.

join 은 Worker κ°€ Manager μ—κ²Œ λ“±λ‘λ˜μ–΄ Manager 의 관리λ₯Ό λ”°λ₯Ό 수 μžˆλ„λ‘ ν•œλ‹€. leave λŠ” Manager μ—μ„œ λ“±λ‘λœ Worker κ°€ λΆ„λ¦¬λ˜λ„λ‘ ν•œλ‹€.

[3] Monolithic architecture λŒ€λΉ„ Microservice architecture λž€ μ–΄λ–€ 것인지 μ„€λͺ…ν•©λ‹ˆλ‹€.

Monolithic architecture λŠ” ν•˜λ‚˜μ˜ μ»€λ‹€λž€ μ„œλΉ„μŠ€λ₯Ό λ§Œλ“œλŠ” 것을 λ§ν•˜κ³ , Microservice architecture λŠ” ν•˜λ‚˜μ˜ μ»€λ‹€λž€ μ„œλΉ„μŠ€λ₯Ό μͺΌκ°œμ„œ λ…λ¦½μ μœΌλ‘œ λΆ„λ¦¬ν•˜κ³  μ„œλ‘œ 정보λ₯Ό μ£Όκ³  λ°›λŠ” ν˜•νƒœμ˜ 기술

[4] Monolithic architecture λŒ€λΉ„ Microservice architecture κ°€ Scalability, Availability (Fault tolerance), Agility, Polyglot persistence, Maintainability κ°€ λ†’λ‹€λŠ” 것이 μ–΄λ–€ λ‚΄μš©μΈμ§€ 각각에 λŒ€ν•΄μ„œ μ„€λͺ…ν•©λ‹ˆλ‹€.Β 

λͺ¨λ†€λ¦¬ν‹±μ€ ν•œ κ°€μ§€ κΈ°λŠ₯을 ν™•μž₯ν•˜λ €λ©΄ λ‹€λ₯Έ 99 κ°€μ§€ κΈ°λŠ₯듀도 ν•¨κ»˜ μ—°κ²°λ˜μ–΄ ν™•μž₯ν•΄μ•Ό ν•˜μ§€λ§Œ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λŠ” 독립적이기 λ•Œλ¬Έμ— 영ν–₯ 없이 ν™•μž₯ κ°€λŠ₯ν•˜λ‹€. λͺ¨λ†€λ¦¬ν‹±μ€ ν•œ μ„œλΉ„μŠ€μ— λ¬Έμ œκ°€ λ°œμƒν•œ 경우 λ‹€λ₯Έ μ„œλΉ„μŠ€μ— 영ν–₯을 μ£Όμ–΄ λͺ¨λ‘ λ¬Έμ œκ°€ λ°œμƒν•˜λ‚˜, λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λŠ” λ―ΈμΉ˜λŠ” 영ν–₯이 적닀. λͺ¨λ†€λ¦¬ν‹±μ€ λͺ¨λ‘ ν•˜λ‚˜λ‘œ μ—°κ²°λ˜μ–΄ λͺ¨λ‘κ°€ κΈ°λŠ₯ μ œμž‘μ„ μ™„λ£Œν•΄μ•Ό 배포할 수 μžˆμ§€λ§Œ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λŠ” 각 κΈ°λŠ₯λ§ˆλ‹€ λ”°λ‘œ λΉŒλ“œ, 배포λ₯Ό ν•  수 μžˆλ‹€λŠ” μ μ—μ„œ Agility κ°€ λ†’λ‹€. λͺ¨λ†€λ¦¬ν‹±μ€ 톡합적인 ν•œ κ°€μ§€ 도ꡬλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•˜μ§€λ§Œ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λŠ” 각자의 κ²½μš°μ— λ§žλŠ” 도ꡬλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€. λͺ¨λ†€λ¦¬ν‹±μ— λΉ„ν•΄ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λŠ” κΈ°λŠ₯을 λΆ„λ¦¬ν–ˆκΈ° λ•Œλ¬Έμ— κ°μ†Œλœ μ½”λ“œ μ–‘μœΌλ‘œ 인해 μœ μ§€ λ³΄μˆ˜ν•˜κΈ° νŽΈλ¦¬ν•˜λ‹€.

[5] Kubernetes 의 Pod κ³Ό Docker 의 Container 에 λŒ€ν•΄μ„œ, 기술적이 μœ μ‚¬μ  (곡톡점 λ“±) κ³Ό 차이점을 μ„€λͺ…ν•©λ‹ˆλ‹€.

μ»¨ν…Œμ΄λ„ˆκ°€ ν”„λ‘œκ·Έλž¨, μŠ€ν† λ¦¬μ§€, ν™˜κ²½ λ³€μˆ˜ 등을 λ¬Άμ–΄ μ‚¬μš©ν•˜λŠ” 것과 같이 νŒŸλ„ λ‹€μ–‘ν•œ μ»¨ν…Œμ΄λ„ˆλ₯Ό ν•˜λ‚˜λ‘œ λ¬Άμ–΄ μ‚¬μš©ν•œλ‹€λŠ” μ μ—μ„œ μœ μ‚¬ν•˜λ‹€.
μ»¨ν…Œμ΄λ„ˆλŠ” 각각이 κ°œλ³„μ μœΌλ‘œ μƒμ„±ν•˜κ³  μž‘λ™ν•˜μ§€λ§Œ μΏ λ²„λ„€ν‹°μŠ€μ˜ νŒŸμ€ μ—¬λŸ¬ μ»¨ν…Œμ΄λ„ˆλ₯Ό λ¬Άμ–΄ μŠ€ν† λ¦¬μ§€, λ„€νŠΈμ›Œν¬ λ“±μ˜ λ‹€λ₯Έ 역할을 ν•˜λŠ” μ»¨ν…Œμ΄λ„ˆλ₯Ό ν•¨κ»˜ μ‚¬μš©ν•œλ‹€λŠ” μ μ—μ„œ 차이점을 κ°–λŠ”λ‹€.

[6] Kubernetes 의 Ingress λŠ” 무엇이고, μ–΄λ–€ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ”μ§€ μ„€λͺ…ν•©λ‹ˆλ‹€.

Ingress λŠ” μ„œλΉ„μŠ€μ— λŒ€ν•œ μ™ΈλΆ€ 접근을 λ‹€λ£¨λŠ” 객체이닀. ν΄λŸ¬μŠ€ν„°μ™€ μ™ΈλΆ€μ˜ 톡신을 μˆ˜ν–‰ν•˜κ³  받은 μš”μ²­μ„ μ–΄λ–€ 팟으둜 보낼 μ§€ μ‘°μ •ν•˜λŠ” load balancing, ν•œ λŒ€μ˜ 컴퓨터가 μ—¬λŸ¬ 이름을 λ°›μ•„ ν•΄λ‹Ήν•˜λŠ” 라벨둜 μ „λ‹¬ν•˜λŠ” name-based virtual hosting 을 μˆ˜ν–‰ν•œλ‹€.

[7] Kubernetes 의 NodePort λŠ” 무엇이고, μ–΄λ–€ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ”μ§€ μ„€λͺ…ν•©λ‹ˆλ‹€.

NodePort λŠ” νŠΉμ • λ…Έλ“œμ— 포트λ₯Ό λš«μ–΄ λ…Έλ“œκ°€ 외뢀와 톡신할 수 μžˆλ„λ‘ ν•˜λŠ” 방식이닀. NodePort λ₯Ό 톡해 μ™ΈλΆ€μ—μ„œ μ„œλΉ„μŠ€λ‘œ μš”μ²­μ„ 보내 νŒŸμ—μ„œ μ²˜λ¦¬ν•  수 μžˆλ„λ‘ ν•œλ‹€.

[8] Kubernetes μ—μ„œ μ„œλΉ„μŠ€ μš΄μ˜μ‹œ IP μ–΄λ“œλ ˆμŠ€λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šλ„λ‘ ν•˜λŠ” μ΄μœ μ™€, IP μ–΄λ“œλ ˆμŠ€λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 경우 무엇을 μ‚¬μš©ν•΄μ•Ό ν•˜λŠ”μ§€μ— λŒ€ν•΄μ„œ μ„€λͺ…ν•©λ‹ˆλ‹€.

μΏ λ²„λ„€ν‹°μŠ€μ˜ νŒŸλ“€μ€ 였λ₯˜κ°€ λ°œμƒν•΄λ„ κ³ μ³μ„œ μ‚¬μš©ν•˜μ§€ μ•Šκ³  μ’…λ£Œν•˜κ³  μƒˆλ‘œ μƒμ„±ν•˜λŠ” cattle 방식이닀. λ•Œλ¬Έμ— μƒˆλ‘œ 생성될 λ•Œλ§ˆλ‹€ μƒˆλ‘œμš΄ IP μ£Όμ†Œλ₯Ό λ°›κΈ° λ•Œλ¬Έμ— IP μ£Όμ†Œλ₯Ό 맀번 지정해쀄 수 μ—†μ–΄ IP μ£Όμ†Œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€. IP μ£Όμ†Œ λŒ€μ‹  Label 을 μ„€μ •ν•΄μ„œ 이름을 μ§€μ •ν•˜κ³  label 을 μ‚¬μš©ν•΄ λ™μž‘μ„ μ§€μ •ν•œλ‹€.

[9] Replica Controller 의 μ—­ν• κ³Ό 이의 ꡬ동을 μœ„ν•œ yaml 화인 μ•ˆμ˜ selector, template, replicas κ°€ μ–΄λ–€ μ˜λ―ΈμΈμ§€ μ„€λͺ…ν•©λ‹ˆλ‹€.

selector : μš΄μ˜μžκ°€ μš”κ΅¬ν•œ 무언가λ₯Ό λͺ…λ Ήν•  λŒ€μƒμ„ μ§€μ •ν•˜κΈ° μœ„ν•œ 이름을 μ„€μ •ν•œλ‹€.
replicas : μƒμ„±ν•˜κ³ μž ν¬λ§ν•˜λŠ” 팟의 개수λ₯Ό μ„€μ •ν•œλ‹€.
template : λ³΅μ œν•  μƒˆλ‘œμš΄ 팟의 데이터λ₯Ό ꡬ체적으둜 μž‘μ„±ν•œ ν…œν”Œλ¦Ώμ„ μ„€μ •ν•œλ‹€.

[10] Deployment λŠ” μ–΄λ– ν•œ κ²½μš°μ— μ‚¬μš©ν•˜λŠ”μ§€ μˆ˜μ—…μ—μ„œμ˜ ν™œμš© 사둀λ₯Ό κΈ°μ€€μœΌλ‘œ μ„€λͺ…ν•©λ‹ˆλ‹€.

κΈ°μ‘΄ 버전 1 의 Replication Controller κ°€ 버전 1 νŒŸμ„ λ§Œλ“€μ–΄ μ‚¬μš©ν•˜κ³  μžˆμ„ λ•Œ μƒˆλ‘œμš΄ 버전 2 의 Replication Controller λ₯Ό 생성해 버전 2 의 νŒŸμ„ λ§Œλ“€μ–΄ μ‚¬μš©ν•˜λŠ” λ“± 2 개 이상 볡수의 ReplicaSet Controller λ₯Ό μ‚¬μš©ν•  λ•Œ Deployment λ₯Ό μ‚¬μš©ν•œλ‹€.

[11] Kubernetes 의 Client API λž€ 무엇이며, μ™œ ν•„μš”ν•˜κ³ , μ–΄λ–€ μš©λ„λ‘œ ν™œμš©ν•˜λŠ”μ§€ μ„€λͺ…ν•©λ‹ˆλ‹€.

Client API λŠ” μΏ λ²„λ„€ν‹°μŠ€μ˜ 객체 생성, μ‚­μ œ λ“±μ˜ λ™μž‘μ„ νŠΉμ • λͺ…령을 ν†΅ν•΄μ„œ λ™μž‘μ‹œν‚¬ 수 μžˆλ„λ‘ ν•˜λŠ” 방식이닀.
API λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ λ‚΄κ°€ μ›ν•˜λŠ” λ™μž‘μ„ ν•˜λŠ” μ½”λ“œλ₯Ό ν”„λ‘œκ·Έλž¨μœΌλ‘œ ꡬ성해야 ν•˜μ§€λ§Œ API λ₯Ό ν†΅ν•΄μ„œ κ°„λ‹¨ν•œ λͺ…λ Ήμ–΄λ₯Ό 톡해 λ™μž‘μ‹œν‚¬ 수 μžˆλ‹€λŠ” μ μ—μ„œ ν•„μš”ν•˜λ‹€.
λ‚΄κ°€ μž‘μ„±ν•œ ν”„λ‘œκ·Έλž¨μ—μ„œ μΏ λ²„λ„€ν‹°μŠ€ API λ₯Ό μ‚¬μš©ν•  수 있고 kubectl 을 톡해 CLI μ—μ„œλ„ μΏ λ²„λ„€ν‹°μŠ€ API λ₯Ό ν˜ΈμΆœν•΄ μ›ν•˜λŠ” λͺ…령을 내릴 수 μžˆλ‹€.

[12] Kubernetes 의 object λΌλŠ”Β κ²ƒμ΄Β λ¬΄μ—‡μ΄κ³ ,Β μ–΄λ–€Β μš©λ„λ‘œΒ ν™œμš©ν•˜λŠ”μ§€Β μ„€λͺ…ν•©λ‹ˆλ‹€.Β κ·Έλ¦¬κ³ Β μ™œΒ ν”„λ‘œκ·Έλž˜λ°Β μ–Έμ–΄μ—μ„œμ˜Β object μ™€Β μœ μ‚¬ν•˜λ‹€κ³ Β ν•˜λŠ”μ§€Β μΆ”κ°€Β μ„€λͺ…ν•©λ‹ˆλ‹€.

Object λŠ” λ¦¬μ†ŒμŠ€ νƒ€μž…μ˜ ν•˜λ‚˜μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό λ§ν•œλ‹€. 객체λ₯Ό μƒμ„±ν•¨μœΌλ‘œμ¨ μΏ λ²„λ„€ν‹°μŠ€ μ‹œμŠ€ν…œμ— ν΄λŸ¬μŠ€ν„°μ˜ desired state λ₯Ό μž…λ ₯ν•  수 μžˆλ‹€.
ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ 일정 ν‹€μ˜ 클래슀λ₯Ό μ •μ˜ν•˜κ³  κ·Έ μΈμŠ€ν„΄μŠ€ object λ₯Ό μƒμ„±ν•˜λŠ” 것과 같이 μΏ λ²„λ„€ν‹°μŠ€λ„ ν΄λž˜μŠ€μ™€ μœ μ‚¬ν•œ λ¦¬μ†ŒμŠ€ νƒ€μž…μ„ μ •μ˜ν•˜κ³  κ·Έ μΈμŠ€ν„΄μŠ€ 객체λ₯Ό 생성해 μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— μœ μ‚¬ν•˜λ‹€.

[13] Kubernetes μ—μ„œ imagePullPolicy μ—λŠ” μ–΄λ–€ 것듀이 있으며, 각각 μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”μ§€ μ„€λͺ…ν•©λ‹ˆλ‹€.Β 

IfNotPresent : 이미지가 Local, ν•΄λ‹Ή λ…Έλ“œμ— μžˆμ§€ μ•Šλ‹€λ©΄, 이미지λ₯Ό pull ν•˜μ—¬ μ‹€ν–‰ν•œλ‹€.
Always : 이미지λ₯Ό 팟이 μ‹œμž‘λ˜λŠ” λ•Œμ— 항상 pull ν•œλ‹€. (μˆ˜μ‹œλ‘œ μ—…λ°μ΄νŠΈκ°€ 되고 μ΅œμ‹  이미지λ₯Ό μ‚¬μš©ν•˜κ³  싢은 경우)
Never : Remote 의 λ ˆμ§€μŠ€νŠΈλ¦¬λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  Local 에 μžˆλŠ” κ²ƒλ§Œ μ‚¬μš©ν•œλ‹€. (λ³΄μ•ˆ μƒμ˜ 경우)

[14] Kubernetes 의 Cluster IP, Node Port, Ingress λŠ”Β λ¬΄μ—‡μ΄λ©°,Β μ–΄λ–€Β μš©λ„λ‘œΒ ν™œμš©ν•˜λŠ”μ§€Β μ„€λͺ…ν•©λ‹ˆλ‹€.

Cluster IP λŠ” ν΄λŸ¬μŠ€ν„° μ•ˆμ—μ„œ μœ νš¨ν•œ IP μ£Όμ†Œλ₯Ό μ§€μ •ν•˜λŠ” 객체이닀. ν΄λŸ¬μŠ€ν„° λ‚΄λΆ€μ˜ λ‹€λ₯Έ 팟과 ν†΅μ‹ ν•˜κΈ° μœ„ν•œ λ‚΄λΆ€ IP μ£Όμ†Œμ΄λ‹€.
NodePort λŠ” λ…Έλ“œμ— 포트λ₯Ό λš«λŠ” 객체이닀. 포트λ₯Ό 톡해 μ™ΈλΆ€μ™€μ˜ 톡신이 κ°€λŠ₯ν•˜λ„λ‘ λ§Œλ“ λ‹€.
Ingress λŠ” ν΄λŸ¬μŠ€ν„°μ—μ„œ μ„œλΉ„μŠ€μ— λŒ€ν•œ μ™ΈλΆ€ 접근을 λ‹€λ£¨λŠ” 객체이닀. 각 μ„œλΉ„μŠ€λ‘œ νŠΈλž˜ν”½μ„ λ‚˜λˆ„λŠ” load balancing, ν•œ λŒ€μ˜ 컴퓨터에 μ—¬λŸ¬ 이름을 κ°–λŠ” name-based virtual hosting 을 μˆ˜ν–‰ν•΄ 라벨에 따라 μ „λ‹¬ν•΄μ£ΌλŠ” μš©λ„λ‘œ ν™œμš©ν•œλ‹€.

[15] Kubernetes 의 Storage 인 emptyDir, hostPath, PVC(Persistent Volume Claim) 에 λŒ€ν•΄μ„œ, 각각 물리적인 μœ„μΉ˜κ°€ 어디이고, ν™œμš© μš©λ„λŠ” 무엇인지 μ„€λͺ…ν•©λ‹ˆλ‹€.

emptyDir λŠ” νŒŸμ— μœ„μΉ˜ν•œλ‹€. μž„μ‹œμ μœΌλ‘œ μ»¨ν…Œμ΄λ„ˆκ°€ μž‘μ—…ν•˜κΈ° μœ„ν•œ 것듀을 μ €μž₯ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•œλ‹€. hostPath λŠ” λ…Έλ“œμ— μœ„μΉ˜ν•œλ‹€. λ…Έλ“œμ— μœ„μΉ˜ν•΄ λ…Έλ“œμ˜ νŠΉμ • νŒŒμΌμ΄λ‚˜ 디렉토리λ₯Ό μ»¨ν…Œμ΄λ„ˆ νŒŒμΌμ‹œμŠ€ν…œμ— λ§ˆμš΄νŠΈν•œλ‹€. PVC λŠ” ν΄λŸ¬μŠ€ν„°μ— μœ„μΉ˜ν•œλ‹€. PV μ‚¬μš© μš”μ²­μ„ 톡해 PV λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄ ν™œμš©ν•œλ‹€.