λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

TIL

ν”„λ ˆμž„μ›Œν¬μ™€ λΌμ΄λΈŒλŸ¬λ¦¬γƒ» μΊμ‹œ

 

πŸ“Œ ν”„λ ˆμž„μ›Œν¬(Framework)와 라이브러리(Library)

 

 

ν”„λ ˆμž„μ›Œν¬λž€?

μ›ν•˜λŠ” κΈ°λŠ₯ κ΅¬ν˜„μ— μ§‘μ€‘ν•˜μ—¬ κ°œλ°œν•  수 μžˆλ„λ‘ μΌμ •ν•œ ν˜•νƒœμ™€ ν•„μš”ν•œ κΈ°λŠ₯을 κ°–μΆ”κ³  μžˆλŠ” 골격, λΌˆλŒ€λ₯Ό μ˜λ―Έν•œλ‹€.

 

μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 개발 μ‹œ ν•„μˆ˜μ μΈ μ½”λ“œ, μ•Œκ³ λ¦¬μ¦˜, DB 연동과 같은 κΈ°λŠ₯듀을 μœ„ν•΄ μ–΄λŠ 정도 λΌˆλŒ€(ꡬ쑰)λ₯Ό μ œκ³΅ν•˜λ©° μ΄λŸ¬ν•œ λΌˆλŒ€ μœ„μ—μ„œ μ‚¬μš©μžλŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ°œλ°œν•œλ‹€. μ•±/μ„œλ²„ λ“±μ˜ ꡬ동, λ©”λͺ¨λ¦¬ 관리, 이벀트 루프 λ“±μ˜ κ³΅ν†΅λœ 뢀뢄은 ν”„λ ˆμž„μ›Œν¬κ°€ κ΄€λ¦¬ν•˜λ©°, μ‚¬μš©μžλŠ” ν”„λ ˆμž„μ›Œν¬κ°€ μ •ν•΄μ€€ λ°©μ‹λŒ€λ‘œ ν΄λž˜μ„œ, λ©”μ„œλ“œλ“€μ„ κ΅¬ν˜„ν•˜λ©΄ λœλ‹€.

 

 

예

  • Java μ„œλ²„ κ°œλ°œμ— μ‚¬μš©λ˜λŠ” Spring
  • Python μ„œλ²„ κ°œλ°œμ— μ‚¬μš©λ˜λŠ” Django, Flask
  • μ•ˆλ“œλ‘œμ΄λ“œ μ•± κ°œλ°œμ— μ‚¬μš©λ˜λŠ” Android
  • 아이폰 μ•± κ°œλ°œμ— μ‚¬μš©λ˜λŠ” Cocoa Touch
  • μ›Ή κ°œλ°œμ— μ‚¬μš©λ˜λŠ” Angular, Vue.js λ“±
  • μžλ°” 기반의 JSPλ₯Ό μœ„ν•œ ν”„λ ˆμž„ μ›Œν¬ Struts
  • λ£¨λΉ„λ‘œ μž‘μ„±λœ MVCνŒ¨ν„΄μ„ μ΄μš©ν•˜λŠ” Ruby on Rails

 

많이 μ‚¬μš©ν•˜λŠ” ν”„λ‘ νŠΈμ—”λ“œ ν”„λ ˆμž„μ›Œν¬

React, Vue, Angular, Svelte, JQuery, Ember, Backbone, Semantic UI, Foundation 및 Preact이닀.

 

 


 

 

λΌμ΄λΈŒλŸ¬λ¦¬λž€?

μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό κ°œλ°œν•  λ•Œ 컴퓨터 ν”„λ‘œκ·Έλž¨μ΄ μ‚¬μš©ν•˜λŠ” λΉ„νœ˜λ°œμ„± μžμ›μ˜ λͺ¨μž„.

즉 νŠΉμ • κΈ°λŠ₯을 λͺ¨μ™€λ‘” μ½”λ“œ, ν•¨μˆ˜λ“€μ˜ 집합이며 μ½”λ“œ μž‘μ„± μ‹œ ν™œμš© κ°€λŠ₯ν•œ 도ꡬ듀을 μ˜λ―Έν•œλ‹€.

 

 

예

  • Python pip둜 μ„€μΉ˜ν•œ νŒ¨ν‚€μ§€/λͺ¨λ“ˆ (tensorflow, pandas, beautifulsoup λ“±λ“±)
  • C++의 ν‘œμ€€ ν…œν”Œλ¦Ώ 라이브러리 (STL)
  • Node.jsμ—μ„œ npm으둜 μ„€μΉ˜ν•œ λͺ¨λ“ˆ
  • HTML의 ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œ μ‘°μž‘μ„ λ‹¨μˆœν™”ν•˜λŠ” JQuery

 

 


 

ν”„λ ˆμž„μ›Œν¬μ™€ λΌμ΄λΈŒλŸ¬λ¦¬μ˜ 차이점

 

ν”„λ ˆμž„μ›Œν¬λŠ” 단지 미리 λ§Œλ“€μ–΄μ€€ λ°˜μ œν’ˆμ΄λ‚˜, ν™•μž₯ν•΄μ„œ μ‚¬μš©ν•  수 μžˆλ„λ‘ μ€€λΉ„λœ 좔상 라이브러리의 집합이 μ•„λ‹ˆλ‹€. ν”„λ ˆμž„μ›Œν¬κ°€ μ–΄λ–€ 것인지 μ΄ν•΄ν•˜λ €λ©΄ λΌμ΄λΈŒλŸ¬λ¦¬μ™€ ν”„λ ˆμž„μ›Œν¬κ°€ μ–΄λ–»κ²Œ λ‹€λ₯Έμ§€ μ•Œμ•„μ•Ό ν•œλ‹€.

라이브러리λ₯Ό μ‚¬μš©ν•˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 흐름을 직접 μ œμ–΄ν•œλ‹€.
단지 λ™μž‘ν•˜λŠ” 쀑에 ν•„μš”ν•œ κΈ°λŠ₯이 μžˆμ„ λ•Œ λŠ₯λ™μ μœΌλ‘œ 라이브러리λ₯Ό μ‚¬μš©ν•  뿐이닀.

λ°˜λ©΄μ— ν”„λ ˆμž„μ›Œν¬λŠ” 거꾸둜 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œκ°€ ν”„λ ˆμž„μ›Œν¬μ— μ˜ν•΄ μ‚¬μš©λœλ‹€.
ν”„λ ˆμž„μ›Œν¬μ—λŠ” λΆ„λͺ…ν•œ [μ œμ–΄μ˜ μ—­μ „] κ°œλ…μ΄ μ μš©λ˜μ–΄ μžˆμ–΄μ•Ό ν•œλ‹€.

μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œλŠ” ν”„λ ˆμž„μ›Œν¬κ°€ 짜 놓은 ν‹€μ—μ„œ μˆ˜λ™μ μœΌλ‘œ λ™μž‘ν•΄μ•Ό ν•œλ‹€.

- ν† λΉ„μ˜ μŠ€ν”„λ§δΈ­

 

ν”„λ ˆμž„μ›Œν¬μ™€ 라이브러리의 차이점은 "μ œμ–΄ 흐름"의 κΆŒν•œμ΄ 어디에 μžˆλŠ”κ°€μ΄λ‹€.

 

라이브러리λ₯Ό μ‚¬μš©ν•  λ•Œ μ‚¬μš©μžλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œμ˜ 흐름을 μ§μ ‘ μ œμ–΄ν•΄μ•Ό ν•œλ‹€.
개발 μ‹œ ν•„μš”ν•œ κΈ°λŠ₯이 μžˆμ„ 경우 λŠ₯λ™μ μœΌλ‘œ 라이브러리λ₯Ό ν˜ΈμΆœν•˜μ—¬ μ‚¬μš©ν•˜κ±°λ‚˜ 기쑴에 κ΅¬μ„±λœ ν•¨μˆ˜λ‚˜ μ½”λ“œλ₯Ό κ°€μ Έλ‹€ 써야 ν•œλ‹€. 

 

반면 ν”„λ ˆμž„μ›Œν¬λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ½”λ“œκ°€ ν”„λ ˆμž„μ›Œν¬μ— μ˜ν•΄ μ‚¬μš©λœλ‹€.
μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œλŠ” ν”„λ ˆμž„μ›Œν¬κ°€ 짜 놓은 ν‹€μ—μ„œ μˆ˜λ™μ μœΌλ‘œ λ™μž‘ν•˜κΈ° λ•Œλ¬Έμ— μ œμ–΄μ˜ 흐름은 ν”„λ ˆμž„μ›Œν¬κ°€ κ°€μ§€κ³  있고 μ‚¬μš©μžκ°€ κ·Έ μ•ˆμ— ν•„μš”ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜κ²Œ λœλ‹€.

 

* μ œμ–΄μ˜ μ—­μ „(IoC, Inversion of Control)

μ΄λž€,

 

μ–΄λ– ν•œ 일을 ν•˜λ„λ‘ λ§Œλ“€μ–΄μ§„ Framework에 Control κΆŒν•œμ„ μœ„μž„ν•˜λŠ” 것을 μ˜λ―Έν•˜λŠ”λ°, 

 

κ°„λ‹¨νžˆ 말해 ν”„λ‘œκ·Έλž¨μ˜ μ œμ–΄ 흐름 ꡬ쑰가 뒀바뀐 것을 λœ»ν•©λ‹ˆλ‹€. 

라이브러리의 경우 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 흐름을 μ‚¬μš©μžκ°€ 직접 μ œμ–΄ν•΄μ•Ό ν•˜μ§€λ§Œ ν”„λ ˆμž„μ›Œν¬μ˜ 경우 μ½”λ“œλ₯Ό μ—°κ²°ν•  수 μžˆλŠ” μœ„μΉ˜λ₯Ό μ œκ³΅ν•˜κ³  ν•„μš”μ— 따라 μ‚¬μš©μžκ°€ μ—°κ²°ν•œ μ½”λ“œλ₯Ό ν˜ΈμΆœν•˜λŠ” μ œμ–΄ 흐름 κΆŒν•œμ„ κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€.

 

 

 

 


 

 

 

πŸ“Œ μΊμ‹œ

 

 

μΊμ‹œμ˜ μž₯단점

 

μΊμ‹œλž€ 자주 μ‚¬μš©ν•˜λŠ” λ°μ΄ν„°λ‚˜ 값을 미리 볡사해 놓은 μž„μ‹œ μž₯μ†Œλ₯Ό μ˜λ―Έν•œλ‹€.

 

μž₯점

  • μΊμ‹œμ— 데이터λ₯Ό 미리 볡사해 λ†“μœΌλ©΄, κ³„μ‚°μ΄λ‚˜ μ ‘κ·Ό μ‹œκ°„ 없이 더 λΉ λ₯Έ μ†λ„λ‘œ 데이터λ₯Ό μ ‘κ·Ό ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 반볡적으둜 λ™μΌν•œ κ²°κ³Όλ₯Ό λŒλ €μ£ΌλŠ” 경우(νŠΉμ • 이미지 or 썸넀일) μ‚¬μš©ν•˜κ±°λ‚˜ μ ‘κ·Ό μ‹œκ°„μ— λΉ„ν•΄ μ›λž˜ 데이터에 μ ‘κ·Όν•˜λŠ” μ‹œκ°„μ΄ 였래 κ±Έλ¦¬λŠ” κ²½μš°λ‚˜ 값을 λ‹€μ‹œ κ³„μ‚°ν•˜λŠ” μ‹œκ°„μ„ μ ˆμ•½ν•˜κ³ μž ν•˜λŠ” κ²½μš°μ— μ‚¬μš©ν•œλ‹€.

단점

  • λ©”λͺ¨λ¦¬ μ €μž₯곡간은 속도가 λΉ λ₯Ό 수둝 μš©λŸ‰μ΄ μž‘κ³  가격이 λ†’μŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ κ°€κ²©λ•Œλ¬Έμ— μΊμ‹œμ— μ €μž₯ν•  적은 μ–‘μ˜ 정보λ₯Ό 잘 μ„ νƒν•˜λŠ” 것이 λΉ„μš©λ„ μ ˆμ•½ν•˜κ³  νš¨μœ¨λ„ λ†’μ΄λŠ” 방법이닀.

 

ν”„λ‘ νŠΈμ—”λ“œμ—μ„œλŠ” 이미지, CSS, JS 등을 μΊμ‹±ν•˜μ—¬ μ›Ή νŽ˜μ΄μ§€ λ‘œλ”© 속도λ₯Ό ν–₯μƒμ‹œν‚€λŠ”λ° ν™œμš©λœλ‹€.
이λ₯Ό 톡해 μ‚¬μš©μžλŠ” λΉ λ₯΄κ²Œ νŽ˜μ΄μ§€λ₯Ό λ‘œλ”©ν•  수 μžˆμ–΄ 더 λ‚˜μ€ μ‚¬μš©μž κ²½ν—˜μ„ λˆ„λ¦΄ 수 μžˆλ‹€.
λ˜ν•œ, μΊμ‹œλ₯Ό ν™œμš©ν•˜λ©΄ μ„œλ²„μ— λΆ€ν•˜λ₯Ό 쀄일 수 μžˆμ–΄ 더 λ‚˜μ€ μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.


λ‹€λ§Œ, μ‚¬μš©μžμ— 따라 κ°œμΈν™”λœ νŽ˜μ΄μ§€λ‚˜ μ½˜ν…μΈ κ°€ 자주 λ³€ν•˜λŠ” νŽ˜μ΄μ§€μ˜ κ²½μš°μ—λŠ” μΊμ‹œλ₯Ό ν•˜μ§€ μ•ŠλŠ” 것이 μ’‹λ‹€.

 

 

 


 

 

 

ν”„λ‘ νŠΈμ—”λ“œμ—μ„œ μΊμ‹œλ₯Ό μ‚¬μš©ν•  수 μžˆλŠ” 2~3κ°€μ§€ μ˜μ—­μ€?

 

 

λΈŒλΌμš°μ € 캐싱

  • 이전에 λ°©λ¬Έν–ˆλ˜ νŽ˜μ΄μ§€, 제λͺ©μ˜ 썸넀일 등을 μ„œλ²„λ‘œ μš”μ²­ν•˜μ§€ μ•Šκ³ , λΈŒλΌμš°μ €μ— 캐싱을 해두면 μ‚¬μš©μžλŠ” μžμ‹ μ˜ μš”μ²­μ„ μ„œλ²„λ‘œλΆ€ν„° 기닀리지 μ•Šκ³ , λ°”λ‘œ μΊμ‹œλ©”λͺ¨λ¦¬λ‘œ 응닡 받을 수 μžˆμ–΄ μ›Ή μ„œν•‘μ΄ λΉ λ₯΄λ‹€κ³  느끼고, μ„œλ²„λŠ” λΆˆν•„μš”ν•œ μš”μ²­μ„ λ°›μ§€μ•Šμ•„ κ³ΌλΆ€ν•˜λ₯Ό ν”Όν• μˆ˜ μžˆλ‹€. (ν•œλ²ˆ λ°›μ•„μ˜¨ λ¦¬μ†ŒμŠ€λ“€μ„ μž¬μ‚¬μš©ν•˜μ—¬ 속도가 빨라짐)

 

Proxy

  • μ›Ή λΈŒλΌμš°μ €μ™€ μ„œλ²„ 사이에 proxy λΌλŠ” 것을 λ‘λŠ” 방식이닀.
    proxyλŠ” “λŒ€λ¦¬μΈ” μ΄λΌλŠ” 뜻의 μ˜μ–΄ λ‹¨μ–΄λ‘œμ„œ, μ€‘κ°„μ—μ„œ λ­”κ°€λ₯Ό λŒ€μ‹ ν•΄μ£ΌλŠ” 것을 'ν”„λ‘μ‹œ'라고 ν•œλ‹€.
    ν”„λ‘μ‹œμ˜ 경우 μ—¬λŸ¬ μ»΄ν“¨ν„°λ‘œλΆ€ν„° μš”μ²­μ„ λ°›κ³  μ²˜λ¦¬ν•˜λ‹€ λ³΄λ‹ˆ 같은 데이터가 자주 접근될 ν™•λ₯ μ΄ λ†’μ•„μ Έμ„œ μΊμ‹œμ˜ μ„±λŠ₯이 μ’‹μ•„μ§€κ³ , 데이터λ₯Ό μΊμ‹œμ—μ„œ λ°˜ν™˜ν•˜λŠ” ν™•λ₯ μ΄ 더 λ†’μ•„μ§„λ‹€.
    (쑰직 λ‚΄μ—μ„œ μ ‘μ†ν•˜λŠ” μ›Ήμ‚¬μ΄νŠΈμ˜ λ¦¬μ†ŒμŠ€λ“€μ„ μΊμ‹œν•˜μ—¬ 속도가 빨라지고 λ„€νŠΈμ›Œν¬ μ‚¬μš©λŸ‰μ„ μ€„μž„)