UML ๋‹ค์ด์–ด๊ทธ๋žจ ์ข…๋ฅ˜ ์™„๋ฒฝํžˆ ์ดํ•ดํ•ด๋ณด์ž

UML ๋‹ค์ด์–ด๊ทธ๋žจ ์ข…๋ฅ˜ ์™„๋ฒฝํžˆ ์ดํ•ดํ•ด๋ณด์ž

D
dongAuthor
16 min read

ํด๋ž˜์Šค, ์‹œํ€€์Šค, ์œ ์Šค์ผ€์ด์Šค ๋“ฑ ์ฃผ์š” UML ๋‹ค์ด์–ด๊ทธ๋žจ ์ข…๋ฅ˜๋ฅผ ์‹ค๋ฌด ์˜ˆ์ œ์™€ ํ•จ๊ป˜ ์•Œ์•„๋ณด์„ธ์š”. ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„ ๋Šฅ๋ ฅ์„ ํ•œ ๋‹จ๊ณ„ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜์„ธ์š”.

์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์—์„œ ๋ณต์žกํ•œ ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•  ๋•Œ, ํŒ€์›๋“ค๊ณผ ๋ช…ํ™•ํ•˜๊ฒŒ ์†Œํ†ตํ•˜๋Š” ๊ฒƒ์€ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ๋กœ ๋ฐ”๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ ์ „์— ์‹œ์Šคํ…œ์˜ ๊ตฌ์กฐ์™€ ๋™์ž‘ ๋ฐฉ์‹์„ ์‹œ๊ฐํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์–ด๋–จ๊นŒ์š”? ๋ฐ”๋กœ ์ด ์ง€์ ์—์„œ UML(Unified Modeling Language)์ด ๊ทธ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

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

UML์€ ํฌ๊ฒŒ ๊ตฌ์กฐ์  ๋‹ค์ด์–ด๊ทธ๋žจ(Structural Diagrams)๊ณผ ํ–‰์œ„์  ๋‹ค์ด์–ด๊ทธ๋žจ(Behavioral Diagrams)์œผ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค. ๊ฐ ๋‹ค์ด์–ด๊ทธ๋žจ์€ ์‹œ์Šคํ…œ์˜ ํŠน์ • ์ธก๋ฉด์„ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ ์ตœ์ ํ™”๋˜์–ด ์žˆ์ฃ . ์ด ๊ธ€์—์„œ๋Š” ์‹ค๋ฌด์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” UML ๋‹ค์ด์–ด๊ทธ๋žจ ์ข…๋ฅ˜๋ฅผ ์ƒ์„ธํžˆ ์‚ดํŽด๋ณด๊ณ , ๊ฐ ๋‹ค์ด์–ด๊ทธ๋žจ์ด ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์œ ์šฉํ•œ์ง€ ์‹ค์ œ ์˜ˆ์‹œ์™€ ํ•จ๊ป˜ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ด€๊ณ„ (Relationships)

ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์˜ ์ง„์ •ํ•œ ํž˜์€ ํด๋ž˜์Šค ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋ช…ํ™•ํžˆ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ด€๊ณ„๋Š” ์ฃผ๋กœ ํ™”์‚ดํ‘œ๋กœ ํ‘œํ˜„๋˜๋ฉฐ, ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๋ชจ์–‘์˜ ํ™”์‚ดํ‘œ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ํ™”์‚ดํ‘œ ๋ฐฉํ–ฅ์€ ํ•œ ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

๊ด€๊ณ„ ์œ ํ˜• ์˜๋ฏธ ํ™”์‚ดํ‘œ/๊ธฐํ˜ธ ํ˜•ํƒœ ์„ค๋ช…
์ผ๋ฐ˜ํ™” (Generalization) ์ƒ์† ๊ด€๊ณ„ ์‹ค์„ ์˜ ํฐ์ƒ‰ ํ™”์‚ดํ‘œ ๋ถ€๋ชจ ํด๋ž˜์Šค(Superclass)์™€ ์ž์‹ ํด๋ž˜์Šค(Subclass) ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
์‹ค์ฒดํ™” (Realization) ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ ๊ด€๊ณ„ ์ ์„ ์„ ๊ฐ€์ง„ ํฐ์ƒ‰ ํ™”์‚ดํ‘œ ํด๋ž˜์Šค๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ implementsํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ ์„  ํ™”์‚ดํ‘œ๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.
์—ฐ๊ด€ (Association) ์ฐธ์กฐ ๊ด€๊ณ„ ์‹ค์„ ์˜ ํ™”์‚ดํ‘œ ํ•œ ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์†์„ฑ์œผ๋กœ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค. ๋ฐฉํ–ฅ์„ฑ์€ ์ฐธ์กฐ ํ๋ฆ„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
์˜์กด (Dependency) ์ผ์‹œ์  ์‚ฌ์šฉ ๊ด€๊ณ„ ์ ์„ ์˜ ํ™”์‚ดํ‘œ ํ•œ ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ๋ฉ”์„œ๋“œ ๋งค๊ฐœ๋ณ€์ˆ˜๋‚˜ ๋ฐ˜ํ™˜ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ด€๊ณ„์ž…๋‹ˆ๋‹ค.
์ง‘ํ•ฉ (Aggregation) ์•ฝํ•œ ์ „์ฒด-๋ถ€๋ถ„ ๊ด€๊ณ„ ํฐ์ƒ‰ ๋งˆ๋ฆ„๋ชจ๋กœ ์‹œ์ž‘๋œ ์‹ค์„ ์˜ ํ™”์‚ดํ‘œ โ€˜์ „์ฒดโ€™๊ฐ€ โ€˜๋ถ€๋ถ„โ€™์„ ํฌํ•จํ•˜์ง€๋งŒ, ๋ถ€๋ถ„์˜ ์ƒ๋ช…์ฃผ๊ธฐ๊ฐ€ ์ „์ฒด์— ์˜์กดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
ํ•ฉ์„ฑ (Composition) ๊ฐ•ํ•œ ์ „์ฒด-๋ถ€๋ถ„ ๊ด€๊ณ„ ๊ฒ€์ •์ƒ‰์˜ ๋งˆ๋ฆ„๋ชจ๋กœ ์‹œ์ž‘๋œ ์‹ค์„ ์˜ ํ™”์‚ดํ‘œ ๋ถ€๋ถ„์˜ ์ƒ๋ช…์ฃผ๊ธฐ๊ฐ€ ์ „์ฒด์— ์™„์ „ํžˆ ์ข…์†๋  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ์กฐ์  ๋‹ค์ด์–ด๊ทธ๋žจ (Structural Diagrams)

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

ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ (Class Diagram)

ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ

ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ(Class Diagram)์€ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„(OOD, Object-Oriented Design)์—์„œ ๊ฐ€์žฅ ํ•ต์‹ฌ์ด ๋˜๋Š” UML ๋‹ค์ด์–ด๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.

ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ

์‹œ์Šคํ…œ์„ ๊ตฌ์„ฑํ•˜๋Š” ํด๋ž˜์Šค, ๊ทธ๋“ค์˜ ์†์„ฑ(Attributes)๊ณผ ๋ฉ”์„œ๋“œ(Methods), ๊ทธ๋ฆฌ๊ณ  ํด๋ž˜์Šค ๊ฐ„์˜ ๊ด€๊ณ„(Relationships)๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œํ˜„ํ•˜์ฃ .

์ฆ‰, ์‹œ์Šคํ…œ์˜ ์ •์  ๊ตฌ์กฐ(static structure)๋ฅผ ํ•œ๋ˆˆ์— ๋ณด์—ฌ์ฃผ๋Š” ์„ค๊ณ„์˜ ์ฒญ์‚ฌ์ง„(blueprint) ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

ํŠนํžˆ ๋ณต์žกํ•œ ๋„๋ฉ”์ธ ๋ชจ๋ธ์„ ์„ค๊ณ„ํ•  ๋•Œ, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ํ•ต์‹ฌ ๊ฐœ๋…์„ ํŒ€ ์ „์ฒด๊ฐ€ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.

์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ:

  • ํด๋ž˜์Šค(Class): ์†์„ฑ(attributes)๊ณผ ๋ฉ”์„œ๋“œ(methods)๋ฅผ ํฌํ•จ
  • ์†์„ฑ(Attributes): ํด๋ž˜์Šค๊ฐ€ ๊ฐ€์ง€๋Š” ๋ฐ์ดํ„ฐ
  • ๋ฉ”์„œ๋“œ(Methods): ํด๋ž˜์Šค๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ
  • ๊ด€๊ณ„(Relationships): ์ƒ์†, ์—ฐ๊ด€, ์ง‘ํ•ฉ, ์˜์กด ๋“ฑ

์‹ค๋ฌด ํ™œ์šฉ ์˜ˆ์‹œ:

์‡ผํ•‘๋ชฐ ์‹œ์Šคํ…œ์„ ๊ฐœ๋ฐœํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณผ๊ฒŒ์š”. โ€˜์‚ฌ์šฉ์ž(User)โ€™, โ€˜์ƒํ’ˆ(Product)โ€™, โ€˜์ฃผ๋ฌธ(Order)โ€™ ํด๋ž˜์Šค์™€ ์ด๋“ค์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

classDiagram
    class User {
        - userId: int
        - name: string
        - email: string
        + login(): void
        + logout(): void
    }

    class Product {
        - productId: int
        - name: string
        - price: float
        + getInfo(): string
    }

    class Order {
        - orderId: int
        - date: Date
        - total: float
        + calculateTotal(): float
    }

    User "1" --> "1..*" Order : places >
    Order "1..*" --> "1..*" Product : contains >

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

๊ฐ์ฒด ๋‹ค์ด์–ด๊ทธ๋žจ (Object Diagram)

๊ฐ์ฒด ๋‹ค์ด์–ด๊ทธ๋žจ

๊ฐ์ฒด ๋‹ค์ด์–ด๊ทธ๋žจ(Object Diagram)์€ ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์˜ ์ธ์Šคํ„ด์Šค ๋ฒ„์ „(instance-level diagram)์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ํŠน์ • ์‹œ์ ์—์„œ ์‹œ์Šคํ…œ์— ์กด์žฌํ•˜๋Š” ๊ฐ์ฒด(instance)์™€ ๊ทธ ๊ฐ์ฒด๋“ค ๊ฐ„์˜ ๊ด€๊ณ„, ๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ๊ตฌ์ฒด์ ์œผ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ๋‹ค์ด์–ด๊ทธ๋žจ์ด์—์š”.

๊ฐ์ฒด ๋‹ค์ด์–ด๊ทธ๋žจ ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ

์‹œ์Šคํ…œ์˜ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ด ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์ด๋ผ๋ฉด, ๊ฐ์ฒด ๋‹ค์ด์–ด๊ทธ๋žจ์€ ์‹œ์Šคํ…œ์˜ ํ˜„์žฌ ์ƒํƒœ(snapshot)๋ฅผ ์‹œ๊ฐํ™”ํ•˜๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ๊ณผ์˜ ์ฐจ์ด์ :

  • ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ: ์ถ”์ƒ์ ์ธ ํด๋ž˜์Šค์™€ ๊ด€๊ณ„ ๋ชจ๋ธ
  • ๊ฐ์ฒด ๋‹ค์ด์–ด๊ทธ๋žจ: ํŠน์ • ์‹œ์ ์˜ ๊ตฌ์ฒด์ ์ธ ์ธ์Šคํ„ด์Šค

์‹ค๋ฌด ํ™œ์šฉ ์˜ˆ์‹œ:

๋กœ๊ทธ์ธ ํ”„๋กœ์„ธ์Šค์—์„œ '์‚ฌ์šฉ์ž ๊ฐ์ฒด(user object)'๊ฐ€ '์ธ์ฆ ๊ฐ์ฒด(authentication object)'์™€ ์–ด๋–ป๊ฒŒ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š”์ง€ ์‹œ๊ฐํ™”ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž "๊น€์ฒ ์ˆ˜"๊ฐ€ ๋กœ๊ทธ์ธ์„ ์‹œ๋„ํ•˜๋Š” ์ˆœ๊ฐ„์˜ ๊ฐ์ฒด ์ƒํƒœ๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์ฃ .

classDiagram
    class User {
        userId = 101
        name = "๊น€์ฒ ์ˆ˜"
        email = "kim@example.com"
    }

    class Authentication {
        sessionId = "abc123"
        isValid = true
    }

    User "1" --> "1" Authentication : authenticates >

๊ฐ์ฒด ๋‹ค์ด์–ด๊ทธ๋žจ์€ ์‹œ์Šคํ…œ์˜ ๋Ÿฐํƒ€์ž„ ์ƒํ™ฉ์„ ์ดํ•ดํ•˜๋Š” ๋ฐ ํŠนํžˆ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

์ปดํฌ๋„ŒํŠธ ๋‹ค์ด์–ด๊ทธ๋žจ (Component Diagram)

image.png

์ปดํฌ๋„ŒํŠธ ๋‹ค์ด์–ด๊ทธ๋žจ(Component Diagram)์€

์‹œ์Šคํ…œ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฌผ๋ฆฌ์ /๋…ผ๋ฆฌ์  ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ๊ด€๊ณ„์™€ ์˜์กด์„ฑ์„ ์‹œ๊ฐํ™”ํ•˜๋Š” UML ๊ตฌ์กฐ ๋‹ค์ด์–ด๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.

์ฆ‰, โ€œ์ด ์‹œ์Šคํ…œ์ด ์–ด๋–ค ๋ชจ๋“ˆ๋“ค๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๊ฐ ๋ชจ๋“ˆ์ด ์–ด๋–ป๊ฒŒ ์—ฐ๊ฒฐ๋˜์–ด ํ˜‘๋ ฅํ•˜๋Š”๊ฐ€โ€๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์กฐ์˜ ์ง€๋„(Map) ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜(MSA) ํ™˜๊ฒฝ์—์„œ ์‹œ์Šคํ…œ์˜ ๋ชจ๋“ˆํ™”(Modularity), ์˜์กด์„ฑ ๊ด€๋ฆฌ(Dependency Management), ์žฌ์‚ฌ์šฉ์„ฑ(Reusability)์„ ์„ค๊ณ„ํ•  ๋•Œ ํ•ต์‹ฌ์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ:

  • ์ปดํฌ๋„ŒํŠธ(Components): ๋…ผ๋ฆฌ์  ๋˜๋Š” ๋ฌผ๋ฆฌ์  ์ปดํฌ๋„ŒํŠธ (์˜ˆ: ๋น„์ฆˆ๋‹ˆ์Šค ์ปดํฌ๋„ŒํŠธ, EJB ์ปดํฌ๋„ŒํŠธ)
  • ์ธํ„ฐํŽ˜์ด์Šค(Interfaces): ์ œ๊ณต(provided)๋˜๊ฑฐ๋‚˜ ์š”๊ตฌ(required)๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค
  • ์˜์กด์„ฑ(Dependencies): ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ๊ด€๊ณ„

์‹ค๋ฌด ํ™œ์šฉ ์˜ˆ์‹œ:

๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ธฐ๋ฐ˜ ์ „์ž์ƒ๊ฑฐ๋ž˜ ์‹œ์Šคํ…œ์—์„œ:

  • ์‚ฌ์šฉ์ž ์„œ๋น„์Šค ์ปดํฌ๋„ŒํŠธ
  • ์ฃผ๋ฌธ ์„œ๋น„์Šค ์ปดํฌ๋„ŒํŠธ
  • ๊ฒฐ์ œ ์„œ๋น„์Šค ์ปดํฌ๋„ŒํŠธ
  • ์žฌ๊ณ  ๊ด€๋ฆฌ ์ปดํฌ๋„ŒํŠธ

์ด๋“ค์ด ์–ด๋–ป๊ฒŒ ์—ฐ๊ฒฐ๋˜๊ณ  ํ†ต์‹ ํ•˜๋Š”์ง€๋ฅผ ์ปดํฌ๋„ŒํŠธ ๋‹ค์ด์–ด๊ทธ๋žจ์œผ๋กœ ๋ช…ํ™•ํžˆ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

graph TD
    subgraph Frontend Layer
        A[๐Ÿง‘โ€๐Ÿ’ป Web Client]
    end

    subgraph Backend Services
        B[User Service]
        C[Order Service]
        D[Payment Service]
        E[Inventory Service]
    end

    A -->|REST API| B
    A -->|REST API| C
    C -->|calls| D
    C -->|fetches| E
    D -->|notifies| C

์ด ๋‹ค์ด์–ด๊ทธ๋žจ์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฌ๋Ÿฌ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , ์„œ๋น„์Šค ๊ฐ„ ์˜์กด ๊ด€๊ณ„๊ฐ€ Order โ†’ Payment โ†’ Inventory ๋ฐฉํ–ฅ์œผ๋กœ ์ด์–ด์ง€๋Š” ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

classDiagram
    class UserService {
        +registerUser()
        +login()
        +getProfile()
    }

    class OrderService {
        +createOrder()
        +getOrderHistory()
        -verifyPayment()
    }

    class PaymentService {
        +processPayment()
        +refund()
    }

    class InventoryService {
        +checkStock()
        +updateStock()
    }

    UserService --> OrderService : uses >
    OrderService --> PaymentService : depends on >
    OrderService --> InventoryService : requests >

์œ„ ์˜ˆ์‹œ์—์„œ๋Š” OrderService๊ฐ€ PaymentService์™€ InventoryService์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉฐ, UserService๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์‚ฌ์šฉ์ž ๊ด€๋ จ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ปดํฌ๋„ŒํŠธ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ํ†ตํ•ด ์‹œ์Šคํ…œ์˜ ๋ชจ๋“ˆํ™”์™€ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์–ด์š”.

๋ฐฐํฌ ๋‹ค์ด์–ด๊ทธ๋žจ (Deployment Diagram)

๋ฐฐํฌ ๋‹ค์ด์–ด๊ทธ๋žจ

๋ฐฐํฌ ๋‹ค์ด์–ด๊ทธ๋žจ(Deployment Diagram)์€ ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์˜ ๋ฌผ๋ฆฌ์  ๋ฐฐํฌ ๊ตฌ์กฐ(Physical Deployment Structure)๋ฅผ ์‹œ๊ฐํ™”ํ•˜๋Š” ๋‹ค์ด์–ด๊ทธ๋žจ์ด์—์š”.

์ฆ‰, ์–ด๋–ค ํ•˜๋“œ์›จ์–ด ๋…ธ๋“œ(Node) ์œ„์— ์–ด๋–ค ์†Œํ”„ํŠธ์›จ์–ด ์ปดํฌ๋„ŒํŠธ(Artifact)๊ฐ€ ๋ฐฐํฌ๋˜๋Š”์ง€๋ฅผ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‹ค์ด์–ด๊ทธ๋žจ์€ ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ ์‹œ์Šคํ…œ์„ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์„ค๊ณ„ํ•œ ํ›„, ์šด์˜ ํ™˜๊ฒฝ(Production Environment)์— ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ๋ฐฐํฌ๋ ์ง€๋ฅผ ์ •์˜ํ•  ๋•Œ ํ•„์ˆ˜์ ์ด์—์š”.

ํŠนํžˆ ํด๋ผ์šฐ๋“œ, ์˜จํ”„๋ ˆ๋ฏธ์Šค, ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์ธํ”„๋ผ ๋“ฑ ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ ์ธํ”„๋ผ ๊ตฌ์กฐ๋ฅผ ๋ฌธ์„œํ™”ํ•˜๊ณ  ํŒ€ ๊ฐ„ ๊ณต์œ ํ•˜๋Š” ํ•ต์‹ฌ ์ž๋ฃŒ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ:

  • ๋…ธ๋“œ(Nodes): ํ•˜๋“œ์›จ์–ด ์žฅ์น˜ (์˜ˆ: ์„œ๋ฒ„, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค)
  • ์•„ํ‹ฐํŒฉํŠธ(Artifacts): ์†Œํ”„ํŠธ์›จ์–ด ์ปดํฌ๋„ŒํŠธ (์˜ˆ: ์‹คํ–‰ ํŒŒ์ผ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)
  • ํ†ต์‹  ๊ฒฝ๋กœ(Communication Paths): ๋…ธ๋“œ ๊ฐ„์˜ ์—ฐ๊ฒฐ

์‹ค๋ฌด ํ™œ์šฉ ์˜ˆ์‹œ:

ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ ์„œ๋น„์Šค์˜ ์ธํ”„๋ผ๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ๋ฐฐํฌ ๋‹ค์ด์–ด๊ทธ๋žจ์ด ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. AWS ํ™˜๊ฒฝ์—์„œ์˜ ๋ฐฐํฌ ๊ตฌ์กฐ๋ฅผ ์˜ˆ๋กœ ๋“ค๋ฉด:

graph TD
    subgraph AWS Cloud
        LB[Load Balancer ๐ŸŒ€]
        subgraph EC2 Cluster
            WS1[Web Server 1 ๐Ÿ–ฅ๏ธ]
            WS2[Web Server 2 ๐Ÿ–ฅ๏ธ]
        end
        DB[(RDS Database ๐Ÿ—„๏ธ)]
    end

    LB --> WS1
    LB --> WS2
    WS1 --> DB
    WS2 --> DB

์ด๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ ๋ฐฐํฌ ์‹œ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค์™€ ๊ตฌ์„ฑ์„ ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒจํ‚ค์ง€ ๋‹ค์ด์–ด๊ทธ๋žจ (Package Diagram)

ํŒจํ‚ค์ง€ ๋‹ค์ด์–ด๊ทธ๋žจ

ํŒจํ‚ค์ง€ ๋‹ค์ด์–ด๊ทธ๋žจ(Package Diagram)์€ ๋Œ€๊ทœ๋ชจ ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์˜ ๊ตฌ์กฐ๋ฅผ ๊ณ„์ธต์ (Hierarchical)์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” UML ๊ตฌ์กฐ ๋‹ค์ด์–ด๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.

์ฆ‰, ๋ณต์žกํ•œ ์‹œ์Šคํ…œ์„ ์˜๋ฏธ ์žˆ๋Š” ๊ทธ๋ฃน(ํŒจํ‚ค์ง€) ์œผ๋กœ ๋ฌถ์–ด ๊ด€๋ฆฌํ•จ์œผ๋กœ์จ ๋ชจ๋“ˆ ๊ฐ„ ์˜์กด์„ฑ(Dependency) ๊ณผ ๊ณ„์ธต ๊ตฌ์กฐ(Layered Architecture) ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๊ฐœ๋ฐœํŒ€์—์„œ๋Š” ์ด ๋‹ค์ด์–ด๊ทธ๋žจ์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ๋ฌธ์„œํ™”ํ•˜๊ณ , ์ฝ”๋“œ ์˜์กด ๊ด€๊ณ„๋ฅผ ๋ถ„์„ํ•˜๋ฉฐ, ๊ณ„์ธต ๊ฐ„์˜ ์—ญํ• ์„ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ:

  • ํŒจํ‚ค์ง€(Packages): ๊ด€๋ จ ์š”์†Œ๋“ค์˜ ๊ทธ๋ฃน
  • ์˜์กด์„ฑ(Dependencies): ํŒจํ‚ค์ง€ ๊ฐ„์˜ ๊ด€๊ณ„

์‹ค๋ฌด ํ™œ์šฉ ์˜ˆ์‹œ:

๋Œ€ํ˜• ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ ˆ์ด์–ด๋ณ„๋กœ ํŒจํ‚ค์ง€๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ:

graph TD
    A[Presentation Layer] --> B[Business Layer]
    B --> C[Data Access Layer]
    C --> D[Database Package]

ํŒจํ‚ค์ง€ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜๋ฉด ํฐ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•œ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„๊ณ , ๊ฐ ๋ชจ๋“ˆ ๊ฐ„์˜ ์˜์กด์„ฑ์„ ๋ช…ํ™•ํžˆ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณตํ•ฉ ๊ตฌ์กฐ ๋‹ค์ด์–ด๊ทธ๋žจ (Composite Structure Diagram)

๋ณตํ•จ์ฒด ๊ตฌ์กฐ ๋‹ค์ด์–ด๊ทธ๋žจ

๋ณตํ•ฉ ๊ตฌ์กฐ ๋‹ค์ด์–ด๊ทธ๋žจ(Composite Structure Diagram)์€ ํด๋ž˜์Šค(Class)๋‚˜ ์ปดํฌ๋„ŒํŠธ(Component)์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ์™€ ๋Ÿฐํƒ€์ž„ ํ˜‘๋ ฅ ๊ด€๊ณ„๋ฅผ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์‹œ๊ฐํ™”ํ•˜๋Š” UML ๊ตฌ์กฐ ๋‹ค์ด์–ด๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.

์ฆ‰, โ€œํ•œ ํด๋ž˜์Šค์˜ ๋‚ด๋ถ€๊ฐ€ ์‹ค์ œ๋กœ ์–ด๋–ค ๊ฐ์ฒด๋“ค๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ณ , ์ด๋“ค์ด ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ํ˜‘๋ ฅํ•˜๋ฉฐ ๋™์ž‘ํ•˜๋Š”๊ฐ€โ€๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋‹ค์ด์–ด๊ทธ๋žจ์ด์—์š”. ์‹œ์Šคํ…œ์˜ ์ „์ฒด ๊ตฌ์กฐ๊ฐ€ ์•„๋‹ˆ๋ผ, ๋ถ€๋ถ„(Part) ๋‹จ์œ„์˜ ๋‚ด๋ถ€ ๊ตฌ์„ฑ์„ ์ดํ•ดํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ์šฉ๋„:

  • ๋ถ„๋ฅ˜์ž์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ ํ‘œํ˜„
  • ํฌํŠธ๋ฅผ ํ†ตํ•œ ๋ถ„๋ฅ˜์ž์™€ ํ™˜๊ฒฝ ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ
  • ํ˜‘๋ ฅ ๋™์ž‘ ํ‘œํ˜„

์‹ค๋ฌด ํ™œ์šฉ ์˜ˆ์‹œ:

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

flowchart TD
    subgraph GameEngine[๐ŸŽฎ Game Engine]
        R[Render Engine]
        P[Physics Engine]
        A[Audio System]
        L[Game Loop]
        R --> L
        P --> L
        A --> L
    end

๋ณตํ•ฉ ๊ตฌ์กฐ ๋‹ค์ด์–ด๊ทธ๋žจ์€ ํด๋ž˜์Šค์˜ ์ „์ฒด๊ฐ€ ์•„๋‹Œ ๊ฐœ๋ณ„ ํด๋ž˜์Šค๋ฅผ ๋ถ€๋ถ„์ ์œผ๋กœ ํ‘œํ˜„ํ•˜์—ฌ, ์‹œ์Šคํ…œ์˜ ์„ธ๋ถ€ ๋™์ž‘์„ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค.

ํ–‰์œ„์  ๋‹ค์ด์–ด๊ทธ๋žจ (Behavioral Diagrams)

ํ–‰์œ„์  ๋‹ค์ด์–ด๊ทธ๋žจ์€ ์‹œ์Šคํ…œ์˜ ๋™์  ๋™์ž‘์„ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๊ณ , ๊ฐ์ฒด๋“ค์ด ์–ด๋–ป๊ฒŒ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š”์ง€๋ฅผ ๋ณด์—ฌ์ฃผ์ฃ .

์œ ์Šค์ผ€์ด์Šค ๋‹ค์ด์–ด๊ทธ๋žจ (Use Case Diagram)

์œ ์Šค์ผ€์ด์Šค ๋‹ค์ด์–ด๊ทธ๋žจ

์œ ์Šค์ผ€์ด์Šค ๋‹ค์ด์–ด๊ทธ๋žจ(Use Case Diagram)์€ ์‚ฌ์šฉ์ž(Actor)์˜ ๊ด€์ ์—์„œ ์‹œ์Šคํ…œ์ด ์ œ๊ณตํ•ด์•ผ ํ•  ๊ธฐ๋Šฅ์  ์š”๊ตฌ์‚ฌํ•ญ(Functional Requirements)์„ ์‹œ๊ฐํ™”ํ•˜๋Š” UML ๋‹ค์ด์–ด๊ทธ๋žจ์ด์—์š”.

์ฆ‰, โ€œ๋ˆ„๊ฐ€ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ์–ด๋–ค ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•˜๋Š”๊ฐ€โ€๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์š”๊ตฌ์‚ฌํ•ญ ๋ถ„์„์˜ ์ถœ๋ฐœ์ ์ด์ž ๋น„์ฆˆ๋‹ˆ์Šค ํ๋ฆ„ ์„ค๊ณ„์˜ ๊ธฐ์ดˆ์ž…๋‹ˆ๋‹ค.

์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ:

  • ์•กํ„ฐ(Actors): ์‹œ์Šคํ…œ๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž๋‚˜ ์™ธ๋ถ€ ์‹œ์Šคํ…œ
  • ์œ ์Šค์ผ€์ด์Šค(Use Cases): ์ธก์ • ๊ฐ€๋Šฅํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๊ฐ€์น˜๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ณ ์ˆ˜์ค€ ๋น„์ฆˆ๋‹ˆ์Šค ๋ชฉํ‘œ

์‹ค๋ฌด ํ™œ์šฉ ์˜ˆ์‹œ:

์˜จ๋ผ์ธ ์‡ผํ•‘๋ชฐ ์‹œ์Šคํ…œ์˜ ์œ ์Šค์ผ€์ด์Šค:

graph TD
    A[Customer] --> B((Browse Products))
    A --> C((Add to Cart))
    A --> D((Checkout))
    D --> E((Login))
    D --> F((Payment))
    F --> G((Send Confirmation Email))

๊ฐ ์œ ์Šค์ผ€์ด์Šค๋Š” ์‹œ์Šคํ…œ์ด ์ œ๊ณตํ•ด์•ผ ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์š”๊ตฌ์‚ฌํ•ญ ์ˆ˜์ง‘ ๋‹จ๊ณ„์—์„œ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํ™œ๋™ ๋‹ค์ด์–ด๊ทธ๋žจ (Activity Diagram)

ํ™œ๋™ ๋‹ค์ด์–ด๊ทธ๋žจ

ํ™œ๋™ ๋‹ค์ด์–ด๊ทธ๋žจ(Activity Diagram)์€ ์‹œ์Šคํ…œ ๋‚ด์˜ ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค๋‚˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ๋ฆ„(Flow of Control)์„ ๋‹จ๊ณ„๋ณ„๋กœ ์‹œ๊ฐํ™”ํ•˜๋Š” UML ํ–‰์œ„(Behavioral) ๋‹ค์ด์–ด๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.

์ฆ‰, ์‹œ์Šคํ…œ์ด โ€œ๋ฌด์—‡์„ ์–ด๋–ค ์ˆœ์„œ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š”๊ฐ€โ€๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋‹ค์ด์–ด๊ทธ๋žจ์ด์—์š”.

์„ ํƒ(Decision), ๋ณ‘๋ ฌ(Parallel), ๋ฐ˜๋ณต(Loop) ๋“ฑ์˜ ์ œ์–ด ๊ตฌ์กฐ๋ฅผ ๋ชจ๋‘ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณต์žกํ•œ ์—…๋ฌด ํ๋ฆ„์ด๋‚˜ ์‚ฌ์šฉ์ž ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์‹œ๊ฐํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ:

  • ํ™œ๋™(Activities): ์ˆ˜ํ–‰๋˜๋Š” ์ž‘์—…
  • ๊ฒฐ์ •(Decisions): ์กฐ๊ฑด๋ถ€ ๋ถ„๊ธฐ
  • ํ๋ฆ„(Flows): ํ™œ๋™ ๊ฐ„์˜ ์ „ํ™˜

์‹ค๋ฌด ํ™œ์šฉ ์˜ˆ์‹œ:

ํšŒ์›๊ฐ€์ž…๋ถ€ํ„ฐ ์ด๋ฉ”์ผ ์ธ์ฆ๊นŒ์ง€์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ:

flowchart TD
    A([์‹œ์ž‘]) --> B[ํšŒ์› ์ •๋ณด ์ž…๋ ฅ]
    B --> C{์ด๋ฉ”์ผ ํ˜•์‹ ์œ ํšจํ•œ๊ฐ€?}
    C -->|์œ ํšจ| D[DB ์ €์žฅ]
    C -->|๋ฌดํšจ| E[์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ํ‘œ์‹œ]
    D --> F[์ธ์ฆ ๋ฉ”์ผ ๋ฐœ์†ก]
    F --> G[์‚ฌ์šฉ์ž ์ด๋ฉ”์ผ ํ™•์ธ ๋Œ€๊ธฐ]
    G --> H{์ธ์ฆ ์„ฑ๊ณต?}
    H -->|์„ฑ๊ณต| I[๊ณ„์ • ํ™œ์„ฑํ™”]
    H -->|์‹คํŒจ| J[์žฌ์‹œ๋„ ์š”์ฒญ]
    I --> K([์ข…๋ฃŒ])
    J --> G

ํ™œ๋™ ๋‹ค์ด์–ด๊ทธ๋žจ์€ ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฌธ์„œํ™”ํ•˜๊ณ , ๊ฐœ๋ฐœํŒ€๊ณผ ๋น„์ฆˆ๋‹ˆ์Šค ํŒ€ ๊ฐ„์˜ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ ์›ํ™œํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

์ƒํƒœ ๋จธ์‹  ๋‹ค์ด์–ด๊ทธ๋žจ (State Machine Diagram)

์ƒํƒœ ๋จธ์‹  ๋‹ค์ด์–ด๊ทธ๋žจ

์ƒํƒœ ๋จธ์‹  ๋‹ค์ด์–ด๊ทธ๋žจ(State Machine Diagram)์€ ๊ฐ์ฒด(Object)๋‚˜ ์‹œ์Šคํ…œ(System)์˜ ์ƒํƒœ ๋ณ€ํ™”(State Changes)๋ฅผ ์‹œ๊ฐ„์˜ ํ๋ฆ„์— ๋”ฐ๋ผ ์‹œ๊ฐํ™”ํ•œ ๋‹ค์ด์–ด๊ทธ๋žจ์ด์—์š”.

ํŠน์ • ๊ฐ์ฒด๊ฐ€ โ€œ์–ด๋–ค ์‚ฌ๊ฑด(Event)โ€์— ์˜ํ•ด ์–ด๋–ค ์ƒํƒœ(State)๋กœ ์ „์ด(Transition)๋˜๋Š”์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์—, ์‹œ์Šคํ…œ์˜ ๋ผ์ดํ”„์‚ฌ์ดํด(Lifecycle)์„ ๋ถ„์„ํ•˜๊ณ  ์˜ˆ์ธกํ•˜๋Š” ๋ฐ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ:

  • ์ƒํƒœ(States): ๊ฐ์ฒด๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์กฐ๊ฑด
  • ์ „์ด(Transitions): ํ•œ ์ƒํƒœ์—์„œ ๋‹ค๋ฅธ ์ƒํƒœ๋กœ์˜ ๋ณ€ํ™”
  • ์ด๋ฒคํŠธ(Events): ์ „์ด๋ฅผ ์œ ๋ฐœํ•˜๋Š” ํŠธ๋ฆฌ๊ฑฐ

์‹ค๋ฌด ํ™œ์šฉ ์˜ˆ์‹œ:

์˜จ๋ผ์ธ ์ฃผ๋ฌธ ์‹œ์Šคํ…œ์—์„œ ์ฃผ๋ฌธ ์ƒํƒœ์˜ ๋ณ€ํ™”๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ:

stateDiagram-v2
    [*] --> ๋Œ€๊ธฐ
    ๋Œ€๊ธฐ --> ์ฒ˜๋ฆฌ์ค‘ : ์ฃผ๋ฌธ ์ ‘์ˆ˜
    ์ฒ˜๋ฆฌ์ค‘ --> ๋ฐฐ์†ก์ค‘ : ์ถœ๊ณ 
    ๋ฐฐ์†ก์ค‘ --> ์™„๋ฃŒ : ๋ฐฐ์†ก ์™„๋ฃŒ
    ๋Œ€๊ธฐ --> ์ทจ์†Œ๋จ : ์ทจ์†Œ
    ์ฒ˜๋ฆฌ์ค‘ --> ์ทจ์†Œ๋จ : ์ทจ์†Œ
    ์™„๋ฃŒ --> [*]
    ์ทจ์†Œ๋จ --> [*]

์ƒํƒœ ๋จธ์‹  ๋‹ค์ด์–ด๊ทธ๋žจ์„ ํ†ตํ•ด ๊ฐ์ฒด์˜ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์™€ ์ „์ด๋ฅผ ๋ช…ํ™•ํžˆ ์ •์˜ํ•˜์—ฌ, ์‹œ์Šคํ…œ์˜ ๋™์ž‘์„ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ (Sequence Diagram)

์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ

์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ(Sequence Diagram)์€ ์‹œ๊ฐ„์˜ ํ๋ฆ„์— ๋”ฐ๋ผ ๊ฐ์ฒด ๊ฐ„์˜ ๋ฉ”์‹œ์ง€ ๊ตํ™˜ ๊ณผ์ •์„ ํ‘œํ˜„ํ•˜๋Š” UML ์ƒํ˜ธ์ž‘์šฉ(Interaction) ๋‹ค์ด์–ด๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.

์ฆ‰, ํŠน์ • ์‹œ๋‚˜๋ฆฌ์˜ค(์˜ˆ: ๋กœ๊ทธ์ธ, ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ, ๊ฒฐ์ œ ๋“ฑ)์—์„œ โ€œ๋ˆ„๊ฐ€ ์–ธ์ œ ๋ˆ„๊ตฌ์—๊ฒŒ ์–ด๋–ค ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋ƒˆ๋Š”๊ฐ€โ€๋ฅผ ์‹œ๊ฐ„ ์ˆœ์„œ๋Œ€๋กœ ์‹œ๊ฐํ™”ํ•˜๋Š” ๋‹ค์ด์–ด๊ทธ๋žจ์ด์—์š”.

์†Œํ”„ํŠธ์›จ์–ด์˜ ๋™์  ํ–‰์œ„(Behavioral Aspect)๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ณด์—ฌ์ฃผ๋ฉฐ, API ํ˜ธ์ถœ ๊ตฌ์กฐ๋‚˜ ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹  ํ๋ฆ„์„ ์„ค๊ณ„ํ•  ๋•Œ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ:

  • ๊ฐ์ฒด(Objects): ์ƒํ˜ธ์ž‘์šฉ์— ์ฐธ์—ฌํ•˜๋Š” ์ธ์Šคํ„ด์Šค
  • ๋ฉ”์‹œ์ง€ ์‹œํ€€์Šค(Message Sequences): ์‹œ๊ฐ„ ์ˆœ์„œ์— ๋”ฐ๋ฅธ ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ

์‹ค๋ฌด ํ™œ์šฉ ์˜ˆ์‹œ:

์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด:

sequenceDiagram
    participant User as ๐Ÿง‘ User
    participant UI as ๐Ÿ’ป Web UI
    participant Auth as ๐Ÿ” AuthService
    participant DB as ๐Ÿ—„๏ธ Database

    User->>UI: ๋กœ๊ทธ์ธ ํด๋ฆญ
    UI->>Auth: ์ž๊ฒฉ ์ฆ๋ช…(์ด๋ฉ”์ผ, ๋น„๋ฐ€๋ฒˆํ˜ธ) ์ „์†ก
    Auth->>DB: ์‚ฌ์šฉ์ž ์กฐํšŒ ์ฟผ๋ฆฌ ์‹คํ–‰
    DB-->>Auth: ์‚ฌ์šฉ์ž ์ •๋ณด ๋ฐ˜ํ™˜
    Auth-->>UI: ์ธ์ฆ ๊ฒฐ๊ณผ (์„ฑ๊ณต/์‹คํŒจ)
    UI-->>User: ๋กœ๊ทธ์ธ ๊ฒฐ๊ณผ ํ‘œ์‹œ

์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์€ API ์„ค๊ณ„, ๋””๋ฒ„๊น…, ์‹œ์Šคํ…œ ํ†ตํ•ฉ ์‹œ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค ๊ฐ„์˜ ํ†ต์‹  ํ๋ฆ„์„ ์ดํ•ดํ•˜๋Š” ๋ฐ ํšจ๊ณผ์ ์ด์—์š”.

์ƒํ˜ธ์ž‘์šฉ ๋‹ค์ด์–ด๊ทธ๋žจ (Interaction Diagram)

์ƒํ˜ธ์ž‘์šฉ ๋‹ค์ด์–ด๊ทธ๋žจ

์ƒํ˜ธ์ž‘์šฉ ๋‹ค์ด์–ด๊ทธ๋žจ(Interaction Diagram)์€ ๊ฐ์ฒด ๊ฐ„์˜ ๋ฉ”์‹œ์ง€ ๊ตํ™˜๊ณผ ์ด๋ฒคํŠธ ํ๋ฆ„์„ ์‹œ๊ฐ„ ์ˆœ์„œ๋Œ€๋กœ ํ‘œํ˜„ํ•˜๋Š” UML ๋‹ค์ด์–ด๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.

์ฆ‰, โ€œ์–ด๋–ค ๊ฐ์ฒด๊ฐ€ ์–ธ์ œ, ๋ˆ„๊ตฌ์—๊ฒŒ ๋ฌด์—‡์„ ์š”์ฒญํ•˜๊ณ , ์–ด๋–ค ์‘๋‹ต์„ ๋ฐ›๋Š”๊ฐ€โ€๋ฅผ ๋ช…ํ™•ํžˆ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ์˜ ๋™์  ํ–‰์œ„(Behavior)๋ฅผ ์ดํ•ดํ•˜๊ณ , ์‹ค์ œ ์‹คํ–‰ ํ๋ฆ„์„ ์‹œ๊ฐ์ ์œผ๋กœ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ:

  • ๊ฐ์ฒด(Objects): ์„œ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ์ฃผ์ฒด
  • ๋ฉ”์‹œ์ง€(Messages): ๊ฐ์ฒด ๊ฐ„ ํ˜ธ์ถœ์ด๋‚˜ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ
  • ์ƒ๋ช…์„ (Lifeline): ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜๋Š” ์‹œ๊ฐ„์˜ ํ๋ฆ„
  • ํ™œ์„ฑ ๊ตฌ๊ฐ„(Activation Bar): ๊ฐ์ฒด๊ฐ€ ์‹ค์ œ๋กœ ๋™์ž‘ ์ค‘์ธ ๊ธฐ๊ฐ„

์‹ค๋ฌด ํ™œ์šฉ ์˜ˆ์‹œ:

๋กœ๊ทธ์ธ ํ”„๋กœ์„ธ์Šค์˜ ์ƒํ˜ธ์ž‘์šฉ ๋‹ค์ด์–ด๊ทธ๋žจ:

sequenceDiagram
    participant User as ๐Ÿง‘ ์‚ฌ์šฉ์ž
    participant Browser as ๐ŸŒ ๋ธŒ๋ผ์šฐ์ €
    participant Server as ๐Ÿ–ฅ๏ธ ์„œ๋ฒ„
    participant DB as ๐Ÿ—„๏ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

    User->>Browser: ๋กœ๊ทธ์ธ ์ •๋ณด ์ž…๋ ฅ (email, password)
    Browser->>Server: POST /api/login ์š”์ฒญ
    Server->>DB: ์‚ฌ์šฉ์ž ์ธ์ฆ ์ฟผ๋ฆฌ ์‹คํ–‰ (SELECT * FROM users)
    DB-->>Server: ์‚ฌ์šฉ์ž ์ •๋ณด ๋ฐ˜ํ™˜
    Server-->>Browser: ๋กœ๊ทธ์ธ ์„ฑ๊ณต ์‘๋‹ต (JWT ํ† ํฐ)
    Browser-->>User: ๋กœ๊ทธ์ธ ์™„๋ฃŒ ๋ฐ ๋Œ€์‹œ๋ณด๋“œ ์ด๋™

์ด ๋‹ค์ด์–ด๊ทธ๋žจ์„ ํ†ตํ•ด โ€œ์š”์ฒญ์ด ์–ด๋–ป๊ฒŒ ์ „๋‹ฌ๋˜๊ณ , ์–ด๋””์„œ ๊ฒ€์ฆ๋˜๋ฉฐ, ์–ด๋–ค ์ˆœ์„œ๋กœ ์‘๋‹ต์ด ์˜ค๋Š”์ง€โ€๋ฅผ ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์‹ค์ œ ์‹œ์Šคํ…œ ํ†ต์‹  ํ๋ฆ„, API ์„ค๊ณ„, ๋น„๋™๊ธฐ ํ˜ธ์ถœ ๊ตฌ์กฐ ๋“ฑ์„ ๋ฌธ์„œํ™”ํ•  ๋•Œ ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๋‹ค์ด์–ด๊ทธ๋žจ (Communication Diagram)

์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๋‹ค์ด์–ด๊ทธ๋žจ

์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๋‹ค์ด์–ด๊ทธ๋žจ(Communication Diagram)์€ ๊ฐ์ฒด ๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ(interaction)์„ ํ‘œํ˜„ํ•œ๋‹ค๋Š” ์ ์—์„œ ์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ(Sequence Diagram)๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์ด ์‹œ๊ฐ„์˜ ํ๋ฆ„(time ordering)์— ์ดˆ์ ์„ ๋งž์ถ˜๋‹ค๋ฉด, ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๋‹ค์ด์–ด๊ทธ๋žจ์€ ๊ฐ์ฒด ๊ฐ„ ๊ตฌ์กฐ์  ๊ด€๊ณ„(structural relationship)์— ๋” ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค.

์ฆ‰, โ€œ๋ˆ„๊ฐ€ ๋ˆ„๊ตฌ์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ณ , ์–ด๋–ค ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š”๊ฐ€โ€๋ฅผ ๋„คํŠธ์›Œํฌ ํ˜•ํƒœ๋กœ ์‹œ๊ฐํ™”ํ•˜๋Š” ๋‹ค์ด์–ด๊ทธ๋žจ์ด์—์š”.

์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ:

  • ๊ฐ์ฒด(Objects): ํ†ต์‹ ์˜ ์ฃผ์ฒด
  • ๋งํฌ(Links): ๊ฐ์ฒด ๊ฐ„ ์—ฐ๊ฒฐ ๊ด€๊ณ„
  • ๋ฉ”์‹œ์ง€(Messages): ์ƒํ˜ธ์ž‘์šฉ์„ ๋‚˜ํƒ€๋‚ด๋Š” ํ˜ธ์ถœ (๋ฒˆํ˜ธ๋กœ ์ˆœ์„œ ํ‘œ์‹œ)

์‹ค๋ฌด ํ™œ์šฉ ์˜ˆ์‹œ:

์ฃผ๋ฌธ ์ฒ˜๋ฆฌ ๊ณผ์ •์˜ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๋‹ค์ด์–ด๊ทธ๋žจ:

graph LR
    A[๊ณ ๊ฐ Client]
    B[์ฃผ๋ฌธ ์„œ๋น„์Šค OrderService]
    C[์žฌ๊ณ  ์„œ๋น„์Šค InventoryService]
    D[๊ฒฐ์ œ ์„œ๋น„์Šค PaymentService]

    A -- 1. ์ฃผ๋ฌธ ์š”์ฒญ --> B
    B -- 2. ์žฌ๊ณ  ํ™•์ธ ์š”์ฒญ --> C
    C -- 3. ์žฌ๊ณ  ์ƒํƒœ ๋ฐ˜ํ™˜ --> B
    B -- 4. ๊ฒฐ์ œ ์ฒ˜๋ฆฌ ์š”์ฒญ --> D
    D -- 5. ๊ฒฐ์ œ ์Šน์ธ ๊ฒฐ๊ณผ --> B
    B -- 6. ์ฃผ๋ฌธ ์™„๋ฃŒ ์‘๋‹ต --> A

๊ฐ ํ™”์‚ดํ‘œ์—๋Š” ํ˜ธ์ถœ ์ˆœ์„œ๊ฐ€ ์ˆซ์ž๋กœ ํ‘œ์‹œ๋˜๋ฉฐ,
์ด ๋ฒˆํ˜ธ๋ฅผ ํ†ตํ•ด ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๋‹ค์ด์–ด๊ทธ๋žจ์€ โ€œ๊ฐ์ฒด ๊ฐ„ ๊ด€๊ณ„ ๊ตฌ์กฐ๋ฅผ ๋™์‹œ์— ๋ณด๊ณ  ์‹ถ์„ ๋•Œโ€ ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์‹ค๋ฌด์—์„œ UML ๋‹ค์ด์–ด๊ทธ๋žจ ํ™œ์šฉํ•˜๊ธฐ

์–ด๋–ค ๋‹ค์ด์–ด๊ทธ๋žจ์„ ์–ธ์ œ ์‚ฌ์šฉํ• ๊นŒ์š”?

๊ฐ UML ๋‹ค์ด์–ด๊ทธ๋žจ์€ ํŠน์ • ๋ชฉ์ ์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒํ™ฉ์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ด์š”.

ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ ๋‹จ๊ณ„:

  • ์œ ์Šค์ผ€์ด์Šค ๋‹ค์ด์–ด๊ทธ๋žจ: ์š”๊ตฌ์‚ฌํ•ญ ์ˆ˜์ง‘
  • ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ: ์‹œ์Šคํ…œ ๊ตฌ์กฐ ์„ค๊ณ„

์ƒ์„ธ ์„ค๊ณ„ ๋‹จ๊ณ„:

  • ์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ: ์ƒํ˜ธ์ž‘์šฉ ํ๋ฆ„ ์ •์˜
  • ํ™œ๋™ ๋‹ค์ด์–ด๊ทธ๋žจ: ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค ๋ชจ๋ธ๋ง
  • ์ƒํƒœ ๋จธ์‹  ๋‹ค์ด์–ด๊ทธ๋žจ: ๊ฐ์ฒด ์ƒํƒœ ์ •์˜

๊ตฌํ˜„ ๋ฐ ๋ฐฐํฌ ๋‹จ๊ณ„:

  • ์ปดํฌ๋„ŒํŠธ ๋‹ค์ด์–ด๊ทธ๋žจ: ๋ชจ๋“ˆ ๊ตฌ์กฐ ์ •์˜
  • ๋ฐฐํฌ ๋‹ค์ด์–ด๊ทธ๋žจ: ์ธํ”„๋ผ ๊ตฌ์„ฑ

UML ๋„๊ตฌ ์ถ”์ฒœ

์‹ค๋ฌด์—์„œ UML ๋‹ค์ด์–ด๊ทธ๋žจ์„ ๊ทธ๋ฆด ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋“ค์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • draw.io: ๋ฌด๋ฃŒ์ด๋ฉฐ ์‚ฌ์šฉ์ด ๊ฐ„ํŽธํ•จ
  • Lucidchart: ํ˜‘์—… ๊ธฐ๋Šฅ์ด ์šฐ์ˆ˜ํ•จ
  • PlantUML: ์ฝ”๋“œ ๊ธฐ๋ฐ˜ ๋‹ค์ด์–ด๊ทธ๋žจ ์ƒ์„ฑ
  • StarUML: ์ „๋ฌธ์ ์ธ UML ๋ชจ๋ธ๋ง ๋„๊ตฌ

ํŠนํžˆ PlantUML์€ ํ…์ŠคํŠธ๋กœ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์–ด, ๋ฒ„์ „ ๊ด€๋ฆฌ๊ฐ€ ์‰ฝ๊ณ  ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ์นœ์ˆ™ํ•ฉ๋‹ˆ๋‹ค.

UML๋กœ ๋” ๋‚˜์€ ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„ํ•˜๊ธฐ

UML ๋‹ค์ด์–ด๊ทธ๋žจ์€ ๋‹จ์ˆœํ•œ ๊ทธ๋ฆผ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋ณต์žกํ•œ ์‹œ์Šคํ…œ์„ ๋ช…ํ™•ํžˆ ํ‘œํ˜„ํ•˜๊ณ , ํŒ€์›๋“ค๊ณผ ํšจ๊ณผ์ ์œผ๋กœ ์†Œํ†ตํ•˜๋ฉฐ, ์œ ์ง€๋ณด์ˆ˜ ๊ฐ€๋Šฅํ•œ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“œ๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์˜ˆ์š”.

์ด ๊ธ€์—์„œ ์†Œ๊ฐœํ•œ ๋‹ค์–‘ํ•œ UML ๋‹ค์ด์–ด๊ทธ๋žจ ์ข…๋ฅ˜๋ฅผ ์ดํ•ดํ–ˆ๋‹ค๋ฉด, ์ด์ œ ์‹ค์ œ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•ด๋ณผ ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค. ์ฒ˜์Œ๋ถ€ํ„ฐ ์™„๋ฒฝํ•œ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ๊ทธ๋ฆฌ๋ ค๊ณ  ํ•˜์ง€ ๋งˆ์„ธ์š”. ์ž‘์€ ๋ถ€๋ถ„๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ์ ์ฐจ ํ™•์žฅํ•ด๋‚˜๊ฐ€๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

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

๊ถ๊ธˆํ•œ ์ ์ด ์žˆ๊ฑฐ๋‚˜ ์‹ค๋ฌด์—์„œ UML์„ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ๊ณต์œ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์„ธ์š”. ํ•จ๊ป˜ ๋ฐฐ์šฐ๊ณ  ์„ฑ์žฅํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ๋งŒ๋“ค์–ด๊ฐ‘์‹œ๋‹ค!

References

UML ๋‹ค์ด์–ด๊ทธ๋žจ ์ข…๋ฅ˜ ์™„๋ฒฝํžˆ ์ดํ•ดํ•ด๋ณด์ž