
๋ณธ ๊ฐ์ด๋์ ์ง๋ฌธ๋ค์ ํน์ ๊ธฐ์ ์ ์ถ์ ๋ฌธ์ ๊ฐ ์๋,
ํ์
๋ฐฑ์๋ ๊ฐ๋ฐ์๋ค์ด ์ค๋ฌด์์ ํ์ํ๋ค๊ณ ํ๋จํ๋ ํต์ฌ ์ญ๋๋ค์ ์ฒด๊ณ์ ์ผ๋ก ์ ๋ฆฌํ ๊ฒ์ด๋ค.
์ด ์ง๋ฌธ๋ค์ ์ง์ ํ ๊ฐ์น๋ ์ ๋ต์ ์๊ธฐํ๋ ๋ฐ ์์ง ์๋ค.
๊ฐ ์ง๋ฌธ์ ํตํด ์์ ์ ๊ธฐ์ ์ ์ดํด๋๋ฅผ ๊ฐ๊ด์ ์ผ๋ก ํ๊ฐํ๊ณ , ํ์ต์ด ํ์ํ ์์ญ์ ๋ช ํํ ์๋ณํ๋ ๋ฐ ์๋ค.
์ต์ํ์ง ์์ ๊ฐ๋ ์ ๋ง์ฃผํ์ ๋, ๊ทธ๊ฒ์ ํ์ต ๊ธฐํ๋ก ๋ฐ์๋ค์ด๋ ๋ง์๊ฐ์ง์ด ์ค์ํ๋ค.
๋คํธ์ํฌ & HTTP
1. HTTP METHOD์ ๋ํด ์ค๋ช ํด ๋ณด์ธ์.
HTTP METHOD์๋ GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS๊ฐ ์๋ค.
GET์ ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ์ด๋ ํ ๋ฆฌ์์ค๋ก๋ถํฐ ์ ๋ณด๋ฅผ ์์ฒญํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ method์ด๋ค.
์ฆ, ์๋ฒ์์ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ๋ณด์ฌ์ค ๋, ๊ฐ์ด๋ ๋ด์ฉ, ์ํ ๋ฑ์ ๋ฐ๊พธ์ง ์๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ค.
๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง๋ฉฐ ์บ์๊ฐ ๊ฐ๋ฅํ๋ค.
POST๋ ๋ฆฌ์์ค๋ฅผ ์์ฑํ๊ธฐ ์ํด ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋ ๋ฐ ์ฌ์ฉ๋๋ method์ด๋ค.
์๋ฒ์์ ๋ฐ์ดํฐ ๊ฐ์ด๋ ์ํ๋ฅผ ๋ฐ๊พธ๊ธฐ ์ํด์ ์ฌ์ฉํ๋ค. ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง์ง ์์ผ๋ฉฐ ์บ์๋์ง ์๋๋ค.
PUT์ ๋ฆฌ์์ค๋ฅผ ์์ ํ ๋์ฒดํ๊ฑฐ๋ ์๋ก ์์ฑํ ๋ ์ฌ์ฉํ๋ค. ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง๋ค.
DELETE๋ ์ง์ ๋ ๋ฆฌ์์ค๋ฅผ ์ญ์ ํ ๋ ์ฌ์ฉํ๋ค. ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง๋ค.
PATCH๋ ๋ฆฌ์์ค์ ๋ถ๋ถ์ ์ธ ์์ ์ ์ํด ์ฌ์ฉํ๋ค.
์ฃผ์ ์ฐจ์ด์ ์ผ๋ก๋, GET ์์ฒญ์ ์บ์๊ฐ ๋๋ POST๋ ์บ์๋์ง ์๋๋ค.
GET์ URL์ ํ๋ผ๋ฏธํฐ๊ฐ ๋ ธ์ถ๋์ง๋ง POST๋ body์ ๋ด๊ฒจ์ ์ ์ก๋๋ค.
2. HTTP ์ํ ์ฝ๋์ ๋ํด ์๋ ๋๋ก ๋งํด๋ณด์ธ์.
HTTP ์ํ ์ฝ๋๋ 1xx๋ถํฐ 5xx๊น์ง ๋ฒ์๋ณ๋ก ์๋ฏธ๊ฐ ๋๋๋ค.
1xx (์ ๋ณด์๋ต): ์์ฒญ์ด ์์ ๋์ด ์ฒ๋ฆฌ์ค์์ ์๋ฏธํ๋ค.
- 100 Continue: ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ๊ณ์ํด๋ ๋๋ค๋ ์๋ฏธ์ด๋ค.
2xx (์ฑ๊ณต): ์์ฒญ์ด ์ฑ๊ณต์ ์ผ๋ก ๋ฐ์๋ค์ฌ์ก์์ ์๋ฏธํ๋ค.
- 200 OK: ์์ฒญ์ด ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌ๋์๋ค.
- 201 Created: ์์ฒญ์ด ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌ๋์ด ์๋ก์ด ๋ฆฌ์์ค๊ฐ ์์ฑ๋์๋ค.
- 204 No Content: ์์ฒญ์ ์ฑ๊ณตํ์ง๋ง ์๋ตํ ๋ด์ฉ์ด ์๋ค.
3xx (๋ฆฌ๋ค์ด๋ ์ ): ์์ฒญ ์๋ฃ๋ฅผ ์ํด ์ถ๊ฐ ์์ ์กฐ์น๊ฐ ํ์ํ๋ค.
- 301 Moved Permanently: ๋ฆฌ์์ค๊ฐ ์๊ตฌ์ ์ผ๋ก ์ ์์น๋ก ์ด๋ํ๋ค.
- 302 Found: ๋ฆฌ์์ค๊ฐ ์์์ ์ผ๋ก ์ ์์น์ ์๋ค.
4xx (ํด๋ผ์ด์ธํธ ์ค๋ฅ): ์์ฒญ์ ๋ฌธ๋ฒ์ด ์๋ชป๋์๊ฑฐ๋ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ค.
- 400 Bad Request: ์๋ชป๋ ์์ฒญ์ด๋ค.
- 401 Unauthorized: ์ธ์ฆ์ด ํ์ํ๋ค.
- 403 Forbidden: ์๋ฒ๊ฐ ์์ฒญ์ ์ดํดํ์ง๋ง ์น์ธ์ ๊ฑฐ๋ถํ๋ค.
- 404 Not Found: ์๋ฒ๋ ์์ฒญ๋ฐ์ ๋ฆฌ์์ค๋ฅผ ์ฐพ์ ์ ์๋ค.
5xx (์๋ฒ ์ค๋ฅ): ์๋ฒ๊ฐ ๋ช ๋ฐฑํ ์ ํจํ ์์ฒญ์ ๋ํด ์ถฉ์กฑ์ ์คํจํ๋ค.
- 500 Internal Server Error: ์๋ฒ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
- 502 Bad Gateway: ๊ฒ์ดํธ์จ์ด ์ค๋ฅ์ด๋ค.
- 503 Service Unavailable: ์๋น์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
3. REST API์ ๋ํด ์ค๋ช ํ๊ณ , RESTful ์ค๊ณ ์์น์ ๋งํด๋ณด์ธ์.
REST(Representational State Transfer)๋ ์น์ ์ฅ์ ์ ์ต๋ํ ํ์ฉํ ์ ์๋ ์ํคํ ์ฒ ์คํ์ผ์ด๋ค.
REST์ 6๊ฐ์ง ์์น:
- Uniform Interface: ์ผ๊ด๋ ์ธํฐํ์ด์ค
- Stateless: ๋ฌด์ํ์ฑ - ๊ฐ ์์ฒญ์ ๋ ๋ฆฝ์ ์ด๋ค
- Cacheable: ์บ์ ์ฒ๋ฆฌ ๊ฐ๋ฅ
- Client-Server: ํด๋ผ์ด์ธํธ-์๋ฒ ๊ตฌ์กฐ
- Layered System: ๊ณ์ธตํ
- Code-On-Demand: ์ ํ์ ์์น
RESTful API ์ค๊ณ ์์น:
- URI๋ ์ ๋ณด์ ์์์ ํํํ๋ค (๋ช ์ฌ ์ฌ์ฉ)
- ์์์ ๋ํ ํ์๋ HTTP Method๋ก ํํํ๋ค
- URI์๋ ๋์ฌ๊ฐ ๋ค์ด๊ฐ์ง ์๋๋ค
- URI์ ๋ง์ง๋ง์๋ ์ฌ๋์(/)๋ฅผ ํฌํจํ์ง ์๋๋ค
- ํ์ดํ(-)์ ์ฌ์ฉํ์ง๋ง ์ธ๋๋ฐ(_)๋ ์ฌ์ฉํ์ง ์๋๋ค
4. ๋๊ธฐํ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ์ฐจ์ด์ ๊ณผ ์ฅ๋จ์ ์ ์ค๋ช ํ์ธ์.
๋๊ธฐ(Synchronous) ์ฒ๋ฆฌ:
- ์์ ์ ์์ฐจ์ ์ผ๋ก ์คํํ๋ค
- ์ด์ ์์ ์ด ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค
- ์ฝ๋ ์ดํด๊ฐ ์ฝ๊ณ ๋๋ฒ๊น ์ด ์ฉ์ดํ๋ค
- ๋ธ๋กํน์ด ๋ฐ์ํ์ฌ ์์คํ ์์ ํ์ฉ๋๊ฐ ๋ฎ์ ์ ์๋ค
๋น๋๊ธฐ(Asynchronous) ์ฒ๋ฆฌ:
- ์์ ์ ๋์์ ์คํํ๋ค
- ์์ ์๋ฃ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค์ ์์ ์ ์งํํ๋ค
- ์์คํ ์์ ํ์ฉ๋๊ฐ ๋๊ณ ์๋ต์ฑ์ด ์ข๋ค
- ์ฝ๋ ๋ณต์ก๋๊ฐ ์ฆ๊ฐํ๊ณ ๋๋ฒ๊น ์ด ์ด๋ ต๋ค
๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ:
- Callback
- Promise/Future
- async/await
- Reactive Programming
์ด์์ฒด์ & ์์คํ
5. ํ๋ก์ธ์ค์ ์ค๋ ๋์ ์ฐจ์ด์ ๋ํด ์ค๋ช ํด ๋ณด์ธ์.
ํ๋ก์ธ์ค๋ ์ด์์ฒด์ ๋ก๋ถํฐ ์์์ ํ ๋น๋ฐ๋ ์์ ์ ๋จ์์ด๋ฉฐ,
์ค๋ ๋๋ ํ๋ก์ธ์ค๊ฐ ํ ๋น๋ฐ์ ์์์ ์ด์ฉํ๋ ์คํ์ ๋จ์์ด๋ค.
ํ๋ก์ธ์ค๋ ๋ ๋ฆฝ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฐ์ง๋ฉฐ, ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ์ง ์๋๋ค.
๋ฐ๋ฉด ์ค๋ ๋๋ ๊ฐ์ ํ๋ก์ธ์ค ๋ด์ ๋ค๋ฅธ ์ค๋ ๋๋ค๊ณผ ํ ๋ฉ๋ชจ๋ฆฌ, ๋ฐ์ดํฐ ์์ญ ๋ฑ์ ๊ณต์ ํ๋ค.
ํ๋ก์ธ์ค ๊ฐ ํต์ (IPC)์ ๋ณต์กํ๊ณ ์ค๋ฒํค๋๊ฐ ํฌ์ง๋ง, ์ค๋ ๋ ๊ฐ ํต์ ์ ์๋์ ์ผ๋ก ๊ฐ๋จํ๋ค.
ํ์ง๋ง ์ค๋ ๋๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ค.
6. ๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ๊ณผ ๋์์ฑ ์ ์ด์ ๋ํด ์ค๋ช ํ์ธ์.
๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ์ ํฐ ๋ฌธ์ ๋ฅผ ์๊ฒ ๋๋์ด ๋์์ ํด๊ฒฐํ๋ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ์ด๋ค.
๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ์ ์ฅ์ :
- ์ฒ๋ฆฌ ์๋ ํฅ์
- ์์คํ ์์ ํ์ฉ๋ ์ฆ๊ฐ
- ์๋ต์ฑ ํฅ์
๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ์ ๋จ์ :
- ๊ตฌํ ๋ณต์ก๋ ์ฆ๊ฐ
- ๋๋ฒ๊น ์ด๋ ค์
- ๋๊ธฐํ ๋ฌธ์
๋์์ฑ ์ ์ด ๋ฉ์ปค๋์ฆ:
- ๋ฎคํ
์ค(Mutex)
- ํ ๋ฒ์ ํ๋์ ์ค๋ ๋๋ง ์๊ณ ์์ญ์ ์ ๊ทผ ๊ฐ๋ฅ
- Binary Semaphore์ ์ ์ฌํ์ง๋ง ์์ ๊ถ ๊ฐ๋ ์ด ์๋ค
- ์ธ๋งํฌ์ด(Semaphore)
- ์ ํด์ง ์๋งํผ์ ์ค๋ ๋๊ฐ ๋์์ ์ ๊ทผ ๊ฐ๋ฅ
- ์นด์ดํฐ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ค
- ๋ชจ๋ํฐ(Monitor)
- ๋ฎคํ ์ค์ ์กฐ๊ฑด ๋ณ์๋ฅผ ๊ฒฐํฉํ ๊ณ ์์ค ๋๊ธฐํ ๋๊ตฌ
๋ฐ์ ๊ฐ๋ฅํ ๋ฌธ์ :
- ๋ฐ๋๋ฝ(Deadlock): ๋ ๊ฐ ์ด์์ ์์ ์ด ์๋ก ์๋๋ฐฉ์ ์์ ์ด ๋๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์ํ
- ๋ผ์ด๋ธ๋ฝ(Livelock): ์ค๋ ๋๋ค์ด ๊ณ์ ์ํ๋ฅผ ๋ณ๊ฒฝํ์ง๋ง ์ง์ ์ด ์๋ ์ํ
- ๊ธฐ์ ์ํ(Starvation): ํน์ ์ค๋ ๋๊ฐ ๊ณ์ํด์ ์์์ ํ ๋น๋ฐ์ง ๋ชปํ๋ ์ํ
7. GC(๊ฐ๋น์ง ์ปฌ๋ ์ )์ ๋ํด ์ค๋ช ํ์์ค.
GC๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋์ ์ผ๋ก ํ ๋นํ ๋ฉ๋ชจ๋ฆฌ ์์ญ ์ค ๋ ์ด์ ์ฐ์ด์ง ์๋ ์์ญ์ ์๋์ผ๋ก ์ฐพ์์ ํด์ ํ๋ ๊ธฐ๋ฅ์ด๋ค.
Java์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ:
- Young Generation: ์๋ก ์์ฑ๋ ๊ฐ์ฒด๋ค์ด ์์นํ๋ค (Eden, Survivor 0, Survivor 1)
- Old Generation: Young Generation์์ ์ด์๋จ์ ๊ฐ์ฒด๋ค์ด ์ด๋ํ๋ค
- Metaspace: ํด๋์ค ๋ฉํ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ค
GC ๊ณผ์ :
- Minor GC: Young Generation์์ ๋ฐ์ํ๋ GC
- Major GC: Old Generation์์ ๋ฐ์ํ๋ GC
- Full GC: ์ ์ฒด ๋ฉ๋ชจ๋ฆฌ์์ ๋ฐ์ํ๋ GC (์ฑ๋ฅ์ ํฐ ์ํฅ)
Full GC๊ฐ ๋น๋ฒํ๊ฒ ๋ฐ์ํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ์ฌ๊ฐํ ์ํฅ์ ๋ฏธ์น๋ฏ๋ก, ์ ์ ํ JVM ํ๋์ด ํ์ํ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค
8. RDB์ NoSQL์ ์ฐจ์ด์ ๋ํด ์ค๋ช ํด ๋ณด์ธ์.
RDBMS๋ ์ ํด์ง ์คํค๋ง๊ฐ ์กด์ฌํ๊ณ ACID ์์ฑ์ ๋ณด์ฅํ๋ค. ํ ์ด๋ธ ๊ฐ์ ๊ด๊ณ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ฉฐ, SQL์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๋ค. ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ด ์ค์ํ ๊ธ์ต, ํ๊ณ ์์คํ ์ ์ ํฉํ๋ค.
NoSQL์ ์ ํด์ง ์คํค๋ง๊ฐ ์์ด ๋ฐ์ดํฐ ๊ตฌ์กฐ ๋ณํ๊ฐ ์์ ๋กญ๊ณ ๋ฐ์ดํฐ ๋ถ์ฐ์ด ์ฉ์ดํ๋ค๋ ์ฅ์ ์ด ์๋ค. Document, Key-Value, Column-family, Graph ๋ฑ ๋ค์ํ ํํ๊ฐ ์๋ค. ํ์ฅ์ฑ์ด ๋ฐ์ด๋์ง๋ง ๋ฐ์ดํฐ ์ผ๊ด์ฑ ๋ณด์ฅ์ด ์๋์ ์ผ๋ก ์ฝํ๋ค.
NoSQL์ ์ฅ์ ์ ์คํค๋ง์ ์ ์ฐ์ฑ, ์ํ์ ํ์ฅ ์ฉ์ด์ฑ, ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ฑ๋ฅ์ด๋ค. ๋จ์ ์ผ๋ก๋ ๋ฐ์ดํฐ ์ค๋ณต ๋ฐ์ ๊ฐ๋ฅ์ฑ, ๋ณต์กํ ์ฟผ๋ฆฌ ์ฒ๋ฆฌ์ ์ด๋ ค์, ACID ์์ฑ ๋ณด์ฅ์ ํ๊ณ๊ฐ ์๋ค.
9. DB์์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ค ์ฅ์ ์ด ์์๊น์?
DB์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ ๊ฒ์ ์ฑ๋ฅ์ด ๋ํญ ํฅ์๋๋ค. ์ธ๋ฑ์ค๊ฐ ์๋ค๋ฉด ์ ์ฒด ํ ์ด๋ธ์ ์ค์บ(Full Table Scan)ํด์ผ ํ์ง๋ง, ์ธ๋ฑ์ค๊ฐ ์๋ค๋ฉด B-Tree ๊ตฌ์กฐ๋ฅผ ํตํด O(log n) ์๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ์ ์๋ค.
์ธ๋ฑ์ค์ ์ฅ์ :
- ๊ฒ์ ์๋ ํฅ์
- ORDER BY, GROUP BY ์ ์ฑ๋ฅ ํฅ์
- JOIN ์ฐ์ฐ ์ฑ๋ฅ ํฅ์
์ธ๋ฑ์ค์ ๋จ์ :
- ์ถ๊ฐ์ ์ธ ์ ์ฅ ๊ณต๊ฐ ํ์
- INSERT, UPDATE, DELETE ์ ์ธ๋ฑ์ค ๊ฐฑ์ ์ผ๋ก ์ธํ ์ฑ๋ฅ ์ ํ
- ์๋ชป๋ ์ธ๋ฑ์ค ์ค๊ณ ์ ์คํ๋ ค ์ฑ๋ฅ ์ ํ ๊ฐ๋ฅ
10. ํธ๋์ญ์ ๊ณผ ACID ์์ฑ์ ๋ํด ์ค๋ช ํ์ธ์.
ํธ๋์ญ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํ๋ฅผ ๋ณํ์ํค๊ธฐ ์ํด ์ํํ๋ ์์ ๋จ์์ด๋ค.
ACID ์์ฑ:
- Atomicity (์์์ฑ)
- ํธ๋์ญ์ ์ ๋ชจ๋ ์ฑ๊ณตํ๊ฑฐ๋ ๋ชจ๋ ์คํจํด์ผ ํ๋ค
- All or Nothing ์์น
- Consistency (์ผ๊ด์ฑ)
- ํธ๋์ญ์ ์คํ ์ ํ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ผ๊ด๋ ์ํ๋ฅผ ์ ์งํด์ผ ํ๋ค
- ์ ์ฝ์กฐ๊ฑด, ๊ท์น ๋ฑ์ด ํญ์ ๋ง์กฑ๋์ด์ผ ํ๋ค
- Isolation (๊ณ ๋ฆฝ์ฑ)
- ๋์์ ์คํ๋๋ ํธ๋์ญ์ ๋ค์ด ์๋ก ์ํฅ์ ์ฃผ์ง ์์์ผ ํ๋ค
- ๊ฒฉ๋ฆฌ ์์ค: Read Uncommitted, Read Committed, Repeatable Read, Serializable
- Durability (์ง์์ฑ)
- ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋ ํธ๋์ญ์ ์ ์๊ตฌ์ ์ผ๋ก ์ ์ฅ๋์ด์ผ ํ๋ค
11. ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฝ(Lock)๊ณผ ๊ฒฉ๋ฆฌ ์์ค์ ๋ํด ์ค๋ช ํ์ธ์.
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฝ์ ๋์์ฑ ์ ์ด๋ฅผ ์ํด ํธ๋์ญ์ ์ด ๋ฐ์ดํฐ์ ์ ๊ทผํ ๋ ๋ค๋ฅธ ํธ๋์ญ์ ์ ์ ๊ทผ์ ์ ํํ๋ ๋ฉ์ปค๋์ฆ์ด๋ค.
๋ฝ์ ์ข ๋ฅ:
๊ณต์ ๋ฝ(Shared Lock, S-Lock):
- ์ฝ๊ธฐ ์ ์ฉ ๋ฝ
- ์ฌ๋ฌ ํธ๋์ญ์ ์ด ๋์์ ํ๋ ๊ฐ๋ฅ
- ๋ฐ์ดํฐ ์์ ์ ๋ฐฉ์งํ๋ค
๋ฐฐํ ๋ฝ(Exclusive Lock, X-Lock):
- ์ฝ๊ธฐ/์ฐ๊ธฐ ๋ชจ๋ ๋ ์ ํ๋ ๋ฝ
- ํ ๋ฒ์ ํ๋์ ํธ๋์ญ์ ๋ง ํ๋ ๊ฐ๋ฅ
- ๋ค๋ฅธ ๋ชจ๋ ์ ๊ทผ์ ์ฐจ๋จํ๋ค
๊ฒฉ๋ฆฌ ์์ค(Isolation Level):
- READ UNCOMMITTED
- ๊ฐ์ฅ ๋ฎ์ ๊ฒฉ๋ฆฌ ์์ค
- Dirty Read ๋ฐ์ ๊ฐ๋ฅ
- READ COMMITTED
- ์ปค๋ฐ๋ ๋ฐ์ดํฐ๋ง ์ฝ๊ธฐ ๊ฐ๋ฅ
- Non-Repeatable Read ๋ฐ์ ๊ฐ๋ฅ
- REPEATABLE READ
- ๋์ผํ ํธ๋์ญ์ ์์ ๊ฐ์ ๊ฒฐ๊ณผ ๋ณด์ฅ
- Phantom Read ๋ฐ์ ๊ฐ๋ฅ
- SERIALIZABLE
- ๊ฐ์ฅ ๋์ ๊ฒฉ๋ฆฌ ์์ค
- ๋ชจ๋ ์ด์ ํ์ ๋ฐฉ์งํ์ง๋ง ์ฑ๋ฅ ์ ํ
12. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทํ์ ๋ํด ์ค๋ช ํ์ธ์.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทํ๋ ์ค๋ณต์ ์ต์ํํ๊ณ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ํ ์ด๋ธ์ ๊ตฌ์กฐํํ๋ ๊ณผ์ ์ด๋ค.
์ ๊ทํ ๋จ๊ณ:
1NF (์ 1์ ๊ทํ):
- ํ ์ด๋ธ์ ์ปฌ๋ผ์ด ์์๊ฐ(ํ๋์ ๊ฐ)์ ๊ฐ์ ธ์ผ ํ๋ค
- ์ค๋ณต๋๋ ํญ๋ชฉ์ด ์์ด์ผ ํ๋ค
2NF (์ 2์ ๊ทํ):
- 1NF๋ฅผ ๋ง์กฑํด์ผ ํ๋ค
- ๊ธฐ๋ณธํค๊ฐ ์๋ ์์ฑ๋ค์ด ๊ธฐ๋ณธํค์ ์์ ํจ์ ์ข ์๋์ด์ผ ํ๋ค
3NF (์ 3์ ๊ทํ):
- 2NF๋ฅผ ๋ง์กฑํด์ผ ํ๋ค
- ๊ธฐ๋ณธํค๊ฐ ์๋ ์์ฑ๋ค ๊ฐ์ ์ดํ์ ํจ์ ์ข ์์ด ์์ด์ผ ํ๋ค
BCNF (Boyce-Codd ์ ๊ทํ):
- 3NF๋ฅผ ๋ง์กฑํด์ผ ํ๋ค
- ๊ฒฐ์ ์๊ฐ ํ๋ณดํค๊ฐ ๋์ด์ผ ํ๋ค
์ ๊ทํ์ ์ฅ์ :
- ๋ฐ์ดํฐ ์ค๋ณต ์ต์ํ
- ๋ฐ์ดํฐ ์ผ๊ด์ฑ ๋ณด์ฅ
- ๋ฐ์ดํฐ ๊ฐฑ์ ์ด์ ๋ฐฉ์ง
์ ๊ทํ์ ๋จ์ :
- ์กฐ์ธ ์ฐ์ฐ ์ฆ๊ฐ๋ก ์ธํ ์ฑ๋ฅ ์ ํ ๊ฐ๋ฅ์ฑ
- ์ฟผ๋ฆฌ ๋ณต์ก๋ ์ฆ๊ฐ
13. ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณต์ (Replication)์ ์ค๋ฉ(Sharding)์ ๋ํด ์ค๋ช ํ์ธ์.
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณต์ (Replication): ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ด์ฉ์ ์ฌ๋ฌ ๋ ธ๋์ ๋ณต์ฌํ์ฌ ์ ์ฅํ๋ ๊ธฐ์ ์ด๋ค.
๋ณต์ ์ ํ:
- Master-Slave ๋ณต์
- ํ๋์ Master DB์ ์ฌ๋ฌ Slave DB ๊ตฌ์ฑ
- ์ฐ๊ธฐ๋ Master์์, ์ฝ๊ธฐ๋ Slave์์ ์ฒ๋ฆฌ
- ์ฝ๊ธฐ ์ฑ๋ฅ ํฅ์๊ณผ ๋ฐฑ์ ํจ๊ณผ
- Master-Master ๋ณต์
- ๋ชจ๋ ๋ ธ๋๊ฐ ์ฝ๊ธฐ/์ฐ๊ธฐ ๊ฐ๋ฅ
- ์ถฉ๋ ํด๊ฒฐ ๋ฉ์ปค๋์ฆ ํ์
- ๋์ ๊ฐ์ฉ์ฑ ์ ๊ณต
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๋ฉ(Sharding): ํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ๋ฌ ๊ฐ์ ์์ ์กฐ๊ฐ(Shard)๋ก ๋๋์ด ๋ถ์ฐ ์ ์ฅํ๋ ๊ธฐ์ ์ด๋ค.
์ค๋ฉ ์ ๋ต:
- Range-based Sharding: ๋ฐ์ดํฐ ๋ฒ์ ๊ธฐ์ค์ผ๋ก ๋ถํ
- Hash-based Sharding: ํด์ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ถํ
- Directory-based Sharding: ๋ณ๋์ ์กฐํ ํ ์ด๋ธ ์ฌ์ฉ
์ค๋ฉ์ ์ฅ์ :
- ์ํ ํ์ฅ์ฑ
- ์ฑ๋ฅ ํฅ์
- ์ฅ์ ๊ฒฉ๋ฆฌ
์ค๋ฉ์ ๋จ์ :
- ๊ตฌํ ๋ณต์ก์ฑ
- ๋ฆฌ๋ฐธ๋ฐ์ฑ ์ด๋ ค์
- ํฌ๋ก์ค ์ค๋ ์ฟผ๋ฆฌ ๋ณต์ก์ฑ
- ๋ฐ์ดํฐ ๋ถ์ผ์น ๊ฐ๋ฅ์ฑ
์๋ฃ๊ตฌ์กฐ & ์๊ณ ๋ฆฌ์ฆ
14. ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ณ ์๊ฐ ๋ณต์ก๋๋ฅผ ๋งํด๋ณด์ธ์.
๋ฐฐ์ด(Array):
- ์ ๊ทผ: O(1)
- ๊ฒ์: O(n)
- ์ฝ์ : O(n)
- ์ญ์ : O(n)
์ฐ๊ฒฐ ๋ฆฌ์คํธ(Linked List):
- ์ ๊ทผ: O(n)
- ๊ฒ์: O(n)
- ์ฝ์ : O(1) - ์์น๋ฅผ ์ ๋
- ์ญ์ : O(1) - ์์น๋ฅผ ์ ๋
ํด์ ํ ์ด๋ธ(Hash Table):
- ์ ๊ทผ: O(1) ํ๊ท , O(n) ์ต์
- ๊ฒ์: O(1) ํ๊ท , O(n) ์ต์
- ์ฝ์ : O(1) ํ๊ท , O(n) ์ต์
- ์ญ์ : O(1) ํ๊ท , O(n) ์ต์
์ด์ง ํ์ ํธ๋ฆฌ(BST):
- ์ ๊ทผ: O(log n) ํ๊ท , O(n) ์ต์
- ๊ฒ์: O(log n) ํ๊ท , O(n) ์ต์
- ์ฝ์ : O(log n) ํ๊ท , O(n) ์ต์
- ์ญ์ : O(log n) ํ๊ท , O(n) ์ต์
15. ์คํ 2๊ฐ๋ฅผ ํ์ฉํด์ Queue์ฒ๋ผ ๋์ํ๋ ํด๋์ค๋ฅผ ๋ง๋ค์ด๋ณด์ธ์.
์คํ์ LIFO(Last In First Out) ๊ตฌ์กฐ์ด๊ณ , ํ๋ FIFO(First In First Out) ๊ตฌ์กฐ์ด๋ค.
์คํ 2๊ฐ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค:
- ์ ๋ ฅ ์คํ(Input Stack): ์๋ก์ด ์์๋ค์ ์ ์ฅํ๋ค
- ์ถ๋ ฅ ์คํ(Output Stack): ์์๋ค์ ๊บผ๋ผ ๋ ์ฌ์ฉํ๋ค
๋์ ์๋ฆฌ:
- Enqueue: ์ ๋ ฅ ์คํ์ pushํ๋ค
- Dequeue:
- ์ถ๋ ฅ ์คํ์ด ๋น์ด์์ง ์์ผ๋ฉด ์ถ๋ ฅ ์คํ์์ popํ๋ค
- ์ถ๋ ฅ ์คํ์ด ๋น์ด์์ผ๋ฉด ์ ๋ ฅ ์คํ์ ๋ชจ๋ ์์๋ฅผ ์ถ๋ ฅ ์คํ์ผ๋ก ์ด๋์ํจ ํ popํ๋ค
์ด๋ ๊ฒ ํ๋ฉด ์ ๋ ฅ ์คํ์ ์์๊ฐ ์ถ๋ ฅ ์คํ์์๋ ๋ค๋ฐ๋์ด์ FIFO ์์๊ฐ ๋๋ค.
16. ์บ์ ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ์ ์ค๋ช ํ์ธ์.
์บ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ฐ๋ ์ฐผ์ ๋ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ ์ง ๊ฒฐ์ ํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
์ฃผ์ ์บ์ ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ:
- FIFO (First In First Out)
- ๊ฐ์ฅ ๋จผ์ ๋ค์ด์จ ๋ฐ์ดํฐ๋ฅผ ๋จผ์ ์ ๊ฑฐํ๋ค
- ๊ตฌํ์ด ๊ฐ๋จํ์ง๋ง ์ต์ ์ ์ฑ๋ฅ์ ๋ณด์ฅํ์ง ์๋๋ค
- LRU (Least Recently Used)
- ๊ฐ์ฅ ์ค๋ซ๋์ ์ฌ์ฉ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ๋ค
- ์ง์ญ์ฑ ์๋ฆฌ์ ๊ธฐ๋ฐํ์ฌ ์ข์ ์ฑ๋ฅ์ ๋ณด์ธ๋ค
- LFU (Least Frequently Used)
- ์ฌ์ฉ ๋น๋๊ฐ ๊ฐ์ฅ ๋ฎ์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ๋ค
- ์ฐธ์กฐ ํจํด์ ๊ณ ๋ คํ ์๊ณ ๋ฆฌ์ฆ์ด๋ค
- Random
- ๋ฌด์์๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ๋ค
- ๊ตฌํ์ด ๋งค์ฐ ๊ฐ๋จํ๋ค
ํ๋ ์์ํฌ & ๋ผ์ด๋ธ๋ฌ๋ฆฌ
17. ์คํ๋ง ํ๋ ์์ํฌ์ ํต์ฌ ๊ฐ๋ ๋ค์ ์ค๋ช ํ์ธ์.
IoC (Inversion of Control):
- ์ ์ด์ ์ญ์ ์ ์๋ฏธํ๋ค
- ๊ฐ์ฒด์ ์์ฑ๊ณผ ์์กด์ฑ ์ฃผ์ ์ ๊ฐ๋ฐ์๊ฐ ์๋ ์ปจํ ์ด๋๊ฐ ๋ด๋นํ๋ค
DI (Dependency Injection):
- ์์กด์ฑ ์ฃผ์ ์ ์๋ฏธํ๋ค
- ๊ฐ์ฒด ๊ฐ์ ์์กด๊ด๊ณ๋ฅผ ์ธ๋ถ์์ ๊ฒฐ์ ํ๊ณ ์ฃผ์ ํ๋ค
- ์์ฑ์ ์ฃผ์ , ์ธํฐ ์ฃผ์ , ํ๋ ์ฃผ์ ๋ฐฉ์์ด ์๋ค
AOP (Aspect Oriented Programming):
- ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์๋ฏธํ๋ค
- ๊ณตํต ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ์ฌ ๋ชจ๋ํํ๋ค
- ๋ก๊น , ๋ณด์, ํธ๋์ญ์ ๋ฑ์ ์ฌ์ฉํ๋ค
์คํ๋ง Bean:
- ์คํ๋ง ์ปจํ ์ด๋๊ฐ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด์ด๋ค
- ์ฑ๊ธํค ํจํด์ผ๋ก ๊ด๋ฆฌ๋๋ค
18. JWT(JSON Web Token)์ ๋ํด ์ค๋ช ํ์ธ์.
JWT๋ JSON ํฌ๋งท์ ์ด์ฉํ์ฌ ์ฌ์ฉ์์ ๋ํ ์์ฑ์ ์ ์ฅํ๋ ์น ํ ํฐ์ด๋ค.
JWT ๊ตฌ์กฐ:
- Header: ํ ํฐ์ ํ์ ๊ณผ ํด์ฑ ์๊ณ ๋ฆฌ์ฆ ์ ๋ณด
- Payload: ์ค์ ์ ๋ฌํ๋ ค๋ ์ ๋ณด
- Signature: ํค๋์ ํ์ด๋ก๋๋ฅผ ํฉ์ณ์ ์ฃผ์ด์ง ๋น๋ฐํค๋ก ํด์ฑํ ๊ฐ
JWT์ ์ฅ์ :
- ์ํ๋ฅผ ์ ์ฅํ์ง ์์(Stateless)
- ํ์ฅ์ฑ์ด ์ข๋ค
- ํ ํฐ ์์ฒด์ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์๋ค
JWT์ ๋จ์ :
- ํ ํฐ์ ๊ธธ์ด๊ฐ ๊ธธ ์ ์๋ค
- ํ ํฐ์ด ํ์ทจ๋๋ฉด ๋ง๋ฃ์๊น์ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ค
- Secret Key๊ฐ ๋ ธ์ถ๋๋ฉด ๋ณด์์ ์ทจ์ฝํ๋ค
์์คํ ์ค๊ณ & ์ํคํ ์ฒ
19. ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ๋ํด ์ค๋ช ํ๊ณ ์ข ๋ฅ๋ฅผ ๋งํด๋ณด์ธ์.
๋ก๋ ๋ฐธ๋ฐ์ฑ์ ์ฌ๋ฌ ์๋ฒ์ ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ถ์ฐ์์ผ ์๋ฒ์ ๋ถํ๋ฅผ ์ค์ด๊ณ ๊ฐ์ฉ์ฑ์ ๋์ด๋ ๊ธฐ์ ์ด๋ค.
๋ก๋ ๋ฐธ๋ฐ์ฑ ์๊ณ ๋ฆฌ์ฆ:
- Round Robin: ์์ฐจ์ ์ผ๋ก ์์ฒญ์ ๋ถ๋ฐฐํ๋ค
- Weighted Round Robin: ๊ฐ์ค์น๋ฅผ ๊ณ ๋ คํ์ฌ ๋ถ๋ฐฐํ๋ค
- Least Connections: ์ฐ๊ฒฐ ์๊ฐ ๊ฐ์ฅ ์ ์ ์๋ฒ๋ก ๋ถ๋ฐฐํ๋ค
- IP Hash: ํด๋ผ์ด์ธํธ IP๋ฅผ ํด์ํ์ฌ ํน์ ์๋ฒ๋ก ๋ถ๋ฐฐํ๋ค
- Least Response Time: ์๋ต ์๊ฐ์ด ๊ฐ์ฅ ์งง์ ์๋ฒ๋ก ๋ถ๋ฐฐํ๋ค
๋ก๋ ๋ฐธ๋ฐ์ ์ ํ:
- L4 ๋ก๋ ๋ฐธ๋ฐ์: ๋คํธ์ํฌ/์ ์ก ๊ณ์ธต์์ ๋์ (IP, Port ๊ธฐ๋ฐ)
- L7 ๋ก๋ ๋ฐธ๋ฐ์: ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์์ ๋์ (HTTP ํค๋, URL ๊ธฐ๋ฐ)
20. ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ์ ์ฅ๋จ์ ์ ์ค๋ช ํ์ธ์.
๋ง์ดํฌ๋ก์๋น์ค๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๊ณ ๋ ๋ฆฝ์ ์ธ ์๋น์ค๋ค๋ก ๋๋์ด ๊ฐ๋ฐํ๋ ์ํคํ ์ฒ ํจํด์ด๋ค.
๋ง์ดํฌ๋ก์๋น์ค์ ์ฅ์ :
- ๋ ๋ฆฝ์ ๋ฐฐํฌ ๊ฐ๋ฅ
- ๊ธฐ์ ์คํ์ ๋ค์์ฑ
- ์ฅ์ ๊ฒฉ๋ฆฌ ๊ฐ๋ฅ
- ํ์ ์์จ์ฑ ์ฆ๊ฐ
- ํ์ฅ์ฑ ํฅ์
๋ง์ดํฌ๋ก์๋น์ค์ ๋จ์ :
- ๋คํธ์ํฌ ํต์ ์ผ๋ก ์ธํ ์ง์ฐ
- ๋ถ์ฐ ์์คํ ๋ณต์ก์ฑ
- ๋ฐ์ดํฐ ์ผ๊ด์ฑ ๊ด๋ฆฌ ์ด๋ ค์
- ๋ชจ๋ํฐ๋ง๊ณผ ๋๋ฒ๊น ์ ๋ณต์ก์ฑ
- ์ด์ ๋ณต์ก์ฑ ์ฆ๊ฐ
๋ชจ๋๋ฆฌํฑ vs ๋ง์ดํฌ๋ก์๋น์ค:
- ๋ชจ๋๋ฆฌํฑ: ๋จ์ํ๊ณ ์ด๊ธฐ ๊ฐ๋ฐ์ด ๋น ๋ฅด์ง๋ง ํ์ฅ์ฑ ํ๊ณ
- ๋ง์ดํฌ๋ก์๋น์ค: ๋ณต์กํ์ง๋ง ํ์ฅ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ์ข๋ค
21. API ๊ฒ์ดํธ์จ์ด์ ๋ํด ์ค๋ช ํ์ธ์.
API ๊ฒ์ดํธ์จ์ด๋ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ์์ ํด๋ผ์ด์ธํธ์ ๋ฐฑ์๋ ์๋น์ค ์ฌ์ด์ ๋จ์ผ ์ง์ ์ ์ญํ ์ ํ๋ ์๋ฒ์ด๋ค.
API ๊ฒ์ดํธ์จ์ด์ ์ฃผ์ ๊ธฐ๋ฅ:
- ๋ผ์ฐํ : ์์ฒญ์ ์ ์ ํ ๋ฐฑ์๋ ์๋น์ค๋ก ์ ๋ฌ
- ์ธ์ฆ ๋ฐ ์ธ๊ฐ: ๋ณด์ ์ ์ฑ ์ ์ฉ
- ๋ก๋ ๋ฐธ๋ฐ์ฑ: ํธ๋ํฝ ๋ถ์ฐ
- ์์ฒญ/์๋ต ๋ณํ: ํ๋กํ ์ฝ ๋ณํ
- ์บ์ฑ: ์๋ต ์บ์ฑ์ผ๋ก ์ฑ๋ฅ ํฅ์
- ๋ชจ๋ํฐ๋ง: ๋ก๊น ๋ฐ ๋ฉํธ๋ฆญ ์์ง
- Rate Limiting: ์์ฒญ ์ ํ
API ๊ฒ์ดํธ์จ์ด์ ์ฅ์ :
- ํก๋จ ๊ด์ฌ์ฌ์ ์ค์ํ
- ํด๋ผ์ด์ธํธ ์ฝ๋ ๋จ์ํ
- ์๋น์ค ๋ฒ์ ๊ด๋ฆฌ ์ฉ์ด
- ๋ณด์ ๊ฐํ
API ๊ฒ์ดํธ์จ์ด์ ๋จ์ :
- ๋จ์ผ ์ฅ์ ์ง์ (SPOF) ์ํ
- ์ฑ๋ฅ ๋ณ๋ชฉ ๊ฐ๋ฅ์ฑ
- ์ถ๊ฐ์ ์ธ ๋คํธ์ํฌ ํ
- ๋ณต์ก์ฑ ์ฆ๊ฐ
๋ํ์ ์ธ API ๊ฒ์ดํธ์จ์ด:
- Netflix Zuul
- Spring Cloud Gateway
- Kong
- AWS API Gateway
22. ๋ถ์ฐ ์์คํ ์ CAP ์ ๋ฆฌ์ ๋ํด ์ค๋ช ํ์ธ์.
CAP ์ ๋ฆฌ๋ ๋ถ์ฐ ์ปดํจํ ์์คํ ์์ ์ธ ๊ฐ์ง ๋ณด์ฅ ์ฌํญ ์ค ์ต๋ ๋ ๊ฐ์ง๋ง ๋์์ ๋ง์กฑํ ์ ์๋ค๋ ์ ๋ฆฌ์ด๋ค.
CAP์ ๊ตฌ์ฑ ์์:
Consistency (์ผ๊ด์ฑ):
- ๋ชจ๋ ๋ ธ๋๊ฐ ๋์ผํ ์์ ์ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ ๊ฒ
- ๋ถ์ฐ ์์คํ ์ ๋ชจ๋ ๋ ธ๋๊ฐ ๋๊ธฐํ๋ ์ํ
Availability (๊ฐ์ฉ์ฑ):
- ์์คํ ์ด ๊ณ์ ์ด์๋๋ ๊ฒ
- ์ผ๋ถ ๋ ธ๋์ ์ฅ์ ๊ฐ ๋ฐ์ํด๋ ์๋น์ค๊ฐ ์ค๋จ๋์ง ์์
Partition Tolerance (๋ถ๋จ ๋ด์ฑ):
- ๋คํธ์ํฌ ๋ถํ ์ด ๋ฐ์ํด๋ ์์คํ ์ด ๋์ํ๋ ๊ฒ
- ๋ ธ๋ ๊ฐ ํต์ ์ฅ์ ๋ฅผ ๊ฒฌ๋ ์ ์๋ ๋ฅ๋ ฅ
CAP ์ ๋ฆฌ์ ์กฐํฉ:
- CP ์์คํ : ์ผ๊ด์ฑ๊ณผ ๋ถ๋จ ๋ด์ฑ (MongoDB, HBase)
- AP ์์คํ : ๊ฐ์ฉ์ฑ๊ณผ ๋ถ๋จ ๋ด์ฑ (Cassandra, DynamoDB)
- CA ์์คํ : ์ผ๊ด์ฑ๊ณผ ๊ฐ์ฉ์ฑ (RDBMS, ๋จ์ผ ๋ ธ๋ ์์คํ )
23. ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ(Event-Driven Architecture)์ ๋ํด ์ค๋ช ํ์ธ์.
์ด๋ฒคํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ๋ ์ด๋ฒคํธ์ ๋ฐ์๊ณผ ๊ฐ์ง, ์๋น์ ์ค์ ์ ๋ ์ํํธ์จ์ด ์ํคํ ์ฒ ํจํด์ด๋ค.
ํต์ฌ ๊ตฌ์ฑ ์์:
- Event Producer: ์ด๋ฒคํธ๋ฅผ ์์ฑํ๋ ์ฃผ์ฒด
- Event Consumer: ์ด๋ฒคํธ๋ฅผ ์๋นํ๋ ์ฃผ์ฒด
- Event Broker: ์ด๋ฒคํธ๋ฅผ ์ค์ฌํ๋ ์์คํ
์ด๋ฒคํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ์ ์ฅ์ :
- ๋์จํ ๊ฒฐํฉ(Loose Coupling)
- ํ์ฅ์ฑ๊ณผ ์ ์ฐ์ฑ
- ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ก ์ฑ๋ฅ ํฅ์
- ์ฅ์ ๋ณต๊ตฌ ์ฉ์ด์ฑ
์ด๋ฒคํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ์ ๋จ์ :
- ๋ณต์ก์ฑ ์ฆ๊ฐ
- ๋๋ฒ๊น ์ ์ด๋ ค์
- ์ด๋ฒคํธ ์์ ๋ณด์ฅ์ ๋ณต์ก์ฑ
- ๋ฉ์์ง ์ค๋ณต ์ฒ๋ฆฌ ํ์
๊ตฌํ ๋ฐฉ์:
- Event Streaming: Apache Kafka, Amazon Kinesis
- Message Queue: RabbitMQ, Amazon SQS
- Event Store: Event Sourcing ํจํด
24. ์ต์ ๋ฒ ํจํด๊ณผ ๋ฐํ-๊ตฌ๋ ํจํด์ ์ฐจ์ด์ ์ ์ค๋ช ํ์ธ์.
์ต์ ๋ฒ ํจํด(Observer Pattern):
- ๊ฐ์ฒด์ ์ํ ๋ณํ๋ฅผ ๊ด์ฐฐํ๋ ํจํด
- Subject์ Observer ๊ฐ์ 1:N ์์กด์ฑ ์ ์
- Subject๊ฐ Observer๋ค์ ์ง์ ๊ด๋ฆฌํ๋ค
- ๋๊ธฐ์ ์คํ์ด ์ผ๋ฐ์ ์ด๋ค
๋ฐํ-๊ตฌ๋ ํจํด(Publish-Subscribe Pattern):
- ๋ฉ์์ง ๋ธ๋ก์ปค๋ฅผ ํตํด ๋์จํ ๊ฒฐํฉ์ ์ ๊ณต
- Publisher์ Subscriber๊ฐ ์๋ก๋ฅผ ๋ชจ๋ฅธ๋ค
- ํ ํฝ ๊ธฐ๋ฐ์ผ๋ก ๋ฉ์์ง๋ฅผ ๋ถ๋ฅํ๋ค
- ๋น๋๊ธฐ์ ์คํ์ด ์ผ๋ฐ์ ์ด๋ค
์ฃผ์ ์ฐจ์ด์ :
- ๊ฒฐํฉ๋: ์ต์ ๋ฒ ํจํด์ ๊ฐํ ๊ฒฐํฉ, ๋ฐํ-๊ตฌ๋ ํจํด์ ๋์จํ ๊ฒฐํฉ
- ์ค์ฌ์: ๋ฐํ-๊ตฌ๋ ํจํด์ ๋ฉ์์ง ๋ธ๋ก์ปค๊ฐ ํ์
- ํ์ฅ์ฑ: ๋ฐํ-๊ตฌ๋ ํจํด์ด ๋ ํ์ฅ์ฑ ์์
- ๋๊ธฐํ: ์ต์ ๋ฒ ํจํด์ ๋๊ธฐ, ๋ฐํ-๊ตฌ๋ ํจํด์ ๋น๋๊ธฐ
์ฑ๋ฅ & ์ต์ ํ
25. ์บ์ฑ ์ ๋ต์ ๋ํด ์ค๋ช ํด๋ณด์ธ์.
์บ์ฑ์ ์์ฃผ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅธ ์ ์ฅ์์ ์์๋ก ์ ์ฅํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๊ธฐ๋ฒ์ด๋ค.
์บ์ ์ ๋ต:
- Cache-Aside (Lazy Loading)
- ์ ํ๋ฆฌ์ผ์ด์ ์ด ์บ์๋ฅผ ์ง์ ๊ด๋ฆฌํ๋ค
- ์บ์ ๋ฏธ์ค ์ DB์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ์บ์์ ์ ์ฅํ๋ค
- Write-Through
- ๋ฐ์ดํฐ๋ฅผ DB์ ์บ์์ ๋์์ ์ ์ฅํ๋ค
- ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ด ๋ณด์ฅ๋์ง๋ง ์ฐ๊ธฐ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๋ค
- Write-Behind (Write-Back)
- ์บ์์๋ง ๋จผ์ ์ ์ฅํ๊ณ ๋์ค์ DB์ ๋ฐ์ํ๋ค
- ์ฐ๊ธฐ ์ฑ๋ฅ์ด ํฅ์๋์ง๋ง ๋ฐ์ดํฐ ์์ค ์ํ์ด ์๋ค
- Refresh-Ahead
- TTL ๋ง๋ฃ ์ ์ ๋ฏธ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํ๋ค
26. ๋ฉ์์ง ํ(Message Queue)์ ๋ํด ์ค๋ช ํ์ธ์.
๋ฉ์์ง ํ๋ ๋น๋๊ธฐ์ ์ผ๋ก ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํ ํต์ ๋ฐฉ๋ฒ์ด๋ค.
์ก์ ์์ ์์ ์๊ฐ ์ง์ ์ฐ๊ฒฐ๋์ง ์๊ณ ์ค๊ฐ์ ํ๋ฅผ ํตํด ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๋ค.
๋ฉ์์ง ํ์ ์ฅ์ :
- ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ก ์์คํ ์ฑ๋ฅ ํฅ์
- ์์คํ ๊ฐ ๊ฒฐํฉ๋ ๊ฐ์
- ๋ฉ์์ง ์์ค ๋ฐฉ์ง
- ๋ถํ ๋ถ์ฐ ๊ฐ๋ฅ
๋ฉ์์ง ํ ํจํด:
- Point-to-Point: ํ๋์ ์ก์ ์๊ฐ ํ๋์ ์์ ์์๊ฒ ๋ฉ์์ง ์ ์ก
- Publish-Subscribe: ํ๋์ ์ก์ ์๊ฐ ์ฌ๋ฌ ์์ ์์๊ฒ ๋ฉ์์ง ๋ธ๋ก๋์บ์คํธ
๋ํ์ ์ธ ๋ฉ์์ง ํ ์์คํ :
- Apache Kafka
- RabbitMQ
- Amazon SQS
- Redis Pub/Sub
27. ์ฑ๋ฅ ์ต์ ํ ๊ธฐ๋ฒ๋ค์ ์ค๋ช ํ์ธ์.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ต์ ํ:
- ์ธ๋ฑ์ค ์ต์ ํ: ์ ์ ํ ์ธ๋ฑ์ค ์์ฑ ๋ฐ ๊ด๋ฆฌ
- ์ฟผ๋ฆฌ ์ต์ ํ: ํจ์จ์ ์ธ SQL ์ฟผ๋ฆฌ ์์ฑ
- ์ปค๋ฅ์ ํ๋ง: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์ฌ์ฌ์ฉ
- ์ฝ๊ธฐ ์ ์ฉ ๋ณต์ ๋ณธ ํ์ฉ: ์ฝ๊ธฐ ์ฑ๋ฅ ํฅ์
์ ํ๋ฆฌ์ผ์ด์ ์ต์ ํ:
- ์บ์ฑ ์ ๋ต: ๋ฉ๋ชจ๋ฆฌ ์บ์, ๋ถ์ฐ ์บ์ ํ์ฉ
- ๋น๋๊ธฐ ์ฒ๋ฆฌ: ๋ธ๋กํน ์์ ์ ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌ
- ๋ฐฐ์น ์ฒ๋ฆฌ: ์ฌ๋ฌ ์์ ์ ๋ฌถ์ด์ ์ฒ๋ฆฌ
- ์ง์ฐ ๋ก๋ฉ: ํ์ํ ์์ ์๋ง ๋ฐ์ดํฐ ๋ก๋ฉ
์์คํ ์ํคํ ์ฒ ์ต์ ํ:
- ๋ก๋ ๋ฐธ๋ฐ์ฑ: ํธ๋ํฝ ๋ถ์ฐ
- CDN ํ์ฉ: ์ ์ ์์ ๋ฐฐํฌ ์ต์ ํ
- ๋ง์ดํฌ๋ก์๋น์ค: ๋ ๋ฆฝ์ ์ธ ํ์ฅ์ฑ
- ๋ฉ์์ง ํ: ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํตํ ์๋ต์ฑ ํฅ์
์ฝ๋ ๋ ๋ฒจ ์ต์ ํ:
- ์๊ณ ๋ฆฌ์ฆ ์ต์ ํ: ์๊ฐ ๋ณต์ก๋ ๊ฐ์
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ: ๋ถํ์ํ ๊ฐ์ฒด ์์ฑ ๋ฐฉ์ง
- I/O ์ต์ ํ: ๋์คํฌ/๋คํธ์ํฌ I/O ์ต์ํ
- ํ๋กํ์ผ๋ง: ์ฑ๋ฅ ๋ณ๋ชฉ ์ง์ ์๋ณ
๋ณด์
28. ๋ณด์ ๊ด๋ จ ๊ธฐ์ ๋ค์ ์ค๋ช ํ์ธ์.
์ธ์ฆ๊ณผ ์ธ๊ฐ:
์ธ์ฆ(Authentication):
- ์ฌ์ฉ์๊ฐ ๋๊ตฌ์ธ์ง ํ์ธํ๋ ๊ณผ์
- ID/Password, ์์ฒด ์ธ์ฆ, OTP ๋ฑ
์ธ๊ฐ(Authorization):
- ์ธ์ฆ๋ ์ฌ์ฉ์๊ฐ ๋ฌด์์ ํ ์ ์๋์ง ๊ฒฐ์ ํ๋ ๊ณผ์
- ์ญํ ๊ธฐ๋ฐ ์ ๊ทผ ์ ์ด(RBAC), ์์ฑ ๊ธฐ๋ฐ ์ ๊ทผ ์ ์ด(ABAC)
๋ณด์ ์ํ๊ณผ ๋์:
SQL Injection:
- ์ฌ์ฉ์ ์ ๋ ฅ์ ํตํด ์ ์์ ์ธ SQL ์ฟผ๋ฆฌ ์คํ
- ๋์์ฑ : Prepared Statement, ์ ๋ ฅ ๊ฒ์ฆ
XSS (Cross-Site Scripting):
- ์ ์์ ์ธ ์คํฌ๋ฆฝํธ๋ฅผ ์น ํ์ด์ง์ ์ฝ์
- ๋์์ฑ : ์ ๋ ฅ ๊ฒ์ฆ, ์ถ๋ ฅ ์ธ์ฝ๋ฉ, CSP ํค๋
CSRF (Cross-Site Request Forgery):
- ์ฌ์ฉ์๊ฐ ์๋ํ์ง ์์ ์์ฒญ์ ์คํํ๋๋ก ์ ๋
- ๋์์ฑ : CSRF ํ ํฐ, Same-Site ์ฟ ํค
๋ณด์ ํค๋:
- HTTPS: ๋ฐ์ดํฐ ์ํธํ ์ ์ก
- HSTS: HTTP Strict Transport Security
- CSP: Content Security Policy
- X-Frame-Options: ํด๋ฆญ์ฌํน ๋ฐฉ์ง
์ํธํ:
- ๋์นญํค ์ํธํ: ๋น ๋ฅด์ง๋ง ํค ๊ตํ ๋ฌธ์
- ๋น๋์นญํค ์ํธํ: ์์ ํ์ง๋ง ๋๋ฆผ
- ํด์ ํจ์: ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฆ, ๋น๋ฐ๋ฒํธ ์ ์ฅ
๊ฐ๋ฐ ๋ฐฉ๋ฒ๋ก & ๋๊ตฌ
29. CI/CD ํ์ดํ๋ผ์ธ์ ๋ํด ์ค๋ช ํ์ธ์.
CI/CD๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ๋จ๊ณ๋ฅผ ์๋ํํ์ฌ ๋ ์งง์ ์ฃผ๊ธฐ๋ก ๊ณ ๊ฐ์๊ฒ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ์ด๋ค.
CI (Continuous Integration):
- ๊ฐ๋ฐ์๋ค์ด ์์ฑํ ์ฝ๋๋ฅผ ์ง์์ ์ผ๋ก ํตํฉํ๋ ๊ณผ์
- ์ฝ๋ ๋ณ๊ฒฝ์ฌํญ์ ์ ๊ธฐ์ ์ผ๋ก ๋น๋ํ๊ณ ํ ์คํธํ๋ค
- ๋ฒ์ ์ถฉ๋๊ณผ ๋ฒ๊ทธ๋ฅผ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํ ์ ์๋ค
CD (Continuous Deployment/Delivery):
- Continuous Delivery: ํ๋ก๋์ ๋ฐฐํฌ ์ค๋น๊ฐ ์๋ฃ๋ ์ฝ๋๋ฅผ ์ ์ฅ์์ ์๋์ผ๋ก ๋ฆด๋ฆฌ์ค
- Continuous Deployment: ํ๋ก๋์ ๊น์ง ์๋์ผ๋ก ๋ฐฐํฌ
CI/CD ํ์ดํ๋ผ์ธ ๋จ๊ณ:
- ์์ค ์ฝ๋ ๊ด๋ฆฌ (Git)
- ๋น๋ ์๋ํ
- ํ ์คํธ ์๋ํ
- ์ ์ ์ฝ๋ ๋ถ์
- ํจํค์ง
- ๋ฐฐํฌ
CI/CD ๋๊ตฌ:
- Jenkins
- GitLab CI/CD
- GitHub Actions
- CircleCI
- Travis CI
30. ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ(TDD)๊ณผ ํ ์คํธ ํผ๋ผ๋ฏธ๋์ ๋ํด ์ค๋ช ํ์ธ์.
TDD (Test-Driven Development):
ํ ์คํธ๋ฅผ ๋จผ์ ์์ฑํ๊ณ , ํ ์คํธ๋ฅผ ํต๊ณผํ๋ ์ต์ํ์ ์ฝ๋๋ฅผ ์์ฑํ ํ, ๋ฆฌํฉํ ๋งํ๋ ๊ฐ๋ฐ ๋ฐฉ๋ฒ๋ก ์ด๋ค.
TDD ์ฌ์ดํด (Red-Green-Refactor):
- Red: ์คํจํ๋ ํ ์คํธ ์์ฑ
- Green: ํ ์คํธ๋ฅผ ํต๊ณผํ๋ ์ต์ ์ฝ๋ ์์ฑ
- Refactor: ์ฝ๋ ๊ฐ์ ๋ฐ ์ค๋ณต ์ ๊ฑฐ
TDD์ ์ฅ์ :
- ๋ฒ๊ทธ ์กฐ๊ธฐ ๋ฐ๊ฒฌ
- ์ค๊ณ ํ์ง ํฅ์
- ์์ ํ ๋ฆฌํฉํ ๋ง
- ๋ฌธ์ํ ํจ๊ณผ
- ๋์ ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง
ํ ์คํธ ํผ๋ผ๋ฏธ๋: ํจ์จ์ ์ธ ํ ์คํธ ์ ๋ต์ ์๊ฐ์ ์ผ๋ก ๋ํ๋ธ ๊ฐ๋ ์ด๋ค.
ํผ๋ผ๋ฏธ๋ ๊ตฌ์กฐ:
- Unit Tests (๋จ์ ํ ์คํธ): ๊ฐ์ฅ ๋ง์ ๋น์ค, ๋น ๋ฅด๊ณ ์์ ์
- Integration Tests (ํตํฉ ํ ์คํธ): ์ค๊ฐ ๋น์ค, ์ปดํฌ๋ํธ ๊ฐ ์ํธ์์ฉ ํ ์คํธ
- E2E Tests (์ข ๋จ๊ฐ ํ ์คํธ): ๊ฐ์ฅ ์ ์ ๋น์ค, ์ ์ฒด ์์คํ ํ ์คํธ
๊ฐ ๋ ๋ฒจ์ ํน์ง:
- Unit Tests: ๋น ๋ฅด๊ณ ๊ฒฉ๋ฆฌ๋์ด ์์ผ๋ฉฐ ๊ฒฐ์ ์
- Integration Tests: ์ค์ ์์กด์ฑ๊ณผ ์ํธ์์ฉ
- E2E Tests: ์ฌ์ฉ์ ๊ด์ ์์ ์ ์ฒด ์ํฌํ๋ก์ฐ ๊ฒ์ฆ
31. Docker์ ์ปจํ ์ด๋ํ์ ๋ํด ์ค๋ช ํ์ธ์.
Docker๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ปจํ ์ด๋๋ผ๋ ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ์์ ์คํํ ์ ์๊ฒ ํด์ฃผ๋ ํ๋ซํผ์ด๋ค.
Docker์ ํต์ฌ ๊ฐ๋ :
์ด๋ฏธ์ง(Image):
- ์ปจํ ์ด๋ ์คํ์ ํ์ํ ํ์ผ๊ณผ ์ค์ ๊ฐ์ ํฌํจํ ํ ํ๋ฆฟ
- ๋ถ๋ณ์ ํน์ฑ์ ๊ฐ์ง๋ค
์ปจํ ์ด๋(Container):
- ์ด๋ฏธ์ง๋ฅผ ์คํํ ์ํ
- ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋๋ค
Docker์ ์ฅ์ :
- ํ๊ฒฝ ์ผ๊ด์ฑ ๋ณด์ฅ
- ๋น ๋ฅธ ๋ฐฐํฌ
- ์์ ํจ์จ์ฑ
- ํ์ฅ์ฑ
Docker vs VM:
- Docker๋ OS ๋ ๋ฒจ ๊ฐ์ํ, VM์ ํ๋์จ์ด ๋ ๋ฒจ ๊ฐ์ํ
- Docker๊ฐ ๋ ๊ฐ๋ณ๊ณ ๋น ๋ฅด๋ค
์ค๋ฌด ๊ฒฝํ
32. ๋์ฉ๋ ํธ๋ํฝ ์ฒ๋ฆฌ ๊ฒฝํ์ด๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ์ธ์.
๋์ฉ๋ ํธ๋ํฝ ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ค์ํ ๊ธฐ๋ฒ๋ค์ด ์๋ค.
ํ์ฅ์ฑ ์ ๋ต:
์์ง ํ์ฅ(Scale Up):
- ์๋ฒ์ ํ๋์จ์ด ์ฑ๋ฅ์ ๋์ด๋ ๋ฐฉ๋ฒ
- ํ๊ณ๊ฐ ๋ช ํํ๊ณ ๋น์ฉ์ด ๋ง์ด ๋ ๋ค
์ํ ํ์ฅ(Scale Out):
- ์๋ฒ์ ์๋ฅผ ๋๋ฆฌ๋ ๋ฐฉ๋ฒ
- ๋ฌดํ ํ์ฅ ๊ฐ๋ฅํ๊ณ ๋น์ฉ ํจ์จ์ ์ด๋ค
๊ตฌ์ฒด์ ์ธ ๋์ ๋ฐฉ๋ฒ:
- ๋ก๋ ๋ฐธ๋ฐ์ ๋์ : ํธ๋ํฝ ๋ถ์ฐ
- ์บ์ฑ ๋ ์ด์ด ๊ตฌ์ถ: Redis, Memcached ํ์ฉ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ต์ ํ: ์ฝ๊ธฐ ์ ์ฉ ๋ณต์ ๋ณธ, ์ค๋ฉ
- CDN ํ์ฉ: ์ ์ ์์ ๋ฐฐํฌ
- ๋น๋๊ธฐ ์ฒ๋ฆฌ: ๋ฉ์์ง ํ๋ฅผ ํตํ ๋ถํ ๋ถ์ฐ
- ์คํ ์ค์ผ์ผ๋ง: ์๋ ์ธ์คํด์ค ์ฆ๊ฐ
- ์ํท ๋ธ๋ ์ด์ปค: ์ฅ์ ์ ํ ๋ฐฉ์ง
33. ์ฅ์ ์ํฉ์ ๊ฒฝํํด๋ณธ ์ ์ด ์๋์? ์ด๋ป๊ฒ ํด๊ฒฐํ๋์?
์ฅ์ ์ํฉ์ ๋ํ ๊ฒฝํ๊ณผ ํด๊ฒฐ ๊ณผ์ ์ ์ค๋ช ํ ์ ์์ด์ผ ํ๋ค.
์ผ๋ฐ์ ์ธ ์ฅ์ ์ ํ:
- ์๋ฒ ๋ค์ด: ํ๋์จ์ด/์ํํธ์จ์ด ์ฅ์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฅ์ : ์ปค๋ฅ์ ํ ๊ณ ๊ฐ, ๋ฝ ํ์์์
- ๋คํธ์ํฌ ์ฅ์ : ์ฐ๊ฒฐ ๋๊น, ์ง์ฐ
- ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ: OOM ์๋ฌ
- ์ฑ๋ฅ ์ ํ: ๋๋ฆฐ ์ฟผ๋ฆฌ, ๋ฉ๋ชจ๋ฆฌ ๋ฆฌํฌ
์ฅ์ ๋์ ํ๋ก์ธ์ค:
- ์ฅ์ ๊ฐ์ง: ๋ชจ๋ํฐ๋ง ์์คํ ์ ํตํ ์๋ ๊ฐ์ง
- ์ํฅ๋ ํ์ : ์ฅ์ ๋ฒ์์ ์ฌ๊ฐ๋ ํ์ธ
- ์์ ์กฐ์น: ๋น ๋ฅธ ์๋น์ค ๋ณต๊ตฌ
- ๊ทผ๋ณธ ์์ธ ๋ถ์: ์ฅ์ ์ ๊ทผ๋ณธ ์์ธ ํ์
- ํญ๊ตฌ์ ํด๊ฒฐ: ์ฌ๋ฐ ๋ฐฉ์ง๋ฅผ ์ํ ๊ฐ์
- ์ฌํ ๊ฒํ : ์ฅ์ ๋ณด๊ณ ์ ์์ฑ ๋ฐ ํ๋ก์ธ์ค ๊ฐ์
์ฅ์ ์๋ฐฉ ๋ฐฉ๋ฒ:
- ๋ชจ๋ํฐ๋ง ์์คํ ๊ตฌ์ถ
- ํฌ์ค ์ฒดํฌ ๊ตฌํ
- ์ํท ๋ธ๋ ์ด์ปค ํจํด ์ ์ฉ
- ๋ฐฑ์ ๋ฐ ๋ณต๊ตฌ ๊ณํ ์๋ฆฝ
- ์นด๋๋ฆฌ ๋ฐฐํฌ, ๋ธ๋ฃจ-๊ทธ๋ฆฐ ๋ฐฐํฌ
34. ์ฝ๋ ๋ฆฌ๋ทฐ ๊ฒฝํ๊ณผ ์ค์์ฑ์ ๋ํด ์ค๋ช ํ์ธ์.
์ฝ๋ ๋ฆฌ๋ทฐ๋ ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ์์ฑํ ์ฝ๋๋ฅผ ๊ฒํ ํ์ฌ ํ์ง์ ํฅ์์ํค๋ ๊ณผ์ ์ด๋ค.
์ฝ๋ ๋ฆฌ๋ทฐ์ ๋ชฉ์ :
- ๋ฒ๊ทธ ์กฐ๊ธฐ ๋ฐ๊ฒฌ: ๋ฐํ์ ์ ์ค๋ฅ ๋ฐ๊ฒฌ
- ์ฝ๋ ํ์ง ํฅ์: ๊ฐ๋ ์ฑ, ์ ์ง๋ณด์์ฑ ๊ฐ์
- ์ง์ ๊ณต์ : ํ์ ๊ฐ ๊ธฐ์ ๊ณผ ๋๋ฉ์ธ ์ง์ ๊ณต์
- ์ผ๊ด์ฑ ์ ์ง: ์ฝ๋ฉ ์คํ์ผ๊ณผ ์ํคํ ์ฒ ์ผ๊ด์ฑ
- ํ์ต ๊ธฐํ: ์๋ก ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ๋ฒ ํ์ต
ํจ๊ณผ์ ์ธ ์ฝ๋ ๋ฆฌ๋ทฐ ๋ฐฉ๋ฒ:
- ๊ฑด์ค์ ์ธ ํผ๋๋ฐฑ: ๋ฌธ์ ์ ๊ณผ ๊ฐ์ ๋ฐฉํฅ ์ ์
- ์์ ๋จ์: ํ ๋ฒ์ ๋๋ฌด ๋ง์ ์ฝ๋ ๋ฆฌ๋ทฐ ์ง์
- ์๋ํ ๋๊ตฌ ํ์ฉ: ์ ์ ๋ถ์ ๋๊ตฌ ์ฌ์ฉ
- ์ฒดํฌ๋ฆฌ์คํธ ํ์ฉ: ์ผ๊ด๋ ๋ฆฌ๋ทฐ ๊ธฐ์ค ์ ์ฉ
์ฝ๋ ๋ฆฌ๋ทฐ ์ฒดํฌ ํฌ์ธํธ:
- ๊ธฐ๋ฅ ์๊ตฌ์ฌํญ ์ถฉ์กฑ ์ฌ๋ถ
- ๋ฒ๊ทธ ๋ฐ ์์ธ ์ฒ๋ฆฌ
- ์ฑ๋ฅ ์ด์
- ๋ณด์ ์ทจ์ฝ์
- ์ฝ๋ ์คํ์ผ ์ผ๊ด์ฑ
- ํ ์คํธ ์ฝ๋ ์กด์ฌ ์ฌ๋ถ
35. ํธ๋ฌ๋ธ์ํ ๊ฒฝํ์ ์ค๋ช ํด๋ณด์ธ์.
๋ฐฑ์๋ ๊ฐ๋ฐ์ ํ๋ฉด์ ๋งํ๋ ๋ถ๋ถ๊ณผ ํด๊ฒฐ ๊ณผ์ ,
๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ณผ์ ์ ํตํด ๊น์ด ์๊ฒ ๋ ๊ฐ๋ ์ ํ ๊ฐ์ง ์ ๋ ํ์ด์ ์ค๋ช ํ ์ ์์ด์ผ ํ๋ค.
ํธ๋ฌ๋ธ์ํ ๋จ๊ณ:
- ๋ฌธ์ ์ ์: ์ ํํ ์ฆ์๊ณผ ์ค๋ฅ ๋ฉ์์ง ํ์
- ๊ฐ์ค ์๋ฆฝ: ๊ฐ๋ฅํ ์์ธ๋ค์ ๋ํ ๊ฐ์ค ์ค์
- ๊ฒ์ฆ: ๋ก๊ทธ, ๋ชจ๋ํฐ๋ง ํด์ ํตํ ๊ฒ์ฆ
- ํด๊ฒฐ์ฑ ๊ตฌํ: ๋จ๊ณ๋ณ ๋ฌธ์ ํด๊ฒฐ
- ๊ฒ์ฆ ๋ฐ ๋ฌธ์ํ: ํด๊ฒฐ ๊ณผ์ ๊ณผ ๊ฒฐ๊ณผ ๊ธฐ๋ก
ํธ๋ฌ๋ธ์ํ ๋๊ตฌ:
- ๋ก๊ทธ ๋ถ์ ๋๊ตฌ
- APM(Application Performance Monitoring)
- ๋๋ฒ๊ฑฐ
- ํ๋กํ์ผ๋ฌ
- ๋คํธ์ํฌ ๋ถ์ ๋๊ตฌ
๋ง๋ฌด๋ฆฌ
๋ฐฑ์๋ ๊ฐ๋ฐ์๋ ์ด๋ก ์ ์๊ณ ์๊ณ ์ดํดํ๋๋ผ๋ ์ง์ ํด๋ณด์ง ์์๋ค๋ฉด ์จ์ ํ ์๊ณ ์๋ค ํ ์ ์๋ค.
๋ฐฉ๋ํ๊ณ ์๋ก ์ ์ธ ์ด๋ก ์ ๋ฐํ์ผ๋ก ์ง์ ์ฝ๋๋ก ๊ตฌํํด๋ธ ๊ฒฝํ,
๋ฌธ์ ์ํฉ์ ํด๊ฒฐํ ํธ๋ฌ๋ธ ์ํ ๊ฒฝํ์ด ์ ์ ๋ฐฑ์๋ ๊ฐ๋ฐ์๋ถ๋ค์ด ๊ฐ์ง ์ ์๋ ๊ฒฝ์๋ ฅ์ด๋ค.
์๋ง์ ๊ธฐ๋ณธ ์ง๋ฌธ๋ค์ ๋ณด๊ณ ์ข์ ํ ์ ์ ๊ฐ๋ฐ์ ์ทจ์ ์ค๋น์์ด ์๋ค๋ฉด,
"๋ ์์ผ๋ก ์ฑ์ฅํ ๊ฐ๋ฅ์ฑ์ด ๋ง๊ตฌ๋!"๋ผ๋ ๊ฑธ ๊ผญ ์์์ฃผ๊ธธ ๋ฐ๋๋ค.
์ด ์ง๋ฌธ๋ค์ด ์ฌ๋ฌ๋ถ์ ์ทจ์ ์ฑ๊ณต๊ธธ์ ์ด์ด์ค ์ถ๋ฐ์ ์ด ๋๊ธธ ๋ฐ๋๋ค.
๐ ์ถ๊ฐ ํ์ต ๋ฐฉํฅ:
- ๊ฐ ์ง๋ฌธ์ ๋ํด ์ค์ ์ฝ๋๋ก ๊ตฌํํด๋ณด๊ธฐ
- ๊ฐ์ธ ํ๋ก์ ํธ์์ ํ์ตํ ๊ธฐ์ ๋ค ์ ์ฉํด๋ณด๊ธฐ
- ์คํ์์ค ํ๋ก์ ํธ ์ฐธ์ฌ๋ฅผ ํตํ ์ค๋ฌด ๊ฒฝํ ์๊ธฐ
- ๊ธฐ์ ๋ธ๋ก๊ทธ ์์ฑ์ ํตํ ์ง์ ์ ๋ฆฌ
- ์คํฐ๋ ๊ทธ๋ฃน ์ฐธ์ฌ๋ฅผ ํตํ ์ง์์ ์ธ ํ์ต
๐ก ๋ฉด์ ์ค๋น ํ:
- ๋จ์ ์๊ธฐ๋ณด๋ค๋ ๊ฐ๋ ์ ์ดํด์ ์ง์คํ๊ธฐ
- ์ค์ ๊ฒฝํ๊ณผ ์ฐ๊ฒฐํ์ฌ ์ค๋ช ํ ์ ์๋๋ก ์ค๋นํ๊ธฐ
- ๋ชจ๋ฅด๋ ๊ฒ์ ์์งํ ์ธ์ ํ๊ณ ํ์ต ์์ง ๋ณด์ฌ์ฃผ๊ธฐ
- ์ง๋ฌธ์ ๋ํ ๋ต๋ณ ํ ๊ด๋ จ ๊ฒฝํ์ด๋ ์ถ๊ฐ ์ง์ ์ดํํ๊ธฐ
- ํ๋ก์ ํธ ๊ตฌ์กฐ๋ฅผ ๊ทธ๋ ค๋ณด๋ ์ฐ์ตํ๊ธฐ
๐ฅ ์นดํ ๊ณ ๋ฆฌ๋ณ ์ฐ์ ์์:
- ๋คํธ์ํฌ & HTTP → ์น ๊ฐ๋ฐ์ ๊ธฐ์ด, ๋ฐ๋์ ์์ง
- ๋ฐ์ดํฐ๋ฒ ์ด์ค → ๋ฐฑ์๋์ ํต์ฌ, ์ค๋ฌด์์ ๊ฐ์ฅ ์ค์
- ์ด์์ฒด์ & ์์คํ → ๊ธฐ๋ณธ๊ธฐ, CS ์ง์์ ํ ๋
- ํ๋ ์์ํฌ & ๋ผ์ด๋ธ๋ฌ๋ฆฌ → ์ค๋ฌด ๋๊ตฌ, ๋ฐ๋ก ์ ์ฉ ๊ฐ๋ฅ
- ์์คํ ์ค๊ณ & ์ํคํ ์ฒ → ์ฌํ ๋ด์ฉ, ์๋์ด๋ก ์ฑ์ฅํ๊ธฐ ์ํ ํ์
- ๋๋จธ์ง ์นดํ ๊ณ ๋ฆฌ๋ค → ์ ๋ฌธ์ฑ์ ๋์ด๋ ์ถ๊ฐ ์ง์
์ด ๊ฐ์ด๋๊ฐ ๋ฐฑ์๋ ๊ฐ๋ฐ์๋ก์์ ์ฌ์ ์ ๋์์ด ๋๊ธธ ๋ฐ๋๋ค!
'๐จ๏ธ Backend' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๋์์ธ ํจํด: ์ ์, ๋ถ๋ฅ ๋ฐ ์ฃผ์ ํจํด ์ดํด (5) | 2025.07.08 |
|---|---|
| Redis๋ ๋ฌด์์ธ๊ฐ? ์ค์น๋ถํฐ ํ์ฉ ์ฌ๋ก๊น์ง ์๋ฒฝ ๊ฐ์ด๋ (4) | 2025.07.02 |