๐ ์ค๋ฌดํ Java ๋ฐฑ์๋ ์ง์ค ์ฑ์ฅ ํ๋ ๋ฐ ํ ํ๋ฆฟ
์ค๋ฌดํ Java ๋ฐฑ์๋ ์ง์ค ์ฑ์ฅ ํ๋
ํ์ฌ ๋ชฉํ:
- ์ค๊ฒฌ Java ๋ฐฑ์๋ ์ด์ง
- ์ค๋ฌดํ ๊ฐ๋ฐ์ ํฌ์ง์ ๋ ๊ฐํ
- Java/Spring ๋ด๋ถ ๋์ ์ดํด
- ์ด์/์ฅ์ ๋์ ๊ด์ ๊ฐํ
๋ฐฉํฅ์ ๋ช ํํ๋ค.
โ์ฝํ โ๋ณด๋ค โ์ค๋ฌด ์ดํด๋โ
์ ์ง์คํ๋ค.
์ฆ:
- Java ๋ด๋ถ ๊ตฌ์กฐ
- Spring ๋์ ์๋ฆฌ
- DB/ํธ๋์ญ์
- ์ด์/์ฅ์ ๋์
- ์์คํ ์ค๊ณ ์ฌ๊ณ
๋ฅผ ๊น๊ฒ ๊ฐ์ ธ๊ฐ๋ค.
์ด์ ๋ฐฉ์
์ฃผ 5๊ฐ ์ฃผ์
- ํ๋ฃจ 1๊ฐ ๊น๊ฒ
- ๋ธ๋ก๊ทธ ์ ๋ฆฌ ๊ฐ๋ฅ ์์ค
- ๋ฉด์ ๋ต๋ณ ๊ฐ๋ฅ ์์ค
๊น์ง ํ์ต.
ํ์ต ๋ชฉํ
๋จ์ ์ ์ ์๊ธฐ๊ฐ ์๋๋ผ:
- ์ ์ด๋ ๊ฒ ์ค๊ณ๋์๋๊ฐ?
- ์ด๋ค Trade-off๊ฐ ์กด์ฌํ๋๊ฐ?
- ์ด์์์ ์ด๋ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋๊ฐ?
- ์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋๊ฐ?
๋ฅผ ์ค๋ช ๊ฐ๋ฅํ ์์ค๊น์ง ๊ฐ๋ค.
1์ฃผ์ฐจ - Java Core + JVM + ๋์์ฑ
๋ชฉํ:
Java ๋ด๋ถ ๊ตฌ์กฐ ์ดํด ๊ธฐ๋ฐ ํ๋ณด
Day1
๊ฐ์ฒด ์์ฑ ๊ณผ์ ๊ณผ JVM ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
- Heap / Stack
- Method Area
- GC Root
- ๊ฐ์ฒด ์๋ช ์ฃผ๊ธฐ
- ์ Heap์ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ์ธ๊ฐ?
Day2
ClassLoader์ JVM ์คํ ๊ตฌ์กฐ
- Loading / Linking / Initialization
- ๋ถ๋ชจ ์์ ๋ชจ๋ธ
- Runtime Dynamic Loading
- Reflection ์ฐ๊ฒฐ
Day3
GC ๋์ ์๋ฆฌ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
- Young / Old
- STW
- Minor / Major GC
- G1GC
- ๋ฉ๋ชจ๋ฆฌ ๋์
Day4
Collection Framework์ HashMap ๋ด๋ถ ๊ตฌ์กฐ
- collision
- resize
- load factor
- ConcurrentHashMap
- CAS
Day5
Thread / synchronized / volatile / Atomic
- Race Condition
- Memory Visibility
- CAS
- Lock
- ThreadLocal leak
2์ฃผ์ฐจ - Spring ๋ด๋ถ ๋์
๋ชฉํ:
Spring๋ฅผ ์ดํดํ๊ณ ์ค๋ช ๊ฐ๋ฅํ ์์ค ํ๋ณด
Day1
Spring Bean Lifecycle
Day2
DI / IoC / BeanFactory / ApplicationContext
Day3
Spring AOP์ Proxy
Day4
@Transactional ๋ด๋ถ ๋์
Day5
Spring MVC ์์ฒญ ์ฒ๋ฆฌ ํ๋ฆ
3์ฃผ์ฐจ - JPA + DB + ํธ๋์ญ์
๋ชฉํ:
๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์ฑ๋ฅ ์ดํด
Day1
์์์ฑ ์ปจํ ์คํธ์ Dirty Checking
Day2
N+1 ๋ฌธ์ ์ Fetch ์ ๋ต
Day3
Transaction๊ณผ Isolation Level
Day4
์ธ๋ฑ์ค์ ์คํ ๊ณํ
Day5
Connection Pool๊ณผ DB ์ฑ๋ฅ
4์ฃผ์ฐจ - ์ด์ / ์ฅ์ ๋์ / ์์คํ ์ค๊ณ
๋ชฉํ:
์ค๋ฌดํ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ํฌ์ง์ ๋ ์์ฑ
Day1
TCP / HTTP / Keep-Alive
Day2
Redis ์บ์ ์ ๋ต๊ณผ ์ฅ์ ์ฌ๋ก
Day3
๋์ฉ๋ ํธ๋ํฝ ์ฒ๋ฆฌ ์ ๋ต
Day4
์ฅ์ ๋์๊ณผ ํธ๋ฌ๋ธ์ํ
Day5
์ค์ ๋ฉด์ ์๋ฐ ์ง๋ฌธ ๋์
ํต์ฌ ์ ๋ต
์์ผ๋ก ๊ฐ์ฅ ์ค์ํ ๊ฑด:
โ์ ๊ทธ๋ ๊ฒ ์ค๊ณ๋์๋๊ฐ?โ
๋ฅผ ๊ณ์ ํ๊ณ ๋๋ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฐ๋์:
- ์ด์ ๊ด์
- ์ฑ๋ฅ ๊ด์
- ์ฅ์ ์ฌ๋ก
- Trade-off
๋ฅผ ์ฐ๊ฒฐํด์ ํ์ตํ๋ค.
์ด๊ฒ์ด: โ๊ฐํ ์ค๋ฌดํ ๋ฐฑ์๋ ๊ฐ๋ฐ์โ ๋๋์ ๋ง๋ ๋ค.
์ค๋ฌดํ Java Backend ์ฌํ ํ์ต ํ ํ๋ฆฟ v4
์์ผ๋ก์ ๋ชฉํ๋:
โ์ฝํ ํ ๊ฐ๋ฐ์โ
๊ฐ ์๋๋ผ,
โ์ค๋ฌดํ Java ๋ฐฑ์๋ ๊ฐ๋ฐ์โ
์ฒ๋ผ ๋ณด์ด๋ ๊ฒ์ด๋ค.
๋ฐ๋ผ์:
- ๋ด๋ถ ๋ฉ์ปค๋์ฆ
- ์ค๊ณ ์ด์
- ์ฅ์ ์ฌ๋ก
- ์ฑ๋ฅ
- ์ด์ ๊ด์
์ค์ฌ์ผ๋ก ํ์ตํ๋ค.
์ถ์ฒ ์์ฒญ ํ ํ๋ฆฟ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
์ค๋์ [N์ฃผ์ฐจ M์ผ์ฐจ] ํ์ต์ด์ผ.
ํ์ฌ ์ฃผ์ฐจ ๋ชฉํ๋:
[ํ์ฌ ์ฃผ์ฐจ ๋ชฉํ]
์ค๋ ํ์ต ์ฃผ์ ๋:
[์ค๋์ Java/Spring/CS ์ฃผ์ ]
๋ชฉํ๋:
- ์ค๊ฒฌ Java ๋ฐฑ์๋ ๋ฉด์ ๋๋น
- ์ค๋ฌดํ ์ดํด
- ์ด์ ๊ด์ ์ดํด
- ์ฅ์ ๋์ ์ฌ๊ณ ๊ฐํ
์๋ ๋ด์ฉ์ ํฌํจํด์ ์ค๋ช
ํด์ค.
1. ํต์ฌ ๊ฐ๋
2. ๋ด๋ถ ๋์ ์๋ฆฌ
3. ์ ์ด๋ ๊ฒ ์ค๊ณ๋์๋๊ฐ?
4. ์ค๋ฌด ์ฌ์ฉ ์ฌ๋ก
5. ์ฑ๋ฅ ๊ด์
6. Trade-off ์ฌํ
7. ์ค์ ์ฅ์ ์ฌ๋ก
8. ์์ฃผ ๋ฐ์ํ๋ ์ค์
9. ๋ฉด์ ๊ผฌ๋ฆฌ ์ง๋ฌธ
10. ์ข์ ๋ต๋ณ ์์
11. ์ด์ ํ๊ฒฝ์์ ์ค์ํ ํฌ์ธํธ
12. Java/Spring ์ฝ๋ ์์
13. ๊ด๋ จ CS ๊ฐ๋
์ฐ๊ฒฐ
14. ํ์
์์ ํนํ ์ค์ํ ํฌ์ธํธ
15. ํต์ฌ ์์ฝ
๊ทธ๋ฆฌ๊ณ ๋ฐ๋์:
- GitHub Blog(Jekyll/Hugo)์ฉ md ํ์ผ ํํ๋ก ์์ฑ
- YAML Front Matter ํฌํจ
- ์ถ์ฒ ํ์ผ๋ช
ํฌํจ
- Markdown ์ ์ฒด๋ ``` ๋ก ๊ฐ์ธ์ง ๋ง ๊ฒ
- Java ์ฝ๋๋ ๋ค์ฌ์ฐ๊ธฐ 4์นธ ๋ฐฉ์ ์ฌ์ฉ
- md ํ์ผ ๊ตฌ์กฐ๊ฐ ๊นจ์ง์ง ์๊ฒ ์์ฑ
- md ํ์ผ ๋ด categories๋ To-Be-Senior ์์ฑ
์ถ๊ฐ ์กฐ๊ฑด:
- ๋จ์ ์ ์ ๋์ด ๊ธ์ง
- ์ด์/์ฅ์ ๊ด์ ๊ฐ์กฐ
- "์?"๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ํ๊ณ ๋๋ ๋ฐฉ์ ์ฌ์ฉ
- ๋ฉด์ ์๋ฐ ์ง๋ฌธ ๋์ ๊ฐ๋ฅ ์์ค์ผ๋ก ์ค๋ช
- ์ค๋ฌดํ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ๊ด์ ์ ์ง
- ์์ผ๋ก๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋๋ฅผ ํฌํจํด์ ์ ๋ฆฌ
- Mermaid flowchart
- sequenceDiagram
- stateDiagram
- classDiagram
- architecture diagram
ํต์ฌ ๋ชฉํ
์ต์ข ๋ชฉํ๋:
โ๊ธฐ์ ์ฌ์ฉ ๊ฒฝํโ
์ด ์๋๋ผ,
โ๊ธฐ์ ์ดํด ๊ธฐ๋ฐ ์ค๋ช ๋ฅ๋ ฅโ
์ ๋ง๋๋ ๊ฒ์ด๋ค.
ํนํ ์ค์ํ ๊ฑด:
- ์ ๊ทธ๋ ๊ฒ ์ค๊ณ๋์๋๊ฐ?
- ์ด๋ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋๊ฐ?
- ์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋๊ฐ?
- ์ด๋ค Trade-off๊ฐ ์กด์ฌํ๋๊ฐ?
๋ฅผ ์ฐ๊ฒฐํด์ ์ค๋ช ํ๋ ๊ฒ์ด๋ค.
DATT ์ฑ๋ฅ ๋ณ๋ชฉ ๋ถ์ ๋ฐ ๊ฐ์ ์ ๋ต ์๋ฆฝ
ํ๋ก์ ํธ ๊ฐ์
DATT๋ ์์น ๊ธฐ๋ฐ ์ฅ์ ๊ธฐ๋ก ๋ฐ ๊ณต์ ํ๋ซํผ์ด๋ค.
ํ์ฌ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ๋ค.
1
2
3
4
5
6
7
8
9
Client
โ
Spring Boot
โ
FastAPI Crawling Engine
โ
External Place Sources
โ
PostgreSQL(PostGIS)
์ด๊ธฐ ๊ตฌ์กฐ์์๋ ์ฌ์ฉ์ ๊ฒ์ ์์ฒญ ์๋ง๋ค ์ค์๊ฐ ํฌ๋กค๋ง์ ์ํํ๋๋ก ์ค๊ณํ๋ค.
ํ์ง๋ง ํ๋ก์ ํธ๋ฅผ ์ด์ํ๋ฉด์ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ๋ค.
ํ์ฌ ๋ฌธ์ ์
1. ๊ฒ์ ์๋ต ์๋ ์ง์ฐ
ํนํ ๋ค์๊ณผ ๊ฐ์ ์ํฉ์์ ์๋ต ์๋๊ฐ ๊ธ๊ฒฉํ ๋๋ ค์ก๋ค.
์ง์ญ ๋ฒ์๊ฐ ๋์ ๊ฒฝ์ฐ
์นดํ ๊ณ ๋ฆฌ ๊ฒ์์ด ๋ง์ ๊ฒฝ์ฐ
์ธ๋ถ ์ฌ์ดํธ ์๋ต์ด ๋๋ฆฐ ๊ฒฝ์ฐ
์์:
์ธ์ฒ
๊ฐ๋จ
ํ๋
๋ฑ ๊ด๋ฒ์ํ ์ง์ญ ๊ฒ์ ์ ์ฒด๊ฐ ์ฑ๋ฅ ์ ํ๊ฐ ์ฌํ๋ค.
2. ์นดํ ๊ณ ๋ฆฌ ์ ํ ์ง์ฐ
์นดํ ๊ณ ๋ฆฌ ๋ณ๊ฒฝ ์๋ง๋ค:
์ฌํฌ๋กค๋ง
๋ฐ์ดํฐ ๊ฐ๊ณต
DB ์ ์ฅ
๊ณผ์ ์ด ๋ฐ๋ณต์ ์ผ๋ก ๋ฐ์ํ๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ์ฌ์ฉ์ ๊ฒฝํ(UI/UX)์ด ์ ํ๋์๋ค.
3. ๊ตฌ์กฐ์ ๋ฌธ์
ํ์ฌ ๊ตฌ์กฐ๋ ์ฌ์ค์ ์๋์ ๊ฐ์ ํํ์๋ค.
1
2
3
4
5
6
7
8
9
10
11
์ฌ์ฉ์ ์์ฒญ
โ
Spring API
โ
์ค์๊ฐ FastAPI ํฌ๋กค๋ง
โ
์ธ๋ถ ์ฌ์ดํธ ์ ๊ทผ
โ
DB ์ ์ฅ
โ
์๋ต ๋ฐํ
์ฆ:
์ธ๋ถ I/O
๋คํธ์ํฌ ์ง์ฐ
ํฌ๋กค๋ง ์ฒ๋ฆฌ ์๊ฐ
์ด ๋ชจ๋ ์ฌ์ฉ์ ์๋ต ์๊ฐ์ ์ง์ ์ํฅ์ ์ฃผ๋ ๊ตฌ์กฐ์๋ค.
๊ฐ์ฅ ๋จผ์ ํด์ผ ํ ์ผ
๊ธฐ์กด์๋ ๋จ์ํ:
โ๋๋ฆฌ๋คโ
๋ผ๊ณ ๋ง ์ธ์งํ๊ณ ์์๋ค.
ํ์ง๋ง ์ค๋ฌด์์๋ ๋ฐ๋์:
์ผ๋ง๋ ๋๋ฆฐ๊ฐ?
์ด๋๊ฐ ๋๋ฆฐ๊ฐ?
์ด๋ค ์ํฉ์์ ๋๋ฆฐ๊ฐ?
๋ฅผ ์์น ๊ธฐ๋ฐ์ผ๋ก ๋ถ์ํด์ผ ํ๋ค.
๋ฐ๋ผ์ ๊ฐ์ ์ ์ ๋จผ์ ํ์ฌ ์ํ๋ฅผ ๊ณ์ธกํ๊ธฐ๋ก ํ๋ค.
์ธก์ ๋ชฉํ
๋ค์ ํญ๋ชฉ๋ค์ ์์งํ๊ธฐ๋ก ํ๋ค.
| ํญ๋ชฉ | ์ธก์ ๋ด์ฉ |
|---|---|
| API ์๋ต ์๊ฐ | ํ๊ท , P95, P99 |
| ํฌ๋กค๋ง ์๊ฐ | FastAPI ์ฒ๋ฆฌ ์๊ฐ |
| DB ์ฒ๋ฆฌ ์๊ฐ | Insert / Select ์์ ์๊ฐ |
| ์คํจ์จ | Timeout / Error |
| ์๋ฒ ๋ฆฌ์์ค | CPU / Memory ์ฌ์ฉ๋ |
์ธก์ ์ ๋ต
1. Spring API ์๋ต ์๊ฐ ๋ก๊น
Interceptor ๋๋ Filter๋ฅผ ํ์ฉํ์ฌ API ์๋ต ์๊ฐ์ ๊ธฐ๋กํ๋ค.
์์:
1
2
3
4
5
[SEARCH_API]
keyword=์ธ์ฒ
category=cafe
durationMs=8420
status=200
2. FastAPI ํฌ๋กค๋ง ์๊ฐ ์ธก์
ํฌ๋กค๋ง ์์/์ข ๋ฃ ์๊ฐ์ ๊ธฐ๋กํ๋ค.
์์:
1
2
3
4
5
[CRAWLING]
keyword=์ธ์ฒ
category=cafe
durationMs=6210
resultCount=42
3. DB ์ฒ๋ฆฌ ์๊ฐ ์ธก์
Query ๋ฐ Insert ์๊ฐ์ ๋ณ๋๋ก ์ธก์ ํ๋ค.
์์:
1
2
3
[DB_QUERY]
query=searchPlaces
durationMs=180
๋ถํ ํ ์คํธ ๊ณํ
์ฑ๋ฅ ์ธก์ ์ ์ํด k6 ๊ธฐ๋ฐ ๋ถํ ํ ์คํธ๋ฅผ ์งํํ ์์ ์ด๋ค.
ํ ์คํธ ์๋๋ฆฌ์ค:
| ์ง์ญ | ์นดํ ๊ณ ๋ฆฌ |
|---|---|
| ์ธ์ฒ | ์นดํ |
| ๊ฐ๋จ | ์์์ |
| ํ๋ | ์ ์ง |
| ์ฑ์ | ๋๊ฑฐ๋ฆฌ |
๋์ ์ฌ์ฉ์ ์:
1๋ช
10๋ช
30๋ช
์์ ๋ณ๋ชฉ
ํ์ฌ ์์ ์์ ๊ฐ์ฅ ์์ฌ๋๋ ๋ณ๋ชฉ์ ๋ค์๊ณผ ๊ฐ๋ค.
1
์ธ๋ถ ํฌ๋กค๋ง I/O
๋ค๋ง ์ด๋ ์์ง ์ถ์ธก ๋จ๊ณ์ด๋ฉฐ,
์ค์ ๊ณ์ธก ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฒ์ฆํ ์์ ์ด๋ค.
๊ฐ์ ๋ฐฉํฅ
ํ์ฌ๋ ์ค์๊ฐ ํฌ๋กค๋ง ๊ธฐ๋ฐ ๊ตฌ์กฐ๋ค.
1
2
3
4
5
6
7
์ฌ์ฉ์ ์์ฒญ
โ
์ค์๊ฐ ํฌ๋กค๋ง
โ
DB ์ ์ฅ
โ
์๋ต
์ด๋ฅผ ์๋์ ๊ฐ์ ๋ฐฐ์น ๊ธฐ๋ฐ ๊ตฌ์กฐ๋ก ๋ณ๊ฒฝํ ๊ณํ์ด๋ค.
1
2
3
4
5
6
7
8
9
10
11
๋ฐฐ์น ์์คํ
โ
์ฃผ๊ธฐ์ ํฌ๋กค๋ง
โ
DB ์ ์ฌ
์ฌ์ฉ์ ์์ฒญ
โ
DB ์กฐํ
โ
์๋ต
์ถ๊ฐ ๊ฐ์ ์์ ์ฌํญ
Redis ์บ์ฑ ๋์
์ธ๊ธฐ ์ง์ญ ๋ฐ ์นดํ ๊ณ ๋ฆฌ ์กฐํ ๊ฒฐ๊ณผ๋ฅผ ์บ์ฑํ์ฌ ์๋ต ์๋๋ฅผ ๊ฐ์ ํ ์์ ์ด๋ค.
์์ ํ์ต ํฌ์ธํธ:
Cache Aside
TTL ์ ๋ต
Cache Hit Ratio
Redis ์ฅ์ ๋์
์ด์ ๊ด์ ๊ฐ์
์ถ๊ฐ์ ์ผ๋ก ๋ค์ ํญ๋ชฉ๋ค์ ๊ตฌ์ถํ ๊ณํ์ด๋ค.
Spring Actuator
Prometheus
Grafana
Request Trace Logging
Retry / Timeout
Circuit Breaker
์์ผ๋ก์ ๋ฐฉํฅ
์ด๋ฒ ํ๋ก์ ํธ ๊ฐ์ ์ ํต์ฌ ๋ชฉํ๋ ๋จ์ ๊ธฐ๋ฅ ์ถ๊ฐ๊ฐ ์๋๋ค.
์ค์ํ ๊ฒ์:
์ ๋ณ๋ชฉ์ด ๋ฐ์ํ๋๊ฐ?
์ด๋ค ๊ณ์ธต์ด ๋๋ฆฐ๊ฐ?
์ด๋ค ์์์ด ๋ถ์กฑํ๊ฐ?
์ด๋ค Trade-off๊ฐ ์กด์ฌํ๋๊ฐ?
๋ฅผ ๋ถ์ํ๊ณ ์ค๋ช ๊ฐ๋ฅํ ์์ค๊น์ง ๊ฐ๋ ๊ฒ์ด๋ค.
๋ง๋ฌด๋ฆฌ
ํ์ฌ DATT๋ ๋ค์๊ณผ ๊ฐ์ ์ค๋ฌด์ ์ธ ์์๋ค์ ํฌํจํ๊ณ ์๋ค.
Java + Python Hybrid Architecture
์ค์๊ฐ ๋ฐ์ดํฐ ์์ง
PostGIS ๊ธฐ๋ฐ ๊ณต๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
Docker ์ด์ ํ๊ฒฝ
DDD ๊ธฐ๋ฐ ํจํค์ง ๊ตฌ์กฐ
์ฑ๋ฅ ๋ณ๋ชฉ ๊ฒฝํ
์์ผ๋ก๋ ๋จ์ ๊ธฐ๋ฅ ๊ฐ๋ฐ๋ณด๋ค:
๋ฌธ์ ๋ฐ๊ฒฌ โ ์ธก์ โ ๊ฐ์ โ ์์น ๊ฒ์ฆ
ํ๋ฆ ์ค์ฌ์ผ๋ก ํ๋ก์ ํธ๋ฅผ ๊ฐ์ ํด๋๊ฐ ์์ ์ด๋ค.
DATT 6์ ๋ง๊น์ง ๋ก๋๋งต
๋ชฉํ
ํ์ฌ DATT ํ๋ก์ ํธ๋:
Java + Python Hybrid Architecture
์ค์๊ฐ ๋ฐ์ดํฐ ์์ง
PostGIS ๊ธฐ๋ฐ ๊ณต๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
Docker ๊ธฐ๋ฐ ์ด์ ํ๊ฒฝ
๋ฑ ์ค๋ฌด์ ์ธ ์์๋ฅผ ํฌํจํ๊ณ ์๋ค.
ํ์ง๋ง ํ์ฌ๋:
์ค์๊ฐ ํฌ๋กค๋ง ๋ณ๋ชฉ
์๋ต ์๋ ์ง์ฐ
์ด์ ๊ด์ ๋ถ์กฑ
๊ด์ธก์ฑ ๋ถ์กฑ
๋ฌธ์ ๊ฐ ์กด์ฌํ๋ค.
๋ฐ๋ผ์ 6์ ๋ง๊น์ง์ ๋ชฉํ๋ ๋จ์ ๊ธฐ๋ฅ ์ถ๊ฐ๊ฐ ์๋๋ผ:
โ์ค๋ฌดํ ๋ฐฑ์๋ ํ๋ก์ ํธ ์์ค์ ์์ ์ฑ๊ณผ ์ด์ ๊ฒฝํ ํ๋ณดโ
์ด๋ค.
์ต์ข ๋ชฉํ
6์ ๋ง๊น์ง ๋ค์ ์ํ๋ฅผ ๋ชฉํ๋ก ํ๋ค.
| ์์ญ | ๋ชฉํ |
|---|---|
| ์ฑ๋ฅ | ์๋ต ์๊ฐ ์์น ๊ธฐ๋ฐ ๊ฐ์ |
| ๊ตฌ์กฐ | ๋ฐฐ์น ๊ธฐ๋ฐ ๋ฐ์ดํฐ ์์ง ๊ตฌ์กฐ ์ ํ |
| ์บ์ฑ | Redis ๋์ |
| ์ด์ | ๋ชจ๋ํฐ๋ง/๋ก๊น ๊ตฌ์ถ |
| ์ฅ์ ๋์ | Retry/Timeout/Fallback ์ ์ฉ |
| ๋ฌธ์ํ | ๋ชจ๋ ๊ฐ์ ๊ณผ์ ๋ธ๋ก๊ทธ ์ ๋ฆฌ |
| ํฌํธํด๋ฆฌ์ค | ๋ฉด์ ์ค๋ช ๊ฐ๋ฅํ ์์ค ํ๋ณด |
์ ์ฒด ๋ก๋๋งต
| ๊ธฐ๊ฐ | ํต์ฌ ๋ชฉํ |
|---|---|
| 5์ 3์ฃผ์ฐจ | ํํฉ ์ธก์ ๋ฐ ๋ณ๋ชฉ ๋ถ์ |
| 5์ 4์ฃผ์ฐจ | ๋ฐฐ์น ๊ธฐ๋ฐ ๊ตฌ์กฐ ์ ํ |
| 6์ 1์ฃผ์ฐจ | Redis ์บ์ฑ ๋์ |
| 6์ 2์ฃผ์ฐจ | DB ๋ฐ ๊ฒ์ ์ต์ ํ |
| 6์ 3์ฃผ์ฐจ | ์ด์ ๊ด์ธก์ฑ ๊ตฌ์ถ |
| 6์ 4์ฃผ์ฐจ | ์ฅ์ ๋์ ๋ฐ ๋ฆฌํฉํ ๋ง |
| 6์ ๋ง | ์ต์ข ์ฑ๋ฅ ๊ฒ์ฆ ๋ฐ ํฌํธํด๋ฆฌ์ค ์ ๋ฆฌ |
5์ 3์ฃผ์ฐจ โ ํํฉ ์ธก์ ๋ฐ ๋ณ๋ชฉ ๋ถ์
๋ชฉํ
ํ์ฌ ์ํ๋ฅผ ์์น ๊ธฐ๋ฐ์ผ๋ก ๋ถ์ํ๋ค.
์ค์ํ ๊ฒ์:
โ๋๋ฆฌ๋คโ
๊ฐ ์๋๋ผ:
โ์ด๋๊ฐ ์ผ๋ง๋ ๋๋ฆฐ๊ฐ?โ
๋ฅผ ํ์ธํ๋ ๊ฒ์ด๋ค.
ํด์ผ ํ ์์
1. API ์๋ต ์๊ฐ ์ธก์
์ธก์ ๋์:
ํ๊ท ์๋ต ์๊ฐ
P95
P99
์คํจ์จ
๊ตฌํ:
Spring Interceptor
Request Logging
2. FastAPI ํฌ๋กค๋ง ์๊ฐ ์ธก์
์ธก์ ๋์:
์นดํ ๊ณ ๋ฆฌ๋ณ ํฌ๋กค๋ง ์๊ฐ
์ง์ญ๋ณ ํฌ๋กค๋ง ์๊ฐ
3. DB ์ฒ๋ฆฌ ์๊ฐ ์ธก์
์ธก์ ๋์:
Insert ์๊ฐ
Select ์๊ฐ
Query Count
4. ๋ถํ ํ ์คํธ ๊ตฌ์ถ
๋๊ตฌ:
1
k6
ํ ์คํธ ์๋๋ฆฌ์ค:
| ์ง์ญ | ์นดํ ๊ณ ๋ฆฌ |
|---|---|
| ์ธ์ฒ | ์นดํ |
| ๊ฐ๋จ | ์์์ |
| ํ๋ | ์ ์ง |
| ์ฑ์ | ๋๊ฑฐ๋ฆฌ |
์ฐ์ถ๋ฌผ
before-report.md
k6 ํ ์คํธ ์คํฌ๋ฆฝํธ
์๋ต ์๊ฐ ๋ก๊ทธ
๋ณ๋ชฉ ๋ถ์ ๋ฌธ์
5์ 4์ฃผ์ฐจ โ ๋ฐฐ์น ๊ธฐ๋ฐ ๊ตฌ์กฐ ์ ํ
๋ชฉํ
์ค์๊ฐ ํฌ๋กค๋ง ๊ตฌ์กฐ ์ ๊ฑฐ.
๊ธฐ์กด ๊ตฌ์กฐ
1
2
3
4
5
6
7
์ฌ์ฉ์ ์์ฒญ
โ
์ค์๊ฐ ํฌ๋กค๋ง
โ
DB ์ ์ฅ
โ
์๋ต
๋ณ๊ฒฝ ๊ตฌ์กฐ
1
2
3
4
5
6
7
8
9
๋ฐฐ์น ํฌ๋กค๋ง
โ
DB ์ ์ฅ
์ฌ์ฉ์ ์์ฒญ
โ
DB ์กฐํ
โ
์๋ต
ํด์ผ ํ ์์
1. Scheduler ๊ตฌ์ถ
Spring Scheduler
๋๋ FastAPI Scheduler
2. ๋ฐฐ์น ํฌ๋กค๋ง ๋ถ๋ฆฌ
๋ถ๋ฆฌ ๋์:
์ง์ญ
์นดํ ๊ณ ๋ฆฌ
3. DB ์ ์ฅ ์ต์ ํ
Bulk Insert
Transaction ๋ฒ์ ์กฐ์
4. API ์กฐํ ๊ตฌ์กฐ ๋ณ๊ฒฝ
์ค์๊ฐ ํฌ๋กค๋ง ์ ๊ฑฐ ํ:
1
DB ์กฐํ ๊ธฐ๋ฐ ๊ฒ์ API
๋ก ์ ํ.
๊ธฐ๋ ํจ๊ณผ
์์ ํจ๊ณผ:
| ํญ๋ชฉ | ์์ ๋ณํ |
|---|---|
| ์๋ต ์๋ | ๋ํญ ๊ฐ์ |
| ์คํจ์จ | ๊ฐ์ |
| ์ฌ์ฉ์ ๊ฒฝํ | ๊ฐ์ |
๋จ, ์ด๋ ์์์ด๋ฉฐ ์ค์ ์ธก์ ์ผ๋ก ๊ฒ์ฆํด์ผ ํ๋ค.
6์ 1์ฃผ์ฐจ โ Redis ์บ์ฑ ๋์
๋ชฉํ
๋ฐ๋ณต ์กฐํ ์ฑ๋ฅ ๊ฐ์ .
์ ์ฉ ์ ๋ต
1
Cache Aside
์บ์ฑ ๋์
์ธ๊ธฐ ์ง์ญ
์ธ๊ธฐ ์นดํ ๊ณ ๋ฆฌ
๋ฉ์ธ ํ๋ฉด ์กฐํ
ํด์ผ ํ ์์
1. Redis ์ฐ๋
Docker Compose ์ถ๊ฐ
Spring Redis ์ค์
2. Cache Hit/Miss ๋ก๊น
์์:
1
2
CACHE_HIT
CACHE_MISS
3. TTL ์ ๋ต ์ ์ฉ
์์ ํ๋ณด:
10๋ถ
30๋ถ
1์๊ฐ
์ค์ ์๋น์ค ํน์ฑ ๊ธฐ๋ฐ ์กฐ์ ํ์.
ํ์ต ํฌ์ธํธ
Cache Aside
TTL
Eviction
Stampede
Redis ์ฅ์ ๋์
6์ 2์ฃผ์ฐจ โ DB ๋ฐ ๊ฒ์ ์ต์ ํ
๋ชฉํ
PostGIS ๋ฐ ๊ฒ์ ์ฑ๋ฅ ๊ฐ์ .
ํด์ผ ํ ์์
1. Query ๋ถ์
์คํ ๊ณํ ๋ถ์
Full Scan ์ฌ๋ถ ํ์ธ
2. Index ์ต์ ํ
ํ๋ณด:
B-Tree
GIST Index
3. Pagination ์ ์ฉ
ํ์ฌ ๊ตฌ์กฐ์์ ์ ์ฒด ์กฐํ ๋ฐ์ ์ฌ๋ถ ํ์ธ.
4. N+1 ๋ฌธ์ ์ ๊ฒ
Fetch Join
Lazy Loading ์ ๊ฒ
ํต์ฌ ํ์ต ํฌ์ธํธ
์คํ ๊ณํ
์ธ๋ฑ์ค ์ ๋ต
Spatial Query
Query Tuning
6์ 3์ฃผ์ฐจ โ ์ด์ ๊ด์ธก์ฑ ๊ตฌ์ถ
๋ชฉํ
์ด์ ๊ฐ๋ฅํ ์๋น์ค ์์ค์ ๊ด์ธก์ฑ ํ๋ณด.
ํด์ผ ํ ์์
1. Spring Actuator
์ถ๊ฐ ํญ๋ชฉ:
health
metrics
prometheus
2. Prometheus + Grafana
์๊ฐํ ๋์:
API ์๋ต ์๊ฐ
CPU
Memory
Error Count
3. Request Trace Logging
์ถ๊ฐ ํญ๋ชฉ:
traceId
request duration
error tracking
ํ์ต ํฌ์ธํธ
์ด์ ๋ชจ๋ํฐ๋ง
์ฅ์ ํ์ง
๊ด์ธก์ฑ
6์ 4์ฃผ์ฐจ โ ์ฅ์ ๋์ ๋ฐ ๋ฆฌํฉํ ๋ง
๋ชฉํ
์ด์ ํ๊ฒฝ ๊ธฐ์ค ์์ ์ฑ ํ๋ณด.
ํด์ผ ํ ์์
1. Retry ์ ์ฉ
๋์:
FastAPI ํธ์ถ
์ธ๋ถ API
2. Timeout ์ ์ฉ
์ธ๋ถ I/O ๋ฌดํ ๋๊ธฐ ๋ฐฉ์ง.
3. Circuit Breaker ๊ฒํ
์ธ๋ถ ์ฅ์ ์ ํ ์ฐจ๋จ.
4. ๊ณตํต ๋ก๊น ๋ฆฌํฉํ ๋ง
AOP ๊ธฐ๋ฐ ๋ก๊น
๊ณตํต ์์ธ ์ฒ๋ฆฌ
ํ์ต ํฌ์ธํธ
์ฅ์ ๋์
๋ณต๊ตฌ ์ ๋ต
์์ ์ฑ ํ๋ณด
6์ ๋ง โ ์ต์ข ๊ฒ์ฆ ๋ฐ ํฌํธํด๋ฆฌ์ค ์ ๋ฆฌ
๋ชฉํ
์ต์ข ์ ์ผ๋ก:
โ๋ฌธ์ ๋ฐ๊ฒฌ โ ์ธก์ โ ๊ฐ์ โ ๊ฒ์ฆโ
ํ๋ฆ ์์ฑ.
ํด์ผ ํ ์์
1. ๊ฐ์ ์ /ํ ๋น๊ต
| ํญ๋ชฉ | ๊ฐ์ ์ | ๊ฐ์ ํ |
|---|---|---|
| ํ๊ท ์๋ต ์๊ฐ | ย | ย |
| P95 | ย | ย |
| ์คํจ์จ | ย | ย |
2. ์ต์ข ๋ธ๋ก๊ทธ ์ ๋ฆฌ
์์ฑ ๋์:
๋ณ๋ชฉ ๋ถ์
Redis ๋์
๋ฐฐ์น ๊ตฌ์กฐ ์ ํ
PostGIS ์ต์ ํ
์ด์ ํ๊ฒฝ ๊ตฌ์ถ
์ฅ์ ๋์ ๊ฒฝํ
3. ๋ฉด์ ๋ต๋ณ ์ ๋ฆฌ
์ค๋ช ๊ฐ๋ฅํด์ผ ํ๋ ๊ฒ:
์ ์ค์๊ฐ ํฌ๋กค๋ง์ด ๋ฌธ์ ์๋๊ฐ?
์ ๋ฐฐ์น ๊ตฌ์กฐ๋ก ๋ณ๊ฒฝํ๋๊ฐ?
์ Redis๋ฅผ ์ฌ์ฉํ๋๊ฐ?
์ด๋ค Trade-off๊ฐ ์์๋๊ฐ?
์ด์์์๋ ์ด๋ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋๊ฐ?
ํต์ฌ ๋ฐฉํฅ
์์ผ๋ก ์ค์ํ ๊ฒ์:
๊ธฐ๋ฅ ์ถ๊ฐ
UI ๊ฐ์
๋ณด๋ค:
๋ณ๋ชฉ ๋ถ์
์์น ๊ธฐ๋ฐ ๊ฐ์
์ด์ ๊ฒฝํ
์ฅ์ ๋์
Trade-off ์ดํด
๋ฅผ ์ถ์ ํ๋ ๊ฒ์ด๋ค.
์ด ํ๋ฆ์ด ์ค๋ฌดํ ๋ฐฑ์๋ ๊ฐ๋ฐ์์ ํต์ฌ ์ญ๋์ด๋ค.
DATT Daily Log Command Template
์์ผ๋ก DATT ํ๋ก์ ํธ ์งํ ์ํฉ์ ์๋ ํ ํ๋ฆฟ ๊ธฐ๋ฐ์ผ๋ก ์์ฒญํ๋ค.
๋ชฉํ๋ ๋จ์ ์์ ๊ธฐ๋ก์ด ์๋๋ผ:
์ค๋ฌดํ ๋ฌธ์ ํด๊ฒฐ ๊ฒฝํ ์ถ์
์ฑ๋ฅ ๊ฐ์ ๊ณผ์ ๊ธฐ๋ก
์ฅ์ ๋์ ๊ฒฝํ ์ ๋ฆฌ
์ด์ ๊ด์ ์ฌ๊ณ ๊ฐํ
๋ฉด์ ๋ต๋ณ ๊ฐ๋ฅํ ์์ค์ ์ค๋ช ๋ฅ๋ ฅ ํ๋ณด
์ด๋ค.
์ฌ์ฉ ๋ชฉ์
์ด ํ ํ๋ฆฟ์ ๋ค์ ์ฉ๋๋ก ์ฌ์ฉํ๋ค.
GitHub Blog ํฌ์คํ
์ฑ๋ฅ ๊ฐ์ ๊ธฐ๋ก
์ฅ์ ๋ถ์ ๋ฌธ์ํ
์ด์ ๊ฒฝํ ์ ๋ฆฌ
ํฌํธํด๋ฆฌ์ค ์๋ฃํ
๋ฉด์ ๋๋น
์ถ๋ ฅ ๊ท์น
๋ฐ๋์ ์๋ ๊ท์น์ ์ง์ผ์ ์์ฑํ๋ค.
GitHub Blog(Jekyll/Hugo)์ฉ md ํ์ผ ํํ๋ก ์์ฑ
YAML Front Matter ํฌํจ
์ถ์ฒ ํ์ผ๋ช ํฌํจ
Markdown ์ ์ฒด๋ฅผ ์ฝ๋ ๋ธ๋ก(```)์ผ๋ก ๊ฐ์ธ์ง ๋ง ๊ฒ
md ํ์ผ ๊ตฌ์กฐ๊ฐ ๊นจ์ง์ง ์๊ฒ ์์ฑ
categories๋ ๋ฐ๋์
To-Be-SeniorJava ์ฝ๋๋ ๋ค์ฌ์ฐ๊ธฐ 4์นธ ์ฌ์ฉ
๋จ์ ๊ฒฐ๊ณผ ๋์ด ๊ธ์ง
๋ฐ๋์ ์์ธ ๋ถ์ ํฌํจ
์ถ์ธก๊ณผ ์ค์ ์ธก์ ๊ฒฐ๊ณผ๋ฅผ ๊ตฌ๋ถ
์ด์ ๊ด์ ํฌํจ
Trade-off ํฌํจ
์ฑ๋ฅ ์์น ํฌํจ ๊ฐ๋ฅํ๋ฉด ๋ฐ๋์ ํฌํจ
โ์ ์ด๋ ๊ฒ ์ค๊ณํ๋๊ฐ?โ ํฌํจ
์ค๋ฌดํ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ๊ด์ ์ ์ง
์์ฒญ ํ ํ๋ฆฟ
์๋ ํ์์ผ๋ก ์์ฒญํ๋ค.
์ค๋ ์์ ์ฃผ์ :
[์์ ์ ๋ชฉ]
ํ์ฌ ์์ ๋ชฉ์ :
ํ์ฌ ๋ฌธ์ ์ํฉ:
๋ฌธ์ ํ์:
1
์ค์ ๋ฐ์ํ ํ์ ์์ฑ
๋ฐ์ ์กฐ๊ฑด:
ํ์ฌ ์์ฌ๋๋ ์์ธ:
์ฃผ์:
์ถ์ธก์ธ์ง ์ค์ ์ธก์ ๊ฒฐ๊ณผ์ธ์ง ๋ฐ๋์ ๊ตฌ๋ถ
์ธก์ ๊ธฐ๋ฐ์ด๋ฉด ๋ก๊ทธ/์์น ํฌํจ
์์งํ ๋ก๊ทธ:
1
๋ก๊ทธ ์์ฑ
์ฑ๋ฅ ์ธก์ ๊ฒฐ๊ณผ:
| ํญ๋ชฉ | ๊ฒฐ๊ณผ |
|---|---|
| ํ๊ท ์๋ต ์๊ฐ | ย |
| P95 | ย |
| P99 | ย |
| ์คํจ์จ | ย |
์ค์ ํ์ธ๋ ์์ธ:
์ ์ฉํ ํด๊ฒฐ ๋ฐฉ๋ฒ:
์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ:
Before
1
๊ธฐ์กด ์ฝ๋
After
1
๊ฐ์ ์ฝ๋
Trade-off:
| ์ฅ์ | ๋จ์ |
|---|---|
| ย | ย |
์ด์ ๊ด์ ๊ณ ๋ ค ์ฌํญ:
ํ๊ณ :
๋ค์ ์์ ์์ :
์ถ๋ ฅ ์๊ตฌ์ฌํญ
๋ฐ๋์ ์๋ ํ์์ผ๋ก ๊ฒฐ๊ณผ ์์ฑ:
์ถ์ฒ ํ์ผ๋ช
YAML Front Matter ํฌํจ
GitHub Blog ์ ๋ก๋ ๊ฐ๋ฅํ md ํํ
์ ๋ชฉ ํฌํจ
์ด์/์ฑ๋ฅ/Trade-off ํฌํจ
์ค๋ฌดํ ๋ฐฑ์๋ ๊ด์ ์ ์ง
๋ธ๋ก๊ทธ ํฌ์คํ ์์ค์ ํ์ง ์ ์ง
์ข์ ์์ฒญ ์์
์์:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
์ค๋ ์์
์ฃผ์ :
์ค์๊ฐ ํฌ๋กค๋ง ๋ณ๋ชฉ ๋ถ์
ํ์ฌ ์์
๋ชฉ์ :
- ๊ฒ์ ์๋ต ์๋ ๊ฐ์
- ๋ณ๋ชฉ ๊ตฌ๊ฐ ๋ถ์
- ์ถํ ๋ฐฐ์น ๊ตฌ์กฐ ์ ํ ์ค๋น
ํ์ฌ ๋ฌธ์ ์ํฉ:
- ๊ฒ์ ์ ์๋ต์ด ๋งค์ฐ ๋๋ฆผ
- ์ง์ญ ๋ฒ์๊ฐ ๋์์๋ก ์ฌ๊ฐ
- ์ฌ์ฉ์ ๊ฒฝํ ์ ํ ๋ฐ์
ํต์ฌ ๋ฐฉํฅ
์์ผ๋ก ์ค์ํ ๊ฒ์:
โ๊ธฐ๋ฅ ๊ตฌํโ
๋ณด๋ค
โ๋ฌธ์ ๋ถ์ โ ์ธก์ โ ๊ฐ์ โ ๊ฒ์ฆโ
์ด๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฐ๋์:
์ ๋ณ๋ชฉ์ด ๋ฐ์ํ๋๊ฐ?
์ ์ด๋ฐ ๊ตฌ์กฐ๊ฐ ๋์๋๊ฐ?
์ด๋ค Trade-off๊ฐ ์กด์ฌํ๋๊ฐ?
์ด์์์๋ ์ด๋ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋๊ฐ?
๋ฅผ ์ฐ๊ฒฐํด์ ์ค๋ช ๊ฐ๋ฅํด์ผ ํ๋ค.
์ด ํ๋ฆ์ด ์ค๋ฌดํ ๋ฐฑ์๋ ๊ฐ๋ฐ์์ ํต์ฌ ์ญ๋์ด๋ค.