Home > CS > 2024 > πŸ’Ύ [CS] 라이브러리(Library)와 ν”„λ ˆμž„μ›Œν¬(Framework)의 차이점.

πŸ’Ύ [CS] 라이브러리(Library)와 ν”„λ ˆμž„μ›Œν¬(Framework)의 차이점.
CS

πŸ’Ύ [CS] 라이브러리(Library)와 ν”„λ ˆμž„μ›Œν¬(Framework)의 차이점.

라이브러리(Library) 와 ν”„λ ˆμž„μ›Œν¬(Framework) λŠ” μ†Œν”„νŠΈμ›¨μ–΄ κ°œλ°œμ—μ„œ μ½”λ“œλ₯Ό μž¬μ‚¬μš©ν•˜κΈ° μœ„ν•œ λ„κ΅¬μ΄μ§€λ§Œ, λ‘˜ μ‚¬μ΄μ—λŠ” μ€‘μš”ν•œ 차이점이 μžˆμŠ΅λ‹ˆλ‹€.

이 차이점은 μ œμ–΄ 흐름과 μ‚¬μš© λ°©μ‹μ—μ„œ 주둜 λ‚˜νƒ€λ‚©λ‹ˆλ‹€.

1️⃣ 라이브러리(Library)

라이브러리(Library) λŠ” νŠΉμ • κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ” λͺ¨λ“ˆ λ˜λŠ” ν•¨μˆ˜λ“€μ˜ λͺ¨μŒμœΌλ‘œ, κ°œλ°œμžκ°€ ν•„μš”ν•  λ•Œ μ„ νƒμ μœΌλ‘œ ν˜ΈμΆœν•˜μ—¬ μ‚¬μš©ν•˜λŠ” λ„κ΅¬μž…λ‹ˆλ‹€.

λΌμ΄λΈŒλŸ¬λ¦¬λŠ” κ°œλ°œμžκ°€ μž‘μ„±ν•˜λŠ” μ½”λ“œμ—μ„œ ν•„μš”ν•œ λΆ€λΆ„λ§Œ κ°€μ Έλ‹€ μ‚¬μš©ν•  수 있으며, μ œμ–΄κΆŒμ€ κ°œλ°œμžμ—κ²Œ μžˆμŠ΅λ‹ˆλ‹€.

  • μ œμ–΄ 흐름
    • 라이브러리λ₯Ό μ‚¬μš©ν•  λ•ŒλŠ” κ°œλ°œμžκ°€ μ›ν•˜λŠ” λ°©μ‹μœΌλ‘œ 라이브러리의 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€.
    • 즉, κ°œλ°œμžκ°€ μ£Όλ„μ μœΌλ‘œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©° ν•„μš”ν•œ κΈ°λŠ₯만 κ°€μ Έλ‹€ μ”λ‹ˆλ‹€.
  • μœ μ—°μ„±
    • λΌμ΄λΈŒλŸ¬λ¦¬λŠ” λ‹¨μˆœν•œ λ„κ΅¬λ‘œ νŠΉμ • κΈ°λŠ₯을 μ œκ³΅ν•˜λ©°, κ°œλ°œμžλŠ” 자유둭게 섀계와 ꡬ쑰λ₯Ό κ²°μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ˜ˆμ‹œ: Java의 Controller 라이브러리

import java.util.Collections;
import java.util.List;

public class Example {
    public static void main(String[] args) {
        List<String> list = List.of("Apple", "Banana", "Orange");
        Collections.sort(list);
    }
}
  • μœ„ μ½”λ“œμ—μ„œ Collections.sort()λŠ” 라이브러리 ν•¨μˆ˜λ‘œ, κ°œλ°œμžκ°€ ν•„μš”ν•  λ•Œ ν˜ΈμΆœν•˜μ—¬ μ •λ ¬ κΈ°λŠ₯을 μ‚¬μš©ν•©λ‹ˆλ‹€.

μ£Όμš” νŠΉμ§•.

  • κ°œλ°œμžκ°€ 라이브러리의 νŠΉμ • κΈ°λŠ₯을 μ„ νƒν•΄μ„œ 호좜.
  • μ½”λ“œμ˜ μ œμ–΄ 흐름은 κ°œλ°œμžκ°€ 관리.
  • μœ μ—°ν•˜κ³  μ œν•œμ΄ 적음.
  • νŠΉμ • κΈ°λŠ₯을 κ΅¬ν˜„ν•˜λŠ” μž‘μ€ λ‹¨μœ„μ˜ μ½”λ“œ 집합.

2️⃣ ν”„λ ˆμž„μ›Œν¬(Framework)

ν”„λ ˆμž„μ›Œν¬λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ ꡬ쑰와 μ œμ–΄ 흐름을 미리 μ •ν•΄ 놓은 μΌμ’…μ˜ λΌˆλŒ€ λ˜λŠ” ν‹€μž…λ‹ˆλ‹€.

κ°œλ°œμžλŠ” ν”„λ ˆμž„μ›Œν¬μ—μ„œ μ œκ³΅ν•˜λŠ” ꡬ쑰에 맞좰 μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©°, μ œμ–΄ 흐름은 ν”„λ ˆμž„μ›Œν¬μ— μ˜ν•΄ κ΄€λ¦¬λ©λ‹ˆλ‹€.

즉, ν”„λ ˆμž„μ›Œν¬κ°€ 개발자의 μ½”λ“œλ₯Ό ν˜ΈμΆœν•˜λŠ” λ°©μ‹μœΌλ‘œ λ™μž‘ν•©λ‹ˆλ‹€.

  • μ œμ–΄ μ—­μ „(Inversion of Control, IoC)
    • ν”„λ ˆμž„μ›Œν¬λŠ” μ½”λ“œμ˜ 흐름을 슀슀둜 μ œμ–΄ν•˜λ©°, κ°œλ°œμžκ°€ μž‘μ„±ν•œ μ½”λ“œλŠ” ν•„μš”ν•œ μ‹œμ μ— ν”„λ ˆμž„μ›Œν¬μ— μ˜ν•΄ ν˜ΈμΆœλ©λ‹ˆλ‹€.
      • 이λ₯Ό μ œμ–΄μ˜ 역전이라고 λΆ€λ¦…λ‹ˆλ‹€.
  • 섀계 νŒ¨ν„΄ 제곡
    • ν”„λ ˆμž„μ›Œν¬λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ°œλ°œμ„ μœ„ν•œ ꡬ쑰와 섀계 νŒ¨ν„΄μ„ μ œκ³΅ν•©λ‹ˆλ‹€.
      • κ°œλ°œμžλŠ” κ·Έ ꡬ쑰에 맞좰 μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©΄ λ©λ‹ˆλ‹€.

μ˜ˆμ‹œ: Spring ν”„λ ˆμž„μ›Œν¬.

@RestController
public class HelloController {
    
    @GetMapping("/hello")
    public String sayHello() {
        return "Hello, World!";
    }
}
  • μœ„ μ½”λ“œλŠ” Spring ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬μš©ν•œ μ˜ˆμ‹œμž…λ‹ˆλ‹€.
    • μ—¬κΈ°μ„œ @RestController 와 @GetMapping 같은 μ—λ„ˆν…Œμ΄μ…˜μ„ 톡해 HTTP μš”μ²­μ΄ ν”„λ ˆμž„μ›Œν¬μ— μ˜ν•΄ μžλ™μœΌλ‘œ 처리되며, μ œμ–΄ 흐름은 Spring ν”„λ ˆμž„μ›Œν¬κ°€ λ‹΄λ‹Ήν•©λ‹ˆλ‹€.

μ£Όμš” νŠΉμ§•.

  • ν”„λ ˆμž„μ›Œν¬κ°€ μ œμ–΄ 흐름을 κ΄€λ¦¬ν•˜κ³ , 개발자의 μ½”λ“œλ₯Ό 호좜.
  • μΌμ •ν•œ ꡬ쑰와 섀계 νŒ¨ν„΄μ„ μ œκ³΅ν•˜μ—¬ ν†΅μΌλœ λ°©μ‹μœΌλ‘œ κ°œλ°œμ„ 진행.
  • μ œμ–΄ μ—­μ „(Inversion of Control, IoC)을 톡해 ν”„λ ˆμž„μ›Œν¬κ°€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 싀행을 주도.
  • 더 큰 ꡬ쑰와 틀을 μ œκ³΅ν•˜λ©°, λΌμ΄λΈŒλŸ¬λ¦¬λ³΄λ‹€ 더 κ°•λ ₯ν•œ μ œμ•½κ³Ό κ·œμΉ™μ΄ 적용됨.

3️⃣ λΌμ΄λΈŒλŸ¬λ¦¬μ™€ ν”„λ ˆμž„μ›Œν¬μ˜ 차이점 μš”μ•½.

ꡬ뢄 라이브러리(Library) ν”„λ ˆμž„μ›Œν¬(Framework)
μ œμ–΄ 흐름 κ°œλ°œμžκ°€ μ½”λ“œμ˜ 흐름을 μ œμ–΄ ν”„λ ˆμž„μ›Œν¬κ°€ μ½”λ“œμ˜ 흐름을 μ œμ–΄(μ œμ–΄ μ—­μ „, IoC)
μ‚¬μš© 방식 ν•„μš”μ— 따라 μ„ νƒμ μœΌλ‘œ 호좜 ν”„λ ˆμž„μ›Œν¬κ°€ μ œκ³΅ν•˜λŠ” ꡬ쑰에 따라 개발
μœ μ—°μ„± κ°œλ°œμžκ°€ 섀계와 ꡬ쑰λ₯Ό 자유둭게 선택 ν”„λ ˆμž„μ›Œν¬κ°€ 섀계와 ꡬ쑰λ₯Ό 미리 μ •μ˜
μ±…μž„ λΆ„λ°° νŠΉμ • κΈ°λŠ₯만 제곡 전체 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ꡬ쑰λ₯Ό μ •μ˜
규λͺ¨ μž‘μ€ λͺ¨λ“ˆμ΄λ‚˜ ν•¨μˆ˜λ“€μ˜ 집합 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ°œλ°œμ„ μœ„ν•œ 큰 틀을 제곡
μ˜ˆμ‹œ Java의 Collection Spring

4️⃣ μ œμ–΄μ˜ μ—­μ „(Inversion of Control, IoC).

μ œμ–΄μ˜ 역전은 ν”„λ ˆμž„μ›Œν¬μ˜ μ€‘μš”ν•œ νŠΉμ§• 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€.
μ œμ–΄μ˜ μ—­μ „μ΄λž€, ν”„λ‘œκ·Έλž¨μ˜ 흐름을 κ°œλ°œμžκ°€ 직접 μ œμ–΄ν•˜λŠ” 것이 μ•„λ‹ˆλΌ, ν”„λ ˆμž„μ›Œν¬κ°€ μ œμ–΄λ₯Ό λ‹΄λ‹Ήν•œλ‹€λŠ” κ°œλ…μž…λ‹ˆλ‹€.
κ°œλ°œμžλŠ” ν”„λ ˆμž„μ›Œν¬κ°€ μš”μ²­ν•  λ•Œ 싀행될 μ½”λ“œλ₯Ό μž‘μ„±ν•  뿐, 전체적인 ν”„λ‘œκ·Έλž¨μ˜ 흐름은 ν”„λ ˆμž„μ›Œν¬κ°€ λ‹΄λ‹Ήν•©λ‹ˆλ‹€.

μ œμ–΄ μ—­μ „μ˜ μ˜ˆμ‹œ

  • 라이브러리(Library)
    • κ°œλ°œμžκ°€ 직접 라이브러리의 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜κ³ , κ·Έ κ²°κ³Όλ₯Ό μ²˜λ¦¬ν•©λ‹ˆλ‹€.
  • ν”„λ ˆμž„μ›Œν¬(Framework)
    • ν”„λ ˆμž„μ›Œν¬κ°€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 흐름을 μ œμ–΄ν•˜κ³ , ν•„μš”ν•œ μ‹œμ μ— κ°œλ°œμžκ°€ μž‘μ„±ν•œ μ½”λ“œλ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€.
      • 예λ₯Ό λ“€μ–΄, μ‚¬μš©μžμ˜ μš”μ²­μ΄ λ“€μ–΄μ˜€λ©΄ ν”„λ ˆμž„μ›Œν¬κ°€ ν•΄λ‹Ή μš”μ²­μ„ μ μ ˆν•œ μ»¨νŠΈλ‘€λŸ¬μ— μ „λ‹¬ν•©λ‹ˆλ‹€.

5️⃣ κ²°λ‘ .

  • λΌμ΄λΈŒλŸ¬λ¦¬λŠ” νŠΉμ • κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” λ„κ΅¬λ‘œμ„œ, κ°œλ°œμžκ°€ ν•„μš”ν•  λ•Œ ν˜ΈμΆœν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 반면, ν”„λ ˆμž„μ›Œν¬λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ ꡬ쑰와 μ œμ–΄ 흐름을 κ΄€λ¦¬ν•˜λ©°, κ°œλ°œμžκ°€ μž‘μ„±ν•œ μ½”λ“œλ₯Ό ν”„λ ˆμž„μ›Œν¬κ°€ μ μ ˆν•œ μ‹œμ μ— ν˜ΈμΆœν•©λ‹ˆλ‹€.

  • λΌμ΄λΈŒλŸ¬λ¦¬λŠ”λŠ” 더 μœ μ—°ν•˜κ³ , νŠΉμ • κΈ°λŠ₯에 μ§‘μ€‘λœ 도ꡬ인 반면, ν”„λ ˆμž„μ›Œν¬λŠ” μ œμ–΄μ˜ 역전을 톡해 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ „λ°˜μ˜ ꡬ쑰λ₯Ό μ œμ‹œν•˜λ©°, 더 큰 ν‹€μ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ΄€λ¦¬ν•˜κ³  κ°œλ°œν•˜λŠ” 데 도움을 μ€λ‹ˆλ‹€.