Skip to content

KTB-IDLE/WeatherWise-Server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

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

Repository files navigation

์‹ค์‹œ๊ฐ„ ๋‚ ์”จ ์ •๋ณด์™€ AI๊ฐ€ ๊ฒฐํ•ฉ๋œ ์ƒˆ๋กœ์šด ๋‚ ์”จ ํ”Œ๋žซํผ, WeatherWise


๐Ÿ”– ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

์ฃผ์ œ: ์‚ฌ์šฉ์ž ๋งž์ถคํ˜• ๋‚ ์”จ ์ •๋ณด ์ œ๊ณต ๋ฐ ์ƒํ˜ธ์ž‘์šฉ ํ”Œ๋žซํผ
๋Œ€์ƒ: ๋‚ ์”จ ์ •๋ณด ํ™œ์šฉ ๋ฐ ์ƒํ˜ธ์ž‘์šฉ์— ๊ด€์‹ฌ์ด ์žˆ๋Š” ์‚ฌ์šฉ์ž


๐ŸŽฏ ๋ชฉํ‘œ

  1. ์ •ํ™•ํ•œ ๋‚ ์”จ ์ •๋ณด ์ œ๊ณต: ๊ธฐ์ƒ์ฒญ ๋ฐ์ดํ„ฐ์™€ AI ๋ถ„์„์„ ํ†ตํ•ด ์ง€์—ญ๋ณ„ ๋งž์ถคํ˜• ๋‚ ์”จ ์ •๋ณด ์ „๋‹ฌ
  2. ๋ฏธ์…˜ ์ˆ˜ํ–‰๊ณผ ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ฐ•ํ™”: ๋‚ ์”จ ๊ธฐ๋ฐ˜ ๋ฏธ์…˜๊ณผ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ƒํ˜ธ์ž‘์šฉ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž ์ฐธ์—ฌ ์œ ๋„
  3. ๊ธด๊ธ‰ ์ƒํ™ฉ ๋Œ€์‘: ๊ธฐ์ƒํŠน๋ณด ์ฑ„ํŒ…์œผ๋กœ ์‹ค์‹œ๊ฐ„ ์ •๋ณด ๊ณต์œ  ๋ฐ ๋Œ€์‘

๐Ÿ“š ๊ธฐ์ˆ  ์Šคํƒ

Frontend

  • โš›๏ธ React: ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI) ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

Backend

  • ๐ŸŒฑ Spring Boot: ๊ฐ•๋ ฅํ•œ ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ํ”„๋ ˆ์ž„์›Œํฌ
  • ๐Ÿฌ MySQL: ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ๊ด€๋ฆฌ์— ์‚ฌ์šฉ๋œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
  • ๐Ÿš€ Redis: ์บ์‹ฑ ๋ฐ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ €์žฅ
  • ๐Ÿ’ฌ Kafka: ๋ฉ”์‹œ์ง€ ํ ๋ฐ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌ๋ฐ ๋„๊ตฌ๋กœ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ๋ฐ ์•Œ๋ฆผ ๊ตฌํ˜„

DevOps / Infrastructure

  • ๐Ÿ› ๏ธ Jenkins: CI/CD ์ž๋™ํ™”๋ฅผ ์œ„ํ•œ ๋„๊ตฌ
  • ๐Ÿ“ฆ Docker: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…Œ์ด๋„ˆํ™”
  • โ˜ธ๏ธ Kubernetes: ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋ฐ ๊ด€๋ฆฌ
  • ๐Ÿ™ Argo: DevOps ์›Œํฌํ”Œ๋กœ์šฐ ๊ด€๋ฆฌ
  • โ˜๏ธ AWS: ํด๋ผ์šฐ๋“œ ์ธํ”„๋ผ ํ˜ธ์ŠคํŒ…
  • ๐Ÿ”€ Nginx: ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ๋ฐ ์›น ์„œ๋ฒ„

AI / Automation

  • ๐Ÿ Python: ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ฐ AI ๋ชจ๋ธ ๊ฐœ๋ฐœ
  • ๐Ÿ”— LangChain: AI ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์ถ•์„ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ

Collaboration / Tools

  • ๐Ÿ™ GitHub: ๋ฒ„์ „ ๊ด€๋ฆฌ ๋ฐ ์†Œ์Šค ์ฝ”๋“œ ๊ด€๋ฆฌ
  • ๐Ÿ“ Notion: ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ๋ฐ ๋ฌธ์„œํ™”
  • ๐ŸŽฎ Discord: ํŒ€ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜
  • ๐ŸŽจ Figma: UI/UX ๋””์ž์ธ

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

1๏ธโƒฃ ํšŒ์› ๋ฐ ์ธ์ฆ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ

  • JWT ๊ธฐ๋ฐ˜ ์‚ฌ์šฉ์ž ์ธ์ฆ

    • ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ/ํšŒ์›๊ฐ€์ž… ์‹œ JWT ํ† ํฐ ๋ฐœ๊ธ‰ ๋ฐ ์ธ์ฆ ๊ด€๋ฆฌ.
    • STOMP ํ—ค๋”์— JWT ํ† ํฐ์„ ํฌํ•จํ•ด ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…์—์„œ๋„ ์ธ์ฆ ์ฒ˜๋ฆฌ.
    • ํ† ํฐ์—์„œ ์‚ฌ์šฉ์ž ID๋ฅผ ์ถ”์ถœํ•˜์—ฌ ์ปค๋ฎค๋‹ˆํ‹ฐ, ๋ฏธ์…˜ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์— ํ™œ์šฉ.
  • ํšŒ์›๊ฐ€์ž… ๋ฐ ๋กœ๊ทธ์ธ

    • ์ผ๋ฐ˜ ํšŒ์›๊ฐ€์ž… ๋ฐ ์นด์นด์˜ค ์†Œ์…œ ๋กœ๊ทธ์ธ ์ง€์›.
    • ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฒ€์ฆ ๋ฐ ๋‹‰๋„ค์ž„ ์ค‘๋ณต ๋ฐฉ์ง€ ์ฒ˜๋ฆฌ.
  • ์‚ฌ์šฉ์ž ์ •๋ณด ๊ด€๋ฆฌ

    • ์‚ฌ์šฉ์ž ์ •๋ณด ์ˆ˜์ •, ๋‹‰๋„ค์ž„ ๋ณ€๊ฒฝ, ๋กœ๊ทธ์•„์›ƒ ๋ฐ ํšŒ์› ํƒˆํ‡ด ๊ธฐ๋Šฅ ์ œ๊ณต.

2๏ธโƒฃ ๋ฏธ์…˜ ์ƒ์„ฑ ๋ฐ ์ธ์ฆ

  • ๋‚ ์”จ ๊ธฐ๋ฐ˜ ๋งž์ถคํ˜• ๋ฏธ์…˜ ์ œ๊ณต

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

    • ์‚ฌ์šฉ์ž๊ฐ€ ๋ฏธ์…˜์— ๋งž๋Š” ์‚ฌ์ง„์„ ์ฒจ๋ถ€ํ•˜๋ฉด AI๊ฐ€ ํ•ด๋‹น ์‚ฌ์ง„์˜ ์ ํ•ฉ์„ฑ์„ ๊ฒ€์ฆ.
    • ์ธ์ฆ ์„ฑ๊ณต ์‹œ ํฌ์ธํŠธ ์ง€๊ธ‰ ๋ฐ ์‹คํŒจ ์‹œ ์žฌ๋„์ „ ๊ฐ€๋Šฅ.
  • ํฌ์ธํŠธ ๋ฐ ๋žญํ‚น ์‹œ์Šคํ…œ

    • ํฌ์ธํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉ์ž ๋žญํ‚น ์ œ๊ณต.
    • ์ˆœ์œ„ ํ™•์ธ ๋ฐ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ํ–ฅ์ƒ.

3๏ธโƒฃ ์ปค๋ฎค๋‹ˆํ‹ฐ

  • ์œ„์น˜ ๊ธฐ๋ฐ˜ ๊ฒŒ์‹œ๊ธ€

    • ์‚ฌ์šฉ์ž์˜ ํ˜„์žฌ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฐ˜๊ฒฝ 5km ๋‚ด ๊ฒŒ์‹œ๊ธ€ ํ‘œ์‹œ.
    • ์œ„์น˜ ๋ณ€๊ฒฝ ์‹œ ์นด์นด์˜ค๋งต API๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด ์œ„์น˜ ๋ฐ˜์˜ ๋ฐ ๊ฒŒ์‹œ๊ธ€ ์—…๋ฐ์ดํŠธ.
  • ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ

    • ์ œ๋ชฉ(20์ž) ๋ฐ ๋ณธ๋ฌธ(150์ž) ๊ธ€์ž ์ˆ˜ ์ œํ•œ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์ตœ์ ํ™”.
    • ์ข‹์•„์š”/์‹ซ์–ด์š” ๋ฒ„ํŠผ์œผ๋กœ ๊ฒŒ์‹œ๊ธ€ ์‹ ๋ขฐ๋„ ํ‰๊ฐ€ ๊ฐ€๋Šฅ.
  • ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ๊ธ€ ๊ด€๋ฆฌ

    • ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์„ฑํ•œ ๊ธ€์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ™•์ธ ๋ฐ ์‚ญ์ œ ๊ฐ€๋Šฅ.

4๏ธโƒฃ ๊ธฐ์ƒํŠน๋ณด ์˜คํ”ˆ์ฑ„ํŒ…

  • ๊ธฐ์ƒํŠน๋ณด์— ๋”ฐ๋ฅธ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…๋ฐฉ ์ƒ์„ฑ
    • ๊ธฐ์ƒํŠน๋ณด ๋ฐœ์ƒ ์‹œ ํ•ด๋‹น ์ง€์—ญ์˜ ์‚ฌ์šฉ์ž๋“ค์„ ์œ„ํ•œ ์˜คํ”ˆ ์ฑ„ํŒ…๋ฐฉ ์ž๋™ ์ƒ์„ฑ.
    • ์˜ˆ: "๊ฐ•์›๋„ ๊ฑด์กฐ/ํ•œํŒŒ ๊ฒฝ๋ณด ์ฑ„ํŒ…๋ฐฉ".
  • ๊ธฐ์ƒํŠน๋ณด ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ:
    • Spring Scheduler๋ฅผ ํ™œ์šฉํ•ด 1์‹œ๊ฐ„๋งˆ๋‹ค ๊ธฐ์ƒ์ฒญ API ํ˜ธ์ถœ.
    • ๊ธฐ์ƒํŠน๋ณด ๋ฐœ๋ น ์‹œ '์‹œ/๋„' ๊ธฐ์ค€์œผ๋กœ ์‹ค์‹œ๊ฐ„ ๋‹จ์ฒด ์˜คํ”ˆ์ฑ„ํŒ…๋ฐฉ ์ž๋™ ์ƒ์„ฑ.
  • ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…:
    • Redis:
      • ์ตœ์‹  ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€ 100๊ฐœ๋ฅผ ์บ์‹ฑํ•˜์—ฌ ๋น ๋ฅธ ์ฑ„ํŒ… ๋กœ๋“œ ์ œ๊ณต.
      • ์‚ฌ์šฉ์ž ๊ฐ„ ์‹ค์‹œ๊ฐ„ ๋ฉ”์‹œ์ง€ ๊ตํ™˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ.
    • WebSocket + STOMP:
      • ์‹ค์‹œ๊ฐ„ ์–‘๋ฐฉํ–ฅ ํ†ต์‹  ๊ตฌํ˜„.
      • ์ฑ„ํŒ…๋ฐฉ ๋‚ด ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ… ๋ฐ ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ ๊ธฐ๋Šฅ ์ œ๊ณต.
  • WebFlux์™€ R2DBC๋ฅผ ํ™œ์šฉํ•œ ํ™•์žฅ:
    • WeatherWise-Server-Chatting ๋ ˆํฌ์ง€ํ† ๋ฆฌ์—์„œ MSA ๊ตฌ์กฐ๋กœ ๊ตฌํ˜„.
    • WebFlux์™€ R2DBC๋ฅผ ์‚ฌ์šฉํ•ด ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋กœ ํ™•์žฅ์„ฑ๊ณผ ์„ฑ๋Šฅ ํ–ฅ์ƒ.

๐ŸŒˆ ๊ฐœ์„  ์‚ฌํ•ญ

1๏ธโƒฃ ์ฑ„ํŒ… ์„ฑ๋Šฅ ๊ฐœ์„  - ์ตœ๋Œ€ ํŠธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ๋Ÿ‰ ์•ฝ 4๋ฐฐ ์ฆ๊ฐ€


๋ฌธ์ œ ์ƒํ™ฉ

  • ๊ธฐ์กด ๋ชจ๋†€๋ฆฌ์‹ ๊ตฌ์กฐ์—์„œ๋Š” Spring MVC๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ดˆ๋‹น ์ตœ๋Œ€ 400๋ช…์˜ ์‚ฌ์šฉ์ž ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ–ˆ์œผ๋‚˜, ์ด ์ด์ƒ์˜ ํŠธ๋ž˜ํ”ฝ์ด ๋ฐœ์ƒํ•˜๋ฉด ์„œ๋ฒ„๊ฐ€ ๊ณผ๋ถ€ํ•˜๋กœ ์ธํ•ด ๋‹ค์šด๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ.
  • ์‘๋‹ต ์†๋„๊ฐ€ ๋Š๋ ค์ง€๊ณ  ๋ฐ์ดํ„ฐ์˜ ์ •ํ•ฉ์„ฑ์—๋„ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง.

1. MSA ๋„์ž…๊ณผ WebFlux ์ „ํ™˜

  • ์ฑ„ํŒ… ๊ธฐ๋Šฅ์„ ๋…๋ฆฝ์ ์ธ MSA ์„œ๋น„์Šค๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ Spring WebFlux๋ฅผ ๋„์ž….
  • WebFlux์˜ ๋น„๋™๊ธฐ/๋…ผ๋ธ”๋กœํ‚น ํŠน์„ฑ์„ ํ™œ์šฉํ•ด ๋†’์€ ๋™์‹œ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ ํ™•๋ณด.
    • ๊ธฐ์กด Servlet ๊ธฐ๋ฐ˜์˜ ๋™๊ธฐ ์š”์ฒญ-์‘๋‹ต ์ฒ˜๋ฆฌ ๋ฐฉ์‹์—์„œ WebFlux ๊ธฐ๋ฐ˜์˜ ๋น„๋™๊ธฐ ๋…ผ๋ธ”๋กœํ‚น ๋ฐฉ์‹์œผ๋กœ ์ „ํ™˜
    • ๋‹ค์ˆ˜์˜ ๋™์‹œ ์—ฐ๊ฒฐ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํ™•์žฅ์„ฑ ํ™•๋ณด
    • WebFlux๋ฅผ ์ ์šฉํ•จ์œผ๋กœ์จ ์ด๋ฒคํŠธ ๋ฃจํ”„ ๊ธฐ๋ฐ˜์˜ ํšจ์œจ์ ์ธ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ์œผ๋กœ ์‘๋‹ต ์‹œ๊ฐ„์ด ๋‹จ์ถ•๋จ
  • Kafka๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์‹œ์ง€ ํ ๊ธฐ๋ฐ˜์˜ ๋น„๋™๊ธฐ ํ†ต์‹ ์„ ์ ์šฉ, ์„œ๋น„์Šค ๊ฐ„ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ์•ˆ์ •์„ฑ ๊ฐ•ํ™”.
    • ๋ฉ”์‹œ์ง€ ์†ก์ˆ˜์‹ ์—์„œ ๋ฐœ์ƒํ•˜๋˜ I/O ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ์™„ํ™”ํ•˜๊ธฐ ์œ„ํ•ด Kafka๋ฅผ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋กœ ํ™œ์šฉ
    • WebSocket์œผ๋กœ ์ˆ˜์‹ ๋œ ๋ฉ”์‹œ์ง€๋ฅผ Kafka Producer๋กœ ์ฒ˜๋ฆฌํ•ด ๋ถ„์‚ฐ ๋ธŒ๋กœ์ปค์— ์ €์žฅ
    • Kafka Consumer๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ Redis์— ์ €์žฅํ•˜๊ณ , ์ฑ„ํŒ…๋ฐฉ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌ
    • Kafka๋ฅผ ํ†ตํ•ด ๋ฉ”์‹œ์ง€ ํ๋ฅผ ๊ด€๋ฆฌํ•จ์œผ๋กœ์จ ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ฐ์ดํ„ฐ ์†์‹ค์„ ๋ฐฉ์ง€
    • WebSocket์—์„œ ์ง์ ‘ Redis์™€ ์—ฐ๊ฒฐํ•˜๋Š” ๋Œ€์‹  Kafka๋ฅผ ์ค‘๊ฐ„ ๊ณ„์ธต์œผ๋กœ ์‚ฌ์šฉํ•ด ์•ˆ์ •์„ฑ๊ณผ ์„ฑ๋Šฅ ํ–ฅ์ƒ
  • Redis ์บ์‹ฑ ์ตœ์ ํ™”
    • Redis๋ฅผ ์‚ฌ์šฉํ•ด ์ฑ„ํŒ…๋ฐฉ์˜ ์ตœ์‹  ๋ฉ”์‹œ์ง€ 100๊ฐœ๋ฅผ ์บ์‹ฑ
    • ์‚ฌ์šฉ์ž ์š”์ฒญ ์‹œ Redis์—์„œ ์ฆ‰์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•ด ์‘๋‹ต ์†๋„ ํ–ฅ์ƒ
    • ๊ธฐ์กด Redis ์ €์žฅ ๋ฐฉ์‹์—์„œ ๋™์‹œ์„ฑ ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฝ(lock) ๋ฉ”์ปค๋‹ˆ์ฆ˜ ์ ์šฉ
  • R2DBC๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ฑ๋Šฅ ๊ฐœ์„ 
    • R2DBC๋ฅผ ๋„์ž…ํ•ด MySQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ํ†ต์‹ ์„ ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ์ „ํ™˜
    • ๊ธฐ์กด์˜ ๋™๊ธฐ JPA ์ ‘๊ทผ ๋ฐฉ์‹์—์„œ ๋ฐœ์ƒํ•˜๋˜ I/O ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์ค„์—ฌ, ์ฑ„ํŒ… ๋ฐ์ดํ„ฐ ์ €์žฅ ์‹œ ์ฒ˜๋ฆฌ ์†๋„ ๊ฐœ์„ 
    • ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ„๋‹จํ•œ ์ฑ„ํŒ… ์‹œ์Šคํ…œ์— ์ ํ•ฉํ•œ ๊ฒฝ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์œผ๋กœ ์ „ํ™˜

2. ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ ๋ณด์žฅ

  • WebFlux์™€ Kafka๋ฅผ ํ†ตํ•ด ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฉด์„œ๋„ 4๋งŒ ๊ฑด ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ์„ 100% ์œ ์ง€.
  • ๋ฐ์ดํ„ฐ ์†์‹ค ์—†์ด ๋ชจ๋“  ๋ฉ”์‹œ์ง€๊ฐ€ ์•ˆ์ •์ ์œผ๋กœ DB์— ์ €์žฅ๋˜๋„๋ก ์„ค๊ณ„.

๊ฒฐ๊ณผ

  • ์ฒ˜๋ฆฌ๋Ÿ‰ ์ฆ๊ฐ€: ์ดˆ๋‹น 400๋ช… โ†’ 1500๋ช… ์ด์ƒ์˜ ์‚ฌ์šฉ์ž ์š”์ฒญ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ.
  • ์‘๋‹ต ์‹œ๊ฐ„ ๋‹จ์ถ•: ํ‰๊ท  ์‘๋‹ต ์‹œ๊ฐ„ 80% ์ด์ƒ ๊ฐ์†Œ.
  • ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ: 100% ๋ฐ์ดํ„ฐ ์ผ์น˜ ๋ณด์žฅ.
  • ๋‹ค์ˆ˜์˜ ๋™์‹œ ์—ฐ๊ฒฐ ํ™˜๊ฒฝ์—์„œ๋„ ๋ฉ”์‹œ์ง€ ์†์‹ค ์—†์ด ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ๊ฐ€๋Šฅ.

image

2๏ธโƒฃ ์„ ์ฐฉ์ˆœ ์ฟ ํฐ ์ด๋ฒคํŠธ (๋ชจ๋†€๋ฆฌ์‹ โ†’ MSA ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜)

๊ธฐ์กด ๋ชจ๋†€๋ฆฌ์‹ ์•„ํ‚คํ…์ฒ˜ ์—์„œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜(MSA) ๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
ํŠนํžˆ, ์ฟ ํฐ ๋ฐœ๊ธ‰ ์„œ๋น„์Šค์˜ ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Kafka๋ฅผ ํ™œ์šฉํ•œ ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์œผ๋กœ ์ „ํ™˜ํ•œ ์‚ฌ๋ก€๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๋‹ค๋ฃน๋‹ˆ๋‹ค.


๐Ÿšจ ๋ชจ๋†€๋ฆฌ์‹ ์•„ํ‚คํ…์ฒ˜์˜ ๋ฌธ์ œ์ 

์ฟ ํฐ ์ด๋ฒคํŠธ

  • ํŠน์ • ํ”„๋กœ๋ชจ์…˜์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์ฟ ํฐ์„ ๋ฐœ๊ธ‰ํ•˜๋Š” ์ด๋ฒคํŠธ์ž…๋‹ˆ๋‹ค.
  • ์•„๋ž˜ ๋ฐœ๊ธ‰ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•ด์•ผ ์ฟ ํฐ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฟ ํฐ ๋ฐœ๊ธ‰ ์กฐ๊ฑด

  1. ํ•œ ์‚ฌ๋žŒ๋‹น ํ•œ ๊ฐœ์˜ ์ฟ ํฐ๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.
  2. ๋‹น์ผ ๋ฏธ์…˜ ํ•˜๋‚˜๋ฅผ ์ธ์ฆ ๋ฐ›์•„์•ผ ํ•œ๋‹ค.
  3. ์ด๋ฒคํŠธ ๊ธฐ๊ฐ„ ๋™์•ˆ, ๋งค์ผ ํŠน์ • ์‹œ๊ฐ„์— ์˜คํ”ˆํ•˜๋ฉฐ ์ด ์ง€๊ธ‰ ์ˆ˜๋Ÿ‰์„ ํ•œ์ •ํ•œ๋‹ค.
  4. ์ฟ ํฐ ์ง€๊ธ‰ ์ˆ˜๋Ÿ‰์€ ๋‹น์ผ ์ •ํ•ด์ง„ ์–‘์„ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†๋‹ค.

๐Ÿšง ํŠธ๋ž˜ํ”ฝ ๋ชฐ๋ฆผ ์‹œ ๋ฌธ์ œ์ 

๋ชจ๋†€๋ฆฌ์‹ ์•„ํ‚คํ…์ฒ˜๋Š” ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ๋‹จ์ผ ์„œ๋น„์Šค ๋‚ด์— ํ†ตํ•ฉ๋˜์–ด ์žˆ์–ด ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค:

  • ์„œ๋ฒ„ ๋งˆ๋น„: ํŠธ๋ž˜ํ”ฝ์ด ๊ธ‰์ฆํ•˜๋ฉด ์„œ๋ฒ„ ์ž์›์ด ๊ณ ๊ฐˆ๋˜์–ด ๊ธฐ๋ณธ ๊ธฐ๋Šฅ(์˜ˆ: ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ)์กฐ์ฐจ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Œ.
  • TPS ํ•œ๊ณ„: ํ‰๊ท  TPS 200์— ๋„๋‹ฌ ์‹œ ์›น์„œ๋ฒ„๊ฐ€ ๋ณ‘๋ชฉํ˜„์ƒ์„ ์ผ์œผํ‚ค๋ฉฐ, ์ „์ฒด ์„œ๋น„์Šค๊ฐ€ ์ค‘๋‹จ.

๐Ÿ”ง MSA ๋„์ž… ๋ฐฐ๊ฒฝ

๋ชจ๋†€๋ฆฌ์‹ ๊ตฌ์กฐ์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ณ , ๋†’์€ ํŠธ๋ž˜ํ”ฝ ์ƒํ™ฉ์—์„œ๋„ ์•ˆ์ •์ ์ธ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด MSA๋ฅผ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ๊ฐ ๊ธฐ๋Šฅ์„ ๋…๋ฆฝ์ ์ธ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋ถ„๋ฆฌ.
  • ํŠน์ • ์„œ๋น„์Šค ์žฅ์• ๊ฐ€ ์ „์ฒด ์‹œ์Šคํ…œ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋„๋ก ์„ค๊ณ„ ๊ฐ€๋Šฅ.

โš™๏ธ MSA ๋„์ž… ๊ณผ์ •

1๏ธโƒฃ ์„œ๋น„์Šค ๋ถ„๋ฆฌ ๋ฐ HTTP ๋™๊ธฐ ๋ฐฉ์‹ ๋ฌธ์ œ

  • ์ดˆ๊ธฐ์—๋Š” ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹  ๋ฐฉ์‹์œผ๋กœ ๊ฐ€์žฅ ์ต์ˆ™ํ•œ HTTP๋ฅผ ์‚ฌ์šฉ.
  • ๊ทธ๋Ÿฌ๋‚˜ HTTP๋Š” ๋™๊ธฐ ์š”์ฒญ ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋†€๋ฆฌ์‹์˜ ํ•œ๊ณ„(์„œ๋น„์Šค ๊ฐ„ ๊ฒฐํ•ฉ๋„)์™€ ์žฅ์•  ์ „ํŒŒ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•จ.

2๏ธโƒฃ Kafka๋ฅผ ํ™œ์šฉํ•œ EDA๋กœ ์ „ํ™˜

๋„์ž… ๋ฐฐ๊ฒฝ

  • ๊ธฐ์กด HTTP ์š”์ฒญ ๋ฐฉ์‹์˜ ๊ฒฐํ•ฉ๋„ ๋†’์Œ๊ณผ ์žฅ์•  ์ „ํŒŒ ์œ„ํ—˜์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Kafka๋ฅผ ๋„์ž….
  • Kafka๋ฅผ ํ†ตํ•ด ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง€ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜๋กœ ์ „ํ™˜.

Kafka ๋„์ž… ์ด์œ 

  1. ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ
    • ๋ฉ”์‹œ์ง€๋ฅผ ํ์— ์ €์žฅํ•˜์—ฌ ์„œ๋น„์Šค ๊ฐ„ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌ.
  2. ๋‚ด๊ฒฐํ•จ์„ฑ
    • ๋ฉ”์‹œ์ง€๊ฐ€ ํ์— ์ €์žฅ๋˜๋ฏ€๋กœ ํŠน์ • ์„œ๋น„์Šค๊ฐ€ ๋‹ค์šด๋˜๋”๋ผ๋„ ๋ฉ”์‹œ์ง€๊ฐ€ ์œ ์ง€๋จ.
    • ์„œ๋น„์Šค ๋ณต๊ตฌ ํ›„ ๋ฉ”์‹œ์ง€ ์žฌ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ.
  3. ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰
    • Kafka๋Š” ๋†’์€ ์Šค๋ฃจํ’‹์„ ์ง€์›ํ•ด ๋Œ€๋Ÿ‰์˜ ๋ฉ”์‹œ์ง€๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌ.
  4. ํ™•์žฅ์„ฑ
    • ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋ฅผ ํ†ตํ•ด ์„œ๋น„์Šค ๊ฐ„ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถฐ, ๊ฐ ์„œ๋น„์Šค๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ํ™•์žฅ ๊ฐ€๋Šฅ.

๐Ÿ› ๏ธ ๋น„๋™๊ธฐ ๋ฐฉ์‹์˜ ์žฅ์ 

  1. ์„œ๋น„์Šค ๋…๋ฆฝ์„ฑ ๊ฐ•ํ™”
    • ์„œ๋น„์Šค ๊ฐ„ ์ง์ ‘์ ์ธ ์˜์กด์„ฑ์„ ์ œ๊ฑฐํ•˜๊ณ , ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋ฅผ ํ†ตํ•œ ๊ฐ„์ ‘์  ํ†ต์‹ ์œผ๋กœ ๋…๋ฆฝ์„ฑ ๊ฐ•ํ™”.
  2. ์œ ์—ฐํ•œ ์—๋Ÿฌ ์ฒ˜๋ฆฌ
    • ์žฅ์•  ๋ฐœ์ƒ ์‹œ ๋ฉ”์‹œ์ง€๋ฅผ ํ์— ์ €์žฅํ•˜์—ฌ ์žฌ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ.
  3. ์„ฑ๋Šฅ ํ–ฅ์ƒ
    • ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๋กœ ๋ธ”๋กœํ‚น ์—†์ด ๋‹ค์ˆ˜์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ด ์ „์ฒด ์‹œ์Šคํ…œ ์„ฑ๋Šฅ ๊ฐœ์„ .

โœ… ์ „ํ™˜ ํ›„ ์„ฑ๊ณผ

Kafka ๊ธฐ๋ฐ˜ ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„ฑ๊ณผ๋ฅผ ๋‹ฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค:

  1. ์„ฑ๋Šฅ ๊ฐœ์„ 
    • ํŠธ๋ž˜ํ”ฝ ํญ์ฃผ ์ƒํ™ฉ์—์„œ๋„ ์„œ๋น„์Šค ๋งˆ๋น„ ์—†์ด ์•ˆ์ •์  ๋™์ž‘.
  2. ์‹ ๋ขฐ์„ฑ ํ–ฅ์ƒ
    • ์„œ๋น„์Šค ๋‹ค์šด ์‹œ์—๋„ ๋ฉ”์‹œ์ง€๊ฐ€ ํ์— ์ €์žฅ๋˜์–ด ๋ณต๊ตฌ ํ›„ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅ.
  3. ํ™•์žฅ์„ฑ ๊ฐ•ํ™”
    • ๊ฐ ์„œ๋น„์Šค๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ์Šค์ผ€์ผ๋ง ๊ฐ€๋Šฅํ•ด ์ „์ฒด ์‹œ์Šคํ…œ ์œ ์—ฐ์„ฑ ์ฆ๊ฐ€.
  4. ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ ์œ ์ง€
    • ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๋กœ ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ์„ ์œ ์ง€ํ•˜๋ฉฐ, ๊ณ ํŠธ๋ž˜ํ”ฝ ์ƒํ™ฉ์—์„œ๋„ ์•ˆ์ •์  ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ.

๊ฒฐ๋ก 

๋ชจ๋†€๋ฆฌ์‹ ์•„ํ‚คํ…์ฒ˜์—์„œ MSA๋กœ์˜ ์ „ํ™˜์€ ์ดˆ๊ธฐ์—๋Š” ๋ณต์žกํ•ด ๋ณด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋†’์€ ํŠธ๋ž˜ํ”ฝ๊ณผ ์žฅ์•  ์ƒํ™ฉ์—์„œ ๋ฌธ์ œ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ•๋ ฅํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

Kafka๋ฅผ ํ™œ์šฉํ•œ ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๋Š”:

  • ์„œ๋น„์Šค ๊ฐ„ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ ,
  • ์‹œ์Šคํ…œ ์‹ ๋ขฐ์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๋ฉฐ,
  • ์•ˆ์ •์ ์ธ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ „ํ™˜์„ ํ†ตํ•ด ์„œ๋น„์Šค ๊ฐ„ ๋…๋ฆฝ์„ฑ์„ ํ™•๋ณดํ•˜๊ณ , ๋†’์€ ํŠธ๋ž˜ํ”ฝ ์ƒํ™ฉ์—์„œ๋„ ํ™•์žฅ์„ฑ๊ณผ ์•ˆ์ •์„ฑ์„ ๊ฒธ๋น„ํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์•„ํ‚คํ…์ฒ˜๋ณ„ ์„ฑ๋Šฅ ๋น„๊ต

์•„ํ‚คํ…์ฒ˜๋ณ„ ์„ฑ๋Šฅ ๋น„๊ต



MSA ์ „ํ™˜ํ•œ Git Repository


๐Ÿš€ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…

1๏ธโƒฃ ์ถ”๊ฐ€

๐Ÿ‘จโ€๐Ÿ’ป ํŒ€์›

  • Frontend Developer: ๋ฐ•์„ค, ๊น€์ง€์›
  • Backend Developer: ๋ฐ•์„ค, ๊น€์ง€์›

About

WeatherWise-Server

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •