Skip to content

Difficulty-accepting-feedback/notification-service

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

94 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

MSA: notification service

์ž๊ธฐ ๊ณ„๋ฐœ ๋ฐ ์ทจ๋ฏธ ๋งค์นญ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, GROW ๐ŸŒณ

GROW Notification Service๋Š” ํ”Œ๋žซํผ ์ „์ฒด์˜ ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผยท์ชฝ์ง€ยท๊ณต์ง€ยทQnA ์ด๋ฒคํŠธ ํ—ˆ๋ธŒ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•ต์‹ฌ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.
AI ๋ถ„์„ ๋ฐ ํ€ด์ฆˆ ์ถœ์ œ/์ฑ„์  ํ๋ฆ„๊ณผ ๋ฉค๋ฒ„ ๋„๋ฉ”์ธ์„ ๊ธด๋ฐ€ํžˆ ์—ฐ๋™ํ•˜์—ฌ, ํ•™์Šต ํ”ผ๋“œ๋ฐฑยทํฌ์ธํŠธ/์—…์  ๋ฐ˜์˜๊นŒ์ง€ ๋๋‹จ ์•Œ๋ฆผ์„ ์ฑ…์ž„์ง‘๋‹ˆ๋‹ค.
SSE ๊ธฐ๋ฐ˜ ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆผ๊ณผ Kafka ์ด๋ฒคํŠธ ํ‘œ์ค€์„ ํ†ตํ•ด ๋ฉค๋ฒ„ยทํ€ด์ฆˆยท๊ฒฐ์ œ ๋“ฑ๊ณผ ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„๋กœ ํ†ต์‹ ํ•ฉ๋‹ˆ๋‹ค.


์žฅ๋ฌด์˜ ์ตœ์ง€์„ 
์žฅ๋ฌด์˜ ์ตœ์ง€์„ 
GitHub GitHub

๐Ÿ—๏ธ ์•„ํ‚คํ…์ฒ˜ ๊ฐœ์š”

์„œ๋น„์Šค๋Š” DDD(Domain-Driven Design) ์›์น™์„ ์ค‘์‹ฌ์œผ๋กœ Hexagonal Architecture (Ports & Adapters) ๊ตฌ์กฐ๋กœ ์„ค๊ณ„๋˜์–ด,
๋„๋ฉ”์ธ ๋กœ์ง๊ณผ ์ธํ”„๋ผ ์˜์กด์„ฑ์„ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•˜๊ณ  ๋†’์€ ์‘์ง‘๋„์™€ ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์€ domain ๊ณ„์ธต์—์„œ ๊ด€๋ฆฌ๋˜๋ฉฐ,
์™ธ๋ถ€ ์—ฐ๋™(์˜ˆ: Kafka, Redis, JPA, ์™ธ๋ถ€ API)์€ infra ์–ด๋Œ‘ํ„ฐ๋ฅผ ํ†ตํ•ด ์ฃผ์ž…๋ฉ๋‹ˆ๋‹ค.
application ๊ณ„์ธต์—์„œ๋Š” ํŠธ๋žœ์žญ์…˜ ๋‹จ์œ„์˜ ์œ ์Šค์ผ€์ด์Šค(์˜ˆ: ์•Œ๋ฆผ ์ƒ์„ฑ/์ „์†ก, ํ€ด์ฆˆ ์ฑ„์  ๊ฒฐ๊ณผ ์—ฐ๋™, ๊ณต์ง€/QnA/์ชฝ์ง€ ์ „ํŒŒ)๋ฅผ ์กฐํ•ฉํ•˜๊ณ ,
presentation ๊ณ„์ธต์—์„œ๋Š” REST/SSE API๋ฅผ ํ†ตํ•ด ๊ฒŒ์ดํŠธ์›จ์ด์™€ ํ†ต์‹ ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿงฉ ์šด์˜ ๊ตฌ์กฐ

๋ชจ๋“  ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค(member, payment, quiz, analysis ๋“ฑ)๋Š” Kubernetes ํ™˜๊ฒฝ์—์„œ ์ปจํ…Œ์ด๋„ˆ ๋‹จ์œ„๋กœ ๋ฐฐํฌ๋˜๋ฉฐ, ๊ฒŒ์ดํŠธ์›จ์ด์™€ ๋ฐ์ดํ„ฐ ๊ณ„์ธต, ์™ธ๋ถ€ ์—ฐ๋™ API๊นŒ์ง€ ์™„์ „ํ•œ ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ๊ตฌ์กฐ๋กœ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

image

์„œ๋น„์Šค ๊ฐ„ ์—ฐ๊ฒฐ์€ Gateway, Kafka, Redis, Kubernetes๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ์š”์†Œ ์—ญํ• 
๐Ÿงญ Gateway (Spring Cloud Gateway) JWT ๊ธฐ๋ฐ˜ ์ธ์ฆ ๊ฒ€์ฆ ๋ฐ ์š”์ฒญ ๋ผ์šฐํŒ…. SSE ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ ์ŠคํŠธ๋ฆผ ์—”๋“œํฌ์ธํŠธ ์ œ๊ณต
๐Ÿงต Kafka (Event Bus) AI ๋ถ„์„/ํ€ด์ฆˆ ์ถœ์ œยท์ฑ„์ /QnA/๊ณต์ง€/์ชฝ์ง€ ๋“ฑ ์ด๋ฒคํŠธ ๋ฐœํ–‰ยท๊ตฌ๋… ๋ฐ ํ‘œ์ค€ํ™”
๐Ÿ’พ Redis (Cache & Lock) ๋ฐฐ์ง€ ์นด์šดํŠธยท์„ธ์…˜ ์บ์‹œ, ๋ฉฑ๋“ฑ ์ฒ˜๋ฆฌ(Idempotency Key) ๋ฐ ๋ถ„์‚ฐ ๋ฝ์œผ๋กœ ์ค‘๋ณต ์ „์†ก ๋ฐฉ์ง€
๐Ÿ—ƒ๏ธ MySQL (Primary DB) ์•Œ๋ฆผ/์ชฝ์ง€/๊ณต์ง€/QnA, ์ „์†ก ์ด๋ ฅ ๋ฐ ์‹คํŒจ ๋ณด์ƒ ๋กœ๊ทธ์˜ ์˜์† ์ €์žฅ์†Œ
โ˜ธ๏ธ Kubernetes ์„œ๋น„์Šค ๋ฐฐํฌยท์Šค์ผ€์ผ๋งยท๋กค๋ง ์—…๋ฐ์ดํŠธ ์ž๋™ํ™”๋กœ ๊ณ ๊ฐ€์šฉ์„ฑ(HA) ํ™•๋ณด
๐Ÿ“Š Prometheus + Grafana SSE ์—ฐ๊ฒฐ ์ˆ˜, ์•Œ๋ฆผ ์ „์†ก๋ฅ , AI/ํ€ด์ฆˆ ์ด๋ฒคํŠธ ์ง€์—ฐ, ์˜ค๋ฅ˜์œจ ๋“ฑ ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง

๐Ÿงฉ ์ฃผ์š” ๊ธฐ๋Šฅ ์š”์•ฝ

๊ตฌ๋ถ„ ๊ธฐ๋Šฅ ์„ค๋ช…
๐Ÿ”” ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ(SSE) ์‚ฌ์šฉ์ž๋ณ„ SSE ์ŠคํŠธ๋ฆผ ์ œ๊ณต, ์ž๋™ ์žฌ์—ฐ๊ฒฐยทํ•˜ํŠธ๋น„ํŠธ, ํƒ€์ž…ยท์šฐ์„ ์ˆœ์œ„ ๊ธฐ๋ฐ˜ ์ „ํŒŒ
๐Ÿง  AI ๋ถ„์„ ์—ฐ๋™ Analysis/LLM ๊ฒฐ๊ณผ ์ˆ˜์‹  โ†’ ํ•™์Šต ๋ฆฌ๋งˆ์ธ๋”ยท๊ฐœ์ธํ™” ํ”ผ๋“œ ์•Œ๋ฆผ ๋ฐœํ–‰
๐Ÿงฉ ํ€ด์ฆˆ ์ถœ์ œ/์ฑ„์  ์—ฐ๋™ LLM ๊ธฐ๋ฐ˜ ํ€ด์ฆˆ ์ƒ์„ฑ/์ œ์ถœ/์ฑ„์  ์ด๋ฒคํŠธ๋ฅผ ๊ตฌ๋…ํ•˜์—ฌ ๊ฒฐ๊ณผ ์•Œ๋ฆผ ๋ฐ ๋ฉค๋ฒ„ ํฌ์ธํŠธ/์—…์  ์—ฐ๊ณ„
๐Ÿ“ฎ ์ชฝ์ง€(Note) 1:1 ์ชฝ์ง€ ์†ก์ˆ˜์‹ ยท์ฝ์Œ ์ฒ˜๋ฆฌ, ์‹ ๊ทœ ์ˆ˜์‹  ์‹œ ์ฆ‰์‹œ ํ‘ธ์‹œ
๐Ÿ“ข ๊ณต์ง€(Notice) ์šด์˜ ๊ณต์ง€ ์ž‘์„ฑยท์ˆ˜์ •ยท์‚ญ์ œ, ๋Œ€์ƒ์ž ๋ฒ”์œ„ ์ „ํŒŒ ๋ฐ ์ฝ์Œ ์ง‘๊ณ„
๐Ÿ’ฌ QnA ์งˆ๋ฌธ/๋‹ต๋ณ€ ๋“ฑ๋กยท๊ฐฑ์‹  ์‹œ ๊ตฌ๋…์žยท์ž‘์„ฑ์ž์—๊ฒŒ ์•Œ๋ฆผ ์ „์†ก
๐Ÿงฑ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ Redis ๋ฉฑ๋“ฑํ‚คยท๋ถ„์‚ฐ๋ฝยท์ค‘๋ณต ์–ต์ œ๋กœ ๋™์ผ ์ด๋ฒคํŠธ ๋‹ค์ค‘ ์ „์†ก ๋ฐฉ์ง€
โ™ป๏ธ ๋ณด์ƒ ํŠธ๋žœ์žญ์…˜ ์™ธ๋ถ€ ์ฑ„๋„ ์‹คํŒจ ์‹œ ์žฌ์‹œ๋„ยท๋ณด์ƒ ๋กœ์ง ์ˆ˜ํ–‰ ๋ฐ ๊ด€๋ฆฌ์ž ๊ฒฝ๋ณด(Slack ๋“ฑ)

๐Ÿ› ๏ธ ๊ธฐ์ˆ  ์Šคํƒ

FrontEnd

BackEnd

Database

IDLE&Tool

OPEN API

Event Bus / Messaging

Infra

Container & Orchestration

Monitoring

CI/CD


Conventional Commits ๊ทœ์น™

์ด๋ชจ์ง€ ํƒ€์ž… ์„ค๋ช… ์˜ˆ์‹œ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€
โœจ feat ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€ feat: ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
๐Ÿ› fix ๋ฒ„๊ทธ ์ˆ˜์ • fix: ํšŒ์›๊ฐ€์ž… ์‹œ ์ด๋ฉ”์ผ ์ค‘๋ณต ์ฒดํฌ ์˜ค๋ฅ˜ ์ˆ˜์ •
๐Ÿ“ docs ๋ฌธ์„œ ์ˆ˜์ • docs: README ์˜คํƒ€ ์ˆ˜์ •
๐Ÿ’„ style ์ฝ”๋“œ ํฌ๋งท, ์„ธ๋ฏธ์ฝœ๋ก  ๋ˆ„๋ฝ ๋“ฑ ์Šคํƒ€์ผ ๋ณ€๊ฒฝ (๊ธฐ๋Šฅ ๋ณ€๊ฒฝ ์—†์Œ) style: ์ฝ”๋“œ ์ •๋ ฌ ๋ฐ ์„ธ๋ฏธ์ฝœ๋ก  ์ถ”๊ฐ€
โ™ป๏ธ refactor ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง (๊ธฐ๋Šฅ ๋ณ€๊ฒฝ ์—†์Œ) refactor: ์ค‘๋ณต ์ฝ”๋“œ ํ•จ์ˆ˜๋กœ ๋ถ„๋ฆฌ
โšก perf ์„ฑ๋Šฅ ๊ฐœ์„  perf: ์ด๋ฏธ์ง€ ๋กœ๋”ฉ ์†๋„ ๊ฐœ์„ 
โœ… test ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ถ”๊ฐ€/์ˆ˜์ • test: ์œ ์ € API ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ถ”๊ฐ€
๐Ÿ› ๏ธ build ๋นŒ๋“œ ์‹œ์Šคํ…œ ๊ด€๋ จ ๋ณ€๊ฒฝ build: ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ •
๐Ÿ”ง ci CI ์„ค์ • ๋ณ€๊ฒฝ ci: GitHub Actions ์›Œํฌํ”Œ๋กœ์šฐ ์ˆ˜์ •
ํƒ€์ž…(๋ฒ”์œ„): ๊ฐ„๊ฒฐํ•œ ์„ค๋ช… (50์ž ์ด๋‚ด, ํ•œ๊ธ€ ์ž‘์„ฑ)

(ํ•„์š”์‹œ) ๋ณ€๊ฒฝ ์ด์œ /์ƒ์„ธ ๋‚ด์šฉ
  • ํ•˜๋‚˜์˜ ์ปค๋ฐ‹์—๋Š” ํ•˜๋‚˜์˜ ๋ชฉ์ ๋งŒ ๋‹ด๊ธฐ

    โ†’ ์—ฌ๋Ÿฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ•œ ์ปค๋ฐ‹์— ๋ชฐ์•„๋„ฃ์ง€ ์•Š๊ธฐ

  • ์ œ๋ชฉ ๋์— ๋งˆ์นจํ‘œ(.)๋ฅผ ๋ถ™์ด์ง€ ์•Š๊ธฐ

  • ๋ณธ๋ฌธ(Body)์€ ์„ ํƒ ์‚ฌํ•ญ์ด์ง€๋งŒ, ๋ณ€๊ฒฝ ์ด์œ ๋‚˜ ์ƒ์„ธ ์„ค๋ช…์ด ํ•„์š”ํ•  ๋•Œ ์ž‘์„ฑ

    โ†’ 72์ž ๋‹จ์œ„๋กœ ์ค„๋ฐ”๊ฟˆ, ์ œ๋ชฉ๊ณผ ๋ณธ๋ฌธ ์‚ฌ์ด์— ํ•œ ์ค„ ๋„์šฐ๊ธฐ

  • ์ž‘์—… ์ค‘๊ฐ„ ์ €์žฅ์€ WIP(Work In Progress)๋กœ ํ‘œ์‹œํ•  ๊ฒƒ

    โ†’ ์˜ˆ) WIP: ํšŒ์›๊ฐ€์ž… ๋กœ์ง ๊ตฌํ˜„ ์ค‘


๐Ÿ•’ ํ˜‘์—… ์‹œ๊ฐ„ ์•ˆ๋‚ด

ํŒ€์›๋“ค์ด ์ฃผ๋กœ ํ™œ๋™ํ•˜๋Š” ์‹œ๊ฐ„๋Œ€์ž…๋‹ˆ๋‹ค.
์ด ์‹œ๊ฐ„์— ๋งž์ถฐ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜๊ณผ ์ฝ”๋“œ ๋ฆฌ๋ทฐ, ํšŒ์˜ ๋“ฑ์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์š”์ผ ํ™œ๋™ ์‹œ๊ฐ„
๐Ÿ“… ํ‰์ผ 14:00 ~ 18:00, 20:00 ~ 23:00
๐Ÿ“… ์ฃผ๋ง 14:00 ~ 18:00

๐Ÿง ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๊ทœ์น™

  • PR ์ œ๋ชฉ๊ณผ ์„ค๋ช…์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์ž‘์„ฑ (๋ณ€๊ฒฝ ๋‚ด์šฉ, ๋ชฉ์ , ์ฐธ๊ณ  ์ด์Šˆ ๋“ฑ ํฌํ•จ)
  • Conventional Commits ๊ทœ์น™์„ ์ค€์ˆ˜ํ•˜์—ฌ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์ž‘์„ฑ
  • ํ•˜๋‚˜์˜ PR์—๋Š” ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ/์ด์Šˆ๋งŒ ํฌํ•จ
  • ์ฝ”๋“œ ์Šคํƒ€์ผ, ๋„ค์ด๋ฐ, ๋กœ์ง, ์„ฑ๋Šฅ, ๋ณด์•ˆ, ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋“ฑ ๊ผผ๊ผผํžˆ ํ™•์ธ
  • ๋ฆฌ๋ทฐ ์ฝ”๋ฉ˜ํŠธ์—๋Š” ๋ฐ˜๋“œ์‹œ ๋‹ต๋ณ€, ํ•„์š”์‹œ ์ถ”๊ฐ€ ์ปค๋ฐ‹์œผ๋กœ ๋ฐ˜์˜
  • ๋ชจ๋“  ๋ฆฌ๋ทฐ ์ฝ”๋ฉ˜ํŠธ resolve ํ›„ ๋จธ์ง€
  • ์Šค์ฟผ์‹œ ๋จธ์ง€ ๋ฐฉ์‹ ๊ถŒ์žฅ, ์ถฉ๋Œ ๋ฐœ์ƒ ์‹œ ๋จธ์ง€ ์ „ ํ•ด๊ฒฐ
  • ๋ฆฌ๋ทฐ๋Š” 24์‹œ๊ฐ„ ์ด๋‚ด ์ง„ํ–‰, ๋ชจ๋ฅด๋Š” ๋ถ€๋ถ„์€ ์ ๊ทน์ ์œผ๋กœ ์งˆ๋ฌธ
  • ๋ฆฌ๋ทฐ ๊ณผ์ •์—์„œ ๋ฐฐ์šด ์ ์€ ํŒ€ ๋ฌธ์„œ์— ๊ณต์œ  (ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… ๋“ฑ)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages