Skip to content

Latest commit

ย 

History

History
83 lines (64 loc) ยท 4.16 KB

File metadata and controls

83 lines (64 loc) ยท 4.16 KB

๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ ํ”„๋กœ์žญํŠธ

ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

์ด ํ”„๋กœ์ ํŠธ๋Š” ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒฌ๊ณ ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ๊ณผ ์ตœ์ ํ™” ์ „๋žต์„ ์‹คํ—˜ํ•˜๊ณ  ๊ตฌํ˜„ํ•œ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰ ์ตœ์ ํ™”, ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ ์žฌ, ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ์  ๋„์ „์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํƒ๊ตฌํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์ˆ  ์Šคํƒ

๋ฐฑ์—”๋“œ

  • Java 21: ์ตœ์‹  Java ๊ธฐ๋Šฅ ํ™œ์šฉ
  • Spring Boot 3.4.5: ๊ฐ•๋ ฅํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ
  • Spring Security: ๋ณด์•ˆ ๋ฐ ์ธ์ฆ ์ฒ˜๋ฆฌ
  • Spring Data JPA: ๊ฐ์ฒด ์ง€ํ–ฅ์  ๋ฐ์ดํ„ฐ ์ ‘๊ทผ
  • Spring Batch: ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ
  • JWT: ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ ์ €์žฅ์†Œ

  • MySQL: ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ์˜๊ตฌ ์ €์žฅ
  • MongoDB: ๋Œ€์šฉ๋Ÿ‰ ๋กœ๊ทธ ๋ฐ ๋ถ„์„ ๋ฐ์ดํ„ฐ ์ €์žฅ
  • Elasticsearch: ๊ณ ์„ฑ๋Šฅ ๊ฒ€์ƒ‰ ์—”์ง„
  • Redis: ์บ์‹ฑ ๋ฐ ์„ธ์…˜ ๊ด€๋ฆฌ

๊ฐœ๋ฐœ ๋„๊ตฌ

  • Gradle: ์˜์กด์„ฑ ๊ด€๋ฆฌ ๋ฐ ๋นŒ๋“œ ์ž๋™ํ™”
  • Swagger/OpenAPI: API ๋ฌธ์„œํ™”

์ฃผ์š” ๊ธฐ๋Šฅ ๋ฐ ๊ตฌํ˜„ ์ „๋žต

1. ๊ณ ์„ฑ๋Šฅ ๊ฒ€์ƒ‰ ์‹œ์Šคํ…œ

๊ธฐ์ˆ  ์„ ํƒ ์ด์œ 

  • Elasticsearch + Kibana + MySQL ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์ ‘๊ทผ๋ฒ•: ๊ฐ ๊ธฐ์ˆ ์˜ ์žฅ์ ์„ ํ™œ์šฉํ•˜์—ฌ ๊ณ ์„ฑ๋Šฅ ๊ฒ€์ƒ‰๊ณผ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ๋ชจ๋‘ ๋ณด์žฅ

๊ตฌํ˜„ ๋ฐ ์ตœ์ ํ™” ์ „๋žต

  • ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๋™๊ธฐํ™”: MySQL์˜ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ(์ƒ์„ฑ, ์ˆ˜์ •, ์‚ญ์ œ)์ด ๋ฐœ์ƒํ•  ๋•Œ Elasticsearch์— ์ž๋™ ๋™๊ธฐํ™”
  • ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰ ํŒจํ„ด:
    • Elasticsearch์—์„œ ์ดˆ๊ธฐ ๊ฒ€์ƒ‰์„ ํ†ตํ•ด ๊ด€๋ จ ๋ฌธ์„œ ID๋งŒ ๋น ๋ฅด๊ฒŒ ์ถ”์ถœ
    • ์ถ”์ถœ๋œ ID๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ MySQL์—์„œ ์ธ๋ฑ์Šค๋ฅผ ํ™œ์šฉํ•œ ์ •ํ™•ํ•œ ์ตœ์‹  ๋ฐ์ดํ„ฐ ์กฐํšŒ
  • Elasticsearch Refresh ์ •์ฑ… ์ตœ์ ํ™”: ์‹ค์‹œ๊ฐ„ ๊ฒ€์ƒ‰๊ณผ ์ธ๋ฑ์‹ฑ ์„ฑ๋Šฅ ๊ฐ„์˜ ๊ท ํ˜• ์กฐ์ •

2. ๋Œ€์šฉ๋Ÿ‰ ๊ด‘๊ณ  ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ

MongoDB ์„ ํƒ ์ด์œ 

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

Spring Batch๋ฅผ ํ™œ์šฉํ•œ ๋ฐ์ดํ„ฐ ์ง‘๊ณ„ ์ตœ์ ํ™”

img.png img_1.png

  • 3๋‹จ๊ณ„ ์ž‘์—… ํŒŒ์ดํ”„๋ผ์ธ: ์ค€๋น„, ์ง‘๊ณ„, ์ €์žฅ ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ„์–ด ํšจ์œจ์ ์ธ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ
  • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ์ตœ์ ํ™”:
    • MongoDB ์ง‘๊ณ„ ํŒŒ์ดํ”„๋ผ์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ DB ๋ ˆ๋ฒจ์—์„œ ์ˆ˜ํ–‰
    • ํ•„์š”ํ•œ ํ•„๋“œ๋งŒ ์„ ํƒ์ ์œผ๋กœ ํ”„๋กœ์ ์…˜ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ์ตœ์†Œํ™”
    • allowDiskUse: true ์„ค์ •์œผ๋กœ ๋Œ€์šฉ๋Ÿ‰ ์ฒ˜๋ฆฌ ์‹œ ๋””์Šคํฌ ํ™œ์šฉ
  • ์ฒญํฌ ๊ธฐ๋ฐ˜ ์ฒ˜๋ฆฌ: ์ผ์ • ํฌ๊ธฐ(500๊ฐœ)์˜ ์ฒญํฌ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ ํ™•๋ณด
  • MongoDB ์ตœ์ ํ™” ๊ธฐ๋ฒ•:
    • ์ธ๋ฑ์Šค ํ™œ์šฉ: ๋‚ ์งœ ํ•„๋“œ์— ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•œ ํšจ์œจ์ ์ธ ํ•„ํ„ฐ๋ง
    • ์ž„์‹œ ์ปฌ๋ ‰์…˜: ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜์—ฌ ์ฒ˜๋ฆฌ ๋‹จ๊ณ„ ๋ถ„๋ฆฌ
    • ์ปค์„œ ๊ด€๋ฆฌ: ์ ์ ˆํ•œ ๋ฐฐ์น˜ ํฌ๊ธฐ๋กœ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌ๋ฐ
  • MySQL ๋ฐฐ์น˜ ์‚ฝ์ž…: JDBC ๋ฐฐ์น˜ ์ž‘์—…์„ ํ†ตํ•œ ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ์‚ฝ์ž…
  • ์žฌ์‹œ๋„ ๋ฉ”์ปค๋‹ˆ์ฆ˜: ์‹คํŒจ ์‹œ ์ด์ „ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์žฌ์‹คํ–‰ํ•˜๋Š” ์•ˆ์ „ํ•œ ์ฒ˜๋ฆฌ

3. ์‹œ์Šคํ…œ ์•ˆ์ •์„ฑ์„ ์œ„ํ•œ ์ถ”๊ฐ€ ์ตœ์ ํ™”

  • ํƒ€์ž„์กด ๊ด€๋ฆฌ: ๋ชจ๋“  ์‹œ์Šคํ…œ(JVM, MongoDB, MySQL)์—์„œ ์ผ๊ด€๋œ Asia/Seoul ํƒ€์ž„์กด ์„ค์ •
  • ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ: ๋Œ€์šฉ๋Ÿ‰ ์ž‘์—…์˜ ๋…ผ๋ธ”๋กœํ‚น ์ฒ˜๋ฆฌ
  • UUID ์ฒ˜๋ฆฌ ์ตœ์ ํ™”: ํšจ์œจ์ ์ธ MySQL BINARY(16) ์ €์žฅ์„ ์œ„ํ•œ ๋ณ€ํ™˜ ์ฒ˜๋ฆฌ
  • ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋กœ๊น…: ๋ฐฐ์น˜ ์ž‘์—… ์ง„ํ–‰ ์ƒํ™ฉ๊ณผ ๊ฒฐ๊ณผ ์ถ”์ ์„ ์œ„ํ•œ ์„ธ๋ถ€ ๋กœ๊น…

์„ฑ๋Šฅ ๋ฐ ์ตœ์ ํ™” ๊ฒฐ๊ณผ

  • MongoDB ์ง‘๊ณ„ ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•ด ์ผ์ผ ์ˆ˜์ฒœ๋งŒ ๊ฑด์˜ ๊ด‘๊ณ  ์กฐํšŒ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌ
  • JdbcBatchItemWriter๋ฅผ ํ†ตํ•œ ์ตœ์ ํ™”๋œ MySQL ๋ฐฐ์น˜ ์‚ฝ์ž…์œผ๋กœ ์ €์žฅ ์„ฑ๋Šฅ ํ–ฅ์ƒ
  • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ตœ์†Œํ™”ํ•˜๋ฉด์„œ๋„ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

ํ™•์žฅ ๊ณ„ํš

  • ์‹ค์‹œ๊ฐ„ ๋ถ„์„ ๋Œ€์‹œ๋ณด๋“œ ๊ตฌํ˜„
  • ๋จธ์‹ ๋Ÿฌ๋‹์„ ํ™œ์šฉํ•œ ๊ด‘๊ณ  ์ถ”์ฒœ ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ
  • Kafka๋ฅผ ํ™œ์šฉํ•œ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜๋กœ ํ™•์žฅ