Skip to content

SeungSooHan0409/Plus-Project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ๏ธ ์—ฌ๋ฆ„ ํœด๊ฐ€ ์—ฌ๊ธฐ ์–ด๋•Œ?

๐Ÿš€ ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

๊ฐœ๋ฐœ ๋™๊ธฐ

๋ˆ„๊ตฌ๋‚˜ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ์ˆ™์†Œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์˜ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ

์ˆ™์†Œ ๊ฒ€์ƒ‰, ์˜ˆ์•ฝ, ํ›„๊ธฐ ์ž‘์„ฑ, ์ฐœํ•˜๊ธฐ ๋“ฑ ์ˆ™์†Œ ์˜ˆ์•ฝ์— ํ•„์š”ํ•œ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ํŠน์ง• ๋ฐ ์ฐจ๋ณ„์ 

๊ฒ€์ƒ‰์–ด ์ž๋™ ์ €์žฅ๊ณผ ์ธ๊ธฐ ๊ฒ€์ƒ‰์–ด ์กฐํšŒ ๊ธฐ๋Šฅ์œผ๋กœ ์‚ฌ์šฉ์ž ํŽธ์˜๋ฅผ ๋†’์˜€๊ณ , Redis ์บ์‹œ๋ฅผ ํ™œ์šฉํ•ด ๋น ๋ฅธ ๊ฒ€์ƒ‰์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์•ˆ์ •์ ์ธ ์˜ˆ์•ฝ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ๋ถ„์‚ฐ ๋ฝ๋„ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ‘ค ํŒ€์›

  • ์ด๋ฆ„ (์—ญํ• )
    • ํ•œ์Šน์ˆ˜
      • ํŒ€์žฅ / ์˜ˆ์•ฝ, ์ฐœํ•˜๊ธฐ ๊ธฐ๋Šฅ(Redis Cache)
    • ๊ตฌ๋Œ€์›…
      • ์ˆ™์†Œ ์กฐํšŒ ๋ฐ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ (QueryDSL + Redis Cache), ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™” ๋ฌธ์ œ
    • ๊น€๋‘ํ•˜
      • ์œ ์ €, Spring Security, ๋™์‹œ์„ฑ ์ œ์–ด ๊ธฐ๋Šฅ
    • ์šฐ์ƒˆ๋น›
      • ๊ฒ€์ƒ‰์–ด ์ €์žฅ AOP, ์ธ๊ธฐ ๊ฒ€์ƒ‰์–ด ์กฐํšŒ ๊ธฐ๋Šฅ
    • ์ด์‹œ์˜จ
      • ํ›„๊ธฐ ๊ธฐ๋Šฅ
    • ์ฐจ์ˆœ์˜
      • ์ˆ™์†Œ ๋“ฑ๋ก, ์ˆ˜์ •, ์‚ญ์ œ ๊ธฐ๋Šฅ

๐Ÿ—“๏ธ ์ง„ํ–‰ ๊ธฐ๊ฐ„

  • 2025.07.08 ~ 2025.07.14

โš™๏ธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ

  • Java 17
  • Spring Boot 3.5.3
  • IntelliJ IDEA
  • Gradle 8
  • MySQL 8.0.33
  • QuertyDSL 5.1.0 (Jakarta)
  • Spring Security 6.5.1 + JWT
  • Lombok
  • Spring Cache, Redis
  • Postman
  • nGinder, jmeter

๐Ÿ“Œ ์ฃผ์š” ๊ธฐ๋Šฅ

  • ์œ ์ € CRUD
    • ํšŒ์› ๊ฐ€์ž…, ๋กœ๊ทธ์ธ, ๋‚ด ์ •๋ณด ์กฐํšŒ, ํšŒ์› ํƒˆํ‡ด
  • ์ˆ™์†Œ CRUD
    • ๋“ฑ๋ก, ์ˆ˜์ •, ์‚ญ์ œ
  • ์ˆ™์†Œ ๊ฒ€์ƒ‰
    • ํ‚ค์›Œ๋“œ / ์ง€์—ญ ๊ฒ€์ƒ‰ (QueryDSL + Redis Cache)
    • ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™” ์ด์Šˆ ํ•ด๊ฒฐ
  • ์ธ๊ธฐ ๊ฒ€์ƒ‰์–ด ์กฐํšŒ
  • ์˜ˆ์•ฝ CRUD
    • ์ƒ์„ฑ, ์กฐํšŒ, ์ˆ˜์ •, ์ทจ์†Œ
  • ํ›„๊ธฐ CRUD
    • ์ž‘์„ฑ, ์กฐํšŒ, ์ˆ˜์ •, ์‚ญ์ œ
  • ์ฐœํ•˜๊ธฐ
    • ์ฐœ ๋ชฉ๋ก ์กฐํšŒ, ์ทจ์†Œ

โœ๏ธ ์™€์ด์–ด ํ”„๋ ˆ์ž„

  • ์™€์ด์–ดํ”„๋ ˆ์ž„ ์ด๋ฏธ์ง€

    ์™€์ด์–ด ํ”„๋ ˆ์ž„ ์ด๋ฏธ์ง€

๐Ÿ“ ERD

  • ERD ์ด๋ฏธ์ง€

    ERD ์ด๋ฏธ์ง€

๐Ÿ“˜ API ์—”๋“œํฌ์ธํŠธ

๐Ÿ”— Postman API ๋ช…์„ธ์„œ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Domain Method Endpoint Description
Auth POST /api/auth/signup ํšŒ์› ๊ฐ€์ž…
Auth POST /api/auth ๋กœ๊ทธ์ธ
User PUT /api/users/{userId} ์‚ฌ์šฉ์ž ์—ญํ•  ๋ณ€๊ฒฝ
User GET /api/users/me ํ˜„์žฌ ์‚ฌ์šฉ์ž ์ •๋ณด ์กฐํšŒ
User DELETE /api/users/{userId} ํšŒ์› ํƒˆํ‡ด
Accommodation POST /api/accommodations ์ˆ™์†Œ ์ƒ์„ฑ
Accommodation GET /api/accommodations/v3/search/keyword ์ˆ™์†Œ ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰
Accommodation GET /api/accommodations/v3/search/city ์ˆ™์†Œ ์ง€์—ญ ๊ฒ€์ƒ‰
Trending GET /api/trending ์ธ๊ธฐ ๊ฒ€์ƒ‰์–ด ์กฐํšŒ
Accommodation PATCH /api/accommodations/{accommodationsId} ์ˆ™์†Œ ์ˆ˜์ •
Accommodation DELETE /api/accommodations/{accommodationsId} ์ˆ™์†Œ ์‚ญ์ œ
Accommodation POST /api/reservations ์ˆ™์†Œ ์˜ˆ์•ฝ
Reservation GET /api/reservations ์˜ˆ์•ฝ ๋ชฉ๋ก ์กฐํšŒ
Reservation PATCH /api/reservations/{reservationsId} ์˜ˆ์•ฝ ์ธ์› ๋ณ€๊ฒฝ
Reservation DELETE /api/reservations/{reservationsId} ์˜ˆ์•ฝ ์ทจ์†Œ
Review POST /api/reviews ํ›„๊ธฐ ์ž‘์„ฑ
Review GET /api/reviews/{reviewId} ํ›„๊ธฐ ๋‹จ๊ฑด ์กฐํšŒ
Review GET /api/reviews ํ›„๊ธฐ ์ „์ฒด ์กฐํšŒ
Review PATCH /api/reviews/{reviewId} ํ›„๊ธฐ ์ˆ˜์ •
Review DELETE /api/reviews/{reviewId} ํ›„๊ธฐ ์‚ญ์ œ
Favorite POST /api/favorites/{accommodationId} ์ฐœํ•˜๊ธฐ
Favorite GET /api/favorites ์ฐœ ๋ชฉ๋ก ์กฐํšŒ
Favorite DELETE /api/favorites/{favoriteId} ์ฐœ ์ทจ์†Œํ•˜๊ธฐ

โšก๏ธ ์บ์‹œ (์„ฑ๋Šฅ ๊ฐœ์„ )

cache-1

  • ํ…Œ์ŠคํŠธ ๋Œ€์ƒ: ์ˆ™์†Œ ์กฐํšŒ API (like๋ฅผ ์ด์šฉํ•œ ์ˆ™์†Œ ์ด๋ฆ„ & ์ฃผ์†Œ ํƒ์ƒ‰)
  • ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ
ํ•ญ๋ชฉ ๊ฐ’
์ด ๋ฐ์ดํ„ฐ ์ˆ˜ 1,050,011 ๊ฐœ
๊ฒ€์ƒ‰ ๋ฐ์ดํ„ฐ 50,001 ๊ฐœ
์‚ฌ์šฉ์ž ์ˆ˜ 300๋ช…
Ramp-up 30์ดˆ
๋ฃจํ”„ ์นด์šดํŠธ 5ํšŒ ๋ฐ˜
๋น„๊ต ๋Œ€์ƒ V1(QueryDSL) / V3(QueryDSL + RedisCache)
  • ๊ฒฐ๊ณผ ์š”์•ฝ
์ง€ํ‘œ V1 (QueryDSL) V3 (QueryDSL + Redis Cache) ๊ฐœ์„  ํšจ๊ณผ
ํ‰๊ท  ์‘๋‹ต ์‹œ๊ฐ„ 42,167ms 609ms ์•ฝ 69๋ฐฐ ๊ฐœ์„ 
์ตœ๊ณ  ์‘๋‹ต ์‹œ๊ฐ„ 56,295ms 18,687ms ์•ฝ 3๋ฐฐ ๊ฐœ์„ 
์˜ค๋ฅ˜์œจ 55.33% 0% ์˜ค๋ฅ˜ ์ œ๊ฑฐ
์ฒ˜๋ฆฌ๋Ÿ‰ 5.9sec 50.1sec ์•ฝ 8.5๋ฐฐ ์ฆ๊ฐ€

1. ์š”์ฒญ์„ ๋ณด๋‚ธ ์‹œ์ ๋ถ€ํ„ฐ ์„œ๋ฒ„๊ฐ€ ์ฒซ ๋ฒˆ์งธ ์‘๋‹ต ๋ฐ”์ดํŠธ๋ฅผ ๋ณด๋‚ด๊ธฐ๊นŒ์ง€ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„

[V1]

cache-2

[V3]

cache-3

(X: ์‹œ๊ฐ„ ๊ฒฝ๊ณผ, Y: ์‘๋‹ต ์ง€์—ฐ ์‹œ๊ฐ„)

  • ๊ฒฐ๊ณผ
    • V1 : ์†Œ์š”์‹œ๊ฐ„ 4:16s, ๋งค์šฐ ๋ถˆ์•ˆ์ •ํ•จ
    • V3 : ์†Œ์š”์‹œ๊ฐ„ 30s, ์•ˆ์ •์ ์ž„

2. ๋‹จ์œ„ ์‹œ๊ฐ„(1์ดˆ) ๋™์•ˆ ์„œ๋ฒ„๊ฐ€ ์ฒ˜๋ฆฌํ•œ ์š”์ฒญ ์ˆ˜

[V1]

cache-4

์ดˆ๋ก: ์‹คํŒจ, ๋นจ๊ฐ•: ์„ฑ๊ณต

[V3]

cache-5

  • ๊ฒฐ๊ณผ
    • V1 : ์„ฑ๊ณต ์š”์ฒญ ์ฒ˜์น˜๋Ÿ‰ ํ‰๊ท  8 TPS, ์ตœ๊ณ  12 TPS,ย  ์‹คํŒจ์œจ ๋†’์Œ
    • V3 : ์„ฑ๊ณต ์š”์ฒญ ์ฒ˜์น˜๋Ÿ‰ ํ‰๊ท  50 TPS, ย  ์‹คํŒจ ์—†๊ณ  ์ผ์ •ํ•จ

3. ์‹œ๊ฐ„ ๊ฒฝ๊ณผ์— ๋”ฐ๋ผ ๋™์‹œ์— ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ์‚ฌ์šฉ์ž ์ˆ˜

[V1]

cache-6

[V3]

cache-7

  • ๊ฒฐ๊ณผ
    • V1 : ์ดˆ๊ธฐ ๋ถ€ํ•˜๋Š” ์ž˜ ๊ฒฌ๋Ž ์œผ๋‚˜ ์ƒ๋‹จ์— ์œ ์ง€๋˜๋Š” ๋™์•ˆ ๋ณ‘๋ชฉ ๋˜๋Š” ์ž์› ๋ถ€์กฑ์œผ๋กœ ์ธํ•˜์—ฌ ๋†’์€ ์‘๋‹ต ์ง€์—ฐ ๋ฐ ์‹คํŒจ ๋ฐœ์ƒ
    • V3 : ๋ถ€ํ•˜ ์—†์ด ์ผ์ •ํ•˜๊ฒŒ ์ฒ˜๋ฆฌ

4. ๋‹จ์œ„ ์‹œ๊ฐ„(1์ดˆ) ๋™์•ˆ ์„œ๋ฒ„๊ฐ€ ๋ฐ›์€ ์š”์ฒญ ์ˆ˜

[V1]

cache-8

[V3]

cache-9

  • ๊ฒฐ๊ณผ
    • V1 : ์ „๋ฐ˜์ ์œผ๋กœ ์ผ๊ด€์„ฑ๊ณผ ์ฒ˜๋ฆฌ๋Ÿ‰ ๋ชจ๋‘ ๋‚ฎ์Œ
    • V3 : ์•ˆ์ •์ ์ž„

[์ดํ•ฉ ๋ณด๊ณ ์„œ]

cache-10

cache-11

nGrinder ํ…Œ์ŠคํŠธ

  • ํ…Œ์ŠคํŠธ ์กฐ๊ฑด: ๋™์‹œ ์‚ฌ์šฉ์ž 25๋ช…์ด ๊ฐ๊ฐ 1๋ถ„ ๋™์•ˆ ๊ฐ€๋Šฅํ•œ ํ•œ ๋งŽ์€ ์š”์ฒญ์„ ๋ฐ˜๋ณตํ•ด์„œ ๋ณด๋ƒ„

๊ฒฐ๊ณผ ์š”์•ฝ:

์ง€ํ‘œ ์บ์‹œ ๋ฏธ์ ์šฉ ์บ์‹œ ์ ์šฉ ๊ฐœ์„  ํšจ๊ณผ
TPS(์ดˆ๋‹น ์ฒ˜๋ฆฌ ๊ฑด์ˆ˜) 13.1 900.2 ์•ฝ 69๋ฐฐ ์ฆ๊ฐ€
์ตœ๋Œ€ TPS 15.5 1,185.5 ์•ฝ 76๋ฐฐ ์ฆ๊ฐ€
ํ‰๊ท  ์‘๋‹ต ์‹œ๊ฐ„ 1,867.95ms 22.85ms ์•ฝ 82๋ฐฐ ๋นจ๋ผ์ง
์ด ์š”์ฒญ ์ˆ˜ 606๊ฑด 41,686๊ฑด ์•ฝ 69๋ฐฐ ์ฆ๊ฐ€
์„ฑ๊ณต๋ฅ  100% 100% ๋™์ผ
์—๋Ÿฌ ๋ฐœ์ƒ 0๊ฑด 0๊ฑด ๋™์ผ
ํ…Œ์ŠคํŠธ ์‹œ๊ฐ„ 1๋ถ„ 1๋ถ„ ๋™์ผ

ํ•ต์‹ฌ ์š”์ :

  • ์บ์‹œ๋ฅผ ์ ์šฉํ•˜๋‹ˆ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์ด 69~76๋ฐฐ ์ด์ƒ ํ–ฅ์ƒ๋๊ณ , ์‘๋‹ต ์†๋„๋„ ํ‰๊ท  82๋ฐฐ ๋นจ๋ผ์ง
  • ์š”์ฒญ ์„ฑ๊ณต๋ฅ ๊ณผ ์—๋Ÿฌ์œจ์€ ๊ทธ๋Œ€๋กœ(๋‘˜ ๋‹ค 100% ์„ฑ๊ณต, ์—๋Ÿฌ ์—†์Œ)

[์บ์‹œ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ]

cache-12

[์บ์‹œ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ]

cache-13

[์„ฑ๋Šฅ ๋น„๊ต ๊ฒฐ๊ณผ]

cache-14

๐Ÿ” ๊ฒ€์ƒ‰ ํŠธ๋ Œ๋“œ ์ง‘๊ณ„ ์‹œ์Šคํ…œ

trending

๊ฒ€์ƒ‰์–ด ์ €์žฅ ๋ฐฉ์‹ (AOP ๊ธฐ๋ฐ˜)

  • ์กฐ๊ฑด: ์ˆ™์†Œ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ๋ฐ˜ํ™˜๋œ ๊ฒฝ์šฐ์—๋งŒ ์ €์žฅ

  • ๋™์ž‘: ๊ฒ€์ƒ‰์–ด๋ฅผ ๊ณต๋ฐฑ ๊ธฐ์ค€์œผ๋กœ ๋‹จ์–ด ๋ถ„๋ฆฌ โ†’ Redis ZSet์— ์ €์žฅ

  • ์ €์žฅ ๊ตฌ์กฐ:

    Key   : search:{yyyy-MM-dd-HH}:00 (ํ˜„์žฌ ๋‚ ์งœ + ์‹œ๊ฐ„๋Œ€)
    Value : ๋‹จ์–ด
    Score : ๊ฒ€์ƒ‰ ํšŸ์ˆ˜ (๊ฒ€์ƒ‰ ํ•  ๋•Œ๋งˆ๋‹ค +1์”ฉ ์ฆ๊ฐ€)
    

    ์˜ˆ์‹œ:

    [2025-07-15 14:20] "์ œ์ฃผ๋„ ๋ฐ”๋‹ค" ๊ฒ€์ƒ‰ 
    โ†’ Key: search:2025-07-15-14:00 
    โ†’ Value: {"์ œ์ฃผ๋„": 1, "๋ฐ”๋‹ค": 1}
    
    [2025-07-15 14:25] "์ œ์ฃผ๋„" ๋‹ค์‹œ ๊ฒ€์ƒ‰
    โ†’ ๊ฐ™์€ Key์— "์ œ์ฃผ๋„"์˜ score +1 
    โ†’ ์ตœ์ข…: {"์ œ์ฃผ๋„": 2, "๋ฐ”๋‹ค": 1}
    

์ธ๊ธฐ ๊ฒ€์ƒ‰์–ด ์ง‘๊ณ„ (์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ)

  • ๋ฒ”์œ„: ํ˜„์žฌ ์‹œ๊ฐ ์ œ์™ธ, 12์‹œ๊ฐ„ ์ „ ~ 1์‹œ๊ฐ„ ์ „๊นŒ์ง€์˜ ZSet ํ•ฉ์‚ฐ
  • ๋ฐฉ์‹: ์‹œ๊ฐ„๋Œ€๋ณ„ Key 12๊ฐœ๋ฅผ ZUNIONSTORE๋กœ ๋ณ‘ํ•ฉ โ†’ TOP 10 ์ถ”์ถœ

ํ˜„์žฌย ์‹œ๊ฐ„ ์ œ์™ธ ์ด์œ 

  • ํ˜„์žฌ ์‹œ๊ฐ„๋Œ€๋Š” ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ฒ€์ƒ‰์–ด๊ฐ€ ๊ณ„์† ๋“ค์–ด์˜ค๋Š” ์ค‘

  • ์ด ์‹œ๊ฐ„๋Œ€๊นŒ์ง€ ํฌํ•จํ•ด ์ง‘๊ณ„ํ•˜๋ ค๋ฉด ์š”์ฒญ๋งˆ๋‹ค ์‹ค์‹œ๊ฐ„ ์žฌ๊ณ„์‚ฐ์ด ํ•„์š”

    โ†’ Redis ZSet ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ(ZUNIONSTORE)์€ ๋น„์šฉ์ด ํฌ๊ณ  ์„ฑ๋Šฅ ์ €ํ•˜ ๊ฐ€๋Šฅ

์„ฑ๋Šฅ ์ตœ์ ํ™” ์ „๋žต

  • ์ง‘๊ณ„๊ฐ€ ์™„๋ฃŒ๋œ ๊ณผ๊ฑฐ ์‹œ๊ฐ„๋Œ€(12์‹œ๊ฐ„ ์ „ ~ 1์‹œ๊ฐ„ ์ „)์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋Œ€์ƒ์œผ๋กœ๋งŒ ํ•ฉ์‚ฐ
  • ์ง‘๊ณ„ ๊ฒฐ๊ณผ๋Š” TTL 1์‹œ๊ฐ„์œผ๋กœ Redis์— ์บ์‹œ๋˜๋ฉฐ, ์ดํ›„ ์š”์ฒญ ์‹œ ์žฌ๊ณ„์‚ฐ ์—†์ด ์‚ฌ์šฉ
  • ์‹ค์‹œ๊ฐ„ ์ง‘๊ณ„ ๋น„์šฉ์„ ์ค„์ด๋ฉด์„œ๋„ ์ตœ์‹  ํŠธ๋ Œ๋“œ ๋ฐ˜์˜ ๊ฐ€๋Šฅ

โณ ๋™์‹œ์„ฑ ์ œ์–ด ๋ฌธ์ œ

lock-1

  • ๋ฌธ์ œ์ : ๊ฐ™์€ ์ˆ™์†Œ, ๊ฐ™์€ ๋‚ ์งœ์— ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ ์˜ˆ์•ฝ ์‹œ ์ค‘๋ณต ์˜ˆ์•ฝ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ
  • ํ•ด๊ฒฐ์ฑ…: ๋ถ„์‚ฐ ๋ฝ ์ ์šฉ
  • ์„ ํƒ ์ด์œ :
    • ๋ถ„์‚ฐ ๋ฝ์€ ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ์— ๋” ์ ํ•ฉ
    • ๋น„๊ด€์ , ๋‚™๊ด€์  ๋ฝ์˜ ๋‹จ์  ๋ณด์™„ ๊ฐ€๋Šฅ
  • ๊ตฌํ˜„: Lettuce ๊ธฐ๋ฐ˜ Spin Lock์œผ๋กœ ์ง์ ‘ ๋ฝ ์ œ์–ด

์„ธ๋ถ€ ๊ตฌํ˜„ ๋‚ด์šฉ

  • ๋™์‹œ์„ฑ ์ œ์–ด ๊ตฌํ˜„ ์ „ โ†’ ์ค‘๋ณต ์˜ˆ์•ฝ ๋ฐœ์ƒ

lock-2 lock-3

  • ๋™์‹œ์„ฑ ์ œ์–ด ๊ตฌํ˜„ ํ›„ โ†’ 10๋ช…์˜ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ ์ ‘์† ์‹œ, ํ•œ๋ช…๋งŒ ์ˆ™์†Œ ์˜ˆ์•ฝ ๊ฐ€๋Šฅ lock-4

โš ๏ธ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… ๋ชจ์Œ

1. @LastModifiedDate๊ฐ€ ๊ฐฑ์‹ ๋˜์ง€ ์•Š๋˜ ๋ฌธ์ œ

troubleshooting-1 [ํ•ด๊ฒฐ ์ด๋ฏธ์ง€]

  • ๋ฌธ์ œ: update ๋ฉ”์„œ๋“œ๋กœ ํ•„๋“œ ๊ฐ’์€ ๋ณ€๊ฒฝ๋˜์ง€๋งŒ, modified_at ๊ฐ’์ด ๊ฐฑ์‹ ๋˜์ง€ ์•Š์Œ
  • ์›์ธ: JPA๋Š” ํŠธ๋žœ์žญ์…˜์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ DB์— ๋ฐ˜์˜ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ
  • ํ•ด๊ฒฐ: saveAndFlush() ๋˜๋Š” flush()๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์™€ DB๋ฅผ ์ฆ‰์‹œ ๋™๊ธฐํ™”
  • ๋ฐฐ์šด ์ : CQS(Command Query Separation) ์›์น™์— ๋”ฐ๋ผ Command์™€ Query๋ฅผ ๋ถ„๋ฆฌํ•˜๋ฉด ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Œ

2. ์ˆ™์†Œ ๋“ฑ๋ก ์‹œ JSON์ด Accommodation ํ…Œ์ด๋ธ”์— ์ €์žฅ๋˜์ง€ ์•Š๋˜ ๋ฌธ์ œ

  • ๋ฌธ์ œ: ์ˆ™์†Œ ๋“ฑ๋ก ์‹œ JSON ๋ฐ์ดํ„ฐ๊ฐ€ Accommodation ํ…Œ์ด๋ธ”์— ์ €์žฅ๋˜์ง€ ์•Š์Œ
  • ์›์ธ: hibernate.ddl-auto ์„ค์ •์ด update๋กœ ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ์—์„œ, User ์—”ํ‹ฐํ‹ฐ์˜ @Table์ด @Table(name = "users")๋กœ ๋ณ€๊ฒฝ๋จ. ์ด๋กœ ์ธํ•ด Accommodation ํ…Œ์ด๋ธ”์ด ์™ธ๋ž˜ ํ‚ค๋กœ user(id)์™€ users(id) ๋‘ ๊ฐœ๋ฅผ ๋™์‹œ์— ์ฐธ์กฐํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒ
  • ํ•ด๊ฒฐ: IntelliJ DBํƒญ์—์„œ accommodation ํ…Œ์ด๋ธ” ์šฐํด๋ฆญ โ†’ Modify Table โ†’ ์™ธ๋ž˜ ํ‚ค ์ค‘ user(id) ์‚ญ์ œ
  • ๋ฐฐ์šด ์ : ์‹ค๋ฌด์—์„œ๋Š” hibernate.ddl-auto=none์„ ์‚ฌ์šฉํ•˜๊ณ , ์™ธ๋ž˜ ํ‚ค ์„ค์ •์€ ๋ช…ํ™•ํžˆ ์ˆ˜๋™์œผ๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”

3. Page<T> ์ง๋ ฌํ™” ์˜ค๋ฅ˜์™€ ๋ฆฌ์ŠคํŠธ ๋ณ€ํ™˜ ๋ฌธ์ œ

  • ๋ฌธ์ œ: ์„œ๋น„์Šค์—์„œ Page<T> ๊ฐ์ฒด๋ฅผ ๊ทธ๋Œ€๋กœ ์บ์‹œํ•˜๊ฑฐ๋‚˜ ๋ฐ˜ํ™˜ํ•˜๋ ค ํ•  ๋•Œ ์ง๋ ฌํ™” ์˜ค๋ฅ˜ ๋ฐœ์ƒ
  • ์›์ธ: Pageable, Sort ๋“ฑ์˜ ๋ณต์žกํ•œ ๊ตฌ์„ฑ์š”์†Œ๋Š” ์ง๋ ฌํ™”์— ๋ถ€์ ํ•ฉ
  • ํ•ด๊ฒฐ:
    • Page<T> ๋Œ€์‹  ๋‹จ์ˆœํ•œ List<T> ํ˜•ํƒœ๋กœ ์บ์‹œํ•˜์—ฌ ์ง๋ ฌํ™” ์•ˆ์ •์„ฑ ํ™•๋ณด
    • new PageImpl<>(list, pageable, total) ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜
    • .toList()๋Š” ๋ถˆ๋ณ€ ๋ฆฌ์ŠคํŠธ์ด๋ฏ€๋กœ .collect(Collectors.toList())๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ง๋ ฌํ™”์— ์•ˆ์ •ํ™”
  • ๋ฐฐ์šด ์ : ์บ์‹œ๋‚˜ ์™ธ๋ถ€ ์‹œ์Šคํ…œ๊ณผ ์—ฐ๋™ ์‹œ์—๋Š” ์ง๋ ฌํ™” ์•ˆ์ •์„ฑ์„ ํ•ญ์ƒ ๊ณ ๋ คํ•ด์•ผ ํ•จ

4. nGrinder Agent <-> Docker Container ์—ฐ๊ฒฐ ๋ฌธ์ œ

troubleshooting-2

  • ๋ฌธ์ œ: Agent์—์„œ ๋ฐ˜๋ณต์ ์ธ ์—ฐ๊ฒฐ ์—๋Ÿฌ ๋ฐœ์ƒ
  • ์›์ธ: Docker Container๋ฅผ ๋‚ด๋ถ€ ํฌํŠธ๋งŒ ์—ด๊ณ  ์™ธ๋ถ€ ํฌํŠธ๋Š” ๋ง‰์€ ์ฑ„ ์‹คํ–‰ํ•จ โ†’ Agent๊ฐ€ ์™ธ๋ถ€์—์„œ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†์Œ troubleshooting-3
  • ํ•ด๊ฒฐ: Agent๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ํฌํŠธ(12000 ~ 12020)๋ฅผ ๊ฐœ๋ฐฉํ•˜์—ฌ ์—ฐ๊ฒฐ ์„ฑ๊ณต
  • ๋ฐฐ์šด ์ : ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ๊ตฌ์ถ• ์‹œ ๋„คํŠธ์›Œํฌ ํฌํŠธ ์„ค์ •๊นŒ์ง€ ๊ผผ๊ผผํžˆ ์ ๊ฒ€ํ•  ๊ฒƒ

5. Redis ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ”์ด๋„ˆ๋ฆฌ ํ˜•ํƒœ๋กœ ์ €์žฅ๋˜๋Š” ๋ฌธ์ œ

  • ๋ฌธ์ œ: Redis์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ”์ด๋„ˆ๋ฆฌ ํ˜•ํƒœ๋กœ ์ €์žฅ๋˜์–ด, ๋‚ด์šฉ์„ ์ง์ ‘ ํ™•์ธํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์›€
  • ์›์ธ:
    • build.gradle์— Redis ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋ฉด, ์Šคํ”„๋ง์ด ์ž๋™์œผ๋กœ RedisTemplate<Object, Object> ํƒ€์ž…์˜ ๋นˆ์„ ์ƒ์„ฑํ•จ
    • ์ด๋•Œ, ๊ธฐ๋ณธ ์ง๋ ฌํ™”๊ธฐ๋กœ JdkSerializationRedisSerializer๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ Java ๋ฐ”์ดํŠธ ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ์ €์žฅํ•จ
    • ์ด๋กœ ์ธํ•ด ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋žŒ์ด ์ฝ๊ธฐ ์–ด๋ ค์šด ๋ฐ”์ด๋„ˆ๋ฆฌ ํ˜•์‹์œผ๋กœ ๋‚˜ํƒ€๋‚จ
  • ํ•ด๊ฒฐ:
    • RedisTemplate<String, String> ๋นˆ์„ ์ˆ˜๋™ ๋“ฑ๋ก
    • Key/Value ๋ชจ๋‘์— StringRedisSerializer๋ฅผ ์ง€์ •ํ•˜์—ฌ ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ ์ง๋ ฌํ™”ํ•จ
    • ๊ทธ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋žŒ์ด ์ฝ๊ธฐ ์‰ฌ์šด ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ ์ €์žฅ๋˜๊ณ , ๋””๋ฒ„๊น…๊ณผ ๊ด€๋ฆฌ๊ฐ€ ํ›จ์”ฌ ํŽธ๋ฆฌํ•จ
  • ๋ฐฐ์šด ์ : ๊ฐœ๋ฐœ/์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ๊ฐ€๋…์„ฑ๊ณผ ๋””๋ฒ„๊น… ํŽธ์˜๋ฅผ ์œ„ํ•ด ์ง๋ ฌํ™” ๋ฐฉ์‹์„ ๋ช…ํ™•ํžˆ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”

6. ์—ฌ๋Ÿฌ ํ‚ค์— lock ๊ฑธ ๋•Œ ์ผ๋ถ€ ์‹คํŒจ ์‹œ unlock ๋ฌธ์ œ

troubleshooting-4

  • ๋ฌธ์ œ: ์—ฌ๋Ÿฌ ํ‚ค์— lock์„ ๋™์‹œ์— ๊ฑธ ๋•Œ, ํ•˜๋‚˜๋ผ๋„ ์‹คํŒจํ•˜๋ฉด ๋ชจ๋‘ unlock๋˜๋Š” ํ˜„์ƒ
  • ์›์ธ: lock ์„ฑ๊ณต ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•˜์ง€ ์•Š์Œ
  • ํ•ด๊ฒฐ:
    • ๋ฝ ์„ฑ๊ณตํ•œ ํ‚ค๋งŒ ๋ณ„๋„์˜ ํ์— ์ €์žฅ
    • ํ•˜๋‚˜๋ผ๋„ ์‹คํŒจ ์‹œ, ํ์— ์ €์žฅ๋œ ํ‚ค๋“ค๋งŒ unlock ์ฒ˜๋ฆฌ
  • ๋ฐฐ์šด ์ : ๋ฝ์€ ์›์ž์„ฑ๊ณผ ์ •ํ•ฉ์„ฑ์ด ์ค‘์š”ํ•œ ๋งŒํผ, ์„ฑ๊ณต/์‹คํŒจ ๋กœ์ง์„ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌํ•  ๊ฒƒ

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 6

Languages