Skip to content

Latest commit

ย 

History

History
253 lines (206 loc) ยท 15.3 KB

File metadata and controls

253 lines (206 loc) ยท 15.3 KB

๐Ÿง ๋Œ€๊ทœ๋ชจ ๋ชจ์ž„ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ - MOIM

๋Œ€๊ทœ๋ชจ ๋ชจ์ž„์˜ ์ธ์›๊ด€๋ฆฌ, ์ผ์ •์กฐ์œจ, ์†Œํ†ต์„ ํšจ์œจ์ ์œผ๋กœ ๋„์™€์ฃผ๋Š” MSA ๊ธฐ๋ฐ˜ ๋ชจ์ž„ ํ†ตํ•ฉ ๊ด€๋ฆฌ ์„œ๋น„์Šค
๊ฐœ๋ฐœ ๊ธฐ๊ฐ„ : 2025.04 ~ 2025.05


์„œ๋น„์Šค ์†Œ๊ฐœ



๐ŸŽฏ Members (ํŒ€์› ๋ฐ ํŒ€ ์†Œ๊ฐœ)

๊น€ํ˜•์ฃผ ๋ฐ•์šฉํ›ˆ ์ตœ์ง„์˜ ๊น€๋Œ€์—ฐ ๋ฐ•๊ทœ์›
๊ฒŒ์‹œ๊ธ€, ์ผ์ • ์†Œ๋ชจ์ž„, ์„ธ์…˜ ํšŒ์› ์•Œ๋ฆผ, ๋ชจ์ž„ ์ฑ„ํŒ…, ๋Œ“๊ธ€
Lead Tech Lead BE BE BE


โœจ Getting Started (์„œ๋น„์Šค URL ๋ฐ API ๋ช…์„ธ์„œ)

  • ์„œ๋น„์Šค URL : https://moim.agong.store
  • API : (wiki์— ๋ฌธ์„œํ™”ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.)


๐Ÿง‘โ€๐Ÿ’ป About Project

๐Ÿงฉ ์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜

์„œ๋น„์Šค ์†Œ๊ฐœ


ํ”„๋กœ์ ํŠธ ๋ชฉ์ 

  • ๋Œ€๊ทœ๋ชจ ๋ชจ์ž„ ๊ด€๋ฆฌ๋ฅผ ๋ณด๋‹ค ์‰ฝ๊ณ  ํŽธํ•˜๊ฒŒ ๋„์™€์ฃผ๋Š” ์„œ๋น„์Šค ์ž…๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์„ค๋ช…

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

ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ

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

์•„ํ‚คํ…์ณ ์„ค๋ช…

  • MSA ๊ธฐ๋ฐ˜์ด๋ฉฐ, ๊ฐ ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค๋“ค์€ AWS ECS ์—์„œ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์  ํ‚จ์Šค๋ฅผ ํ†ตํ•œ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•˜์˜€์Šต๋‹ˆ๋‹ค. RDB๋Š” MySQL์„ ์‚ฌ์šฉํ•˜์˜€๊ณ , AWS RDS์— DB์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜์˜€์Šต๋‹ˆ๋‹ค. NoSQL์ธ Redis์™€ MongoDB๋Š” AWS EC2์— ๊ตฌ์ถ•ํ•˜์˜€์Šต๋‹ˆ๋‹ค. Kafka/Zookeeper, Prometheus, Grafana, Grafana Tempo, Grafana Loki, OpenTelemetry๋Š” AWS EC2์— ๋ฐฐํฌํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜์˜€์Šต๋‹ˆ๋‹ค.


๐Ÿ”‘ Key Features (์ฃผ์š” ๊ธฐ๋Šฅ)

  • ํšŒ์›:

    • ํšŒ์›๊ฐ€์ž…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.username์€ ์œ ๋‹ˆํฌํ•˜๋ฉฐ, password๋Š” ์ธ์ฝ”๋”ฉ๋˜์–ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
    • ๋กœ๊ทธ์ธ/๋กœ๊ทธ์•„์›ƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธ ์‹œ JWT๋ฅผ ์ฟ ํ‚ค๋กœ ๋ฐœ๊ธ‰ํ•˜๊ณ , ๋กœ๊ทธ์•„์›ƒ ์‹œ ์ฟ ํ‚ค๋ฅผ ๋งŒ๋ฃŒ์‹œํ‚ต๋‹ˆ๋‹ค.
    • ๊ฒŒ์ดํŠธ์›จ์ด๋กœ๋ถ€ํ„ฐ ์ธ์ฆ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด, ๊ฒ€์ฆ์„ ์ˆ˜ํ–‰ํ•œ ๋’ค Passport๋ฅผ ๋ฐœ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. Passport๋Š” ๊ฐ ์„œ๋น„์Šค์—์„œ ํ˜„์žฌ ์š”์ฒญ์˜ ์œ ์ € ์ •๋ณด๋กœ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค.
    • ํšŒ์› ์กฐํšŒ, ์ˆ˜์ •, ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ์„ธ์…˜:

    • ์„ธ์…˜ ์ƒ์„ฑ/์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
    • ์„ธ์…˜์— ์ฐธ์—ฌ/๋‚˜๊ฐ€๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • ์„ธ์…˜ ์ƒ์„ฑ์„ ํ•˜๊ฒŒ ๋˜๋ฉด ๋ชจ์ž„ - ๋งค๋‹ˆ์ €๊ฐ€ ์Šน์ธ์„ ์‹œ์ผœ ์„ธ์…˜์„ ํ™œ์„ฑํ™”๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
    • ๋‹ค์ˆ˜์˜ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— ์ž…์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฃจ์•„์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•ด ์›์ž์„ฑ์„ ์ œ์–ดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์•Œ๋ฆผ:

    • ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค๋กœ๋ถ€ํ„ฐ ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜์—ฌ ์•Œ๋ฆผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ชจ์ž„ ๊ฐ€์ž… ์‹ ์ฒญ, ์Šน์ธ ๋“ฑ์˜ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • ์ด๋ฒคํŠธ ํƒ€์ž…์— ๋”ฐ๋ผ ์‚ฌ์ „์— ์ •์˜๋œ ์•Œ๋ฆผ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌํ•  ์•Œ๋ฆผ ๋ฉ”์‹œ์ง€๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ์ƒ์„ฑ๋œ ์•Œ๋ฆผ์€ DB์— ์ €์žฅ๋˜๋ฉฐ, ๊ฐ ์•Œ๋ฆผ์€ ์ฝ์Œ/์•ˆ์ฝ์Œ ์ƒํƒœ๋ฅผ ํ†ตํ•ด ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•„ํ„ฐ๋ง๋œ ์•Œ๋ฆผ ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
    • ๋‹ค์–‘ํ•œ ์•Œ๋ฆผ ์œ ํ˜•์ด ์ „๋žต ํŒจํ„ด ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์–ด ์ƒˆ๋กœ์šด ์•Œ๋ฆผ ํƒ€์ž…์ด ์‰ฝ๊ฒŒ ํ™•์žฅ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ์ฑ„ํŒ…:

    • ws-stomp๋ฅผ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. (1๋Œ€1 ์ฑ„ํŒ…๊ณผ 1๋Œ€N ์ฑ„ํŒ…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค)
    • Kafka๋ฅผ ์ฑ„ํŒ… ๋ธŒ๋กœ์ปค๋กœ ์‚ฌ์šฉํ•˜์—ฌ, ๋Œ€์šฉ๋Ÿ‰ ์ฑ„ํŒ… ํŠธ๋ž˜ํ”ฝ์„ ๊ฒฌ๋”œ ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • ๊ธฐํš์ƒ์œผ๋กœ, ๋ชจ์ž„ 1๊ฐœ๋‹น ์ฑ„ํŒ…๋ฐฉ์„ 1๊ฐœ๋งŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์—ˆ์ง€๋งŒ, ์ถ”ํ›„ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ์ž„:

    • ์‚ฌ์šฉ์ž๋Š” ์ƒˆ๋กœ์šด ๋ชจ์ž„์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ชจ์ž„ ์ด๋ฆ„, ์„ค๋ช…, ๋ชจ์ง‘ ์กฐ๊ฑด ๋“ฑ ๋‹ค์–‘ํ•œ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ๊ฐœ์„คํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์‚ฌ์šฉ์ž๋Š” ๊ด€์‹ฌ ์žˆ๋Š” ๋ชจ์ž„์— ์‹ ์ฒญํ•  ์ˆ˜ ์žˆ๊ณ , ๊ด€๋ฆฌ์ž๋Š” ์‹ ์ฒญ์ž๋ฅผ ์Šน์ธ ๋˜๋Š” ๊ฑฐ์ ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์€ ์•Œ๋ฆผ ์‹œ์Šคํ…œ๊ณผ ์—ฐ๋™๋ฉ๋‹ˆ๋‹ค.
    • ๊ด€๋ฆฌ์ž๋Š” ๋ชจ์ž„์— ๊ฐ€์ž…๋œ ๋ฉค๋ฒ„๋“ค์˜ Role์„ ๋ถ€์—ฌํ•˜๊ฑฐ๋‚˜, ๋ฉค๋ฒ„๋ฅผ ์ถ”๊ฐ€/์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Role์— ๋”ฐ๋ผ ์ ‘๊ทผ ๊ถŒํ•œ์ด ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค.
    • ๋ชจ์ž„ ๋ฉค๋ฒ„ ์ •๋ณด๋ฅผ ์บ์‹œ(Redis)์— ์ €์žฅํ•˜์—ฌ ์กฐํšŒ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค. ์ž์ฃผ ์กฐํšŒ๋˜๋Š” ๋ฉค๋ฒ„ ์ •๋ณด ์š”์ฒญ์— ๋น ๋ฅธ ์‘๋‹ต์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ์†Œ๋ชจ์ž„:

    • ์†Œ๋ชจ์ž„ ์ƒ์„ฑ/์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
    • ์†Œ๋ชจ์ž„์— ์ฐธ์—ฌ/๋‚˜๊ฐ€๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฒŒ์‹œ๊ธ€

    • ๋ชจ์ž„๋ณ„ ๊ฒŒ์‹œ๊ธ€ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๊ฒŒ์‹œ๊ธ€์€ ํ”ผ๋“œ ํ˜น์€ ํˆฌํ‘œ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๊ถŒํ•œ์— ๋”ฐ๋ผ ๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ • ๋ฐ ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
    • ์กฐํšŒ๊ฐ€ ๋นˆ๋ฒˆํ•  ๊ฒƒ์œผ๋กœ ํŒ๋‹จํ•˜์—ฌ, CQRS๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ฝ๊ธฐ DB(MongoDB)๋ฅผ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ์กฐํšŒ ์„ฑ๋Šฅ์„ ๋†’์˜€์Šต๋‹ˆ๋‹ค.
    • DB ์‚ฌ์ด์˜ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์€ ์ด๋ฒคํŠธ ์†Œ์‹ฑ์œผ๋กœ ๊ตฌ์„ฑํ–ˆ์œผ๋ฉฐ, ์ •ํ™•ํžˆ ํ•œ๋ฒˆ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด OutBoxํŒจํ„ด๊ณผ ๋ฉฑ๋“ฑ์  ์†Œ๋น„์ž ํŒจํ„ด์„ ํ™œ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.
    • ์บ์‹œ์™€ ์ธ๋ฑ์Šค๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์กฐํšŒ ์„ฑ๋Šฅ์„ ๋”์šฑ ์ตœ์ ํ™” ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋Œ“๊ธ€

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

    • ๋ชจ์ž„๋ณ„ ์ผ์ • ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
    • ๋ชจ์ž„์˜ ๊ถŒํ•œ์— ๋”ฐ๋ผ ์ผ์ •์„ ์ˆ˜์ •ํ•˜๊ณ , ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


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



๐Ÿ’ฌ ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ์˜ ๊ณ ๋ฏผ (๊ตฌํ˜„/๋กœ์ง/๋ฆฌํŒฉํ† ๋ง)



๐Ÿ“Š ERD

๐Ÿ”— ERDCloud Link

erd


๐Ÿ“ Technology Stack (๊ธฐ์ˆ  ์Šคํƒ)

Framework


openJDK Spring Boot Spring
Spring Security Spring Cloud QueryDsl


Database


MySQL Redis Redisson
Lua mongodb
phpMyAdmin RedisInsight mongo-express


Monitoring


Grafana prometheus Grafana Tempo
Grafana Loki opentelemetry


Infra


docker docker compose apachekafka jenkins
amazonec2 amazonecs awsfargate amazonwebservices
amazonrds amazonroute53 nginx nginxproxymanager


๐ŸŽฒ Development Convention (๊ฐœ๋ฐœ ์ปจ๋ฒค์…˜)


๐Ÿ“Œ Development Workflow (๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ์šฐ)