
κΉνλΈ μ‘μ (GitHub Actions)μμ μ¬μ©λλ μ©μ΄μΈ μ‘μ (Action), μ€ν μ΄μ§(Stage), **νμ€ν¬(Task)**λ μννΈμ¨μ΄ κ°λ° λΌμ΄νμ¬μ΄ν΄μ μλννλ μν¬νλ‘μ°(Workflow)μ κ΅¬μ± μμλ₯Ό λνλ λλ€.
λ€λ§, GitHub Actionsμ 곡μ λ¬Έμμμλ μ£Όλ‘ μν¬νλ‘μ°(Workflow), μμ (Job), λ¨κ³(Step), **μ‘μ (Action)**μ΄λΌλ μ©μ΄λ₯Ό μ¬μ©νλ©°, **μ€ν μ΄μ§(Stage)**λ **νμ€ν¬(Task)**λ **μμ (Job)**μ΄λ **λ¨κ³(Step)**μ κ°μ λ€λ₯Έ κ΅¬μ± μμλ₯Ό μ€λͺ νκΈ° μν΄ λ μΌλ°μ μΌλ‘ μ¬μ©λλ μ©μ΄μ λλ€.
βοΈ μ£Όμ κ΅¬μ± μμ μ€λͺ
1. μ‘μ (Action)
- μ¬μ¬μ© κ°λ₯ν μ½λ λ¨μμ λλ€.
- μν¬νλ‘μ°μ **λ¨κ³(Step)**μμ μ€νν μ μλ κ°μ₯ μμ λ¨μμ μμ μ λλ€.
- μ체μ μΌλ‘ μ½λλ₯Ό μμ±νκ±°λ, GitHub Marketplaceμμ λ€λ₯Έ μ¬λμ΄ λ§λ μ‘μ μ κ°μ Έμ μ¬μ©ν μ μμ΅λλ€.
- μμ: μ½λλ₯Ό 체ν¬μμνλ actions/checkout, Node.js νκ²½μ μ€μ νλ actions/setup-node.
2. μμ (Job)
- **μν¬νλ‘μ° λ΄μμ μ€νλλ μΌλ ¨μ λ¨κ³(Steps)**μ λλ€.
- νλμ **λ¬λ(Runner)**μμ μ€νλλ©°, λ¬λλ κ°μ νκ²½(VM) λλ 컨ν μ΄λμΌ μ μμ΅λλ€.
- κΈ°λ³Έμ μΌλ‘ **λ³λ ¬(Parallel)**λ‘ μ€νλμ§λ§, needs ν€μλλ₯Ό μ¬μ©νμ¬ **μμ°¨μ (Sequential)**μΌλ‘ μ€νλλλ‘ μ’ μμ±μ μ€μ ν μ μμ΅λλ€.
- μΌλ°μ μΌλ‘ λΉλ, ν μ€νΈ, λ°°ν¬μ κ°μ ν° νμ€ν¬ λλ μ€ν μ΄μ§λ₯Ό λνλ λλ€.
3. λ¨κ³ (Step)
- μμ (Job) λ΄μμ μμλλ‘ μ€νλλ κ°λ³ λͺ λ Ήμ λλ€.
- λ¨κ³λ λ€μ λ κ°μ§ μ€ νλλ₯Ό μνν μ μμ΅λλ€.
- μ€ν¬λ¦½νΈ μ€ν(run): μ Έ λͺ λ Ή(μ: npm install, npm test)μ μ§μ μ€νν©λλ€.
- μ‘μ μ¬μ©(uses): μμμ μ€λͺ ν **μ‘μ (Action)**μ μ€νν©λλ€.
- λ¨κ³λ μμ λ΄μμ μ 보λ₯Ό 곡μ ν μ μμ΅λλ€.
ποΈ μ€ν μ΄μ§μ νμ€ν¬
GitHub Actionsμ 곡μμ μΈ μ©μ΄λ μλμ§λ§, CI/CD(μ§μμ ν΅ν©/μ§μμ λ°°ν¬) λ§₯λ½μμ λ€μκ³Ό κ°μ΄ μ΄ν΄ν μ μμ΅λλ€.
μ€ν μ΄μ§ (Stage)
- μΌλ°μ μΈ CI/CD νμ΄νλΌμΈμμ Build(λΉλ), Test(ν μ€νΈ), **Deploy(λ°°ν¬)**μ κ°μ΄, μ 체 νλ‘μΈμ€λ₯Ό λ Όλ¦¬μ μΌλ‘ ꡬλΆνλ ν° λ¨μλ₯Ό μλ―Έν©λλ€.
- GitHub Actionsμμλ μ΄λ¬ν μ€ν μ΄μ§μ κ°λ μ΄ λ³΄ν΅ μμ (Job) λ¨μλ‘ κ΅¬νλ©λλ€. μ¦, 'λΉλ' μ€ν μ΄μ§λ νλμ μμ μΌλ‘, 'ν μ€νΈ' μ€ν μ΄μ§λ λ€λ₯Έ μμ μΌλ‘ μ μλ μ μμ΅λλ€.
νμ€ν¬ (Task)
- μΌλ°μ μΌλ‘ μνν΄μΌ νλ ꡬ체μ μΈ νλμ μλ―Έν©λλ€.
- GitHub Actionsμμλ μμ (Job) μμ²΄κ° νλμ μ£Όμ νμ€ν¬λ‘ κ°μ£Όλκ±°λ, **λ¨κ³(Step)**κ° κ°λ³μ μΈ νμ€ν¬λ‘ κ°μ£Όλ μ μμ΅λλ€.
- μ: "μμ‘΄μ± μ€μΉ", "μ½λ μ»΄νμΌ", "λ¨μ ν μ€νΈ μ€ν" λ±μ λͺ¨λ λ¨κ³(Step)λ‘ κ΅¬νλλ νμ€ν¬μ λλ€.
μμ½
| μ©μ΄ | GitHub Actions κ΅¬μ± μμ | μ€λͺ |
| μ€ν μ΄μ§ (Stage) | μμ (Job) | λΉλ, ν μ€νΈ, λ°°ν¬μ κ°μ νλ‘μΈμ€μ μ£Όμ λ Όλ¦¬μ λ¨κ³μ λλ€. |
| νμ€ν¬ (Task) | μμ (Job) λλ λ¨κ³ (Step) | μνν΄μΌ νλ ꡬ체μ μΈ νλμ λνλ λλ€. |
| μ‘μ (Action) | μ‘μ (Action) | λ¨κ³ λ΄μμ μ¬μ©λλ μ¬μ¬μ© κ°λ₯ν μ½λ λ¨μμ λλ€. |
FastAPIμ λ°μ½λ μ΄ν°(Decorator) vs Springμ μ΄λ Έν μ΄μ (Annotation) μ°¨μ΄μ
FastAPIμ “λ°μ½λ μ΄ν°”μ Springμ “μ΄λ
Έν
μ΄μ
”μ κ²μΌλ‘ 보면 μν μ΄ λΉμ·ν΄ 보μ΄μ§λ§, λμ λ°©μκ³Ό μ² νμ΄ μμ ν λ€λ¦
λλ€.
μλμμ νκ΅ κ°λ°μ κ΄μ μμ κ°μ₯ μ΄ν΄νκΈ° μ½κ² λΉκ΅ν΄ λ릴κ²μ.
h2οΈβ£ 1. ν΅μ¬ μ°¨μ΄ μμ½
| κ°λ | ν¨μ μμ λΆμ΄λ λ°μ½λ μ΄ν° λ¬Έλ² | ν΄λμ€/λ©μλμ λΆμ΄λ λ©νλ°μ΄ν° κΈ°λ° μ΄λ Έν μ΄μ |
| λμ λ°©μ | ν¨μλ₯Ό λ€λ₯Έ ν¨μλ‘ κ°μΈμ κΈ°λ₯μ νμ₯ | 리νλ μ (Reflection) κΈ°λ°μΌλ‘ νλ μμν¬κ° λμμ ν΄μ |
| μ€ν μμ | μ½λ μ€ν μ μ¦μ μ μ©(λ°νμ) | μ£Όλ‘ μ»΄νμΌ·λ°νμμμ νλ μμν¬κ° μ½μ΄ μ²λ¦¬ |
| μ£Όμ μ¬μ© λͺ©μ | λΌμ°νΈ λ±λ‘, λ―Έλ€μ¨μ΄, κ²μ¦ λ± | μμ‘΄μ± μ£Όμ , AOP, μ€μ , λΌμ°ν λ± νλ μμν¬ κ΅¬μ± μμ |
| μΈμ΄ νΉμ± λ°μ | Pythonμ κ³ μ°¨ ν¨μ, λ°μ½λ μ΄ν° λ¬Έλ² νμ© | Java/Kotlinμ μ μ νμ + 리νλ μ κΈ°λ° λ©νλ°μ΄ν° μμ€ν |
h2οΈβ£ 2. FastAPIμ λ°μ½λ μ΄ν°
FastAPIμμ μ¬μ©νλ λ°μ½λ μ΄ν°λ μμ Python λ¬Έλ²μ λλ€.
β νΉμ§
- ν¨μμ κΈ°λ₯μ “κ°μΈμ” μΆκ°νλ ν¨ν΄
- FastAPIλ μ΄ λ¬Έλ²μ μ΄μ©ν΄ λΌμ°ν μ μ²λ¦¬ν¨
- λ°μ½λ μ΄ν°κ° ν¨μ κ°μ²΄ μ체λ₯Ό μ‘°μν¨
β μμ
μ¬κΈ°μ @app.get()μ
→ get_users ν¨μλ₯Ό FastAPI λΌμ°ν°μ μ§μ λ±λ‘νλ ν¨μμ
λλ€.
μ¦,
λ°μ½λ μ΄ν° = “ν¨μμ κΈ°λ₯μ μΆκ°νλ Python κΈ°λ₯”
h2οΈβ£ 3. Springμ μ΄λ Έν μ΄μ (Annotation)
Springμ μ΄λ Έν μ΄μ μ Java/Kotlinμ λ©νλ°μ΄ν° μμ€ν μ λλ€.
β νΉμ§
- μ£Όμμ²λΌ 보μ΄μ§λ§ μ€μ λ‘λ ν΄λμ€/λ©μλμ μλ―Έλ₯Ό μ μνλ λ©νλ°μ΄ν°
- Springμ΄ λ°νμμμ 리νλ μ μΌλ‘ μ½κ³ λμμ ꡬμ±ν¨
- μμ‘΄μ± μ£Όμ (DI), AOP, νΈλμμ , λ―Έλ€μ¨μ΄ κ΅¬μ± λ± νλ μμν¬ μ λ°μ μ μ΄
β μμ
μ¬κΈ°μ @GetMappingμ
→ μ΄ λ©μλκ° "HTTP GET μμ²μ μ²λ¦¬νλ νΈλ€λ¬"λΌλ λ©νλ°μ΄ν°μ
λλ€.
μ΄ μ 보λ₯Ό Springμ΄ μ½μ΄μ λ΄λΆμ μΌλ‘ DispatcherServlet λΌμ°ν
μ μ€μ ν©λλ€.
μ¦,
μ΄λ Έν μ΄μ = “νλ μμν¬κ° μ½μ΄μ λμμ ꡬμ±νλ λ©νλ°μ΄ν°”
h2οΈβ£ 4. λμ ꡬ쑰 λΉκ΅ (μ½κ² μ€λͺ )
πΉ FastAPI
- @λ°μ½λ μ΄ν°κ° ν¨μ μ체λ₯Ό κ°μΈμ μλ‘μ΄ κΈ°λ₯μ μ£Όμ
→ ν¨μν νλ‘κ·Έλλ° κΈ°λ°
πΉ Spring
- @μ΄λ
Έν
μ΄μ
μ λ¨μ§ “νμ”
→ μ€μ λμμ Spring νλ μμν¬κ° 리νλ μ μΌλ‘ μ½μ΄μ μ²λ¦¬
→ λ©νλ°μ΄ν° κΈ°λ° νλ μμν¬ κ΅¬μ± λ°©μ
h2οΈβ£ 5. μ½κ² μ΄ν΄νλ νκ΅μ λΉμ
- FastAPI λ°μ½λ μ΄ν°
→ ν¨μμ μ§μ μλ μ λ°λ₯΄λ λλ (ν¨μ μμ²΄κ° λ³ν¨) - Spring μ΄λ
Έν
μ΄μ
→ λ²€μΉμ “μ λ£ μ리” μ€ν°μ»€λ₯Ό λΆμ¬λλ©΄
κ΄λ¦¬μκ° λμ€μ κ·Έκ±Έ λ³΄κ³ μκΈμ λ§€κΈ°λ κ²
(μ€μ νλμ μ€νλ§μ΄ νλ€)
h2οΈβ£ 6. κ²°λ‘
| λ³Έμ§ | ν¨μ λ³νκΈ° | λ©νλ°μ΄ν° |
| μ€ν λ°©μ | ν¨μ λν(wrap) | 리νλ μ μ ν΅ν νλ μμν¬ μ μ΄ |
| μν | λΌμ°ν° λ±λ‘ μ€μ¬ | DI, AOP, λΌμ°ν , μ€μ λ± μ μμ |
| λ²μ | λ‘μ§ λ¨μ | μ ν리μΌμ΄μ μ 체 ꡬ쑰 λ¨μ |
μ¦, FastAPIλ Pythonμ λ¬Έλ²μ νμ©νκ³ ,
Springμ νλ μμν¬κ° μ€μ¬μ΄ λμ΄ μ΄λ
Έν
μ΄μ
μ ν΄μνλ ꡬ쑰λΌλ μ°¨μ΄μ
λλ€.

dataclass
'Project ESG+AI > Tech Basics' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| 41μΌμ°¨. IT κ°λ μ 리 (0) | 2025.12.09 |
|---|---|
| 40μΌμ°¨. IT κ°λ μ 리 (0) | 2025.12.08 |
| 38μΌμ°¨. IT κ°λ μ 리 (0) | 2025.12.04 |
| 37μΌμ°¨. IT κ°λ μ 리 (0) | 2025.11.28 |
| 36μΌμ°¨. IT κ°λ μ 리 (0) | 2025.11.27 |