๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Project ESG+AI/Tech Basics

26์ผ์ฐจ. IT ๊ฐœ๋… ์ •๋ฆฌ

by GreenJin_S2 2025. 11. 13.

 


ํŠน์ •์‹œ์  :STATE

์—๋Ÿฌ๋‚ฌ๋˜๊ฒƒ : STATUS 

๐Ÿ”น 1. STATE — ‘ํ˜„์žฌ์˜ ์กฐ๊ฑด์ด๋‚˜ ํ˜•ํƒœ’

state๋Š” ์–ด๋–ค ๋Œ€์ƒ์ด ์ง€๊ธˆ ์–ด๋–ค ๋ชจ์–‘, ์กฐ๊ฑด, ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๊ฐ€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
์ฆ‰, ๋ฌผ๋ฆฌ์ ์ด๊ฑฐ๋‚˜ ๊ตฌ์ฒด์ ์ธ ์ƒํƒœ๋ฅผ ๋งํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

โœ… ์˜ˆ์‹œ

๋ฌธ์žฅ์˜๋ฏธ

๐Ÿ”น 1. STATE — ‘ํ˜„์žฌ์˜ ์กฐ๊ฑด์ด๋‚˜ ํ˜•ํƒœ’

state๋Š” ์–ด๋–ค ๋Œ€์ƒ์ด ์ง€๊ธˆ ์–ด๋–ค ๋ชจ์–‘, ์กฐ๊ฑด, ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๊ฐ€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
์ฆ‰, ๋ฌผ๋ฆฌ์ ์ด๊ฑฐ๋‚˜ ๊ตฌ์ฒด์ ์ธ ์ƒํƒœ๋ฅผ ๋งํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

โœ… ์˜ˆ์‹œ

๋ฌธ์žฅ์˜๋ฏธ
The water is in a solid state. ๋ฌผ์€ ๊ณ ์ฒด ์ƒํƒœ์ž…๋‹ˆ๋‹ค.
The system is in an idle state. ์‹œ์Šคํ…œ์ด ๋Œ€๊ธฐ ์ƒํƒœ์— ์žˆ์Šต๋‹ˆ๋‹ค.
He was in a confused state. ๊ทธ๋Š” ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ์ƒํƒœ์˜€๋‹ค.

๐Ÿ‘‰ ํ•ต์‹ฌ ํฌ์ธํŠธ: ๋ณ€ํ™” ๊ฐ€๋Šฅํ•œ ๋ฌผ๋ฆฌ์ ·์ •์‹ ์  ์กฐ๊ฑด์„ ํ‘œํ˜„ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ”น 2. STATUS — ‘์ง€์œ„, ์ƒํ™ฉ, ์ง„ํ–‰ ๋‹จ๊ณ„’

status๋Š” ์‚ฌ๋ฌผ์ด๋‚˜ ์‚ฌ๋žŒ์˜ ์œ„์น˜, ๋“ฑ๊ธ‰, ํ˜น์€ ์‚ฌํšŒ์ /๊ธฐ๋Šฅ์  ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
‘์ง„ํ–‰ ์ƒํ™ฉ’์ด๋‚˜ ‘์ฒ˜๋ฆฌ ๋‹จ๊ณ„’์ฒ˜๋Ÿผ ์ƒํƒœ์˜ ๋‹จ๊ณ„์ ·๊ด€๋ฆฌ์  ์ธก๋ฉด์— ์ดˆ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

โœ… ์˜ˆ์‹œ

๋ฌธ์žฅ์˜๋ฏธ
Please check your order status. ์ฃผ๋ฌธ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ด์ฃผ์„ธ์š”.
His marital status is single. ๊ทธ์˜ ํ˜ผ์ธ ์ƒํƒœ๋Š” ๋ฏธํ˜ผ์ž…๋‹ˆ๋‹ค.
The project is in pending status. ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ณด๋ฅ˜ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

๐Ÿ‘‰ ํ•ต์‹ฌ ํฌ์ธํŠธ: **“์ง„ํ–‰ ์ƒํƒœ”**๋‚˜ **“์ง€์œ„”**์ฒ˜๋Ÿผ ์‚ฌํšŒ์ ·ํ–‰์ •์  ์˜๋ฏธ์˜ ์ƒํƒœ๋ฅผ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ”ธ ์š”์•ฝ ๋น„๊ต

๊ตฌ๋ถ„STATESTATUS

 

์˜๋ฏธ ๋ฌผ๋ฆฌ์ /์‹ฌ๋ฆฌ์  ์ƒํƒœ ์‚ฌํšŒ์ /ํ–‰์ •์  ์ƒํƒœ
์ดˆ์  ๋ณ€ํ™” ๊ฐ€๋Šฅํ•œ ์กฐ๊ฑด ๋ถ„๋ฅ˜๋‚˜ ๋‹จ๊ณ„, ์ง„ํ–‰ ์ƒํ™ฉ
์˜ˆ์‹œ health state, emotional state order status, visa status

๐Ÿ’ก ์˜ˆ๋ฌธ ๋น„๊ต๋กœ ์ •๋ฆฌ

  • “The machine is in a broken state.” → ๊ธฐ๊ณ„๊ฐ€ ๊ณ ์žฅ๋‚œ ์ƒํƒœ๋‹ค. (๋ฌผ๋ฆฌ์  ์ƒํƒœ)
  • “The machine’s status is ‘Out of Service’.” → ๊ธฐ๊ณ„์˜ ์ƒํƒœํ‘œ์‹œ๋Š” ‘์‚ฌ์šฉ ๋ถˆ๊ฐ€’์ด๋‹ค. (์‹œ์Šคํ…œ์ƒ ํ‘œ์‹œ ์ƒํƒœ)
The water is in a solid state. ๋ฌผ์€ ๊ณ ์ฒด ์ƒํƒœ์ž…๋‹ˆ๋‹ค.
The system is in an idle state. ์‹œ์Šคํ…œ์ด ๋Œ€๊ธฐ ์ƒํƒœ์— ์žˆ์Šต๋‹ˆ๋‹ค.
He was in a confused state. ๊ทธ๋Š” ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ์ƒํƒœ์˜€๋‹ค.

๐Ÿ‘‰ ํ•ต์‹ฌ ํฌ์ธํŠธ: ๋ณ€ํ™” ๊ฐ€๋Šฅํ•œ ๋ฌผ๋ฆฌ์ ·์ •์‹ ์  ์กฐ๊ฑด์„ ํ‘œํ˜„ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ”น 2. STATUS — ‘์ง€์œ„, ์ƒํ™ฉ, ์ง„ํ–‰ ๋‹จ๊ณ„’

status๋Š” ์‚ฌ๋ฌผ์ด๋‚˜ ์‚ฌ๋žŒ์˜ ์œ„์น˜, ๋“ฑ๊ธ‰, ํ˜น์€ ์‚ฌํšŒ์ /๊ธฐ๋Šฅ์  ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
‘์ง„ํ–‰ ์ƒํ™ฉ’์ด๋‚˜ ‘์ฒ˜๋ฆฌ ๋‹จ๊ณ„’์ฒ˜๋Ÿผ ์ƒํƒœ์˜ ๋‹จ๊ณ„์ ·๊ด€๋ฆฌ์  ์ธก๋ฉด์— ์ดˆ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

โœ… ์˜ˆ์‹œ

๋ฌธ์žฅ์˜๋ฏธ
Please check your order status. ์ฃผ๋ฌธ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ด์ฃผ์„ธ์š”.
His marital status is single. ๊ทธ์˜ ํ˜ผ์ธ ์ƒํƒœ๋Š” ๋ฏธํ˜ผ์ž…๋‹ˆ๋‹ค.
The project is in pending status. ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ณด๋ฅ˜ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

๐Ÿ‘‰ ํ•ต์‹ฌ ํฌ์ธํŠธ: **“์ง„ํ–‰ ์ƒํƒœ”**๋‚˜ **“์ง€์œ„”**์ฒ˜๋Ÿผ ์‚ฌํšŒ์ ·ํ–‰์ •์  ์˜๋ฏธ์˜ ์ƒํƒœ๋ฅผ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ”ธ ์š”์•ฝ ๋น„๊ต

๊ตฌ๋ถ„STATESTATUS
์˜๋ฏธ ๋ฌผ๋ฆฌ์ /์‹ฌ๋ฆฌ์  ์ƒํƒœ ์‚ฌํšŒ์ /ํ–‰์ •์  ์ƒํƒœ
์ดˆ์  ๋ณ€ํ™” ๊ฐ€๋Šฅํ•œ ์กฐ๊ฑด ๋ถ„๋ฅ˜๋‚˜ ๋‹จ๊ณ„, ์ง„ํ–‰ ์ƒํ™ฉ
์˜ˆ์‹œ health state, emotional state order status, visa status

๐Ÿ’ก ์˜ˆ๋ฌธ ๋น„๊ต๋กœ ์ •๋ฆฌ

  • “The machine is in a broken state.” → ๊ธฐ๊ณ„๊ฐ€ ๊ณ ์žฅ๋‚œ ์ƒํƒœ๋‹ค. (๋ฌผ๋ฆฌ์  ์ƒํƒœ)
  • “The machine’s status is ‘Out of Service’.” → ๊ธฐ๊ณ„์˜ ์ƒํƒœํ‘œ์‹œ๋Š” ‘์‚ฌ์šฉ ๋ถˆ๊ฐ€’์ด๋‹ค. (์‹œ์Šคํ…œ์ƒ ํ‘œ์‹œ ์ƒํƒœ)

๐Ÿ”น YAML์˜ ๊ณ„์—ด ๋ฐ ํŠน์ง• ์š”์•ฝ

๊ตฌ๋ถ„๋‚ด์šฉ
์ •์‹ ๋ช…์นญ YAML Ain’t Markup Language (์›๋ž˜๋Š” “Yet Another Markup Language”)
์–ธ์–ด ๊ณ„์—ด ๋ฐ์ดํ„ฐ ์ง๋ ฌํ™” ์–ธ์–ด(Data Serialization Language)
๋Œ€ํ‘œ ๋™๋ฅ˜ ์–ธ์–ด JSON, XML, TOML
๋ชฉ์  ์„ค์ •(config), ๋ฐ์ดํ„ฐ ๊ตํ™˜, ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ์˜ ์„ค์ •๊ฐ’ ์ €์žฅ
ํŒŒ์ผ ํ™•์žฅ์ž .yaml ๋˜๋Š” .yml
๊ตฌ์กฐ ๋ฐฉ์‹ ๋“ค์—ฌ์“ฐ๊ธฐ ๊ธฐ๋ฐ˜์˜ ๊ณ„์ธต ๊ตฌ์กฐ (ํŒŒ์ด์ฌ์ฒ˜๋Ÿผ ๋“ค์—ฌ์“ฐ๊ธฐ ์ค‘์š”)

๐Ÿ”ธ ๋น„์Šทํ•œ ์–ธ์–ด๋“ค๊ณผ์˜ ๊ด€๊ณ„

์–ธ์–ด๊ณ„์—ด์ฃผ์š” ์šฉ๋„์‚ฌ๋žŒ์ด ์ฝ๊ธฐ ์‰ฌ์šด ์ •๋„
XML ๋งˆํฌ์—… ์–ธ์–ด ๋ฌธ์„œ ๊ตฌ์กฐ ํ‘œํ˜„ ๐Ÿ˜• ๋‚ฎ์Œ
JSON ๋ฐ์ดํ„ฐ ํฌ๋งท API, ์›น๋ฐ์ดํ„ฐ ์ „์†ก ๐Ÿ™‚ ์ค‘๊ฐ„
YAML ๋ฐ์ดํ„ฐ ์ง๋ ฌํ™” ์–ธ์–ด ์„ค์ • ํŒŒ์ผ, ์ธํ”„๋ผ ์„ค์ • (์˜ˆ: Docker, Kubernetes) ๐Ÿ˜ ๋งค์šฐ ๋†’์Œ

๐Ÿ‘‰ ์ฆ‰, YAML์€ JSON๋ณด๋‹ค ์‚ฌ๋žŒ์ด ์ฝ๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“  ๋ฐ์ดํ„ฐ ์–ธ์–ด์ด๋ฉฐ,
XML์ฒ˜๋Ÿผ ํƒœ๊ทธ๊ฐ€ ์—†๊ณ , JSON์ฒ˜๋Ÿผ ์ค‘๊ด„ํ˜ธ๋ฅผ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 


JSON, YAML ๊ฐ™์€ ์–ธ์–ด๋Š” ํ”ํžˆ **DSL(Domain-Specific Language, ๋„๋ฉ”์ธ ํŠนํ™” ์–ธ์–ด)**์˜ ํ•œ ํ˜•ํƒœ๋กœ ๋ถ„๋ฅ˜๋ฉ๋‹ˆ๋‹ค.
์ด๋“ค์˜ ์ฒ ํ•™๊ณผ ํŠน์ง•์„ ์ดํ•ดํ•˜๋ฉด, ์™œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ์•„๋‹Œ๋ฐ๋„ ๊ฐœ๋ฐœ ์„ธ๊ณ„์—์„œ ํ•ต์‹ฌ ์—ญํ• ์„ ํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿงญ 1. DSL(Domain-Specific Language)์ด๋ž€?

DSL์€ ํŠน์ • ๋ชฉ์ (domain)์— ํŠนํ™”๋œ ์–ธ์–ด์ž…๋‹ˆ๋‹ค.
์ฆ‰, *“๋ชจ๋“  ๊ฑธ ๋‹ค ํ•˜๋ ค๋Š” ์–ธ์–ด”*๊ฐ€ ์•„๋‹ˆ๋ผ,
**“ํŠน์ • ์ž‘์—…์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ์–ธ์–ด”**์ž…๋‹ˆ๋‹ค.

๊ตฌ๋ถ„์˜๋ฏธ
์ผ๋ฐ˜ ์–ธ์–ด(General-purpose language) Python, Java, C ๊ฐ™์€ ๋ฒ”์šฉ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด
ํŠนํ™” ์–ธ์–ด(Domain-specific language) SQL, HTML, JSON, YAML์ฒ˜๋Ÿผ ํŠน์ • ๋ชฉ์ ์„ ์œ„ํ•œ ์–ธ์–ด

๐Ÿงฉ 2. JSON / YAML๊ณผ ๊ฐ™์€ DSL์˜ ํŠน์ง•

ํŠน์ง•์„ค๋ช…
โ‘  ์„ ์–ธ์ (Declarative) “์–ด๋–ป๊ฒŒ”๊ฐ€ ์•„๋‹ˆ๋ผ “๋ฌด์—‡”์„ ์ •์˜ํ•จ → ๋กœ์ง์ด ์•„๋‹Œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์„ค๋ช…
โ‘ก ๋‹จ์ˆœ์„ฑ(Simple Syntax) ์ตœ์†Œํ•œ์˜ ๊ธฐํ˜ธ์™€ ๋ฌธ๋ฒ•์œผ๋กœ ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ (ex. ์ค‘๊ด„ํ˜ธ, ๋“ค์—ฌ์“ฐ๊ธฐ ๋“ฑ)
โ‘ข ์‚ฌ๋žŒ์ด ์ฝ๊ธฐ ์‰ฌ์›€(Human-readable) ๊ธฐ๊ณ„๋ฟ ์•„๋‹ˆ๋ผ ์‚ฌ๋žŒ์ด ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ณ  ํŽธ์ง‘ ๊ฐ€๋Šฅ
โ‘ฃ ๊ตฌ์กฐ์  ํ‘œํ˜„(Structured Representation) ํŠธ๋ฆฌ(๊ณ„์ธต) ๊ตฌ์กฐ๋กœ ๋ฐ์ดํ„ฐ๋‚˜ ์„ค์ • ๊ด€๊ณ„๋ฅผ ๋ช…ํ™•ํžˆ ํ‘œํ˜„
โ‘ค ์–ธ์–ด ์ค‘๋ฆฝ์„ฑ(Language-agnostic) Python, Java ๋“ฑ ์–ด๋–ค ์–ธ์–ด์—์„œ๋„ ์‰ฝ๊ฒŒ ํŒŒ์‹ฑ(์ฝ๊ธฐ/์“ฐ๊ธฐ) ๊ฐ€๋Šฅ
โ‘ฅ ์ž๋™ํ™”์™€ ์„ค์ • ์ค‘์‹ฌ ์ฝ”๋“œ ์‹คํ–‰๋ณด๋‹ค๋Š” ์‹œ์Šคํ…œ ์„ค์ •, ๊ตฌ์„ฑ, ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์— ์ดˆ์ 

๐Ÿ’ก 3. JSON/YAML์˜ ์ฒ ํ•™

์ฒ ํ•™์„ค๋ช…
“๋ฐ์ดํ„ฐ๋Š” ์ฝ”๋“œ์™€ ๋ถ„๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค.” ๋กœ์ง์€ ์ฝ”๋“œ์—์„œ, ๋ฐ์ดํ„ฐ/์„ค์ •์€ DSL์—์„œ ๊ด€๋ฆฌํ•˜๋„๋ก ๋ถ„๋ฆฌ
“์‚ฌ๋žŒ์ด ์ฝ๊ธฐ ์‰ฌ์šด ๊ฒƒ์ด ์œ ์ง€๋ณด์ˆ˜์— ์œ ๋ฆฌํ•˜๋‹ค.” JSON/YAML์€ ํ˜‘์—… ํ™˜๊ฒฝ(DevOps, ์ธํ”„๋ผ ์„ค์ • ๋“ฑ)์— ์ ํ•ฉ
“ํ‘œ์ค€ํ™”๋œ ๊ตฌ์กฐ๊ฐ€ ์ž๋™ํ™”๋ฅผ ๋งŒ๋“ ๋‹ค.” ์ผ์ •ํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋•๋ถ„์— ์ž๋™ํ™” ๋„๊ตฌ๋“ค์ด ์‰ฝ๊ฒŒ ํŒŒ์‹ฑํ•˜๊ณ  ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

์˜ˆ๋ฅผ ๋“ค์–ด, **Kubernetes์˜ deployment.yaml**์ด๋‚˜
**GitHub Actions์˜ workflow.yml**์€ ์‚ฌ๋žŒ์ด ์„ค์ •์„ ์ •์˜ํ•˜๋ฉด
์‹œ์Šคํ…œ์ด ๊ทธ๊ฑธ ์ฝ์–ด ์ž๋™์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
๐Ÿ‘‰ ์ด๊ฒƒ์ด DSL์˜ ํ•ต์‹ฌ ์ฒ ํ•™์ž…๋‹ˆ๋‹ค:
"์‚ฌ๋žŒ์ด ์ •์˜ํ•˜๊ณ , ์‹œ์Šคํ…œ์ด ์ดํ•ดํ•œ๋‹ค."

 

๐Ÿง  ์š”์•ฝ

ํ•ญ๋ชฉ๋‚ด์šฉ
DSL์˜ ๋ชฉ์  ํŠน์ • ๋„๋ฉ”์ธ์— ํŠนํ™”๋œ ๊ฐ„๊ฒฐํ•œ ์–ธ์–ด
JSON/YAML์˜ ์—ญํ•  ๋ฐ์ดํ„ฐ ํ‘œํ˜„, ์„ค์ • ๊ด€๋ฆฌ, ์‹œ์Šคํ…œ ์ž๋™ํ™”
ํ•ต์‹ฌ ์ฒ ํ•™ ์„ ์–ธ์ , ๋‹จ์ˆœ์„ฑ, ๊ฐ€๋…์„ฑ, ์ž๋™ํ™” ๊ฐ€๋Šฅ์„ฑ
๋Œ€ํ‘œ ๋ถ„์•ผ DevOps, ํด๋ผ์šฐ๋“œ ์„ค์ •, API ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ, ๊ตฌ์„ฑ ๊ด€๋ฆฌ

 


 

Spring Eureka๋ฅผ ์ด์šฉํ•ด์„œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜(MSA)๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ๊ณ„์‹œ๋‹ค๋ฉด, **“๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋Š” ๋ณ‘๋ ฌ ๊ตฌ์กฐ์— ์†ํ•œ๋‹ค”**๊ณ  ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ๋‹จ์ˆœํžˆ “๋ณ‘๋ ฌ”์ด๋ผ๊ณ ๋งŒ ๋ณด๊ธฐ๋ณด๋‹ค๋Š” **“๋А์Šจํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋œ ๋ณ‘๋ ฌ์ ·๋ถ„์‚ฐ ๊ตฌ์กฐ(loose-coupled distributed system)”**๋ผ๊ณ  ํ‘œํ˜„ํ•˜๋Š” ๊ฒŒ ๋” ๋งž์Šต๋‹ˆ๋‹ค.
์ด์œ ๋ฅผ ๋‹จ๊ณ„๋ณ„๋กœ ์ •๋ฆฌํ•ด ๋ณผ๊ฒŒ์š” ๐Ÿ‘‡


๐Ÿ”น 1. ์ง๋ ฌ ๊ตฌ์กฐ vs ๋ณ‘๋ ฌ ๊ตฌ์กฐ์˜ ๊ฐœ๋… ์ •๋ฆฌ

๊ตฌ๋ถ„ ์ง๋ ฌ ๊ตฌ์กฐ(Serial) ๋ณ‘๋ ฌ ๊ตฌ์กฐ(Parallel)
๊ตฌ์กฐ ๊ฐœ๋… ํ•˜๋‚˜์˜ ํ๋ฆ„์— ๋”ฐ๋ผ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰ ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ์ด ๋…๋ฆฝ์ ์œผ๋กœ ๋™์‹œ์— ๋™์ž‘
ํŠน์ง• ๋‹จ์ผ ์‹คํŒจ ์ง€์ (Single Point of Failure) ์กด์žฌ ๋…๋ฆฝ์„ฑ๊ณผ ํ™•์žฅ์„ฑ์ด ๋†’์Œ
์˜ˆ์‹œ ๋ชจ๋†€๋ฆฌ์‹(Monolithic) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค(Microservices)

๐Ÿ”น 2. ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์˜ ๊ธฐ๋ณธ ์ฒ ํ•™

๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜(MSA)๋Š”

“๊ฐ ๊ธฐ๋Šฅ(์„œ๋น„์Šค)์„ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœ, ๋ฐฐํฌ, ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ถ„๋ฆฌํ•œ ๋ณ‘๋ ฌ์  ๊ตฌ์กฐ์˜ ์‹œ์Šคํ…œ

์ž…๋‹ˆ๋‹ค.

  • ์„œ๋น„์Šค ๊ฐ„์˜ ๊ด€๊ณ„๋Š” **์ง๋ ฌ ์ข…์†์„ฑ(์˜์กด ํ˜ธ์ถœ)**์ด ์•„๋‹Œ,
    ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง€ ๊ธฐ๋ฐ˜ ํ˜น์€ RESTful ํ˜ธ์ถœ ํ˜•ํƒœ๋กœ ๋А์Šจํ•˜๊ฒŒ ์—ฐ๊ฒฐ(loose coupling) ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ ํŠน์ • ์„œ๋น„์Šค๊ฐ€ ๋‹ค์šด๋˜์–ด๋„, ์ „์ฒด ์‹œ์Šคํ…œ์ด ๋ฉˆ์ถ”์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๐Ÿ‘‡

  • ํšŒ์› ์„œ๋น„์Šค, ์ฃผ๋ฌธ ์„œ๋น„์Šค, ๊ฒฐ์ œ ์„œ๋น„์Šค๊ฐ€ ๊ฐ๊ฐ ๋…๋ฆฝ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ๊ฒฐ์ œ ์„œ๋น„์Šค๊ฐ€ ์ž ์‹œ ์žฅ์• ๊ฐ€ ๋‚˜๋”๋ผ๋„, ํšŒ์› ์„œ๋น„์Šค๋Š” ์ •์ƒ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    → ์ด๊ฒƒ์ด ๋ฐ”๋กœ ๋ณ‘๋ ฌ์  ๋ถ„์‚ฐ ๊ตฌ์กฐ์˜ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

๐Ÿ”ธ 3. Eureka์™€ ๋ณ‘๋ ฌ ๊ตฌ์กฐ์˜ ๊ด€๊ณ„

**Eureka(Server/Client)**๋Š” ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ(Service Discovery) ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
์ฆ‰, ๋ณ‘๋ ฌ๋กœ ์กด์žฌํ•˜๋Š” ์—ฌ๋Ÿฌ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋“ค์ด ์„œ๋กœ๋ฅผ “์ฐพ๊ณ  ์—ฐ๊ฒฐ”ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ถ„์‚ฐ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์ž…๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ์š”์†Œ                                ์—ญํ• 

 

Eureka Server ๊ฐ ์„œ๋น„์Šค์˜ ์œ„์น˜(IP, Port)๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ
Eureka Client ์ž์‹ ์„ ๋“ฑ๋กํ•˜๊ณ , ๋‹ค๋ฅธ ์„œ๋น„์Šค๋ฅผ ์กฐํšŒ
๊ฒฐ๊ณผ ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์ด ์ค‘์•™ ์ œ์–ด๊ฐ€ ์•„๋‹Œ, ๋ณ‘๋ ฌ์  ๊ฒ€์ƒ‰ ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ๋กœ ๊ฐ€๋Šฅ

โžก๏ธ ๋”ฐ๋ผ์„œ Eureka๋ฅผ ์‚ฌ์šฉํ•œ MSA๋Š”
**“์„œ๋น„์Šค ๊ฐ„ ์ง์ ‘ ์—ฐ๊ฒฐ์ด ์•„๋‹Œ, ๋ณ‘๋ ฌ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ ์ƒํ˜ธ ๋ฐœ๊ฒฌ(discovery)ํ•˜๋Š” ๊ตฌ์กฐ”**์ž…๋‹ˆ๋‹ค.


๐Ÿ”น 4. ์‹ค์ œ ์•„ํ‚คํ…์ฒ˜ ๋น„์œ 

๊ตฌ์กฐ๋น„์œ 
๋ชจ๋†€๋ฆฌ์‹(์ง๋ ฌํ˜•) ํ•œ ์ค„๋กœ ์—ฐ๊ฒฐ๋œ ๊ธฐ์ฐจ: ํ•œ ์นธ์ด ๋ฉˆ์ถ”๋ฉด ์ „์ฒด๊ฐ€ ๋ฉˆ์ถค
๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค(๋ณ‘๋ ฌํ˜•) ๊ฐ์ž ๋ชฉ์ ์ง€๋ฅผ ๊ฐ€์ง„ ์ž๋™์ฐจ: ๊ตํ†ต ์‹ ํ˜ธ(Eureka)๊ฐ€ ๋ฐฉํ–ฅ๋งŒ ์•ˆ๋‚ด

๐Ÿ‘‰ ์ฆ‰, MSA๋Š” “๊ตํ†ต ์‹ ํ˜ธ ์‹œ์Šคํ…œ์ด ์žˆ๋Š” ๋ณ‘๋ ฌ ๋„๋กœ๋ง” ๊ตฌ์กฐ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ”ธ 5. ๊ฒฐ๋ก 

๊ตฌ๋ถ„์„ค๋ช…
๊ตฌ์กฐ ๋ถ„๋ฅ˜ ๋ณ‘๋ ฌ์ , ๋ถ„์‚ฐํ˜• ๊ตฌ์กฐ
ํŠน์ง• ์„œ๋น„์Šค ๊ฐ„ ๋…๋ฆฝ์„ฑ, ์œ ์—ฐํ•œ ํ™•์žฅ์„ฑ, ์žฅ์•  ๊ฒฉ๋ฆฌ
ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ Eureka, API Gateway, Config Server, Message Queue
๊ฒฐ๊ณผ์  ์žฅ์  ์„ฑ๋Šฅ ํ™•์žฅ์„ฑ(Scalability), ์žฅ์•  ๋ณต์›๋ ฅ(Resilience) ํ™•๋ณด

โœ… ์ •๋ฆฌ

๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋Š” **“์ง๋ ฌ ๊ตฌ์กฐ๊ฐ€ ์•„๋‹Œ, ๋ณ‘๋ ฌ์ ์ด๊ณ  ๋ถ„์‚ฐ๋œ ๊ตฌ์กฐ”**์ž…๋‹ˆ๋‹ค.
๊ฐ ์„œ๋น„์Šค๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ, Eureka์™€ ๊ฐ™์€ ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ๋ฅผ ํ†ตํ•ด ๋А์Šจํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

 

 

์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ตœ์ข…์ ์œผ๋กœ AWS ์— ๋ฐฐํฌํ•˜๋ ค๊ณ  ํ•ด ๊ทธ๋Ÿฐ๋ฐ ์ถ”ํ›„์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ๋ฐฐํฌํ•  ๊ฑด๋ฐ ์ง€๊ธˆ์€ ๋„์ปค ์ปดํฌ์ฆˆ๋กœ ํ•˜๋Š” ์ค‘์ด์•ผ. ๋นŒ๋“œ์ค‘์— OPENJDK ๋ฒ„์ „์ด์Šˆ๊ฐ€ ์žˆ์–ด ๋ผ์ด์„ผ์Šค๊ฐ€ ๋ฌด๋ฃŒ์ธ JDK์ค‘์—์„œ ๊ฐ€์žฅ ์ตœ์‹ ์ธ ๊ฒƒ์„ ์ถ”์ฒœํ•ด์ค˜.

 


๐Ÿงฑ 1๏ธโƒฃ ๊ฐœ๋… ์ •๋ฆฌ

๐Ÿ”น ๋„์ปค(Docker)

  • ์ปจํ…Œ์ด๋„ˆ(๊ฐ€์ƒ ํ™˜๊ฒฝ)๋ฅผ ๋งŒ๋“ค์–ด์„œ ์•ฑ์„ ์‹คํ–‰์‹œํ‚ค๋Š” ๊ธฐ์ˆ ์ด์—์š”.
  • ๋„์ปค๋Š” OS์— **“์ด๋ฏธ์ง€(Image)”**๋ฅผ ์˜ฌ๋ ค์„œ ์‹คํ–‰ํ•˜๋Š”๋ฐ, ์ด ์ด๋ฏธ์ง€ ์•ˆ์—๋Š” JDK ๊ฐ™์€ ์‹คํ–‰ ํ™˜๊ฒฝ์ด ๋“ค์–ด ์žˆ์„ ์ˆ˜๋„ ์žˆ์–ด์š”.

๐Ÿ”น ๋„์ปค ์ปดํฌ์ฆˆ(Docker Compose)

  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ•œ๊บผ๋ฒˆ์— ๊ด€๋ฆฌ(๋นŒ๋“œ·์‹คํ–‰·์—ฐ๊ฒฐ)ํ•˜๋Š” ๋„๊ตฌ์˜ˆ์š”.
  • ์˜ˆ: docker-compose.yml ์•ˆ์—์ด๋Ÿฐ ์‹์œผ๋กœ ํ•˜๋ฉด app(์Šคํ”„๋ง ์„œ๋ฒ„) + db(PostgreSQL)๊ฐ€ ๋™์‹œ์— ์˜ฌ๋ผ๊ฐ€์ฃ .
  •  
    services: app: build: . ports: - "8080:8080" depends_on: - db db: image: postgres:15


โ˜• 2๏ธโƒฃ JDK์™€์˜ ๊ด€๊ณ„

๋„์ปค ์ปดํฌ์ฆˆ๋Š” JDK๋ฅผ ์ง์ ‘ ์ œ๊ณตํ•˜์ง€ ์•Š์•„์š”.
๐Ÿ‘‰ ๋Œ€์‹ , ๋‹น์‹ ์˜ ์•ฑ ์ปจํ…Œ์ด๋„ˆ ์•ˆ์— ์–ด๋–ค JDK๋ฅผ ์“ธ์ง€๋ฅผ Dockerfile๋กœ ์ •ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์Šคํ”„๋ง ๋ถ€ํŠธ ์•ฑ์ด๋ผ๋ฉด ๋ณดํ†ต ์ด๋Ÿฐ ์‹์ด์—์š” ๐Ÿ‘‡

# Java 21 LTS ๊ธฐ๋ฐ˜์˜ ๋นŒ๋“œ ์ด๋ฏธ์ง€ FROM openjdk:21-jdk-slim WORKDIR /app COPY build/libs/myapp.jar app.jar # JAR ํŒŒ์ผ ์‹คํ–‰ ENTRYPOINT ["java", "-jar", "app.jar"]

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ด ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—๋Š” “openjdk:21-jdk-slim” ์ด๋ฏธ์ง€๊ฐ€ ํฌํ•จ๋œ ์ƒํƒœ๋กœ ์‹คํ–‰๋ผ์š”.
๊ทธ ๋ง์€ ๊ณง ๋„์ปค ์ปดํฌ์ฆˆ์—์„œ ์‚ฌ์šฉํ•˜๋Š” JDK๋Š” Dockerfile์˜ FROM์— ์ง€์ •๋œ JDK ์ด๋ฏธ์ง€์˜ˆ์š”.


โš™๏ธ 3๏ธโƒฃ ๋„์ปค ์ปดํฌ์ฆˆ์™€ JDK์˜ ์—ฐ๊ฒฐ ๊ตฌ์กฐ

docker-compose.yml โ”‚ โ””โ”€โ”€ app (service) โ”‚ โ””โ”€โ”€ Dockerfile → FROM openjdk:21-jdk-slim
  • Compose๋Š” ๋‹จ์ˆœํžˆ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” “์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋„๊ตฌ”
  • JDK ๋ฒ„์ „์€ “Dockerfile์˜ FROM ์ด๋ฏธ์ง€”๋กœ ๊ฒฐ์ •

โœ… ๊ฒฐ๋ก  ์š”์•ฝ

๊ตฌ๋ถ„์—ญํ• JDK ๊ด€๋ จ
Docker ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์—”์ง„ JDK๊ฐ€ ํฌํ•จ๋œ ์ด๋ฏธ์ง€ ์‹คํ–‰
Dockerfile ์ด๋ฏธ์ง€ ๊ตฌ์„ฑ ํŒŒ์ผ JDK ๋ฒ„์ „ ์ง€์ • (FROM openjdk:21-jdk)
Docker Compose ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฌถ์–ด ์‹คํ–‰ JDK ์ž์ฒด๋Š” ์ œ๊ณตํ•˜์ง€ ์•Š์Œ