πŸ›  [Backend] κΈ°μˆ λ©΄μ ‘ top30_2

κΉ€μ§€ν˜œΒ·2023λ…„ 9μ›” 3일
0

CS

λͺ©λ‘ 보기
2/5

πŸ“ 16. OSI 7계측

1. 물리 계측 (Physical Layer):

  • 물리적인 ν•˜λ“œμ›¨μ–΄μ™€ 전솑 맀체λ₯Ό λ‹€λ£¨λŠ” 계측
  • 데이터λ₯Ό λΉ„νŠΈ 슀트림으둜 λ³€ν™˜ν•˜κ³ , 전솑 맀체λ₯Ό 톡해 μ „μ†‘ν•œλ‹€.
  • 전기적, 기계적, 광학적 νŠΉμ„±μ„ 닀룬닀.

2. 데이터 링크 계측 (Data Link Layer):

  • 물리 κ³„μΈ΅μ—μ„œ μ˜€λŠ” λΉ„νŠΈλ“€μ„ ν”„λ ˆμž„(Frame)으둜 κ·Έλ£Ήν™”ν•˜κ³ , μ—λŸ¬ 감지 및 μˆ˜μ •μ„ μˆ˜ν–‰ν•œλ‹€.
  • μ£Όμ†Œ 지정과 흐름 μ œμ–΄λ„ μˆ˜ν–‰ν•œλ‹€.
  • 이더넷, Wi-Fi와 같은 둜컬 λ„€νŠΈμ›Œν¬ κΈ°μˆ μ—μ„œ ν™œμš©ν•œλ‹€.

3. λ„€νŠΈμ›Œν¬ 계측 (Network Layer):

  • 데이터 νŒ¨ν‚·μ˜ λΌμš°νŒ…κ³Ό 전솑 경둜 선택을 λ‹΄λ‹Ήν•œλ‹€.
  • IP μ£Όμ†Œμ™€ λΌμš°νŒ… ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜μ—¬ νŒ¨ν‚·μ˜ λͺ©μ μ§€λ₯Ό κ²°μ •ν•œλ‹€.
  • λΌμš°ν„°κ°€ 이 κ³„μΈ΅μ—μ„œ λ™μž‘ν•œλ‹€.

4. 전솑 계측 (Transport Layer):

  • μ†‘μ‹ μžμ™€ μˆ˜μ‹ μž κ°„μ˜ 연결을 κ΄€λ¦¬ν•˜κ³ , 데이터 전달을 ν™•μΈν•˜λ©°, μ—λŸ¬ 볡ꡬλ₯Ό μˆ˜ν–‰ν•œλ‹€.
  • 주둜 TCP (Transmission Control Protocol)와 UDP (User Datagram Protocol)λ₯Ό μ‚¬μš©ν•œλ‹€.

5. μ„Έμ…˜ 계측 (Session Layer):

  • 데이터 κ΅ν™˜μ˜ μ„Έμ…˜ 관리와 동기화λ₯Ό λ‹΄λ‹Ήν•œλ‹€.
  • μ„Έμ…˜ μ„€μ •, μœ μ§€ 및 μ’…λ£Œλ₯Ό μ²˜λ¦¬ν•œλ‹€.

6. ν‘œν˜„ 계측 (Presentation Layer):

  • λ°μ΄ν„°μ˜ ν˜•μ‹μ„ λ³€ν™˜ν•˜κ³ , 데이터 μ•”ν˜Έν™” 및 λ³΅ν˜Έν™”λ₯Ό μˆ˜ν–‰ν•œλ‹€.
  • λ°μ΄ν„°μ˜ ν‘œν˜„ ν˜•μ‹ (예: μ••μΆ•, μ•”ν˜Έν™”)을 κ΄€λ¦¬ν•œλ‹€.

7. μ‘μš© 계측 (Application Layer):

  • μ΅œμ’… μ‚¬μš©μžμ™€ μƒν˜Έ μž‘μš©ν•˜λŠ” μ‘μš© ν”„λ‘œκ·Έλž¨μ— μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•œλ‹€.
  • ν”„λ‘œν† μ½œ μŠ€νƒμ˜ κ°€μž₯ μƒμœ„μ— μœ„μΉ˜ν•˜λ©°, 이메일, μ›Ή λΈŒλΌμš°μ§•, 파일 전솑 λ“±μ˜ μ‘μš© ν”„λ‘œκ·Έλž¨κ³Ό μƒν˜Έ μž‘μš©ν•œλ‹€.

πŸ“ 17. μ„Έμ…˜ 기반 인증과 토큰 기반 인증의 차이점

μ„Έμ…˜ 기반 인증은 μ‚¬μš©μžκ°€ 인증을 μ™„λ£Œν•˜λ©΄
μ„œλ²„λŠ” 인증 정보λ₯Ό μ„Έμ…˜μ΄λΌκ³  ν•˜λŠ” λ³„λ„μ˜ 곡간(λ©”λͺ¨λ¦¬ ν˜Ήμ€ DB λ“±)에 μ €μž₯ν•˜κ³ 
μ„œλ²„ μΈ‘μ—μ„œ μ‚¬μš©μž μƒνƒœλ₯Ό κ΄€λ¦¬ν•©λ‹ˆλ‹€.

토큰 기반 인증은 μ‚¬μš©μž μƒνƒœλ₯Ό μ„œλ²„μ— μ €μž₯ν•˜μ§€ μ•Šκ³ ,
ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ 토큰을 λ³„λ„μ˜ 곡간 (localStorage, Cookie)에 μ €μž₯ν•œ ν›„,
μ„œλ²„μ—μ„œ μš”μ²­(Request) ν•  λ•Œλ§ˆλ‹€ 토큰을 ν•¨κ»˜ 보내고 μ„œλ²„λŠ” 이 토큰을 κ²€μ¦ν•˜κ³  μΈκ°€ν•©λ‹ˆλ‹€.
μ΄λ•Œ, JWT(Json Web Token)와 같은 토큰 ν˜•μ‹μ΄ μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ“ 18. JWT, Refresh, Access Token μ„€λͺ…

JWT (JSON Web Token):
JWTλŠ” μ›Ήμ—μ„œ μ‚¬μš©λ˜λŠ” JSON ν˜•μ‹μ˜ 토큰에 λŒ€ν•œ ν‘œμ€€ 규격으둜,
주둜 μ‚¬μš©μžμ˜ 인증 λ˜λŠ” 인가 정보λ₯Ό μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ 간에 μ•ˆμ „ν•˜κ²Œ κ΅ν™˜ν•˜κ³  μ €μž₯ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λœλ‹€.

JWTλŠ” μ„Έ 가지 λΆ€λΆ„μœΌλ‘œ 이루어지며, 각 뢀뢄은 점 (.)으둜 κ΅¬λΆ„λœλ‹€.
이 뢀뢄은 Header, Payload, Signature둜 κ΅¬μ„±λœλ‹€.

Header (헀더)λŠ” νƒ€μž…κ³Ό μ‚¬μš©ν•˜λŠ” ν•΄μ‹œ μ•Œκ³ λ¦¬μ¦˜ λ“± 두 가지 정보λ₯Ό JSON ν˜•μ‹μœΌλ‘œ ν¬ν•¨ν•˜κ³  μžˆλ‹€.

Payload (νŽ˜μ΄λ‘œλ“œ)λŠ” 토큰에 포함될 정보인 ν΄λ ˆμž„μ„ λ‹΄κ³  μžˆλ‹€. ν΄λ ˆμž„μ˜ μ’…λ₯˜λŠ”
λ“±λ‘λœ ν΄λ ˆμž„ (Registered Claims), 곡개 ν΄λ ˆμž„ (Public Claims), λΉ„κ³΅κ°œ ν΄λ ˆμž„ (Private Claims)등이 μžˆλ‹€.

Signature (μ„œλͺ…)은 ν† ν°μ˜ μœ νš¨μ„±μ„ κ²€μ¦ν•˜λŠ”λ° μ‚¬μš©λœλ‹€.
헀더와 νŽ˜μ΄λ‘œλ“œλ₯Ό ν¬ν•¨ν•˜λŠ” 토큰 λ‚΄μš©, 그리고 λΉ„λ°€ ν‚€λ₯Ό μ‚¬μš©ν•˜μ—¬ μƒμ„±λ˜λ©°,
토큰이 μ‹ λ’°ν•˜λŠ” λ°œκΈ‰μžλ‘œλΆ€ν„° μ™”μŒμ„ 확인할 수 μžˆλ‹€.


Refresh Token:
Refresh Token은 일뢀 인증 μ‹œμŠ€ν…œμ—μ„œ μ‚¬μš©λ˜λ©°,
주둜 μ›λž˜ μ•‘μ„ΈμŠ€ 토큰이 만료될 λ•Œ μƒˆλ‘œμš΄ μ•‘μ„ΈμŠ€ 토큰을 λ°œκΈ‰λ°›κΈ° μœ„ν•΄ μ‚¬μš©λœλ‹€.

μ‚¬μš©μžλŠ” μ•‘μ„ΈμŠ€ 토큰이 λ§Œλ£Œλ˜λ”λΌλ„
μ‚¬μš©μž 이름과 μ•”ν˜Έλ₯Ό λ‹€μ‹œ μž…λ ₯ν•˜μ§€ μ•Šκ³ λ„ Refresh Token을 μ‚¬μš©ν•˜μ—¬
μƒˆλ‘œμš΄ μ•‘μ„ΈμŠ€ 토큰을 λ°œκΈ‰λ°›μ„ 수 μžˆλ‹€.


Access Token:
Access Token은 주둜 인증 및 κΆŒν•œ λΆ€μ—¬ μ‹œμŠ€ν…œμ—μ„œ μ‚¬μš©λ˜λ©°,
νŠΉμ • λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ μ•‘μ„ΈμŠ€ κΆŒν•œμ„ λΆ€μ—¬ν•˜κ±°λ‚˜
μ‚¬μš©μžλ₯Ό λŒ€μ‹ ν•˜μ—¬ μž‘μ—…μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” 토큰 μœ ν˜•μ΄λ‹€.

일반적으둜 Access Token은 수λͺ…이 짧으며,
ν΄λΌμ΄μ–ΈνŠΈ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ„œλ²„ λ¦¬μ†ŒμŠ€μ— μ ‘κ·Όν•  λ•Œ μ‚¬μš©λœλ‹€.

πŸ“ 19. OAuth μ„€λͺ…

OAuth(Open Authorization)은 인터넷 μ‚¬μš©μžκ°€ λΉ„λ°€λ²ˆν˜Έλ₯Ό κ³΅μœ ν•˜μ§€ μ•Šκ³ 
λ‹€λ₯Έ μ›Ήμ‚¬μ΄νŠΈλ‚˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μžμ‹ μ˜ 정보에 λŒ€ν•œ μ ‘κ·Ό κΆŒν•œμ„ λΆ€μ—¬ν•˜λŠ” κ°œλ°©ν˜• ν‘œμ€€μ΄λ‹€.
이λ₯Ό 톡해 λ³΄μ•ˆκ³Ό 개인 정보 λ³΄ν˜Έκ°€ κ°•ν™”λ˜λ©°,
μ‚¬μš©μžκ°€ μ–΄λ–€ 데이터에 λŒ€ν•œ μ•‘μ„ΈμŠ€ κΆŒν•œμ„ λΆ€μ—¬ν•˜κ³  μžˆλŠ”μ§€μ— λŒ€ν•œ 투λͺ…성을 μ œκ³΅ν•œλ‹€.

OAuthλŠ” 주둜 μ†Œμ…œ λ―Έλ””μ–΄ ν”Œλž«νΌμ—μ„œμ˜
μ†Œμ…œ λ―Έλ””μ–΄ ν”Œλž«νΌμ—μ„œμ˜ 둜그인 및 데이터 곡유,
ν΄λΌμš°λ“œ μ„œλΉ„μŠ€μ—μ„œμ˜ 파일 μ•‘μ„ΈμŠ€ κΆŒν•œ λΆ€μ—¬,
λ‹€λ₯Έ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— λŒ€ν•œ API 호좜 κΆŒν•œ λΆ€μ—¬ λ“± λ‹€μ–‘ν•œ μ‚¬λ‘€μ—μ„œ ν™œμš©λœλ‹€.

πŸ“ 20. ν΄λž˜μŠ€ν˜•κ³Ό ν•¨μˆ˜ν˜•μ˜ 차이λ₯Ό μ„€λͺ…(μ–΄λ–€ 방식을 주둜 ν™œμš©ν–ˆλŠ”κ°€?)

ν΄λž˜μŠ€ν˜• ν”„λ‘œκ·Έλž˜λ°μ€ 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° (OOP) νŒ¨λŸ¬λ‹€μž„μ„ λ”°λ₯΄κ³ ,
클래슀λ₯Ό μ‚¬μš©ν•˜μ—¬ 데이터와 λ©”μ„œλ“œλ₯Ό ν•¨κ»˜ μ •μ˜ν•˜κ³  객체λ₯Ό μƒμ„±ν•˜λŠ” 방식이며,
상속과 λ‹€ν˜•μ„±μ„ κ°•μ‘°ν•©λ‹ˆλ‹€.

ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ€ ν•¨μˆ˜λ₯Ό 일급 μ‹œλ―ΌμœΌλ‘œ μ·¨κΈ‰ν•˜λ©°,
ν•¨μˆ˜λ₯Ό λ³€μˆ˜μ— ν• λ‹Ήν•˜κ±°λ‚˜ ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜λ‘œ μ „λ‹¬ν•˜λ©°, ν•¨μˆ˜λ₯Ό λ°˜ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
주둜 데이터λ₯Ό ν•¨μˆ˜λ‘œ μ²˜λ¦¬ν•˜κ³  λΆ€μž‘μš©μ„ μ΅œμ†Œν™”ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•©λ‹ˆλ‹€.


ν΄λž˜μŠ€ν˜• ν”„λ‘œκ·Έλž˜λ°κ³Ό ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ˜ μ£Όμš” μ°¨μ΄λŠ” μ ‘κ·Ό λ°©μ‹μž…λ‹ˆλ‹€.
ν΄λž˜μŠ€ν˜• ν”„λ‘œκ·Έλž˜λ°μ€ 객체와 μƒνƒœλ₯Ό μ€‘μ‹¬μœΌλ‘œ ν•˜λ©° 데이터와 λ©”μ„œλ“œλ₯Ό μΊ‘μŠν™”ν•©λ‹ˆλ‹€.
반면 ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ€ ν•¨μˆ˜μ™€ 데이터 λ³€ν™˜μ„ μ€‘μ‹¬μœΌλ‘œ ν•˜λ©°
ν•¨μˆ˜λ₯Ό λͺ¨λ“ˆν™”λœ λ‹¨μœ„λ‘œ μ‚¬μš©ν•˜μ—¬ μ½”λ“œλ₯Ό κ΅¬μ„±ν•©λ‹ˆλ‹€.

ex. ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ„ 주둜 μ‚¬μš©ν•˜λ©°,
이 μŠ€νƒ€μΌμ„ μ„ νƒν•œ μ΄μœ λŠ” ν•¨μˆ˜λ₯Ό λͺ¨λ“ˆν™”λœ λ‹¨μœ„λ‘œ μ‘°ν•©ν•˜μ—¬ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.
이λ₯Ό 톡해 μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ„ 높이고 μœ μ§€ 보수λ₯Ό λ”μš± 효율적으둜 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ex.
ν΄λž˜μŠ€ν˜• ν”„λ‘œκ·Έλž˜λ°μ„ 주둜 ν™œμš©ν–ˆμœΌλ©°,
ν΄λž˜μŠ€ν˜• ν”„λ‘œκ·Έλž˜λ°μ€ μ½”λ“œμ˜ ꡬ쑰화와 λͺ¨λ“ˆν™”λ₯Ό κ°•ν™”ν•˜κ³ , μœ μ§€ 보수 κ°€λŠ₯성을 ν–₯μƒμ‹œν‚€λ©°,
객체 지ν–₯ λ””μžμΈ 원칙을 μ€€μˆ˜ν•˜μ—¬ μž¬μ‚¬μš©μ„±μ„ 높일 수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.
이둜 인해 μ•ˆμ •μ μ΄κ³  효율적인 λ„€νŠΈμ›Œν¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ°œλ°œν•˜λŠ” 데 큰 도움이 될 수 μžˆλ‹€λŠ” 이점이 μžˆμŠ΅λ‹ˆλ‹€.

πŸ“ 21. CI/CD μ„€λͺ…

CI (Continuous Integration(지속적 톡합)):
CIλŠ” μ†Œν”„νŠΈμ›¨μ–΄ 개발 ν”„λ‘œμ„ΈμŠ€μ—μ„œ μ—¬λŸ¬ κ°œλ°œμžκ°€ ν˜‘μ—…ν•˜μ—¬ μ†ŒμŠ€ μ½”λ“œ λ³€κ²½ 사항을 μ§€μ†μ μœΌλ‘œ ν†΅ν•©ν•˜λŠ” κ°œλ…μž…λ‹ˆλ‹€.

μ΄λŠ” μ½”λ“œ λ³€κ²½ 사항이 μΆ©λŒν•˜κ±°λ‚˜ λ¬Έμ œκ°€ λ°œμƒν•˜λŠ” 것을 λ°©μ§€ν•˜κΈ° μœ„ν•΄ κ°œλ°œμžκ°€ 자주 μ½”λ“œλ₯Ό κ³΅μœ ν•˜κ³ ,
μžλ™μœΌλ‘œ λΉŒλ“œν•˜κ³  ν…ŒμŠ€νŠΈν•˜μ—¬ ν†΅ν•©ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.

이λ₯Ό 톡해 μ½”λ“œ ν’ˆμ§ˆμ„ μœ μ§€ν•˜κ³  κ°œλ°œμžλ“€μ΄ λ³€κ²½ 사항을 λΉ λ₯΄κ²Œ κ³΅μœ ν•˜κ³  ν…ŒμŠ€νŠΈν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.

CD (Continuous Delivery(지속적 전달) λ˜λŠ”Continuous Deployment(지속적 배포)):
CDλŠ” CI와 ν…ŒμŠ€νŠΈλ₯Ό ν†΅κ³Όν•œ μ½”λ“œ λ³€κ²½ 사항을 μžλ™μœΌλ‘œ ν”„λ‘œλ•μ…˜ ν™˜κ²½μ— λ°°ν¬ν•˜λŠ” κ°œλ…μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

Continuous Delivery(지속적 전달) (CD):
μ½”λ“œ λ³€κ²½ 사항이 CI와 ν…ŒμŠ€νŠΈλ₯Ό ν†΅κ³Όν•œ ν›„,
μˆ˜λ™μœΌλ‘œ ν”„λ‘œλ•μ…˜ ν™˜κ²½μœΌλ‘œ 전달될 μ€€λΉ„κ°€ 된 μƒνƒœλ₯Ό μœ μ§€ν•©λ‹ˆλ‹€.
이것은 λ³€κ²½ 사항이 ν”„λ‘œλ•μ…˜ ν™˜κ²½μœΌλ‘œ μ „λ‹¬λ˜κΈ° μœ„ν•΄ 좔가적인 승인 λ˜λŠ” ν”„λ‘œμ„ΈμŠ€κ°€ ν•„μš”ν•  수 μžˆμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€.
λ³€κ²½ 사항은 ν”„λ‘œλ•μ…˜μœΌλ‘œ 배포될 수 μžˆμ§€λ§Œ,
배포 ν”„λ‘œμ„ΈμŠ€μ˜ μ΅œμ’… μŠΉμΈμ€ μˆ˜λ™μœΌλ‘œ μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€.

Continuous Deployment(지속적 배포) (CD):
μ½”λ“œ λ³€κ²½ 사항이 CI와 ν…ŒμŠ€νŠΈλ₯Ό ν†΅κ³Όν•œ ν›„ μžλ™μœΌλ‘œ ν”„λ‘œλ•μ…˜ ν™˜κ²½μœΌλ‘œ λ°°ν¬λ˜λŠ” κ°œλ…μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
λ³€κ²½ 사항이 μžλ™μœΌλ‘œ 배포되며,
이 λͺ¨λΈμ€ 배포 ν”„λ‘œμ„ΈμŠ€λ₯Ό μžλ™ν™”ν•˜κ³  λΉ λ₯Έ μ†Œν”„νŠΈμ›¨μ–΄ 릴리슀λ₯Ό κ°€λŠ₯ν•˜κ²Œ ν•©λ‹ˆλ‹€.

πŸ“ 22. TDD μ„€λͺ…

TDD(Test Driven Development) ν…ŒμŠ€νŠΈ 주도 κ°œλ°œμ€ μ†Œν”„νŠΈμ›¨μ–΄ 개발 방법둠 쀑 ν•˜λ‚˜λ‘œ,
기쑴의 개발 ν”„λ‘œμ„ΈμŠ€μ™€ λ‹€λ₯΄κ²Œ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό λ¨Όμ € μž‘μ„±ν•œ 후에
μ‹€μ œ μ½”λ“œλ₯Ό κ°œλ°œν•˜κ³  λ¦¬νŒ©ν† λ§ν•˜λŠ” 개발 μ ˆμ°¨μž…λ‹ˆλ‹€.

짧은 개발 주기의 λ°˜λ³΅μ„ μ€‘μš”μ‹œν•˜λ©°, μ• μžμΌ 방법둠 쀑 ν•˜λ‚˜μΈ eXtreme Programming(XP)μ—μ„œ 주둜 μ‚¬μš©λ˜λ©°,
이것은 "Test-First" κ°œλ…μ— κ·Όκ±°ν•©λ‹ˆλ‹€.

이λ₯Ό ν™œμš©ν•˜μ—¬ TDDλ₯Ό 톡해 μ½”λ“œμ˜ 신뒰성을 높이고 μœ μ§€ 보수λ₯Ό μš©μ΄ν•˜κ²Œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

(eXtreme Programming(XP):

  • μˆ˜μ‹œλ‘œ λ°œμƒν•˜λŠ” 고객의 μš”κ΅¬μ‚¬ν•­μ— μœ μ—°ν•˜κ²Œ λŒ€μ‘ν•˜κΈ° μœ„ν•΄ 고객의 참여와 개발 κ³Όμ •μ˜ λ°˜λ³΅μ„ κ·ΉλŒ€ν™”ν•˜μ—¬ 개발 생산성을 ν–₯μƒμ‹œν‚€λŠ” 방법이닀.)

("Test-First" κ°œλ…:
1. Fast: μœ λ‹› ν…ŒμŠ€νŠΈλŠ” λΉ λ₯΄κ²Œ μ‹€ν–‰λ˜κ³  λΉ λ₯΄κ²Œ κ²°κ³Όλ₯Ό μ•Œμ•„μ•Ό ν•œλ‹€.
2. Isolated / Independent: μœ λ‹› ν…ŒμŠ€νŠΈλŠ” κ·Έ 자체만으둜 μ‹€ν–‰λ˜μ–΄μ•Ό ν•œλ‹€.
3. Repeatable: μœ λ‹› ν…ŒμŠ€νŠΈλŠ” 반볡 κ°€λŠ₯ν•΄μ•Ό ν•œλ‹€.
4. Self-validating: μœ λ‹› ν…ŒμŠ€νŠΈλŠ” 자체 검증이 κ°€λŠ₯ν•΄μ•Ό ν•œλ‹€.
5. Thorough / Timely: μœ λ‹› ν…ŒμŠ€νŠΈλŠ” μ² μ €ν•˜κ³  μ μ ˆν•œ λ•Œμ— μž‘μ„±λ˜μ–΄μ•Ό ν•œλ‹€.)

πŸ“ 23. ν”„λ‘œμ„ΈμŠ€μ™€ μ“°λ ˆλ“œμ— λŒ€ν•΄μ„œ μ„€λͺ…(차이점)

  • ν”„λ‘œμ„ΈμŠ€λŠ” μ»΄ν“¨ν„°μ—μ„œ μ‹€ν–‰λ˜λŠ” 독립적인 ν”„λ‘œκ·Έλž¨μ˜ μΈμŠ€ν„΄μŠ€μž…λ‹ˆλ‹€.
    각 ν”„λ‘œμ„ΈμŠ€λŠ” 자체 λ©”λͺ¨λ¦¬ 곡간과 μ‹œμŠ€ν…œ μžμ›(CPU μ‹œκ°„, 파일 및 μž…μΆœλ ₯ μž₯치)을 ν• λ‹Ήλ°›κ³ ,
    ν”„λ‘œμ„ΈμŠ€λŠ” μ„œλ‘œ μ™„μ „νžˆ λ…λ¦½λ˜μ–΄ μžˆμ–΄ ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€κ°€ 였λ₯˜λ₯Ό μΌμœΌμΌœλ„ λ‹€λ₯Έ ν”„λ‘œμ„ΈλŠ” 였λ₯˜λ₯Ό 받지 μ•ŠμŠ΅λ‹ˆλ‹€.

  • μ“°λ ˆλ“œλŠ” μ–΄λ– ν•œ ν”„λ‘œκ·Έλž¨ λ‚΄μ—μ„œ, 특히 λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ μ‹€ν–‰λ˜λŠ” 독립적인 μ‹€ν–‰ νλ¦„μ˜ λ‹¨μœ„μž…λ‹ˆλ‹€.
    같은 ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ λ‹€λ₯Έ μ“°λ ˆλ“œμ™€ 곡유 λ©”λͺ¨λ¦¬ 곡간과 μžμ›μ„ μ‚¬μš©ν•˜λ©°,
    이둜 인해 μ“°λ ˆλ“œ κ°„ 데이터 κ³΅μœ μ™€ 톡신이 κ°„λ‹¨ν•˜κ²Œ μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€.
    ν•˜μ§€λ§Œ μ΄λŸ¬ν•œ 곡유둜 인해 μ“°λ ˆλ“œ κ°„μ˜ 동기화 좩돌 λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

차이점:
ν”„λ‘œμ„ΈμŠ€λŠ” μ„œλ‘œ μ™„μ „νžˆ λ…λ¦½λ˜μ–΄ μžˆμ–΄ ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€μ˜ 였λ₯˜κ°€ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ— 영ν–₯을 λ―ΈμΉ˜μ§€ μ•Šμ§€λ§Œ,
ν”„λ‘œμ„ΈμŠ€ κ°„μ˜ 톡신이 λ³΅μž‘ν•˜κ³  λΉ„μš©μ΄ 많이 λ“€κ³ , μžμ‹ λ§Œμ˜ 고유 곡간과 μžμ›μ„ ν• λ‹Ήλ°›μ•„ μ‚¬μš©ν•©λ‹ˆλ‹€.

λ°˜λ©΄μ—, μ“°λ ˆλ“œλŠ” 같은 ν”„λ‘œμ„ΈμŠ€μ—μ„œ μ‹€ν–‰λ˜λ©°,
μ“°λ ˆλ“œ κ°„μ˜ 톡신 비ꡐ적 κ°„λ‹¨ν•˜κ³  λΉ λ₯Έ 것에 λΉ„ν•΄,
λ‹€λ₯Έ μŠ€λ ˆλ“œμ˜ 곡간과 μžμ›μ„ κ³΅μœ ν•˜λ©΄μ„œ μ‚¬μš©ν•œλ‹€λŠ” 차이점이 μžˆμŠ΅λ‹ˆλ‹€.

πŸ“ 24. λ©€ν‹°ν”„λ‘œμ„ΈμŠ€μ™€ λ©€ν‹°μ“°λ ˆλ“œμ˜ νŠΉμ§• μ„€λͺ…

λ©€ν‹° ν”„λ‘œμ„ΈμŠ€λŠ” μ—¬λŸ¬ 개의 독립적인 ν”„λ‘œμ„ΈμŠ€κ°€ λ™μ‹œμ— μ‹€ν–‰λ˜λŠ” 것을 ν•œλ‹€.
각 ν”„λ‘œμ„ΈμŠ€λŠ” 자체 λ©”λͺ¨λ¦¬ 곡간을 가지며, μ„œλ‘œ κ°„μ„­ν•˜μ§€ μ•ŠμœΌλ©°, λ…λ¦½μ μœΌλ‘œ μ‹€ν–‰λœλ‹€.

ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€κ°€ 였λ₯˜λ‘œ 인해 μ’…λ£Œλ˜λ”λΌλ„ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λŠ” κ³„μ†ν•΄μ„œ μ‹€ν–‰λœλ‹€.

닀쀑 μ½”μ–΄ CPUλ₯Ό ν™œμš©ν•˜μ—¬ 병렬 처리λ₯Ό κ΅¬ν˜„ν•˜λŠ” 데 μ‚¬μš©λœλ‹€.

μ•ˆμ •μ„±μ„ ν™•λ³΄ν•œλ‹€λŠ” μž₯점을 κ°€μ§€μ§€λ§Œ ν”„λ‘œμ„ΈμŠ€ κ°„ 톡신이 λ³΅μž‘ν•˜κ³ 
μ˜€λ²„ν—€λ“œκ°€ λ°œμƒν•˜μ—¬ μ„±λŠ₯이 μ €ν•˜λ˜λŠ” κ²½μš°κ°€ μžˆλ‹€.


λ©€ν‹°μ“°λ ˆλ“œλŠ” ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ μ—¬λŸ¬ 개의 μŠ€λ ˆλ“œκ°€ λ™μ‹œμ— μ‹€ν–‰λ˜λŠ” 것을 μ˜λ―Έν•œλ‹€.

μŠ€λ ˆλ“œλŠ” 같은 ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ 곡유된 λ©”λͺ¨λ¦¬ 곡간을 가지며, 이둜 인해 μŠ€λ ˆλ“œ κ°„ 톡신이 κ°„λ‹¨ν•˜κ³  λΉ λ₯΄λ‹€.

λ©€ν‹°μ“°λ ˆλ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ μŠ€λ ˆλ“œ κ°„μ˜ 데이터 κ³΅μœ μ™€ μž‘μ—… λΆ„λ°°κ°€ 쉽고 λΉ λ₯΄κ²Œ 이루어진닀.

κ·ΈλŸ¬λ‚˜ μŠ€λ ˆλ“œ κ°„μ˜ 동기화와 경쟁 쑰건 문제λ₯Ό μ²˜λ¦¬ν•΄μ•Ό ν•˜λŠ” λ³΅μž‘μ„±μ΄ 있으며,
였λ₯˜ ν•˜λ‚˜κ°€ 전체 ν”„λ‘œμ„ΈμŠ€μ— 영ν–₯을 쀄 수 있고, 단일 ν”„λ‘œμ„ΈμŠ€μ˜ 경우 효과λ₯Ό κΈ°λŒ€ν•˜κΈ° μ–΄λ ΅λ‹€.

πŸ“ 25. 쿼리 μ΅œμ ν™”μ— λŒ€ν•΄ μ„€λͺ…, 방법

쿼리 μ΅œμ ν™”λŠ” λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œμ—μ„œ
데이터λ₯Ό 효율적으둜 κ²€μƒ‰ν•˜κ³  μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ SQL 쿼리의 μ‹€ν–‰ κ³„νšμ„ κ°œμ„ ν•˜λŠ” 과정을 μ˜λ―Έν•˜λ©°,

주둜 λ°μ΄ν„°λ² μ΄μŠ€ μ„±λŠ₯을 ν–₯μƒμ‹œν‚€κ³  응닡 μ‹œκ°„μ„ μ€„μ΄λŠ” 데 μ€‘μš”ν•œ 역할을 ν•©λ‹ˆλ‹€.

쿼리 μ΅œμ ν™” 방법은 주둜

  1. 인덱슀 μ‚¬μš©:
    데이터λ₯Ό λ² μ΄μŠ€μ—μ„œ ν•„μš”ν•œ 정보λ₯Ό μ°ΎκΈ° μœ„ν•΄ 인덱슀λ₯Ό ν™œμš©ν•œλ‹€.

  2. 톡계 정보 ν™œμš©:
    λ°μ΄ν„°λ² μ΄μŠ€λŠ” 톡계 정보λ₯Ό 기반으둜 ν•œ 데이터 μ•‘μ„ΈμŠ€ 및 처리 방법을 μ΅œμ ν™”ν•œλ‹€.

  3. μ‹œμŠ€ν…œ λͺ¨λ‹ˆν„°λ§:
    λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œμ„ λͺ¨λ‹ˆν„°λ§ν•˜μ—¬ μ„±λŠ₯ 이슈λ₯Ό μ‹λ³„ν•˜κ³  μ‘°μΉ˜ν•˜μ—¬ μŠ€ν…œμ˜ λΆ€ν•˜λ‚˜ 병λͺ© ν˜„μƒμ„ 쀄인닀.

  4. 캐싱:
    이전에 μ‹€ν–‰ν•œ 쿼리 κ²°κ³Όλ₯Ό μΊμ‹œμ— μ €μž₯ν•˜μ—¬ λ™μΌν•œ 쿼리가 λ‹€μ‹œ 싀행될 λ•Œ λ°μ΄ν„°λ² μ΄μŠ€μ— μ ‘κ·Όν•˜μ§€ μ•Šκ³  μΊμ‹œμ—μ„œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•œλ‹€.

  5. νŒŒν‹°μ…˜ 및 νŒŒν‹°μ…”λ‹:
    λŒ€μš©λŸ‰ ν…Œμ΄λΈ”μ„ νŒŒν‹°μ…˜μœΌλ‘œ λ‚˜λˆ„μ–΄ 데이터 관리 및 쿼리 μ„±λŠ₯을 μ΅œμ ν™”ν•œλ‹€.

πŸ“ 26. DB 둜직 μ΅œμ†Œν™”

DB λ‘œμ§μ„ μ΅œμ†Œν™”ν•˜λŠ” 것은 μ„±λŠ₯을 ν–₯μƒμ‹œν‚€κ³  μœ μ§€ 보수λ₯Ό κ°„μ†Œν™”ν•˜λŠ” 데 도움이 λ©λ‹ˆλ‹€.
예λ₯Ό λ“€μ–΄, μ΄λŸ¬ν•œ λ°©λ²•μœΌλ‘œ DB λ‘œμ§μ„ μ΅œμ†Œν™”ν•  수 μžˆλ‹€.

EX.

  1. μΌκ΄€λœ 데이터 λͺ¨λΈλ§:
    λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ”κ³Ό μ—”ν…Œν…Œλ₯Ό 일관성 있게 μ„€κ³„ν•˜κ³ 
    쀑볡 데이터λ₯Ό 쀄이고 일관성을 μœ μ§€ν•˜μ—¬ 데이터 쀑볡을 μ΅œμ†Œν™”ν™”κ³  무결성을 μœ μ§€ν•œλ‹€.

  2. λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 μ΅œμ ν™”:
    λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μˆ˜ν–‰ν•˜κΈ°λ³΄λ‹€λŠ” λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ ˆλ²¨μ—μ„œ μ²˜λ¦¬ν•œλ‹€.
    λ°μ΄ν„°λ² μ΄μŠ€λŠ” 데이터 μ €μž₯κ³Ό 관리에 쀑점을 λ‘λŠ” 것이 μ’‹λ‹€.

  3. 캐싱:
    반볡적으둜 λ™μΌν•œ 데이터λ₯Ό 검색해야 ν•˜λŠ” 경우,
    검색 κ²°κ³Όλ₯Ό μΊμ‹œν•˜μ—¬ λ°μ΄ν„°λ² μ΄μŠ€ μš”μ²­μ„ μ΅œμ†Œν™”ν•  수 μžˆλ‹€.

  4. 배치 μž‘μ—…:
    λŒ€λŸ‰μ˜ 데이터λ₯Ό μ²˜λ¦¬ν•΄μ•Ό ν•  λ•ŒλŠ” 배치 μž‘μ—…μ„ μ‚¬μš©ν•˜μ—¬,
    λ°μ΄ν„°λ² μ΄μŠ€ λΆ€ν•˜λ₯Ό μ΅œμ†Œν™”ν•  수 μžˆλ‹€.

  5. ν”„λ‘œνŒŒμΌλ§κ³Ό λͺ¨λ‹ˆν„°λ§:
    λ°μ΄ν„°λ² μ΄μŠ€ μ„±λŠ₯을 λͺ¨λ‹ˆν„°λ§ν•˜κ³ ,
    쿼리 μ‹€ν–‰ κ³„νšμ„ λΆ„μ„ν•˜μ—¬ 병λͺ© ν˜„μƒμ„ νŒŒμ•…ν•˜κ³  μ΅œμ ν™” μž‘μ—…μ„ μˆ˜ν–‰ν•œλ‹€.

πŸ“ 27. ν…ŒμŠ€νŠΈμ½”λ“œ μ„€λͺ…, ν™œμš© κ²½ν—˜

ν…ŒμŠ€νŠΈ μ½”λ“œλŠ” μ†Œν”„νŠΈμ›¨μ–΄ 개발 κ³Όμ •μ—μ„œ 개발된 μ†Œν”„νŠΈμ›¨μ–΄μ˜ κΈ°λŠ₯κ³Ό λ™μž‘μ„ ν™•μΈν•˜κ³  κ²€μ¦ν•˜κΈ° μœ„ν•œ μ½”λ“œμž…λ‹ˆλ‹€.

ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” μ΄μœ λŠ”
1. κ°œλ°œλ‹¨κ³„ μ΄ˆκΈ°μ— 문제λ₯Ό λ°œκ²¬ν•˜κ²Œ 도와쀀닀.
2. κ°œλ°œμžκ°€ λ‚˜μ€‘μ— μ½”λ“œλ₯Ό λ¦¬νŒ©ν† λ§ν•˜κ±°λ‚˜ 라이브러리 μ—…λ°μ΄νŠΈ λ“±μ—μ„œ κΈ°μ‘΄ κΈ°λŠ₯이 μ˜¬λ°”λ₯΄κ²Œ μž‘λ™ν•˜λŠ” 지λ₯Ό μ•Œ 수 μžˆλ‹€.
3. κΈ°λŠ₯에 λŒ€ν•œ λΆˆν™•μ‹€μ„±μ„ κ°μ†Œμ‹œν‚¬ 수 μžˆλ‹€.
4. μ‹œμŠ€ν…œμ— λŒ€ν•œ μ‹€μ œ λ¬Έμ„œλ₯Ό μ œκ³΅ν•œλ‹€.(λ‹¨μœ„ ν…ŒμŠ€νŠΈ μžμ²΄κ°€ λ¬Έμ„œλ‘œ μ‚¬μš© κ°€λŠ₯)
등이 μžˆμŠ΅λ‹ˆλ‹€.

EX.
주둜 ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό ν™œμš©ν•  λ•ŒλŠ”
API μ—”λ“œν¬μΈνŠΈμ˜ μš”μ²­κ³Ό 응닡 κ²€μ¦μœΌλ‘œ νŠΉμ • API μ—”λ“œν¬μΈνŠΈλ₯Ό ν˜ΈμΆœν•˜κ³  μš”μ²­ 및 응닡 데이터λ₯Ό κ²€μ¦ν•˜λŠ” ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν•˜μ—¬ API의 κΈ°λŠ₯을 ν™•μΈν•©λ‹ˆλ‹€.
λ˜λŠ”, μ™ΈλΆ€ μ„œλΉ„μŠ€λ‚˜ μ˜μ‘΄μ„±μ΄ μžˆλŠ” 경우, ν•΄λ‹Ή μ„œλΉ„μŠ€λ₯Ό λͺ¨μ˜(Mock)둜 λŒ€μ²΄ν•˜μ—¬ ν…ŒμŠ€νŠΈλ₯Ό μ§„ν–‰ν•©λ‹ˆλ‹€.
μ΄λ ‡κ²Œ ν•˜λ©΄ μ™ΈλΆ€ μ„œλΉ„μŠ€μ— μ˜μ‘΄ν•˜μ§€ μ•Šκ³ λ„ ν•΄λ‹Ή μ„œλΉ„μŠ€μ™€μ˜ 톡합을 검증할 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ“ 28. Array, LinkedList μ„€λͺ…, μ‚¬μš© μ—¬λΆ€

Array(λ°°μ—΄)λŠ” κ³ μ •λœ 크기의 μ—°μ†λœ λ©”λͺ¨λ¦¬ 곡간에 데이터 μš”μ†Œλ₯Ό μ €μž₯ν•˜λŠ” μ„ ν˜• 데이터 κ΅¬μ‘°μž…λ‹ˆλ‹€.
λ©”λͺ¨λ¦¬ μƒμ—μ„œ μ—°μ†μ μœΌλ‘œ μ €μž₯λ˜μ–΄ μžˆλŠ” νŠΉμ§•μ„ κ°–κ³  μžˆμ–΄ indexλ₯Ό ν†΅ν•œ 접근이 μš©μ΄ν•©λ‹ˆλ‹€.
ν•˜μ§€λ§Œ. λ°°μ—΄μ˜ ν¬κΈ°λŠ” 처음 생성할 λ•Œ μ •ν•˜λ©° μ΄ν›„μ—λŠ” λ³€κ²½ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

LinkedList(μ—°κ²° 리슀트)λŠ” μ—¬λŸ¬ 개의 λ…Έλ“œλ“€μ΄ 순차적으둜 μ—°κ²°λœ ν˜•νƒœλ₯Ό κ°–λŠ” 자료 ꡬ쑰이며,
각 λ…Έλ“œλŠ” λ©”λͺ¨λ¦¬μ˜ μ–΄λ–€ μœ„μΉ˜μ—λ‚˜ μ €μž₯될 수 있으며, λ…Έλ“œ κ°„μ˜ 연결을 톡해 데이터에 μ ‘κ·Όν•©λ‹ˆλ‹€.
ν•˜μ§€λ§Œ, 랜덀 μ•‘μ„ΈμŠ€κ°€ λΉ„νš¨μœ¨μ μ΄λ©°, μ • μœ„μΉ˜μ˜ 데이터에 μ ‘κ·Όν•˜λ €λ©΄ μ²˜μŒλΆ€ν„° 순차적으둜 λ…Έλ“œλ₯Ό 탐색해야 ν•©λ‹ˆλ‹€.

배열은 λΉ λ₯Έ 랜덀 μ•‘μ„ΈμŠ€μ™€ κ³ μ • 크기의 μ»¬λ ‰μ…˜μ„ λ‹€λ£° λ•Œ μœ μš©ν•˜λ©°,
μ—°κ²° λ¦¬μŠ€νŠΈλŠ” 동적인 데이터 μΆ”κ°€/μ‚­μ œμ™€ λ©”λͺ¨λ¦¬ 동적 할당이 ν•„μš”ν•˜κ±°λ‚˜ 순차적인 데이터 처리 μž‘μ—…μ— μ ν•©ν•©λ‹ˆλ‹€.

πŸ“ 29. AWS S3, EC2λ₯Ό μ‚¬μš©ν•˜λŠ” 이유, μ‚¬μš© κ²½ν—˜

AWS S3λŠ” 객체 μŠ€ν† λ¦¬μ§€ μ„œλΉ„μŠ€λ‘œ, 파일, 데이터 및 λ―Έλ””μ–΄ 자료λ₯Ό μ €μž₯ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
주둜 파일 및 데이터 λ°±μ—…, μ›Ή ν˜ΈμŠ€νŒ…, λ―Έλ””μ–΄ μŠ€ν† λ¦¬μ§€, 데이터 곡유 λ“±μ˜ λͺ©μ μœΌλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.

AWS EC2λŠ” 가상 μ„œλ²„λ₯Ό ν˜ΈμŠ€νŒ… ν•˜κΈ° μœ„ν•œ μ„œλΉ„μŠ€λ‘œ, μ‚¬μš©μžκ°€ ν•„μš”μ— 따라 가상 μ„œλ²„λ₯Ό μƒμ„±ν•˜κ³  μ‚¬μš©μžκ°€ ν•„μš”μ— 따라 ꡬ성할 수 μžˆμŠ΅λ‹ˆλ‹€.
주둜 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•˜κ³  ν™•μž₯ν•˜λŠ” 데 μ‚¬μš©λ˜λ©°, 가상 μ„œλ²„λ₯Ό λ™μ μœΌλ‘œ μ‘°μ •ν•˜μ—¬ νŠΈλž˜ν”½μ˜ 변동에 μ‹ μ†ν•˜κ²Œ λŒ€μ‘ν•  수 μžˆμ–΄ μœ μš©ν•©λ‹ˆλ‹€.

EX. μ‚¬μš© κ²½ν—˜
AWS EC2λ₯Ό μ΄μš©ν•˜μ—¬ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ ν˜ΈμŠ€νŒ…ν•˜κ³  κ΄€λ¦¬ν•œ 적이 μžˆμŠ΅λ‹ˆλ‹€.
예λ₯Ό λ“€μ–΄, ν•„μš”ν•œ λ³΄μ•ˆ κ·Έλ£Ή 및 λ„€νŠΈμ›Œν¬ ꡬ성을 μ„€μ •ν•˜μ—¬ μΈλ°”μš΄λ“œ 및 μ•„μ›ƒλ°”μš΄λ“œ νŠΈλž˜ν”½μ„ κ΄€λ¦¬ν•˜κ³ ,
μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ ν˜ΈμŠ€νŒ…ν•˜κ³  κ΄€λ¦¬ν•œ κ²½ν—˜μ΄ μžˆμŠ΅λ‹ˆλ‹€.

πŸ“ 30. μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜ μ„€λͺ…

μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ€ 컴퓨터 κ³΅ν•™μ—μ„œ μ€‘μš”ν•˜κ²Œ λ‹€λ£¨λŠ” 문제둜,
μ–΄λ–€ 데이터 셋이 μ£Όμ–΄μ‘Œμ„ λ•Œ 이λ₯Ό 정해진 μˆœμ„œλŒ€λ‘œ λ‚˜μ—΄ν•˜μ—¬ μž¬λ°°μΉ˜ν•˜λŠ” λ¬Έμ œμž…λ‹ˆλ‹€.

1. 버블 μ •λ ¬ (Bubble Sort):
버블 정렬은 μ΄μ›ƒν•œ 두 μš”μ†Œλ₯Ό λΉ„κ΅ν•˜κ³  ν•„μš”ν•œ 경우 μ„œλ‘œ κ΅ν™˜ν•©λ‹ˆλ‹€.
μ‹œκ°„ λ³΅μž‘λ„λŠ” μ΅œμ•…, 평균, μ΅œμ„  λͺ¨λ‘ O(n^2)이며, λ”°λΌμ„œ 큰 데이터 셋에 λŒ€ν•΄μ„œλŠ” λΉ„νš¨μœ¨μ μž…λ‹ˆλ‹€.

2. μ‚½μž… μ •λ ¬ (Insertion Sort):
배열을 μ •λ ¬λœ λΆ€λΆ„κ³Ό μ •λ ¬λ˜μ§€ μ•Šμ€ λΆ€λΆ„μœΌλ‘œ λ‚˜λˆ„κ³ , μ •λ ¬λ˜μ§€ μ•Šμ€ μš”μ†Œλ₯Ό μ μ ˆν•œ μœ„μΉ˜μ— μ‚½μž…ν•©λ‹ˆλ‹€.
μ‹œκ°„ λ³΅μž‘λ„λŠ” O(n^2)이며 μž‘μ€ 크기의 데이터에 μ ν•©ν•©λ‹ˆλ‹€.

3. 선택 μ •λ ¬ (Selection Sort):
주어진 λ°°μ—΄μ—μ„œ κ°€μž₯ μž‘μ€ μš”μ†Œλ₯Ό μ°Ύμ•„ 제일 μ•žμœΌλ‘œ μ΄λ™μ‹œν‚΅λ‹ˆλ‹€.
μ‹œκ°„ λ³΅μž‘λ„λŠ” O(n^2)이며, 버블 μ •λ ¬κ³Ό μ‚½μž… μ •λ ¬κ³Ό μœ μ‚¬ν•œ μ„±λŠ₯을 λ³΄μž…λ‹ˆλ‹€.

4. 병합 μ •λ ¬ (Merge Sort):
λΆ„ν•  정볡을 μ‚¬μš©ν•˜μ—¬ 배열을 반으둜 λ‚˜λˆˆ λ‹€μŒ, λΆ€λΆ„ 배열을 λ³‘ν•©ν•˜λ©΄μ„œ μ •λ ¬ν•©λ‹ˆλ‹€.
항상 O(n log n)의 μ‹œκ°„ λ³΅μž‘λ„λ₯Ό 가지며, μ•ˆμ •μ μΈ μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜ 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€.

5. 퀡 μ •λ ¬ (Quick Sort):
λΆ„ν•  정볡 방식을 μ‚¬μš©ν•˜λŠ” λΉ λ₯Έ μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜ 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€.
평균 μ‹œκ°„ λ³΅μž‘λ„λŠ” O(n log n)μ΄μ§€λ§Œ μ΅œμ•…μ˜ κ²½μš°μ—λŠ” O(n^2)이 될 수 있으며, λŒ€μš©λŸ‰ 데이터λ₯Ό λΉ λ₯΄κ²Œ μ •λ ¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

(
O(n^2)(O μ—” 제곱): μž…λ ₯ 데이터 크기 n에 λŒ€ν•΄ 이차 λ‹€ν•­μ‹μœΌλ‘œ μ„±μž₯ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜,
O(n log n)(O μ—” 둜그 μ—”): μž…λ ₯ 데이터 크기 n에 λŒ€ν•΄ 둜그 μ„ ν˜•μœΌλ‘œ μ„±μž₯ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜
)

0개의 λŒ“κΈ€