Skip to content

Latest commit

Β 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

README.md

Language

πŸ“‹ ν•™μŠ΅ 주제

Framework vs. Library


ν”„λ ˆμž„μ›Œν¬ vs 라이브러리

μž‘μ„±μž: κΉ€λ‚˜ν˜„

✏️ ν”„λ ˆμž„μ›Œν¬(Framework)λž€?

μ‚¬μ „μ μœΌλ‘œλŠ” 'λΌˆλŒ€', '골쑰'λ₯Ό 의미.

μ†Œν”„νŠΈμ›¨μ–΄ κ³΅ν•™μ—μ„œλŠ” 'νŠΉμ •ν•œ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ μΈν„°νŽ˜μ΄μŠ€λ‚˜ 클래슀 등을 λͺ¨μ€ 집합체' λ₯Ό μ˜λ―Έν•œλ‹€.

ν’€μ–΄ μ„€λͺ…ν•˜μžλ©΄, Application 개발 μ‹œ ν•„μˆ˜μ μΈ μ½”λ“œ, μ•Œκ³ λ¦¬μ¦˜, λ°μ΄ν„°λ² μ΄μŠ€ 연동 λ“±κ³Ό 같은 κΈ°λŠ₯ 듀을 μœ„ν•΄ μ–΄λŠμ •λ„ λΌˆλŒ€(ꡬ쑰)λ₯Ό μ œκ³΅ν•΄μ£ΌλŠ” 것이닀.

κ·ΈλŸ¬λ―€λ‘œ 이런 λΌˆλŒ€ μœ„μ— κ°œλ°œμžκ°€ μ½”λ“œλ₯Ό μž‘μ„±ν•˜μ—¬ Application을 μ™„μ„±μ‹œμΌœμ•Ό ν•œλ‹€.

μ–΄λŠμ •λ„ λΌˆλŒ€λ₯Ό μ œκ³΅ν•΄μ£ΌκΈ° λ•Œλ¬Έμ—, 객체 μ§€ν–₯ κ°œλ°œμ„ ν•˜λ©΄μ„œ 일관성 λΆ€μ‘± λ“±μ˜ 문제λ₯Ό ν•΄κ²°ν•΄ μ€€λ‹€.


✏️ 라이브러리(Library)λž€?

  • λ‹¨μˆœ ν™œμš©κ°€λŠ₯ν•œ λ„κ΅¬λ“€μ˜ μ§‘ν•©
  • κ°œλ°œμžκ°€ λ§Œλ“  ν΄λž˜μŠ€μ—μ„œ ν˜ΈμΆœν•˜μ—¬ μ‚¬μš©ν•œλ‹€.
  • ν•¨μˆ˜λ“€μ΄λ‚˜ κΈ°λŠ₯ λͺ¨μŒμ„ κ°€μ Έλ‹€ μ“°λŠ” 것이라 보면 λœλ‹€.

✏️ ν”„λ ˆμž„μ›Œν¬μ™€ 라이브러리의 차이

  • λ‘˜μ˜ μ°¨μ΄λŠ” Flow(흐름)에 λŒ€ν•œ μ œμ–΄ κΆŒν•œμ΄ 어디에 μžˆλŠ”μ§€ 이닀.

  • ν”„λ ˆμž„μ›Œν¬λŠ” 전체적인 흐름을 자체적으둜 κ°€μ§€κ³  있으며, ν”„λ‘œκ·Έλž˜λ¨Έκ°€ κ·Έ μ•ˆμ— ν•„μš”ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•œλ‹€.

  • λΌμ΄λΈŒλŸ¬λ¦¬λŠ” μ‚¬μš©μžκ°€ 흐름에 λŒ€ν•œ μ œμ–΄λ₯Ό ν•˜λ©° ν•„μš”ν•œ 상황에 κ°€μ Έλ‹€ μ“΄λ‹€.

즉, ν”„λ ˆμž„μ›Œν¬μ—λŠ” μ œμ–΄μ˜ μ—­μ „ (Inversion of Control) 이 μ μš©λ˜μ–΄ μžˆλ‹€.

  • μ œμ–΄μ˜ 역전은 μ–΄λ– ν•œ 일을 ν•˜λ„λ‘ λ§Œλ“€μ–΄μ§„ ν”„λ ˆμž„μ›Œν¬μ— μ œμ–΄μ˜ κΆŒν•œμ„ λ„˜κΉ€μœΌλ‘œμ¨ ν΄λΌμ΄μ–ΈνŠΈ μ½”λ“œκ°€ 신경써야 ν•  것을 μ€„μ΄λŠ” μ „λž΅μ΄λ‹€.

  • 즉, μ½”λ“œ μ œμ–΄μ˜ κΆŒν•œμ΄ λ‚˜μ—κ²Œ 있으면 라이브러리, λ‚˜μ—κ²Œ μ—†λ‹€λ©΄ ν”„λ ˆμž„μ›Œν¬μ΄λ‹€.

  • μ‹€μ œλ‘œ Gradle, maven 같은 ν”„λ ˆμž„μ›Œν¬μ˜ ν”„λ‘œμ νŠΈλ₯Ό 생성해보면 μ–΄λŠμ •λ„ λΌˆλŒ€λ₯Ό λ§Œλ“€μ–΄μ„œ κ·Έ μ•ˆμ— ν•„μš”μ— 따라 우리의 μ½”λ“œλ₯Ό λ„£λŠ”λ‹€.

  • 일반적으둜 ν”„λ‘œκ·Έλž˜λ¨Έκ°€ κ°€μ§€κ³  μžˆμ–΄μ•Όν•˜λŠ” μ œμ–΄μ˜ κΆŒν•œμ„ ν”„λ ˆμž„μ›Œν¬μ—κ²Œ μ£Όμ—ˆκΈ° λ•Œλ¬Έμ— μš°λ¦¬λŠ” 이λ₯Ό μ œμ–΄μ˜ 역전이라고 λ§ν•œλ‹€.

  • λΌμ΄λΈŒλŸ¬λ¦¬λŠ” 톱, 망치, μ‚½ 같은 μ—°μž₯이라면, ν”„λ ˆμž„μ›Œν¬λŠ” μ°¨, λΉ„ν–‰κΈ°, νƒˆ 것이라 λ³Ό 수 μžˆλ‹€.

  • 도ꡬλ₯Ό μ„ νƒν•˜λŠ” μž…μž₯에선, μ–΄λ–€ 도ꡬλ₯Ό μ‚¬μš©ν•˜λ“  μ›ν•˜λŠ” 것을 λ§Œλ“€μ–΄λ‚Ό 수만 있으면 λœλ‹€.

  • λ°˜λ©΄μ—, νƒˆ 것은 μ •ν•΄μ§„ 곳으둜만 λ‹€λ…€μ•Ό ν•œλ‹€. μ°¨λ₯Ό 타고 ν•˜λŠ˜μ„ λ‚ κ±°λ‚˜ λ°°λ₯Ό 타고 λ•…μœΌλ‘œ 닀닐 수 μ—†λ‹€. ν•˜μ§€λ§Œ λͺ©μ μ— 맞게 λ§Œλ“€μ–΄μ Έ 있기 λ•Œλ¬Έμ— νƒˆ 것을 λ§Œλ“€μ–΄μ•Ό ν•  ν•„μš”κ°€ μ—†λ‹€.

  • λΌμ΄λΈŒλŸ¬λ¦¬μ™€ λ‹€λ₯΄κ²Œ ν”„λ ˆμž„μ›Œν¬λŠ” 이미 ν”„λ‘œκ·Έλž˜λ° κ·œμΉ™μ΄ μ •ν•΄μ Έ μžˆλ‹€. eg. μ„€μ •νŒŒμΌλ‘œ μ‚¬μš©λ  xml νŒŒμΌμ—λŠ” μ–΄λ–€ νƒœκ·Έλ₯Ό μ¨μ•Όν•˜κ³ , μ†ŒμŠ€νŒŒμΌμ€ μ–΄λŠ μœ„μΉ˜μ— λ„£μ–΄μ•Όν•˜λ©°, DB와 μ—°λ™ν•˜κΈ° μœ„ν•΄ 무엇을 μ¨μ•Όν•˜λŠ”μ§€ μ •ν•΄μ Έ μžˆλ‹€.

  • 남듀이 λ§Œλ“  ν”„λ ˆμž„μ›Œν¬λŠ” μ“°λŠ” μ‚¬λžŒμ΄ λ§Žμ€ 만큼 μˆ˜μ •μ΄λ‚˜ μ—…λ°μ΄νŠΈλ„ λΉ λ₯΄λ‹€.

ν”„λ ˆμž„μ›Œν¬μ˜ μž₯점

  • κ°€μ΄λ“œλ₯Ό μ œκ³΅ν•¨μœΌλ‘œμ¨ ν”„λ‘œμ νŠΈλ₯Ό μ²΄κ³„μ μœΌλ‘œ 관리할 수 μžˆλ‹€.
  • 기본적인 섀계, 라이브러리λ₯Ό μ œκ³΅ν•˜μ—¬ 개발 속도 ν–₯상
  • μ½”λ“œ μž¬μ‚¬μš©μ„±, ν™•μž₯성이 μ’‹λ‹€.

ν”„λ ˆμž„μ›Œν¬ 단점

  • 각 ν”„λ ˆμž„μ›Œν¬μ— λŒ€ν•œ λ³„λ„μ˜ ν•™μŠ΅μ΄ ν•„μš”
  • 자유둭고 μœ μ—°ν•œ κ°œλ°œμ€ λΆˆκ°€λŠ₯함
  • ν”„λ‘œμ νŠΈ μš©λŸ‰ 증가

ν”„λ ˆμž„μ›Œν¬μ˜ μ’…λ₯˜ λŠ” Java의 Spring, PHP의 Laravel, codeigniter 그리고 Python의 Django 등이 μžˆλ‹€.