๐ 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)
- Blocking Event Loop:
async ํจ์ ๋ด์์ time.sleep()์ด๋ ์ผ๋ฐ requests.get() ๊ฐ์ Blocking ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด, ์ ์ฒด Event Loop๊ฐ ๋ฉ์ถฐ๋ฒ๋ ค ๋น๋๊ธฐ์ ์ด์ ์ด ์ฌ๋ผ์ง.
- CPU Bound ์์
(๋ฌด๊ฑฐ์ด ์ฐ์ฐ)๋ Event Loop๋ฅผ ๋
์ ํ๋ฏ๋ก ์ฃผ์ ํ์.
- Fire and Forget (์ข
๋ฃ ๋๊ธฐ ๋ฏธํก):
main ํจ์๊ฐ Task์ ์๋ฃ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง(await) ์๊ณ ์ข
๋ฃ๋๋ฉด, ์คํ ์ค์ด๋ Task(์: cook)๋ ๊ฐ์ ์ข
๋ฃ๋จ.
- Exception Handling:
- Task ๋ด๋ถ์์ ๋ฐ์ํ ์์ธ๋ฅผ ์ฒ๋ฆฌํ์ง ์์ผ๋ฉด, Task๊ฐ ์กฐ์ฉํ ์ฃฝ๊ฑฐ๋ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ ์ ์์ (์ต์ ํ์ด์ฌ์์๋ ๊ฒฝ๊ณ ๋ฐ์).
2. GIL (Global Interpreter Lock)
๐ GIL์ด๋?
- ์ ์: Python ์ธํฐํ๋ฆฌํฐ(CPython)๊ฐ ํ ๋ฒ์ ํ๋์ ์ค๋ ๋๋ง Python ๋ฐ์ดํธ์ฝ๋๋ฅผ ์คํํ๋๋ก ์ ํํ๋ Mutex(์ ๊ธ)์
๋๋ค.
- ๋ฐ์: '๊ธธ' ํน์ '์ง'์ด๋ผ๊ณ ์ฝ์ต๋๋ค.
- ์กด์ฌ ์ด์ :
- Reference Counting ๋ณดํธ: Python์ ๊ฐ์ฒด์ ์ฐธ์กฐ ํ์(Reference Count)๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๋๋ฐ, ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ์ด ์ซ์๋ฅผ ๊ฑด๋๋ฆฌ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์๋ ์๋ชป๋ ํด์ (Race Condition)๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ๋ง๊ธฐ ์ํด GIL์ ์ฌ์ฉํฉ๋๋ค.
- Thread-safe ํ์ง ์์ C Extensions: ์ด์ฐฝ๊ธฐ C ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ๋ฉํฐ์ค๋ ๋๋ฅผ ๊ณ ๋ คํ์ง ์์๊ธฐ ๋๋ฌธ์ ์์ ์ฅ์น๊ฐ ํ์ํ์ต๋๋ค.
- ์ญ์ฌ์ ๋ฐฐ๊ฒฝ: 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)๋ก ๋๋์ด ๊ด๋ฆฌํฉ๋๋ค.
- ๊ฐ์ค (Generational Hypothesis): "๋๋ถ๋ถ์ ๊ฐ์ฒด๋ ๊ธ๋ฐฉ ์ฃฝ๋๋ค(Life-cycle์ด ์งง๋ค). ๋ฐ๋ฉด, ์ค๋ ์ด์๋จ์ ๊ฐ์ฒด๋ ๊ณ์ ์ค๋ ์ด ๊ฒ์ด๋ค."
- ๋์ ๋ฐฉ์:
- ๋ชจ๋ ์ ๊ฐ์ฒด๋ Gen 0์์ ์์ํฉ๋๋ค.
- GC์์ ์ด์๋จ์ผ๋ฉด Gen 1, ๋ ์ด์๋จ์ผ๋ฉด Gen 2๋ก ์น๊ฒฉ๋ฉ๋๋ค.
- Gen 0์ ๊ฐ์ฅ ์์ฃผ ๊ฒ์ฌํ๊ณ , Gen 2๋ ์์ฃผ ๊ฐ๋ ๊ฒ์ฌํฉ๋๋ค.
- 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)
์ฃผ๋์ด ๋จ๊ณ๋ฅผ ๋์ด ์ค๊ธ ๊ฐ๋ฐ์๋ก ์ฑ์ฅํ๊ธฐ ์ํด ๋ฐ๋์ ํ์ตํด์ผ ํ๋ ์์ญ์
๋๋ค.
๐ ์ ๋์์ธ ํจํด์ ๋ฐฐ์์ผ ํ๋๊ฐ?
- Best Practice ํ์ต: ์๋ง์ ์ํ์ฐฉ์ค ๋์ ์ ๋ฆฝ๋ '๊ฐ์ฅ ํจ์จ์ ์ธ ํด๊ฒฐ์ฑ
'์.
- ๊ณตํต ๊ฐ๋ฐ ์ธ์ด: ๋๋ฃ์์ ์์ฌ์ํต ํจ์จ์ฑ ์ฆ๋.
- ์: "์ฌ๊ธฐ๋ Factory Method ํจํด์ผ๋ก ํ์ฃ "๋ผ๊ณ ํ์ ๋ ์ฆ์ ์ดํดํด์ผ ํจ.
- ๋ด ๊ฐ์น ์ฆ๋ช
: ๋์์ธ ํจํด์ ๋ชจ๋ฅด๋ฉด ์์ค ๋์ ๊ธฐ์ ๋ํ๊ฐ ๋ถ๊ฐ๋ฅํ๋ฉฐ, ์ข์ ํ์ฌ์ ๋ค์ด๊ฐ๊ธฐ ์ด๋ ค์.
๐๏ธ ์ฃผ์ ๋์์ธ ํจํด (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) ๋ถ์ผ๋ ๋งค์ผ ๊ณต๋ถํ์ง ์์ผ๋ฉด ๋ค์ฒ์ง.
- ์ด๋ก ๊ณผ ์ค๋ฌด์ ๋ณํ: ์ฑ
์ผ๋ก๋ง ์ฝ์ผ๋ฉด ๊ธ๋ฐฉ ์ํ์ง. ์ค๋ฌด ์ฝ๋์ ์ ์ฉํด๋ณด๊ณ ๊ฒํ ํ๋ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ๋ด ๊ฒ์ด ๋จ.