Post

๐Ÿ“œ ์‹ค๋ฌดํ˜• Java ๋ฐฑ์—”๋“œ ์ง‘์ค‘ ์„ฑ์žฅ ํ”Œ๋žœ ๋ฐ ํ…œํ”Œ๋ฆฟ

๐Ÿ“œ ์‹ค๋ฌดํ˜• 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-Senior

  • Java ์ฝ”๋“œ๋Š” ๋“ค์—ฌ์“ฐ๊ธฐ 4์นธ ์‚ฌ์šฉ

  • ๋‹จ์ˆœ ๊ฒฐ๊ณผ ๋‚˜์—ด ๊ธˆ์ง€

  • ๋ฐ˜๋“œ์‹œ ์›์ธ ๋ถ„์„ ํฌํ•จ

  • ์ถ”์ธก๊ณผ ์‹ค์ œ ์ธก์ • ๊ฒฐ๊ณผ๋ฅผ ๊ตฌ๋ถ„

  • ์šด์˜ ๊ด€์  ํฌํ•จ

  • Trade-off ํฌํ•จ

  • ์„ฑ๋Šฅ ์ˆ˜์น˜ ํฌํ•จ ๊ฐ€๋Šฅํ•˜๋ฉด ๋ฐ˜๋“œ์‹œ ํฌํ•จ

  • โ€œ์™œ ์ด๋ ‡๊ฒŒ ์„ค๊ณ„ํ–ˆ๋Š”๊ฐ€?โ€ ํฌํ•จ

  • ์‹ค๋ฌดํ˜• ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž ๊ด€์  ์œ ์ง€


์š”์ฒญ ํ…œํ”Œ๋ฆฟ

์•„๋ž˜ ํ˜•์‹์œผ๋กœ ์š”์ฒญํ•œ๋‹ค.


์˜ค๋Š˜ ์ž‘์—… ์ฃผ์ œ:

[์ž‘์—… ์ œ๋ชฉ]

ํ˜„์žฌ ์ž‘์—… ๋ชฉ์ :

ํ˜„์žฌ ๋ฌธ์ œ ์ƒํ™ฉ:

๋ฌธ์ œ ํ˜„์ƒ:

1
์‹ค์ œ ๋ฐœ์ƒํ•œ ํ˜„์ƒ ์ž‘์„ฑ

๋ฐœ์ƒ ์กฐ๊ฑด:

ํ˜„์žฌ ์˜์‹ฌ๋˜๋Š” ์›์ธ:

์ฃผ์˜:

  • ์ถ”์ธก์ธ์ง€ ์‹ค์ œ ์ธก์ • ๊ฒฐ๊ณผ์ธ์ง€ ๋ฐ˜๋“œ์‹œ ๊ตฌ๋ถ„

  • ์ธก์ • ๊ธฐ๋ฐ˜์ด๋ฉด ๋กœ๊ทธ/์ˆ˜์น˜ ํฌํ•จ

์ˆ˜์ง‘ํ•œ ๋กœ๊ทธ:

1
๋กœ๊ทธ ์ž‘์„ฑ

์„ฑ๋Šฅ ์ธก์ • ๊ฒฐ๊ณผ:

ํ•ญ๋ชฉ๊ฒฐ๊ณผ
ํ‰๊ท  ์‘๋‹ต ์‹œ๊ฐ„ย 
P95ย 
P99ย 
์‹คํŒจ์œจย 

์‹ค์ œ ํ™•์ธ๋œ ์›์ธ:

์ ์šฉํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:

์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ:

Before

1
๊ธฐ์กด ์ฝ”๋“œ

After

1
๊ฐœ์„  ์ฝ”๋“œ

Trade-off:

์žฅ์ ๋‹จ์ 
ย ย 

์šด์˜ ๊ด€์  ๊ณ ๋ ค ์‚ฌํ•ญ:

ํšŒ๊ณ :

๋‹ค์Œ ์ž‘์—… ์˜ˆ์ •:


์ถœ๋ ฅ ์š”๊ตฌ์‚ฌํ•ญ

๋ฐ˜๋“œ์‹œ ์•„๋ž˜ ํ˜•์‹์œผ๋กœ ๊ฒฐ๊ณผ ์ƒ์„ฑ:

  1. ์ถ”์ฒœ ํŒŒ์ผ๋ช…

  2. YAML Front Matter ํฌํ•จ

  3. GitHub Blog ์—…๋กœ๋“œ ๊ฐ€๋Šฅํ•œ md ํ˜•ํƒœ

  4. ์ œ๋ชฉ ํฌํ•จ

  5. ์šด์˜/์„ฑ๋Šฅ/Trade-off ํฌํ•จ

  6. ์‹ค๋ฌดํ˜• ๋ฐฑ์—”๋“œ ๊ด€์  ์œ ์ง€

  7. ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŒ… ์ˆ˜์ค€์˜ ํ’ˆ์งˆ ์œ ์ง€


์ข‹์€ ์š”์ฒญ ์˜ˆ์‹œ

์˜ˆ์‹œ:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
์˜ค๋Š˜ ์ž‘์—… ์ฃผ์ œ:

์‹ค์‹œ๊ฐ„ ํฌ๋กค๋ง ๋ณ‘๋ชฉ ๋ถ„์„

ํ˜„์žฌ ์ž‘์—… ๋ชฉ์ :

- ๊ฒ€์ƒ‰ ์‘๋‹ต ์†๋„ ๊ฐœ์„ 
- ๋ณ‘๋ชฉ ๊ตฌ๊ฐ„ ๋ถ„์„
- ์ถ”ํ›„ ๋ฐฐ์น˜ ๊ตฌ์กฐ ์ „ํ™˜ ์ค€๋น„

ํ˜„์žฌ ๋ฌธ์ œ ์ƒํ™ฉ:

- ๊ฒ€์ƒ‰ ์‹œ ์‘๋‹ต์ด ๋งค์šฐ ๋А๋ฆผ
- ์ง€์—ญ ๋ฒ”์œ„๊ฐ€ ๋„“์„์ˆ˜๋ก ์‹ฌ๊ฐ
- ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์ €ํ•˜ ๋ฐœ์ƒ

ํ•ต์‹ฌ ๋ฐฉํ–ฅ

์•ž์œผ๋กœ ์ค‘์š”ํ•œ ๊ฒƒ์€:

โ€œ๊ธฐ๋Šฅ ๊ตฌํ˜„โ€

๋ณด๋‹ค

โ€œ๋ฌธ์ œ ๋ถ„์„ โ†’ ์ธก์ • โ†’ ๊ฐœ์„  โ†’ ๊ฒ€์ฆโ€

์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ฐ˜๋“œ์‹œ:

  • ์™œ ๋ณ‘๋ชฉ์ด ๋ฐœ์ƒํ–ˆ๋Š”๊ฐ€?

  • ์™œ ์ด๋Ÿฐ ๊ตฌ์กฐ๊ฐ€ ๋˜์—ˆ๋Š”๊ฐ€?

  • ์–ด๋–ค Trade-off๊ฐ€ ์กด์žฌํ•˜๋Š”๊ฐ€?

  • ์šด์˜์—์„œ๋Š” ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๊ฐ€?

๋ฅผ ์—ฐ๊ฒฐํ•ด์„œ ์„ค๋ช… ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค.

์ด ํ๋ฆ„์ด ์‹ค๋ฌดํ˜• ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž์˜ ํ•ต์‹ฌ ์—ญ๋Ÿ‰์ด๋‹ค.

This post is licensed under CC BY 4.0 by the author.