<aside> π‘
λμμΈν¨ν΄ : β GoF (gang of four, 1994λ 4μ μμ μν΄ 23κ°μ§ λμμΈν¨ν΄μ΄ μκ°λ¨) β μ€λ¦¬μ§λ νμ΄λ°μ΄μ ν¨ν΄ μ΄λΌ λΆλ¦Ό
Clean Architecture (Robert C. Martin, 2012)
κ°μ₯ λ°κΉ₯ Frameworks & Drivers (μΈλΆ λꡬ, DB, UI) Interface Adapters (컨νΈλ‘€λ¬, κ²μ΄νΈμ¨μ΄) Application Use Cases (λΉμ¦λμ€ μ μ€μΌμ΄μ€) κ°μ₯ μμͺ½ Entities (ν΅μ¬ λΉμ¦λμ€ κ·μΉ)
β» μμ‘΄μ±μ νμ μμͺ½μΌλ‘λ§ νλ₯Έλ€
Hexagonal Architecture (Alistair Cockburn)
Core Domain
β
Ports (μΈν°νμ΄μ€)
β
Adapters (ꡬν체 β DB, CLI, API λ±)
OS 컀λ κ³μΈ΅ (κ°μ₯ μ μ¬)
L6 Applications (μ¬μ©μ νλ‘κ·Έλ¨) L5 System Libraries (libc, Win32 API) L4 System Call Interface L3 Kernel Subsystems (νλ‘μΈμ€, νμΌμμ€ν , λ€νΈμν¬, λλ°μ΄μ€) L2 HAL (νλμ¨μ΄ μΆμν) L1 Firmware/BIOS L0 Hardware
μ΄ νλ‘μ νΈμ κ°μ₯ κ°κΉμ΄ 건 OS 컀λ λͺ¨λΈμ λλ€. "μμ€ν μλν λꡬ"λκΉ λΉμ°ν©λλ€.
ν΅ν©μν€ν μ³ (os+hexagonal+clean arch)
Total Architecture β ν΅ν© μν€ν μ² μ°μ체
OS κ³μΈ΅ ν₯μ¬κ³ λ ν΄λ¦° μν€ν
μ²
ββββββ ββββββββ βββββββββββββ
H0 Domain L6 loop peek Core Domain Entities
H1 Application L6 loop up/down Services Use Cases
H2 Presentation L6 loop up/down Ports Interface Adapters
H3 Human/UI L6 loop stt/end Adapters Frameworks & Drivers
βββββββ Application Boundary βββββββ
L6 Infra Service App Layer Β· Β·
L5 Integration Libraries Β· Β·
L4 OS Abstraction Sys Calls Β· Β·
L3 Diagnostic Kernel Β· Β·
L2 HW Abstraction HAL Β· Β·
L1 HW Integration Firmware/BIOS Β· Β·
L1 HW HW Β· Β·
βββββββ Global Base βββββββ
B0 Foundation ... Β· Β·
μ΄ νλ‘μ νΈλ μλμμ μμν΄μ μλ‘ μλΌλ ꡬ쑰μ λλ€. μ§κΈμ Infrastructure μμμ΄ μ£Όλ ₯μ΄κ³ , Domain β Delivery λ°©ν₯μΌλ‘ νμ₯ μ μ¬λ ₯μ΄ μμ΅λλ€.
Zone-Tier μ²΄κ³ (Z0~Z9, μ΄ 42 Tier)
λ²νΈ 체κ³: Z(zone).T(tier) β Zone λ¨μλ‘ λ 립 νμ₯ κ°λ₯, μ Tier μΆκ° μ κΈ°μ‘΄ λ²νΈ λΆλ³.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
H κ³μΈ΅: μλ°©ν₯ μμ‘΄ (Protocol/DI, λμ κ²°ν©)
"L6 λ΄λΆμ νλν 루ν"
λ°μ΄ν° νλ¦: H3(μμ) β H2 β H1 β H0(μ μ ) β H1 β H2 β H3(μ’
λ£)
μμ‘΄μ± λ°©ν₯: H3 β H2 β H1 β H0 β (λͺ¨λκ° H0μ ν₯ν¨)
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β H3 Human/UI (μ΄λν° + νλ μμν¬) β
β L6 Loop: μμμ /μ’
λ£μ β
β β
β μν : μ¬μ©μ/μΈλΆμ 물리μ μ μ . H2 Portλ₯Ό μΈνλΌλ‘ ꡬν, β
β λͺ¨λ μμ‘΄μ±μ 쑰립νλ Composition Root β
β βββββββββββββββββββββββββββββββββββββββββββββ β
β H3.0 Adapter Port ꡬν체 (L4-L6 μΈνλΌ μ¬μ©) β
β H3.1 CLI λͺ
λ Ήν μ§μ
μ , μΈμ νμ± β
β H3.2 GUI Tkinter/μΉ νλ μμν¬ λ°μΈλ© β
β H3.3 API REST/gRPC μλν¬μΈνΈ (λ―Έλ) β
β H3.4 Composer Composition Root (DI 쑰립 곡μ₯) β
β β
β suffix: -Adapter / -Controller / -View / -Composer β
β μ½λ©: Protocol ꡬν + μμ±μ μ£Όμ
쑰립 β
β μμ‘΄: B0, H2(Port ꡬν), H0(νμ
μ°Έμ‘°), L4-L6(μΈνλΌ μ¬μ©) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β H2 Presentation (ν¬νΈ + μΈν°νμ΄μ€ μ΄λν°) β
β L6 Loop: μν/νν λ³ν μ§μ β
β β
β μν : Domainκ³Ό μΈλΆ μΈκ³ μ¬μ΄μ "λ²μκΈ°". β
β Port Protocolμ μ μνκ³ , λ°μ΄ν° νμμ λ³ν β
β βββββββββββββββββββββββββββββββββββββββββββββ β
β H2.0 InboundPort ꡬλ ν¬νΈ (μ±μ΄ μ 곡νλ μΈν°νμ΄μ€) β
β H2.1 OutboundPort νΌλ ν¬νΈ (μ±μ΄ μΈλΆμ μꡬνλ μΈν°νμ΄μ€) β
β H2.2 DTO Data Transfer Object (κ³μΈ΅ κ° λ°μ΄ν° μΊ‘μ) β
β H2.3 Mapper Domain β μΈλΆ νμ λ³νκΈ° β
β β
β suffix: -Port / -DTO / -Mapper β
β μ½λ©: typing.Protocol λλ abc.ABCλ‘ μ μλ§ β
β μμ‘΄: B0, H0(λλ©μΈ νμ
μ°Έμ‘°), H1(μ μ€μΌμ΄μ€ μκ·Έλμ² μ°Έμ‘°) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β H1 Application (μ μ€μΌμ΄μ€ / μλΉμ€) β
β L6 Loop: μν/νν μ‘°μ¨ μ§μ β
β β
β μν : "무μμ ν κ²μΈκ°"λ₯Ό μ μ. Domain λ‘μ§μ μ‘°μ¨νλ β
β "μ΄λ»κ²"λ H2 Portμ μμ β
β βββββββββββββββββββββββββββββββββββββββββββββ β
β H1.0 Command μ°κΈ° μ μ€μΌμ΄μ€ (μν λ³κ²½) β
β H1.1 Query μ½κΈ° μ μ€μΌμ΄μ€ (μ‘°ν) β
β H1.2 AppService λ€λ¨κ³ μ μ€μΌμ΄μ€ μ‘°ν© β
β β
β suffix: -UseCase / -Command / -Query / -AppService β
β μ½λ©: __init__μμ Port Protocol νμ
ννΈλ‘ μ£Όμ
λ°μ β
β μμ‘΄: B0, H0(μν°ν°+λλ©μΈμλΉμ€ μ¬μ©) β
β μ£Όμ: H2 Portλ₯Ό μ¬μ©νλ, importνμ§ μμ! β
β β __init__ νλΌλ―Έν°μ νμ
ννΈλ‘λ§ μ°Έμ‘° (Protocol λνμ΄ν) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β H0 Domain (ν΅μ¬ λΉμ¦λμ€ κ·μΉ) β
β L6 Loop: μ μ (Peek) β
β β
β μν : κΈ°μ μ λ
립μ μΈ λΉμ¦λμ€ μ§μ€. POPO(Plain Old Python Object) β
β FastAPI, SQLAlchemy, Tkinter λ± μΈλΆ ν¨ν€μ§ import μ λ κΈμ§β
β βββββββββββββββββββββββββββββββββββββββββββββ β
β H0.0 Entity μλ³μ κΈ°λ° λΉμ¦λμ€ κ°μ²΄ β
β H0.1 ValueObject λΆλ³ κ° κ°μ²΄ β
β H0.2 DomainSvc μν°ν° κ° λΉμ¦λμ€ κ·μΉ β
β H0.3 DomainEvent λλ©μΈ μν λ³κ²½ μ΄λ²€νΈ β
β β
β suffix: -Entity / -Value / -DomainService / -Event β
β μ½λ©: μμ νμ΄μ¬λ§. dataclass, enum, νμ€ λΌμ΄λΈλ¬λ¦¬ β
β μμ‘΄: B0λ§. L κ³μΈ΅ μ λ κΈμ§, H1-H3 μ λ κΈμ§ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββ Application Boundary (μμ© κ²½κ³) βββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
L κ³μΈ΅: μλ°©ν₯ μμ‘΄ (μ§μ import, μ μ κ²°ν©)
"νμ κ³μΈ΅μμ μμμ΄ κ³΅κΈλλ μμ§ νμ΄νλΌμΈ"
μμ‘΄μ± λ°©ν₯: L6 β L5 β L4 β L3 β L2 β B0 (μλλ‘λ§)
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β L6 Infra Service (μΈνλΌ μλΉμ€ μ‘°μ¨) β
β OS μν€ν
μ²: Application Layer β
β β
β μν : λ€μμ L4/L5 μμμ μ‘°ν©νλ μΈνλΌ λΉμ¦λμ€ λ‘μ§ β
β βββββββββββββββββββββββββββββββββββββββββββββ β
β L6.0 Install μννΈμ¨μ΄ μ€μΉ μ€μΌμ€νΈλ μ΄μ
β
β L6.1 Configure νκ²½ κ΅¬μ± (κ²½λ‘/λ³μ/κΆν λ³΅ν© μΈν
) β
β L6.2 Resolve μμ‘΄μ± ν΄μ (ensure_installed, get_version) β
β L6.3 Build λΉλ/ν¨ν€μ§ (PyInstaller) β
β β
β suffix: -Orchestrator / -Service β
β μ½λ©: from L4/L5 import (μ§μ ) β
β μμ‘΄: B0, L2-L5 β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β L5 Integration (μΈλΆ λꡬ 1:1 λν) β
β OS μν€ν
μ²: System Libraries β
β β
β μν : νλμ μΈλΆ λꡬ/μλΉμ€λ₯Ό νμ΄μ¬μΌλ‘ λν β
β βββββββββββββββββββββββββββββββββββββββββββββ β
β L5.0 PackageMgr pip, winget, conda, vcpkg λνΌ β
β L5.1 SystemTool netsh λνΌ β
β L5.2 DevTool git, claude-cli, antigravity λνΌ β
β L5.3 AIService ollama, gemini ν΄λΌμ΄μΈνΈ β
β L5.4 PlatformAPI notion ν΄λΌμ΄μΈνΈ β
β β
β suffix: -Client / -Wrapper β
β μ½λ©: from L4 import (μ§μ ) β
β μμ‘΄: B0, L2-L4 β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β L4 OS Abstraction (OS μμ μΆμν) β
β OS μν€ν
μ²: System Calls β
β β
β μν : λ¨μΌ OS μμμ λν μμμ μ κ·Ό β
β βββββββββββββββββββββββββββββββββββββββββββββ β
β L4.0 Execution λͺ
λ Ή μ€ν (subprocess) β
β L4.1 Process νλ‘μΈμ€ μλͺ
μ£ΌκΈ° β
β L4.2 FileAccess νμΌ/λλ ν 리 CRUD β
β L4.3 Environment νκ²½λ³μ, λ μ§μ€νΈλ¦¬ β
β L4.4 NetPrimitive URL λ€μ΄λ‘λ, HTTP β
β β
β suffix: -Executor / -System β
β μ½λ©: from L3 import (μ§μ ), os/subprocess/pathlib μ¬μ© β
β μμ‘΄: B0, L2-L3 β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β L3 Diagnostic (μ§λ¨/κ΄μΈ‘) β
β OS μν€ν
μ²: Kernel β
β β
β μν : μμ€ν
κ΄μ°°. λ‘κΉ
/μΆμ /μλ¬μ²λ¦¬ β
β βββββββββββββββββββββββββββββββββββββββββββββ β
β L3.0 Error JErrorSystem + Error* μμΈ κ³μΈ΅ β
β L3.1 Logging JLogger (λ‘κ·Έ, νμ΄λ°, νλ‘νμΌλ§) β
β L3.2 Tracing JTracer (ν¨μ νΈμΆ μΆμ ) β
β L3.3 Pooling JThreadPooler (μ°λ λ ν) β
β β
β suffix: -er / -Error β
β μ½λ©: from B0 import (μ§μ ) β
β μμ‘΄: B0λ§ (L4 μ΄μ μ λ κΈμ§!) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β L2 HW Abstraction (νλμ¨μ΄ μΆμν) β
β OS μν€ν
μ²: HAL β
β β
β μν : νλμ¨μ΄ μ 보 μ‘°ν (GPU, CUDA, λλ°μ΄μ€) β
β βββββββββββββββββββββββββββββββββββββββββββββ β
β L2.0 Hardware IoSystem (GPU/CUDA μν μ‘°ν) β
β β
β suffix: -System β
β μ½λ©: from B0 import (μ§μ ), ctypes/subprocess β
β μμ‘΄: B0λ§ β
β μ°Έκ³ : L0(HW), L1(Firmware)μ Python λ²μ λ° β μλ΅ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββ Global Base (μ μ κΈ°λ°) ββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β B0 Foundation (κΈ°λ°) β
β β
β μν : μμ‘΄μ± μ λ‘. λͺ¨λ κ³μΈ΅μ΄ μ°Έμ‘°ν μ μλ μ μ κΈ°λ° β
β βββββββββββββββββββββββββββββββββββββββββββββ β
β B0.0 Primitive νμ
, μμ, Enum, NamedTuple β
β B0.1 Pattern SingletonBase, ErrorSingletonBase β
β B0.2 Runtime JFoundation (is_frozen, script_path, env) β
β B0.3 Processing TextUtils (ν
μ€νΈ/λ°μ΄ν° λ³ν) β
β β
β suffix: -Base / -Util / (μμ) β
β μ½λ©: Python νμ€ λΌμ΄λΈλ¬λ¦¬λ§. μΈλΆ ν¨ν€μ§ κΈμ§ β
β μμ‘΄: μμ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
L κ³μΈ΅ νμΌ: importλ₯Ό μ΄λ©΄ μμ‘΄ λμμ΄ μ¦μ 보μ (μ μ , λͺ
μμ )
H κ³μΈ΅ νμΌ: __init__μ νλΌλ―Έν°λ₯Ό 보면 "무μμ΄ νμνμ§"λ§ λ³΄μ (λμ , κ³μ½μ )
---
μμ‘΄μ± λ§€νΈλ¦μ€
ν(β)μ΄ μ΄(β)μ μμ‘΄ν μ μλκ°?
μμ‘΄ β B0 L2 L3 L4 L5 L6 β H0 H1 H2 H3
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
B0 Β· X X X X X β X X X X
L2 O Β· X X X X β X X X X
L3 O O Β· X X X β X X X X
L4 O O O Β· X X β X X X X
L5 O O O O Β· X β X X X X
L6 O O O O O Β· β X X X X
ββββ App Boundary βββββββββββββββββββββββββββββββββββββββββββββ
H0 O X X X X X β Β· X X X
H1 O X X X X X β O Β· X X
H2 O X X X X X β O O Β· X
H3 O X X O O O β O X O Β·
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
κ²°ν© λ°©μ β μ§μ import (μ μ ) β β β Protocol/DI (λμ ) β
λ§€νΈλ¦μ€ ν΄μ€
L κ³μΈ΅ (μ’μ μΌκ°ν): κΉ¨λν κ³λ¨ν. μλλ§ μ°Έμ‘°.
H β L κ΄κ³ (μ°ν μμ):
- H0~H2λ L κ³μΈ΅μ μ λ©΄ μ°¨λ¨ (X). POPO μμΉ.
- H3λ§ L4-L6 μ¬μ© κ°λ₯ (O). Adapterκ° μΈνλΌλ₯Ό μ¬μ©νλ μ μΌν λ€λ¦¬.
H λ΄λΆ (μ°ν μΌκ°ν):
- H0 β μ무κ²λ λͺ¨λ¦ (μ μ , Peek)
- H1 β H0λ§ (μ μ€μΌμ΄μ€κ° μν°ν° μ¬μ©)
- H2 β H0, H1 (Portκ° λλ©μΈ νμ
κ³Ό μ μ€μΌμ΄μ€ μκ·Έλμ² μ°Έμ‘°)
- H3 β H0(νμ
), H2(Port ꡬν). H1μ μ°Έμ‘° μ ν¨ β H3λ Portλ§ μκ³ , UseCaseλ Composerκ° μ‘°λ¦½
---
Uμ νλμΌλ‘ 보λ λ°μ΄ν° νλ¦ vs μμ‘΄ λ°©ν₯
μκ³μ΄ λ°μ΄ν° νλ¦ (β) μ½λ μμ‘΄ λ°©ν₯ (β)
βββββββββββββββββββββ βββββββββββββββββββββ
H3 βββ H2 βββ H1 βββ H0 H0 (μμ‘΄ μμ)
β β β β (peek) β β
β β β β H1 βββ H0
β β H1 βββ H0 β
β H2 βββ H1 H2 βββ H0, H1
H3 βββ H2 β
H3 βββ H0, H2, L4-L6
λ°μ΄ν°λ λ°κΉ₯βμβλ°κΉ₯μΌλ‘ μ볡 μμ‘΄μ νμ μμͺ½(H0)μ ν₯ν¨
H3μ΄ μμ/μ’
λ£μ H0μ΄ λ¬΄μμ‘΄ μ μ
μ΄κ²μ΄ "μμ‘΄μ± μμ μ μμ€"μ
λλ€: λ°μ΄ν°μ μ§μ
μ (H3)μ΄ κ°μ₯ λ§μ μμ‘΄μ±μ κ°μ§κ³ , λ°μ΄ν°μ μ μ (H0)μ΄ κ°μ₯ μ μ
μμ‘΄μ±μ κ°μ§λλ€. νλ¦μ λ°©ν₯κ³Ό μμ‘΄μ λ°©ν₯μ΄ μ λ°λ.
νμ΄μ¬μ C++κ³Ό λ¬λ¦¬ 'λμ νμ΄ν(Dynamic Typing)' μΈμ΄μ΄κΈ° λλ¬Έμ, μμ‘΄μ± μμ μ ꡬνν λ `abc` λͺ¨λ(μΆμ κΈ°μ ν΄λμ€)μ΄λ νμ΄μ¬ 3.8λΆν° λμ
λ `typing.Protocol`(λ νμ΄ν κΈ°λ° μΈν°νμ΄μ€)μ μ κ·Ή νμ©νλ κ²μ΄ ν΅μ¬μ
λλ€.
μ΄λ¬ν νμ΄μ¬λ§μ νΉμ§μ μλ²½νκ² λ
Ήμ¬λΈ μμ€ν
to UI ν΅ν© μν€ν
μ² κ°μ΄λλΌμΈμ
λλ€.
OS κ³μΈ΅ ν₯μ¬κ³ λ ν΄λ¦° μν€ν
μ²
ββββββ ββββββββ βββββββββββββ
H0 Domain L6 loop peek Core Domain Entities
H1 Application L6 loop up/down Services Use Cases
H2 Presentation L6 loop up/down Ports Interface Adapters
H3 Human/UI L6 loop stt/end Adapters Frameworks & Drivers
βββββββ Application Boundary βββββββ
L6 Infra Service App Layer Β· Β·
L5 Integration Libraries Β· Β·
L4 OS Abstraction Sys Calls Β· Β·
L3 Diagnostic Kernel Β· Β·
L2 HW Abstraction HAL Β· Β·
L1 HW Integration Firmware/BIOS Β· Β·
L1 HW HW Β· Β·
βββββββ Global Base βββββββ
B0 Foundation ... Β· Β·
[μν€ν μ² λͺ¨λΈ λΆμ° μ€λͺ ] μ΄ νλ 물리μ νλμ¨μ΄(L0)λΆν° μ¬μ©μ/μΈλΆ μ μ (H3)κΉμ§λ₯Ό κ΄ν΅νλ ν΅ν© μν€ν μ² λ©ν λͺ¨λΈμ λλ€. νμ΄μ¬ νκ²½μμ λ¨μΌ κ³μΈ΅μΌλ‘ μμ‘΄μ±μ κ΄λ¦¬νλ κ²μ΄ μλλΌ, λ°μ΄ν°μ μμ μ£ΌκΈ°μ μμ‘΄μ± μμ μ λ³Έμ§κΉμ§ ν΅μ νκΈ° μν **'λμΌ μμ‘΄μ± μμ€ν (Dual Dependency System)'**μ μ±ννλ©° λ€μ 4κ°μ§ ν΅μ¬ κ·μΉμ λ°λ¦ λλ€.
1. νλ¨ κΈ°λ° κ³μΈ΅ (L0 ~ L6 Infra): λ¨λ°©ν₯ νμ΄νλΌμΈκ³Ό μλ°©ν₯ μμ‘΄
os, sys, ctypes λ±μ λ΄μ₯ λͺ¨λμ΄λ C-extensionμ κ±°μ³ νμ΄μ¬ λ°νμ(L6)μΌλ‘ μμμ΄ κ³΅κΈλλ μμ§μ μ΄κ³ μ’
μμ μΈ νλ¦μ
λλ€.2. μλ¨ μμ© κ³μΈ΅ (H3 ~ H0): L6 λ΄λΆμ νλν 루ν (L6 Loop)
H3(μμ) β H2 β H1 β H0(μ μ , Peek) β H1 β H2 β H3(μ’
λ£) ννμ λΆκΈ°ν Uμ νλ ꡬ쑰λ₯Ό κ°μ§λλ€.3. μμ‘΄μ± μμ (Dependency Inversion)μ μμ€
4. λμΌ μμ‘΄μ± κ΅¬ν μ λ΅ (DIP / DI / IoC) λ° λ¦¬ν©ν°λ§ μμΉ
μλ¨μ μλ°©ν₯ μμ‘΄μ± κ΅¬μ‘°(H κ³μΈ΅)λ νμ΄μ¬ μνκ³μ μ μ°μ±μ κ·ΉλννκΈ° μν΄ μ€κ³λ κ²μΌλ‘, λ‘μ°λ 벨(L κ³μΈ΅)κ³Όλ μμ ν λ€λ₯Έ μ½λ ꡬν μ€ν¬μ μꡬν©λλ€.
DIP (λͺ©ν) / DI (μ€ν¬) / IoC (νκ²½)μ λΆλ¦¬:
λͺ©ν(DIP): H0(ν΅μ¬ λΉμ¦λμ€ λ‘μ§)κ° H3/L6(μΈλΆ μΈνλΌ ν¨ν€μ§)μ μ’ μλμ§ μκ² νλ€.
νκ²½(IoC): asyncioμ μ΄λ²€νΈ 루νλ FastAPI, Celery κ°μ νλ μμν¬κ° κ±°λν 'λΆκΈ°ν λμ€νμ μμ€ν
' μν μ νμ¬, λ΄ μ½λκ° λ₯λμ μΌλ‘ μΈλΆλ₯Ό λΆλ₯΄λ κ²μ΄ μλλΌ νλ μμν¬μ μν΄ μλμ μΌλ‘ νΈμΆλΉνκ² μ μ΄κΆμ λκΈ΄λ€.
μ½λ λ 벨μ 2μν μ λ΅:
L κ³μΈ΅ (μλ°©ν₯ μμ‘΄ ꡬν): λͺ¨λ λ 벨μ μ§μ μ μΈ importμ μμ(Inheritance)μ μ¬μ©. μλλ°© λͺ¨λμ λ°νμμ μ§μ λμ΄μμ **'μ μ κ²°ν©(κ°ν λκΈ°ν)'**μ μ΄λ£Έ.
H κ³μΈ΅ (μλ°©ν₯ μμ‘΄ ꡬν): νμ΄μ¬μ abc.ABC λλ typing.Protocol(λ νμ΄ν)μ νμ©νμ¬ μΆμνλ 'κ³μ½μ'λ§ μ μνκ³ , __init__ λ©μλλ₯Ό ν΅ν **'μμ±μ μ£Όμ
(Constructor Injection, DI)'**μ μ¬μ©. ꡬ체μ μΈ ν΄λμ€λ₯Ό νμΌ μλ¨μμ import νμ§ μκ³ , μΈλΆ(μνΈλ¦¬ν¬μΈνΈ)μμ λ°μ΄ λ£μ΄μ£Όλ **'λμ κ²°ν©(μ νμ μΈμ μ
)'**μ μ΄λ£Έ.
μ΄κΈ° 리ν©ν°λ§ μμ¬μ : νμ΄μ¬μ λͺ¨λ κ° μν μ°Έμ‘°(Circular Import) μ€λ₯κ° λ°μνκΈ° λ§€μ° μ¬μ΄ μΈμ΄μ
λλ€. μλ¨ μν€ν
μ²λ μ΄ 'μ νμ μΈμ μ
(DI)'μ μ±μ§μ νμ©ν΄ μμ‘΄μ±μ ν λ°©ν₯μΌλ‘ μ λ ¬νκ³ νλ¬κ·ΈμΈ κ΅μ²΄λ₯Ό κ°λ₯νκ² νλ €κ³ μ‘΄μ¬ν©λλ€. λ°λΌμ μ΅μ΄μ 리ν©ν°λ§ λ¨κ³λΆν° λ°λμ Protocolμ΄λ μΆμ ν΄λμ€λ‘ κ»λ°κΈ°λ₯Ό μΆμΆνκ³ , μμ±μ μ£Όμ
(__init__)μ μΌλμ λκ³ μ½λλ₯Ό λΆλ¦¬ν΄μΌλ§ λμ°ν μ€νκ²ν° import μ§μ₯μμ λ²μ΄λ λ―Έλλ₯Ό μ€λΉν μ μμ΅λλ€.
</aside>