๐Ÿ“š Part 2. ๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ์—”์ง€๋‹ˆ์–ด๋ง ์›์น™

1. Asynchronous Programming (๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ)

๐Ÿ”„ ๊ฐœ๋… (Sync vs Async)

  • Synchronous (๋™๊ธฐ): ์š”์ฒญ(Request)์„ ๋ณด๋‚ด๊ณ  ์‘๋‹ต(Response)์ด ์˜ฌ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆผ (Blocking).
  • Asynchronous (๋น„๋™๊ธฐ): ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•จ (Non-blocking).

๐Ÿงต Threading vs Python Asyncio (Context Switching)

  • Threading (๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ):
    • OS๊ฐ€ ๊ด€๋ฆฌ: Context Switching(๋ฌธ๋งฅ ๊ตํ™˜)์ด OS์— ์˜ํ•ด ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค.
    • ๋น„์šฉ: Context Switching์€ ๊ฝค ๋น„์‹ผ(๋ฌด๊ฑฐ์šด) ์ž‘์—…์ž…๋‹ˆ๋‹ค.
    • ์ œ์–ด ๋ถˆ๊ฐ€๋Šฅ: ์–ธ์ œ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋กœ ๋„˜์–ด๊ฐˆ์ง€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ ํ•œ ์ค„ ์‹คํ–‰ ๋„์ค‘์—๋„ OS๊ฐ€ ๊ฐ•์ œ๋กœ ์Šค์œ„์นญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์˜ˆ) I/O ์ž‘์—… ์‹œ OS๊ฐ€ ๊ฐ•์ œ๋กœ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋กœ ์ „ํ™˜.
  • Asyncio (๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ):
    • App(Event Loop)์ด ๊ด€๋ฆฌ: Context Switching์ด Application ๋ ˆ๋ฒจ์—์„œ ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค. (๋‹จ์ผ ์Šค๋ ˆ๋“œ ๋‚ด)
    • ๋น„์šฉ: OS์˜ ๊ฐœ์ž…์ด ์—†์–ด ๋ฆฌ์†Œ์Šค ์†Œ๋ชจ๊ฐ€ ์ ๊ณ  ์ €๋ ดํ•ฉ๋‹ˆ๋‹ค.
    • ์ œ์–ด ๊ฐ€๋Šฅ: ๋‹จ์ผ ์Šค๋ ˆ๋“œ(Single Thread)๋ผ๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ, ๊ฐœ๋ฐœ์ž๊ฐ€ await๋ฅผ ๊ฑธ์ง€ ์•Š๋Š” ํ•œ ๋‹ค๋ฅธ ์ž‘์—…์ด ๋ผ์–ด๋“ค์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์ด ์ ์„ ํ™œ์šฉํ•ด ๋ฝ(Lock) ์—†์ด๋„ ํšจ์œจ์ ์ธ ์ฝ”๋”ฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
    • I/O Bound ์ž‘์—…(๋„คํŠธ์›Œํฌ, ๋””์Šคํฌ) ํšจ์œจ ๊ทน๋Œ€ํ™”

โš ๏ธ ์ €์ง€๋ฅด๊ธฐ ์‰ฌ์šด ์‹ค์ˆ˜ (Common Pitfalls)

  1. Blocking Event Loop:
    • async ํ•จ์ˆ˜ ๋‚ด์—์„œ time.sleep()์ด๋‚˜ ์ผ๋ฐ˜ requests.get() ๊ฐ™์€ Blocking ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ์ „์ฒด Event Loop๊ฐ€ ๋ฉˆ์ถฐ๋ฒ„๋ ค ๋น„๋™๊ธฐ์˜ ์ด์ ์ด ์‚ฌ๋ผ์ง.
    • CPU Bound ์ž‘์—…(๋ฌด๊ฑฐ์šด ์—ฐ์‚ฐ)๋„ Event Loop๋ฅผ ๋…์ ํ•˜๋ฏ€๋กœ ์ฃผ์˜ ํ•„์š”.
  2. Fire and Forget (์ข…๋ฃŒ ๋Œ€๊ธฐ ๋ฏธํก):
    • main ํ•จ์ˆ˜๊ฐ€ Task์˜ ์™„๋ฃŒ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€(await) ์•Š๊ณ  ์ข…๋ฃŒ๋˜๋ฉด, ์‹คํ–‰ ์ค‘์ด๋˜ Task(์˜ˆ: cook)๋„ ๊ฐ•์ œ ์ข…๋ฃŒ๋จ.
  3. Exception Handling:
    • Task ๋‚ด๋ถ€์—์„œ ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์œผ๋ฉด, Task๊ฐ€ ์กฐ์šฉํžˆ ์ฃฝ๊ฑฐ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ (์ตœ์‹  ํŒŒ์ด์ฌ์—์„œ๋Š” ๊ฒฝ๊ณ  ๋ฐœ์ƒ).

2. GIL (Global Interpreter Lock)

๐Ÿ”’ GIL์ด๋ž€?

  • ์ •์˜: Python ์ธํ„ฐํ”„๋ฆฌํ„ฐ(CPython)๊ฐ€ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋งŒ Python ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ์ œํ•œํ•˜๋Š” Mutex(์ž ๊ธˆ)์ž…๋‹ˆ๋‹ค.
  • ๋ฐœ์Œ: '๊ธธ' ํ˜น์€ '์งˆ'์ด๋ผ๊ณ  ์ฝ์Šต๋‹ˆ๋‹ค.
  • ์กด์žฌ ์ด์œ :
    1. Reference Counting ๋ณดํ˜ธ: Python์€ ๊ฐ์ฒด์˜ ์ฐธ์กฐ ํšŸ์ˆ˜(Reference Count)๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ, ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์ด ์ˆซ์ž๋ฅผ ๊ฑด๋“œ๋ฆฌ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋‚˜ ์ž˜๋ชป๋œ ํ•ด์ œ(Race Condition)๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด GIL์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    2. Thread-safe ํ•˜์ง€ ์•Š์€ C Extensions: ์ดˆ์ฐฝ๊ธฐ C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์ด ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์•ˆ์ „์žฅ์น˜๊ฐ€ ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค.
    3. ์—ญ์‚ฌ์  ๋ฐฐ๊ฒฝ: Python์ด ๊ฐœ๋ฐœ๋œ 1990๋…„๋Œ€์—๋Š” ๋ฉ€ํ‹ฐ์ฝ”์–ด ํ”„๋กœ์„ธ์„œ๊ฐ€ ๋“œ๋ฌผ์—ˆ์œผ๋ฏ€๋กœ, ๋‹น์‹œ์—๋Š” ํ•ฉ๋‹นํ•˜๊ณ  ํšจ์œจ์ ์ธ ์„ ํƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“‰ GIL์˜ ์˜ํ–ฅ๊ณผ ๋ฏธ๋ž˜

  • CPU-bound ์ž‘์—…์˜ ํ•œ๊ณ„:
    • ๊ณ„์‚ฐ ์œ„์ฃผ์˜ ์ž‘์—…(CPU-bound)์„ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ๋กœ ๋Œ๋ฆฌ๋ฉด, GIL ๋•Œ๋ฌธ์— ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๊ฐ€ ์•ˆ ๋  ๋ฟ๋”๋Ÿฌ ์žฆ์€ Context Switching์œผ๋กœ ์˜คํžˆ๋ ค ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋ณด๋‹ค ์„ฑ๋Šฅ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • I/O-bound ์ž‘์—…: ๋„คํŠธ์›Œํฌ๋‚˜ ํŒŒ์ผ ์ฒ˜๋ฆฌ ๋“ฑ ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ๊ธด ์ž‘์—…์—์„œ๋Š” GIL์ด ํ•ด์ œ๋˜๋ฏ€๋กœ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ๋„ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • Python 3.13+: ์‹คํ—˜์ ์œผ๋กœ GIL์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ, ํ–ฅํ›„ ๋ฒ„์ „(3.14 ๋“ฑ)์—์„œ๋Š” GIL์ด ์ œ๊ฑฐ๋œ 'Free-threaded Python'์ด ํ‘œ์ค€์ด ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

๐Ÿ’ก ํ€ด์ฆˆ: Process vs Thread

  • Process (ํ”„๋กœ์„ธ์Šค):
    • ๋ฆฌ์†Œ์Šค์˜ ์˜ค๋„ˆ(Owner). ๋…๋ฆฝ๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๊ฐ€์ง„ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ ๋‹จ์œ„.
    • ๋ฉ€ํ‹ฐ์ฝ”์–ด๋ฅผ ํ™œ์šฉํ•˜๋ ค๋ฉด ํ”„๋กœ์„ธ์Šค๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ๋„์›Œ์•ผ(Multiprocessing) ํ•˜๋ฉฐ, ์„œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ(IPC) ๋ฆฌ์†Œ์Šค๋ฅผ ํ†ต์งธ๋กœ ๊ณต์œ /๋ณต์‚ฌํ•ด์•ผ ํ•˜๋Š” ๋น„์šฉ์ด ๋“ญ๋‹ˆ๋‹ค.
  • Thread (์Šค๋ ˆ๋“œ):
    • CPU์˜ ์Šค์ผ€์ค„๋ง(Switching) ๋‹จ์œ„.
    • ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์ž์›(์ฝ”๋“œ, ๋ฐ์ดํ„ฐ, ํž™)์„ ๊ณต์œ ํ•˜๋ฏ€๋กœ ํ†ต์‹  ๋น„์šฉ์ด ์ ์Šต๋‹ˆ๋‹ค.

3. GC (Garbage Collection)

Python์€ ๊ธฐ๋ณธ์ ์œผ๋กœ Reference Counting์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ด๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด Generational Garbage Collection(์„ธ๋Œ€๋ณ„ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜)์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”„ Reference Counting (์ฐธ์กฐ ํšŸ์ˆ˜ ๊ณ„์‚ฐ)

  • ๊ฐ์ฒด๊ฐ€ ์ฐธ์กฐ๋  ๋•Œ๋งˆ๋‹ค ์นด์šดํŠธ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ณ , ์ฐธ์กฐ๊ฐ€ ํ•ด์ œ๋˜๋ฉด ๊ฐ์†Œ์‹œํ‚ต๋‹ˆ๋‹ค.
  • Count == 0์ด ๋˜๋Š” ์ˆœ๊ฐ„ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ฆ‰์‹œ ํ•ด์ œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ•œ๊ณ„: Cyclic Reference(์ˆœํ™˜ ์ฐธ์กฐ) ๋ฌธ์ œ(์„œ๋กœ๊ฐ€ ์„œ๋กœ๋ฅผ ์ฐธ์กฐํ•ด ์นด์šดํŠธ๊ฐ€ 0์ด ์•ˆ ๋˜๋Š” ์ƒํ™ฉ)๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

โ™ป๏ธ Generational GC (์„ธ๋Œ€๋ณ„ GC)

์ˆœํ™˜ ์ฐธ์กฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ํšจ์œจ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ๊ฐ์ฒด๋ฅผ 3๊ฐœ์˜ ์„ธ๋Œ€(Generation 0, 1, 2)๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  1. ๊ฐ€์„ค (Generational Hypothesis): "๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๋Š” ๊ธˆ๋ฐฉ ์ฃฝ๋Š”๋‹ค(Life-cycle์ด ์งง๋‹ค). ๋ฐ˜๋ฉด, ์˜ค๋ž˜ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” ๊ณ„์† ์˜ค๋ž˜ ์‚ด ๊ฒƒ์ด๋‹ค."
  2. ๋™์ž‘ ๋ฐฉ์‹:
    • ๋ชจ๋“  ์ƒˆ ๊ฐ์ฒด๋Š” Gen 0์—์„œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
    • GC์—์„œ ์‚ด์•„๋‚จ์œผ๋ฉด Gen 1, ๋˜ ์‚ด์•„๋‚จ์œผ๋ฉด Gen 2๋กœ ์Šน๊ฒฉ๋ฉ๋‹ˆ๋‹ค.
    • Gen 0์„ ๊ฐ€์žฅ ์ž์ฃผ ๊ฒ€์‚ฌํ•˜๊ณ , Gen 2๋Š” ์•„์ฃผ ๊ฐ€๋” ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  3. GC Threshold (์ž„๊ณ„๊ฐ’): (700, 10, 10) (๊ธฐ๋ณธ๊ฐ’ ์˜ˆ์‹œ)
    • 700: (๊ฐ์ฒด ์ƒ์„ฑ ์ˆ˜ - ํ•ด์ œ ์ˆ˜)๊ฐ€ 700์„ ๋„˜์œผ๋ฉด Gen 0 GC ์‹คํ–‰.
    • 10: Gen 0 GC๊ฐ€ 10๋ฒˆ ์‹คํ–‰๋  ๋•Œ Gen 1 GC 1๋ฒˆ ์‹คํ–‰.
    • 10: Gen 1 GC๊ฐ€ 10๋ฒˆ ์‹คํ–‰๋  ๋•Œ Gen 2 GC 1๋ฒˆ ์‹คํ–‰ (์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ ๊ฒ€์‚ฌ).
    • Tip: Gen 2 ๊ฒ€์‚ฌ๋Š” ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋ฏ€๋กœ, ์„ฑ๋Šฅ์„ ์œ„ํ•ด Threshold๋ฅผ ์กฐ์ ˆํ•˜๊ฑฐ๋‚˜ ์•„์˜ˆ ๋ง‰๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

4. ์ฝ”๋“œ ์›์น™ (Code Principles)

์ด ์›์น™๋“ค์€ ํŒŒ์ด์ฌ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ชจ๋“  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์™€ ํ˜„์—… ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ํ†ต์šฉ๋˜๋Š” ํ•ต์‹ฌ ๊ฐ€์น˜์ž…๋‹ˆ๋‹ค. AI ์ฝ”๋”ฉ ์‹œ๋Œ€์—๋„ ์—ฌ์ „ํžˆ ์œ ํšจํ•˜๋ฉฐ, ๊ฒฐ๊ตญ ํ•ต์‹ฌ์€ '์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๋Šฅ๋ ฅ'์œผ๋กœ ๊ท€๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

1๏ธโƒฃ DRY (Don't Repeat Yourself)

"๋˜‘๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ๋ฐ˜๋ณตํ•˜์ง€ ๋งˆ๋ผ"

  • ํ˜„์—…์˜ ํ˜„์‹ค: ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒฝ์šฐ๋ณด๋‹ค ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ฑฐ๋‚˜ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ํ›จ์”ฌ ๋งŽ์Œ.
  • ๋ฌธ์ œ์ :
    • ๊ธฐ์กด ์ฝ”๋“œ ์ดํ•ด ๋ถ€์กฑ: ๊ธฐ์กด์— ์ด๋ฏธ ๊ตฌํ˜„๋œ ๊ธฐ๋Šฅ์ด ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๊ณ  ์ƒˆ๋กœ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒ.
    • AI์˜ ํ•œ๊ณ„: AI๋Š” ์ƒˆ๋กœ์šด ์ฝ”๋“œ๋ฅผ ์ž˜ ์งœ์ฃผ์ง€๋งŒ, ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์˜ ๋ฌธ๋งฅ์„ ์™„๋ฒฝํžˆ ํŒŒ์•…ํ•˜์—ฌ "๊ธฐ์กด ํ•จ์ˆ˜๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋ผ"๊ณ  ๊ฐ€์ด๋“œํ•ด์ฃผ์ง€๋Š” ๋ชปํ•จ (์‚ฌ๋žŒ์˜ ๊ฒ€ํ†  ํ•„์ˆ˜).
  • ์ฃผ์˜์‚ฌํ•ญ (๊ณผ์œ ๋ถˆ๊ธ‰): ์ถ”์ƒํ™”๋Š” ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด์ง€๋งŒ, ๊ณผ๋„ํ•œ ์ถ”์ƒํ™”๋Š” ์˜คํžˆ๋ ค ๊ฐ€๋…์„ฑ(Readability)์„ ํ•ด์น  ์ˆ˜ ์žˆ์Œ. ํ•ฉ๋ฆฌ์ ์ธ ์ˆ˜์ค€์—์„œ ํƒ€ํ˜‘์ด ํ•„์š”.

2๏ธโƒฃ KISS (Keep It Simple, Stupid)

"๋‹จ์ˆœํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋ผ"

  • ๋ฌธ์ œ์ :
    • ๊ณผ์‹œ์š•๊ณผ ์š•์‹ฌ: ์•„๋Š” ๊ฒƒ์ด ๋งŽ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋””์ž์ธ ํŒจํ„ด์ด๋‚˜ ๊ณ ๊ธ‰ ๋ฌธ๋ฒ•(Meta-class ๋“ฑ)์„ ๋‚จ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ฆ.
    • ์กฐ๊ธฐ ์ตœ์ ํ™”: ๋ฏธ๋ž˜์˜ ์œ ์—ฐ์„ฑ์ด๋‚˜ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ๋ฏธ๋ฆฌ ๊ฑฑ์ •ํ•˜์—ฌ ๊ตฌ์กฐ๋ฅผ ๋ณต์žกํ•˜๊ฒŒ ์งฌ.
  • ๊ฒฐ๊ณผ: ์ฝ”๋“œ์˜ ํ๋ฆ„์„ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง€๊ณ , ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ๊ธ‰๊ฒฉํžˆ ๋–จ์–ด์ง.
  • ์ฐธ๊ณ  ์šฉ์–ด: RTFM (Read The Fxxx Manual) - ์งˆ๋ฌธํ•˜๊ธฐ ์ „์— ๋งค๋‰ด์–ผ์„ ๋จผ์ € ์ฝ์–ด๋ผ.

3๏ธโƒฃ YAGNI (You Aren't Gonna Need It)

"๊ทธ๊ฑด ๋‚˜์ค‘์— ํ•„์š”ํ•˜์ง€ ์•Š์„ ๊ฑฐ์•ผ (์ง€๊ธˆ ํ•„์š”ํ•œ ๊ฒƒ๋งŒ ๊ตฌํ˜„ํ•ด๋ผ)"

  • ๋ฌธ์ œ์ :
    • ์ƒ์ƒ์— ์˜ํ•œ ๊ฐœ๋ฐœ: ์•„๋ฌด๋„ ์š”๊ตฌํ•˜์ง€ ์•Š์•˜๋Š”๋ฐ "๋‚˜์ค‘์— ํ•„์š”ํ•  ๊ฒƒ ๊ฐ™์•„์„œ" ํ˜ผ์ž ๊ตฌํ˜„ํ•จ.
  • ํ•ต์‹ฌ: ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๋ถ€์žฌ. ํ•„์š”ํ•ด ๋ณด์ธ๋‹ค๋ฉด ๋™๋ฃŒ์™€ ์ƒ์˜ํ•˜๊ณ  ๊ณต์‹ ์š”๊ตฌ์‚ฌํ•ญ์œผ๋กœ ๋งŒ๋“  ๋’ค ๊ตฌํ˜„ํ•ด์•ผ ํ•จ.

5. ๋””์ž์ธ ํŒจํ„ด (Design Patterns)

์ฃผ๋‹ˆ์–ด ๋‹จ๊ณ„๋ฅผ ๋„˜์–ด ์ค‘๊ธ‰ ๊ฐœ๋ฐœ์ž๋กœ ์„ฑ์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ˜๋“œ์‹œ ํ•™์Šตํ•ด์•ผ ํ•˜๋Š” ์˜์—ญ์ž…๋‹ˆ๋‹ค.

๐Ÿ“š ์™œ ๋””์ž์ธ ํŒจํ„ด์„ ๋ฐฐ์›Œ์•ผ ํ•˜๋Š”๊ฐ€?

  1. Best Practice ํ•™์Šต: ์ˆ˜๋งŽ์€ ์‹œํ–‰์ฐฉ์˜ค ๋์— ์ •๋ฆฝ๋œ '๊ฐ€์žฅ ํšจ์œจ์ ์ธ ํ•ด๊ฒฐ์ฑ…'์ž„.
  2. ๊ณตํ†ต ๊ฐœ๋ฐœ ์–ธ์–ด: ๋™๋ฃŒ์™€์˜ ์˜์‚ฌ์†Œํ†ต ํšจ์œจ์„ฑ ์ฆ๋Œ€.
    • ์˜ˆ: "์—ฌ๊ธฐ๋Š” Factory Method ํŒจํ„ด์œผ๋กœ ํ’€์ฃ "๋ผ๊ณ  ํ–ˆ์„ ๋•Œ ์ฆ‰์‹œ ์ดํ•ดํ•ด์•ผ ํ•จ.
  3. ๋‚ด ๊ฐ€์น˜ ์ฆ๋ช…: ๋””์ž์ธ ํŒจํ„ด์„ ๋ชจ๋ฅด๋ฉด ์ˆ˜์ค€ ๋†’์€ ๊ธฐ์ˆ  ๋Œ€ํ™”๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ข‹์€ ํšŒ์‚ฌ์— ๋“ค์–ด๊ฐ€๊ธฐ ์–ด๋ ค์›€.

๐Ÿ—๏ธ ์ฃผ์š” ๋””์ž์ธ ํŒจํ„ด (GoF - Gang of Four)

GoF(Gang of Four)๋ผ ๋ถˆ๋ฆฌ๋Š” 4๋ช…์˜ ์ €์ž๊ฐ€ ์ •๋ฆฌํ•œ 23๊ฐ€์ง€ ํŒจํ„ด์ด ๋Œ€ํ‘œ์ ์ž…๋‹ˆ๋‹ค.

๋ถ„๋ฅ˜์„ค๋ช…ํŒจํ„ด ์ข…๋ฅ˜
์ƒ์„ฑ ํŒจํ„ด
(Creational)
๊ฐ์ฒด ์ƒ์„ฑ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ฒฐ์ •Abstract Factory, Builder, Factory Method, Prototype, Singleton
๊ตฌ์กฐ ํŒจํ„ด
(Structural)
ํด๋ž˜์Šค์™€ ๊ฐ์ฒด๋ฅผ ์กฐํ•ฉํ•ด ๋” ํฐ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ฆAdapter, Bridge, Composite, Decorator, Faรงade, Flyweight, Proxy
ํ–‰์œ„ ํŒจํ„ด
(Behavioral)
๊ฐ์ฒด ๊ฐ„์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์ฑ…์ž„ ๋ถ„๋ฐฐChain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method

๐Ÿ’ก ํ•™์Šต ์กฐ์–ธ

  • ๋Š์ž„์—†๋Š” ๊ณต๋ถ€: CS(Computer Science) ๋ถ„์•ผ๋Š” ๋งค์ผ ๊ณต๋ถ€ํ•˜์ง€ ์•Š์œผ๋ฉด ๋’ค์ฒ˜์ง.
  • ์ด๋ก ๊ณผ ์‹ค๋ฌด์˜ ๋ณ‘ํ–‰: ์ฑ…์œผ๋กœ๋งŒ ์ฝ์œผ๋ฉด ๊ธˆ๋ฐฉ ์žŠํ˜€์ง. ์‹ค๋ฌด ์ฝ”๋“œ์— ์ ์šฉํ•ด๋ณด๊ณ  ๊ฒ€ํ† ํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผ ๋‚ด ๊ฒƒ์ด ๋จ.

0๊ฐœ์˜ ๋Œ“๊ธ€