Skip to content

lotteon2/LOTDIZ_README

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

23 Commits
ย 
ย 

Repository files navigation

๐Ÿ›’ Project _ LOTDIZ

Project Summary

โœ”๏ธ ํ”„๋กœ์ ํŠธ ๋ช…

ํฌ๋ผ์šฐ๋“œ ํŽ€๋”ฉ ์‡ผํ•‘๋ชฐ LOTDIZ

โœ”๏ธ ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„

2023.09.04 ~ 2023.11.03

โœ”๏ธ ํ™ˆํŽ˜์ด์ง€ url

https://lotdiz.lotteedu.com/

โœ”๏ธ ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€ url

https://admin.lotdiz.lotteedu.com/

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

๋กฏ๋””์ฆˆ ์„œ๋น„์Šค๋Š” ํŽ€๋”ฉ ๊ฐœ์„ค์ž(๋ฉ”์ด์ปค)์™€ ํ›„์›์ž(์„œํฌํ„ฐ)๊ฐ„์˜ ํŽ€๋”ฉ ๊ฑฐ๋ž˜๋ฅผ

์ค‘๊ฐœํ•˜๋Š” ์˜จ๋ผ์ธ ์ค‘๊ฐœ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค.

โœ”๏ธ ๊ธฐ์ˆ  ์Šคํƒ

๊ธฐ์ˆ ์Šคํƒ


01. ํŒ€ ์†Œ๊ฐœ

โœ”๏ธ ํŒ€ โ€˜ OJJOK โ€™

์ด๋ฆ„ ์ฃผ ํฌ์ง€์…˜ ์„ธ๋ถ€ ๋‹ด๋‹น GITHUB ์ฃผ์†Œ
์ด์ƒ์› Leader
Back
Front
Infra
Project Service
- ํ”„๋กœ์ ํŠธ ๋“ฑ๋กํ•˜๊ธฐ
Notification Service
- ๋ฐฐ์†ก ์‹œ์ž‘ ์•Œ๋ฆผ, ๋ชฉํ‘œ ๊ธˆ์•ก ๋‹ฌ์„ฑ ์•Œ๋ฆผ
- event-bridge์™€ sqs๋ฅผ ์ด์šฉํ•œ ์ฃผ๊ธฐ์  ์•Œ๋ฆผ ๊ตฌ์„ฑ
https://github.com/nowgnas
์ด์šฐ์—ฝ Back
Front
Member Service
- ํšŒ์›๊ฐ€์ž… ๋ฐ ์ด๋ฉ”์ผ ์ธ์ฆ, ๋กœ๊ทธ์ธ (์ธ์ฆ, JWT ํ† ํฐ ๋ฐœ๊ธ‰), ๋กœ๊ทธ์•„์›ƒ
- ๋งˆ์ดํŽ˜์ด์ง€ (์„œํฌํ„ฐ ํ™œ๋™ ๋‚ด์—ญ + ํšŒ์› ์ •๋ณด ์กฐํšŒ ๋ฐ ์ˆ˜์ •)
- ์ฐœ ์กฐํšŒ, ์‚ญ์ œ
APIGateway Service
- JWT๋ฅผ ํ†ตํ•œ ์ธ๊ฐ€ ๋กœ์ง ๊ตฌํ˜„
Payments Service
- ๋ฉค๋ฒ„์‹ญ ๊ฐ€์ž… (๋‹จ๊ฑด ๊ฒฐ์ œ)
https://github.com/leewooyup
์ด์ง„์šฐ Back
Front
Funding Service
- ํŽ€๋”ฉํ•˜๊ธฐ
- ํŽ€๋”ฉ ๋‚ด์—ญ ์กฐํšŒ
- ํŽ€๋”ฉ ์ƒ์„ธ ๋‚ด์—ญ ์กฐํšŒ
Payment Service
- ํŽ€๋”ฉ ๊ฒฐ์ œ (๋‹จ๊ฑด ๊ฒฐ์ œ)
https://github.com/binarywoo27
์ด์ฑ„๋ฏผ Back
Front
Infra
Admin Service
- ํšŒ์› ์ •๋ณด ์กฐํšŒ, ๋ฉ”์ด์ปค ์ •๋ณด ์กฐํšŒ
- ํ”„๋กœ์ ํŠธ ์ •๋ณด ์กฐํšŒ ๋ฐ ํ”„๋กœ์ ํŠธ ์ธ์ฆ
- ๊ฐ ์ •๋ณด ํ†ตํ•ฉ ๊ฒ€์ƒ‰
Delivery Service
- ๋ฐฐ์†ก ์กฐํšŒ
Notification Service
- ์•Œ๋ฆผ ์กฐํšŒ, ํ”„๋กœ์ ํŠธ ๋งˆ๊ฐ ๋ฐ ํ”„๋กœ์ ํŠธ ๋ฏธ๋‹ฌ์„ฑ ์•Œ๋ฆผ
Infrastructure
- MicroService ๋ณ„, ๊ฐœ๋ณ„ ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ AWS Fargate EKS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์ถ• โ†’ ์šด์˜๊ณผ ๊ด€๋ฆฌ์˜ ํŽธ๋ฆฌํ•จ์„ ๊ณ ๋ คํ•˜์—ฌ Serverless ํ™˜๊ฒฝ ๋„์ž…
- MicroService ๋‹จ์œ„์˜ DB ๋…๋ฆฝ์ ์œผ๋กœ ๊ตฌ์ถ• โ†’ ํ•˜๋‚˜์˜ Pod์— App๊ณผ DB๋ฅผ ๋‘์–ด ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ํ•จ๊ป˜ํ•˜๋„๋ก ๊ตฌ์„ฑ
- AWS EFS & Kubernetes Persistent Volume ๋ฐ Claim์„ ์‚ฌ์šฉํ•œ DB ์ •๋ณด ๋…๋ฆฝ์ ์œผ๋กœ ์˜๊ตฌ ์ €์žฅํ™˜๊ฒฝ ๊ตฌ์ถ•
- Kubernetes Rolling Update ์ „๋žต์œผ๋กœ Pod ์žฌ๋ฐฐํฌ์‹œ Service์˜ Downtime์„ ์ œ๊ฑฐ
- AWS NLB๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Spring Cloud API Gateway์˜ ์—”๋“œํฌ์ธํŠธ๋ฅผ ์™ธ๋ถ€๋กœ ๋…ธ์ถœ
- AWS Route 53 + AWS Certificate Manager + AWS NLB๋ฅผ ์—ฐ๊ฒฐํ•ด DNS โ†’ Load Balancer๋กœ ๋ผ์šฐํŒ…
- EventBridge + SQS๋ฅผ ์‚ฌ์šฉํ•œ ์ด๋ฒคํŠธ ์Šค์ผ€์ค„๋Ÿฌ ๊ตฌ์ถ•
- SNS + SQS๋ฅผ ์‚ฌ์šฉํ•œ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ Pub/Sub ํ™˜๊ฒฝ ๊ตฌ์ถ•
- Cloudfront + S3 ์›น ํผ๋ธ”๋ฆฌ์‹ฑ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ Vue App ๊ตฌ์ถ•
- Github Actions Workflows๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋ฐ ํ”„๋ก ํŠธ์—”๋“œ CI/CD ๊ตฌ์ถ•
- ๊ฐ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋กœ๊น…์„ ์œ„ํ•œ CloudWatch์™€ ์—ฐ๋™ํ›„ ๋กœ๊ทธ ๋ชจ๋‹ˆํ„ฐ๋ง
https://github.com/CokeLee777
์ตœ์†Œ์˜ Back
Front
Project Service
- ๋ฉ”์ธ ํŽ˜์ด์ง€ (๋ฐฐ๋„ˆ, ๋ฒ ์ŠคํŠธ ๋กฏ๋”œ, ๋งˆ๊ฐ์ž„๋ฐ•์ˆœ ๋กฏ๋“œ+)
- ํ”„๋กœ์ ํŠธ ๋ฆฌ์ŠคํŠธ ์กฐํšŒ (๋กฏ๋“œ+, ๋กฏ๋”œ, ๊ธฐํš์ „ ์กฐํšŒ, ์ข‹์•„์š” ์ƒ์„ฑ/์‚ญ์ œ)
- ํ”„๋กœ์ ํŠธ ๋ฆฌ์ŠคํŠธ ์ƒ์„ธ ์กฐํšŒ (์ƒ์„ธ ์ •๋ณด, ์ง€์ง€์„œ๋ช…, ํ•จ๊ป˜ ํ•˜๋Š” ์„œํฌํ„ฐ, ์ข‹์•„์š” ์ƒ์„ฑ/์‚ญ์ œ)
- ์ง€์ง€์„œ๋ช… ์ž‘์„ฑ, ์ˆ˜์ •
https://github.com/cso6005

02. ํ”„๋กœ์ ํŠธ ๊ธฐํš

โœ”๏ธ ์ฃผ์ œ ์„ ์ • ๋ฐฉ์‹

โ‡’ ๋งˆ์ธ๋“œ ๋งต์„ ํ†ตํ•ด ๊ธฐํš

mindmap


โœ”๏ธ ์ฃผ์ œ ์„ ์ • ์ด์œ  ๋ฐ ๊ธฐํš ์˜๋„

์˜จ๋ผ์ธ ์‡ผํ•‘๋ชฐ ์›น์‚ฌ์ดํŠธ ์ œ์ž‘์„ ์œ„ํ•ด ์ด์ปค๋จธ์Šค์™€ ์œ ์‚ฌํ•œ ๊ฒฝ๋งค ์„œ๋น„์Šค์™€ ํ‹ฐ์ผ“ํŒ…, ๊ณต๋™๊ตฌ๋งค๋ฅผ ๋– ์˜ฌ๋ฆฌ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ์™€ ํŠธ๋ž˜ํ”ฝ์„ ๊ณ ๋ คํ•ด ํ‹ฐ์ผ“ํŒ…๊ณผ ๊ณต๋™๊ตฌ๋งค์—์„œ ๋งŽ์€ ์•„์ด๋””์–ด๊ฐ€ ๋‚˜์™”์Šต๋‹ˆ๋‹ค.

ํˆฌ์ž์™€ ํŽ€๋”ฉ์—์„œ ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ์„ ๊ฒฝํ—˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ ํŽ€๋”ฉ ํ”Œ๋žซํผ์„ ์„ ์ •ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


โœ”๏ธ ์ฃผ์š” ๊ธฐ๋Šฅ

๐Ÿ›’ ๋ฉ”์ธ ๊ธฐ๋Šฅ

  • ํšŒ์›
    • ํšŒ์› ๊ฐ€์ž…, ๋กœ๊ทธ์ธ, ๋กœ๊ทธ์•„์›ƒ, ๊ฐœ์ธ ์ •๋ณด ์กฐํšŒ ๋ฐ ์ˆ˜์ •
    • ์ƒํ’ˆ ์ฐœ ๋ˆ„๋ฅด๊ธฐ, ์ฐœ ์กฐํšŒ, ์ฐœ ์‚ญ์ œ
  • ํ”„๋กœ์ ํŠธ
    • ํ”„๋กœ์ ํŠธ ๋ฆฌ์ŠคํŠธ ํŽ˜์ด์ง€
      • ๋ฒ ์ŠคํŠธ ๋กฏ๋“œ+ ์กฐํšŒ, ๋งˆ๊ฐ์ž„๋ฐ•์ˆœ ๋กฏ๋”œ ์กฐํšŒ
      • ์นดํ…Œ๊ณ ๋ฆฌ ๋ณ„, ๋กฏ๋“œ+ ์กฐํšŒ, ๊ธฐํš์ „ ๋กฏ๋“œ+ ์กฐํšŒ, ๋กฏ๋”œ ์กฐํšŒ
    • ํ”„๋กœ์ ํŠธ ์ƒ์„ธ ํŽ˜์ด์ง€
      • ํ”„๋กœ์ ํŠธ ์ƒ์„ธ ์กฐํšŒ
      • ์ง€์ง€์„œ๋ช… ์กฐํšŒ, ์ž‘์„ฑ, ์ˆ˜์ •
      • ํ•จ๊ป˜ ํ•˜๋Š” ์„œํฌํ„ฐ ์กฐํšŒ
  • ๋กฏ๋”œ ํ”„๋กœ์ ํŠธ
    • ํŠน๊ฐ€ ํ• ์ธ ์ ์šฉ ์ด๋ฒคํŠธ
  • ํŽ€๋”ฉ
    • ํ”„๋กœ์ ํŠธ ํŽ€๋”ฉ ๋ฐ ์ทจ์†Œ ํ™˜๋ถˆ
    • ํŽ€๋”ฉ ๋‚ด์—ญ ์กฐํšŒ, ํŽ€๋”ฉ ์ƒ์„ธ ๋‚ด์—ญ ์กฐํšŒ
  • ๋ฉค๋ฒ„์‹ญ
    • ๋ฉค๋ฒ„์‹ญ(ํŽ€๋”ฉ ํ”„๋ Œ๋“œ, ํŽ€๋”ฉ ํŒŒํŠธ๋„ˆ) ๊ฐ€์ž…
  • ์•Œ๋ฆผ
    • ๋ชฉํ‘œ ํŽ€๋”ฉ ๊ธˆ์•ก ๋‹ฌ์„ฑ ์•Œ๋ฆผ
    • ํ”„๋กœ์ ํŠธ ๋งˆ๊ฐ ์•Œ๋ฆผ, ๋ชฉํ‘œ ํŽ€๋”ฉ๊ธˆ์•ก ๋ฏธ๋‹ฌ์„ฑ ์•Œ๋ฆผ
    • ๋ฐฐ์†ก ์‹œ์ž‘ ์•Œ๋ฆผ

๐Ÿ™‹โ€โ™€๏ธ Maker ์ „์šฉ ๊ธฐ๋Šฅ

  • ํ”„๋กœ์ ํŠธ ๊ฐœ์„ค
    • ํ”„๋กœ์ ํŠธ ๋“ฑ๋ก
  • ํŽ€๋”ฉ ๊ด€๋ฆฌ
    • ๋“ฑ๋กํ•œ ํ”„๋กœ์ ํŠธ ๋ชฉ๋ก, ์ƒ์„ธ ์กฐํšŒ
    • ๊ฐ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ํŽ€๋”ฉ ๋‚ด์—ญ ์กฐํšŒ
    • ํŽ€๋”ฉ ๋‚ด์—ญ ๊ฑด์— ๋Œ€ํ•œ ๋ฐฐ์†ก ์‹œ์ž‘
  • ์•Œ๋ฆผ
    • ๋ชฉํ‘œ ํŽ€๋”ฉ ๊ธˆ์•ก ๋‹ฌ์„ฑ ์•Œ๋ฆผ
    • ํ”„๋กœ์ ํŠธ ๋งˆ๊ฐ ์•Œ๋ฆผ, ๋ชฉํ‘œ ํŽ€๋”ฉ๊ธˆ์•ก ๋ฏธ๋‹ฌ์„ฑ ์•Œ๋ฆผ

๐Ÿง‘โ€๐Ÿ’ผ Back Office

  • ํšŒ์›, ๋ฉ”์ด์ปค, ํ”„๋กœ์ ํŠธ ์กฐํšŒ ๋ฐ ๊ฒ€์ƒ‰
  • ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ
    • ํ”„๋กœ์ ํŠธ ์ธ์ฆ

03. ํ”„๋กœ์ ํŠธ ์„ค๊ณ„

โœ”๏ธ USE CASE

Untitled (1)


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

https://www.figma.com/file/d8jErJg73JWxxqms1BYZ2F/%EB%A1%AF%EB%94%94%EC%A6%88?type=design&node-id=1158-14&mode=design&t=TV939ndKw3PjmX8l-0


โœ”๏ธย ERD

LOTDIZ (1)


โœ”๏ธ ์•„ํ‚คํ…์ฒ˜

Untitled (2)

04. ํ”„๋กœ์ ํŠธ ์ˆ˜ํ–‰ ๋‚ด์šฉ

โœ”๏ธ ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ๋ฐ ํ˜‘์—… ๋ฐฉ์‹

  1. ๋ฐ์ผ๋ฆฌ ์Šคํฌ๋Ÿผ
    • ๋งค์ผ ์ •ํ•ด์ง„ ์‹œ๊ฐ„์— ์Šคํฌ๋Ÿผ ๋ฏธํŒ…์„ ํ†ตํ•ด ์ง„ํ–‰ ์ƒํ™ฉ์„ ๊ณต์œ ํ•˜๊ณ  ์ „๋‚ ์˜ ์„ฑ๊ณผ์™€ ๊ทธ๋‚ ์˜ ๊ณ„ํš, ๊ทธ๋ฆฌ๊ณ  ๊ฒช๊ณ  ์žˆ๋Š” ์–ด๋ ค์›€์„ ๊ณต์œ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  2. ํšŒ์˜๋ก ์ž‘์„ฑ
    • ๋ชจ๋“  ํšŒ์˜์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ์ž‘์„ฑํ•˜์—ฌ ํŒ€์›๋“ค ๊ฐ„์˜ ๊ฒฐ์ • ์‚ฌํ•ญ์„ ๊ธฐ๋กํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  3. ๋ฌธ์„œํ™”
    • ๋…ธ์…˜
    • ๋งˆ์ธ๋“œ๋งต
    • ์š”๊ตฌ์‚ฌํ•ญ ๋ช…์„ธ์„œ
    • ERD
    • Use-Case diagram
    • ์•„ํ‚คํ…์ฒ˜
    • API ๋ช…์„ธ์„œ
    • ํฌ์ŠคํŠธ๋งจ
  4. ์Šค์ผ€์ค„ ๋‹ฌ๋ ฅ
    • ์ผ์ •, ๊ณต์ง€, ์—…๋ฌด ๋งˆ๊ฐ์ผ์„ ์Šค์ผ€์ค„ ๋‹ฌ๋ ฅ์— ๊ธฐ๋กํ•˜์—ฌ ์ „์ฒด ํ”„๋กœ์ ํŠธ ์ผ์ •์„ ๊ด€๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

โœ”๏ธ ๊ฐœ๋ฐœ ๋ฐ ๊ธฐ์ˆ  ๊ตฌํ˜„ ๊ฒฐ๊ณผ

  • ํšŒ์›

    • ์ธ์ฆ ๋ฐ ์ธ๊ฐ€(JWT) ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ์˜ ์š”์ฒญ์€ ๋‹จ์ผ ์ง„์ž…์ ์ธ Spring Cloud Gateway์„ ๊ฑฐ์ณ (Authorization) Filter๋ฅผ ํƒ„๋‹ค. ( ๋‹จ, ๋กœ๊ทธ์ธ/ํšŒ์›๊ฐ€์ž… ์š”์ฒญ๋งŒ Spring Cloud Gateway์˜ Filter ๊ฑฐ์น˜์ง€ ์•Š์Œ. )

      Member-Service์—์„œ ๋กœ๊ทธ์ธ ์‹œ DB์˜ ์ด๋ฉ”์ผ ๋ฐ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ž…๋ ฅํ•œ ๊ฐ’๊ณผ ์ผ์น˜ํ•œ๋‹ค๋ฉด, JWT Token ๋ฐœ๊ธ‰. ๋ธŒ๋ผ์šฐ์ €์˜ Local Storage์— TOKEN์„ ์ €์žฅ.

      ์ดํ›„, ํšŒ์›๋งŒ ํ•  ์ˆ˜ ์žˆ๋Š” ์š”์ฒญ์— ๋Œ€ํ•ด Spring Cloud Gateway์˜ ํ•„ํ„ฐ์—์„œ ํ† ํฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์‹œํ–‰. ํ† ํฐ์ด ์œ ํšจํ•˜๋‹ค๋ฉด, ์ •๋ณด๋ฅผ ๊บผ๋‚ด โ€˜ํšŒ์›(Member)โ€™์˜ ๊ณ ์œ  id์ธ memberId๋ฅผ Header์— ๋„ฃ์–ด์ค€๋‹ค.

      ํ•ด๋‹น ๊ณผ์ •์„ ๊ฑฐ์ณ ์œ ํšจํ•œ ํšŒ์›๊ณผ ๋น„ํšŒ์›์„ ๊ตฌ๋ถ„ํ•˜๊ณ , ์ด์— ๋”ฐ๋ผ, ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํŽ˜์ด์ง€์— ์ œํ•œ์„ ๋‘”๋‹ค.

    • ๋ฉค๋ฒ„์‹ญ ๊ฐ€์ž… Kakao Payments API(๋‹จ๊ฑด ๊ฒฐ์ œ)๋ฅผ ์ด์šฉํ•˜์—ฌ, ๋ฉค๋ฒ„์‹ญ ๊ฐ€์ž…์„ ์ง„ํ–‰. ๋‹จ๊ฑด ๊ฒฐ์ œ ๊ณผ์ •์€ โ€˜์ค€๋น„ ์š”์ฒญโ€™๊ณผ โ€˜์Šน์ธ ์š”์ฒญโ€™์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

      ์ค€๋น„ ์š”์ฒญ์—์„œ, ๋ฉค๋ฒ„์‹ญ ๋ช…, ๋ฉค๋ฒ„์‹ญ ๊ฐ€๊ฒฉ, ๊ฐ€๋งน์  ์ฝ”๋“œ, approval_url ๋“ฑ์˜ ๊ฐ’์„

      Kakao Payments Server๋กœ ๋ณด๋‚ธ๋‹ค. ์ค€๋น„ ์š”์ฒญ์ด ์™„๋ฃŒ๋˜๋ฉด Kakao Payments Server๊ฐ€ ๋ณด๋‚ด์ฃผ๋Š” ์‘๋‹ต ์ค‘ ํ•˜๋‚˜์ธ ๊ฐ’์ธ โ€˜next_redirect_pc_urlโ€™์„ ํด๋ผ์ด์–ธํŠธ๋กœ ๋„˜๊ฒจ ์นด์นด์˜ค ๊ฒฐ์ œ QR์ฝ”๋“œ๊ฐ€ ํŒ์—… ์ฐฝ์œผ๋กœ ๋œจ๊ฒŒ ํ•œ๋‹ค.

      ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒฐ์ œ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜๊ณ , ๊ฒฐ์ œํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด, ์ค€๋น„ ์š”์ฒญ ๋•Œ ๋ณด๋‚ด์ฃผ์—ˆ๋˜

      approve_url๋กœ ์š”์ฒญ์ด ๋ณด๋‚ด์ง€๊ณ , Kakao Payments Server์— ์ตœ์ข…์ ์ธ ์Šน์ธ ์š”์ฒญ์„ ๋ณด๋‚ด๊ฒŒ ๋œ๋‹ค. Kakao Payments Server์—์„œ ์ •์ƒ์ ์ธ ์‘๋‹ต์ด ์˜ค๋ฉด, DB์— ์ตœ์ข…์ ์ธ ๊ฒฐ์ œ ์ •๋ณด๋ฅผ

      ๋„ฃ๊ณ , ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌํ•˜์—ฌ ๊ฒฐ์ œ์ฒ˜๋ฆฌ๋ฅผ ์™„๋ฃŒ๋”ฉ

  • ์•Œ๋ฆผ

    • ๋ฉ”์‹œ์ง€ ํ ์„œ๋น„์Šค์ธ AWS SQS๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์•Œ๋ฆผ ์„œ๋น„์Šค์™€ ๋‹ค๋ฅธ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ์ตœ์†Œํ™”ํ•˜์˜€๋‹ค.
    • AWS SQS๋Š” ๋ฉ”์‹œ์ง€ ๊ฑด๋‹น ๋น„์šฉ์ด ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„์šฉ ์ตœ์ ํ™”์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ์ž๋™์œผ๋กœ ์ˆ˜ํ‰ ์Šค์ผ€์ผ๋ง์ด ๊ฐ€๋Šฅํ•˜๊ณ , ์‹คํŒจ์‹œ DLQ ๋ฐ ๋ฆฌ๋“œ๋ผ์ด๋ธŒ ์ •์ฑ…์„ ์ ์šฉํ•˜์—ฌ ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.
    • ๊ฐ™์€ ์ด๋ฒคํŠธ์— ๋Œ€ํ•ด์„œ ๊ตฌ๋…ํ•˜๊ณ ์žˆ๋Š” ์—ฌ๋Ÿฌ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐœํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ SNS + SQS ๋ฅผ ์‚ฌ์šฉํ•œ ํŒฌ์•„์›ƒ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์˜€๋‹ค.
    • ์Šค์ผ€์ค„๋ง ๊ฐ™์€ ๊ฒฝ์šฐ Spring Batch ๋˜๋Š” ์—ฌ๋Ÿฌ ์Šค์ผ€์ค„๋ง ์ „๋žต์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ง์ ‘ ์„œ๋ฒ„๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  Cron Job์„ ์Šค์ผ€์ผ๋ง์‹œ๋‚˜ ์žฌ๋ฐฐํฌ์‹œ ๊ด€๋ฆฌํ•ด์ฃผ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ๋Š” ๊ด€๋ฆฌ๊ฐ€ ๋”ฐ๋กœ ํ•„์š”์—†๋Š” AWS EventBridge๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค.
  • ๋ฐฐ์†ก

    • ํŽ€๋”ฉ์ด ์™„๋ฃŒ๋จ๊ณผ ๋™์‹œ์— ๋ฐ˜๋“œ์‹œ ๋ฐฐ์†ก ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ƒ์„ฑ๋  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํŽ€๋”ฉ์ด ์™„๋ฃŒ๋˜๋ฉด ํŽ€๋”ฉ ์„œ๋น„์Šค์—์„œ create-order topic์— Message๋ฅผ ๋ฐœํ–‰ํ•˜๊ณ , ์ด๋ฅผ ๋ฐฐ์†ก ์„œ๋น„์Šค๊ฐ€ Polling ํ•˜์—ฌ ๋ฐฐ์†ก ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€๋‹ค.
  • ๊ด€๋ฆฌ์ž

    • ๊ด€๋ฆฌ์ž ์„œ๋น„์Šค์—์„œ ๋‹ค๋ฅธ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋ ค๋ฉด OpenFeign์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์—ˆ์ง€๋งŒ, ๊ด€๋ฆฌ์ž ์„œ๋น„์Šค์— DB๋ฅผ ๋”ฐ๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ๊ด€๋ฆฌ์ž ๋ฐ์ดํ„ฐ ํ˜•์‹์— ๋งž๊ฒŒ ํ…Œ์ด๋ธ”์„ ๊ตฌ์„ฑํ•˜์˜€๊ณ , ๊ด€๋ฆฌ์ž๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ๋‹ค๋ฅธ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์—์„œ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœํ–‰๋˜๋ฉด Kafka๋ฅผ ํ†ตํ•ด์„œ ๊ด€๋ฆฌ์ž ์„œ๋น„์Šค๊ฐ€ ์ด๋ฅผ ํด๋งํ•˜์—ฌ ๊ด€๋ฆฌ์ž ์„œ๋น„์Šค DB์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑํ•˜์˜€๋‹ค.
    • ํ”„๋กœ์ ํŠธ ์ธ์ฆ์— ๋Œ€ํ•œ ๋ถ€๋ถ„์€ Real time์œผ๋กœ ์ธ์ฆ์ด ๋  ํ•„์š”๋Š” ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ด€๋ฆฌ์ž๊ฐ€ ํ”„๋กœ์ ํŠธ ์ธ์ฆ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰ํ•ด์„œ Kafka๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋ฉด ํ”„๋กœ์ ํŠธ ์„œ๋น„์Šค์—์„œ ์ด๋ฅผ Pollingํ•˜์—ฌ DB์—์„œ ํ”„๋กœ์ ํŠธ ์ธ์ฆ ์ •๋ณด๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ํ•˜์˜€๋‹ค.
  • ํŽ€๋”ฉ

    • ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž๋Š” ํŽ€๋”ฉํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ํ†ตํ•ด ์›ํ•˜๋Š” ํ”„๋กœ์ ํŠธ์˜ ์ƒํ’ˆ์„ ํŽ€๋”ฉํ•  ์ˆ˜ ์žˆ๋‹ค.
      ์„ ํƒํ•œ ์ƒํ’ˆ์„ ์นด์นด์˜คํŽ˜์ด API(๋‹จ๊ฑด ๊ฒฐ์ œ)๋ฅผ ํ†ตํ•ด ๊ตฌ๋งค๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.
      ํŽ€๋”ฉํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์—์„œ ์นด์นด์˜คํŽ˜์ด API๋ฅผ ํ†ตํ•ด ๊ฒฐ์ œ ์ค€๋น„ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  QR์ฝ”๋“œ๊ฐ€ ๋‹ด๊ธด redirect_url ์ฃผ์†Œ์™€ tid๋ฅผ ์ „๋‹ฌ๋ฐ›๊ฒŒ ๋œ๋‹ค.
      ์‚ฌ์šฉ์ž์—๊ฒŒ redirect_url๊ณผ tid๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ QR์ฝ”๋“œ๋ฅผ ๋„์›Œ์ค€๋‹ค. ์‚ฌ์šฉ์ž๋Š” ํ•ธ๋“œํฐ์œผ๋กœ QR๋ฅผ ์ฐ์–ด ๊ฒฐ์ œ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด ์นด์นด์˜ค์—์„œ ํ”„๋ก ํŠธ๋กœ approval_url์ฃผ์†Œ๋กœ redirectํ•˜์—ฌ ๊ฒฐ์ œ ์Šน์ธ์„ ์ง„ํ–‰ํ•œ๋‹ค. ์ด๋•Œ url์„ ํ†ตํ•ด ๋ฐ›์€ pg_token์„ tid, ํŽ€๋”ฉ์ •๋ณด(ํŽ€๋”ฉ ์ƒ์„ธ, ๊ฒฐ์ œ, ๋ฐฐ์†ก์ •๋ณด)์™€ ํ•จ๊ป˜ Funding-Service๋กœ ๋ณด๋‚ด ์ตœ์ข…์ ์œผ๋กœ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๊ฐ„ ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ์„ ๋งž์ถ”๊ณ  ์นด์นด์˜ค ๊ฒฐ์ œ ์Šน์ธ์„ ์œ„ํ•œ ๋‹ค์Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
      Funding-Service ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์—์„œ ์žฌ๊ณ ์ฐจ๊ฐ์„ ์œ„ํ•ด Project-Service์—์„œ ํ™•์ธ ํ›„(feign client) ์žฌ๊ณ ๊ฐ€ ์žˆ๋‹ค๋ฉด, ์นด์นด์˜ค์„œ๋ฒ„๋กœ ์ตœ์ข…์ ์œผ๋กœ ๊ฒฐ์ œ ์Šน์ธ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.
      ์ดํ›„ ํฌ์ธํŠธ ์ฐจ๊ฐ์„ ์œ„ํ•ด Member-Service ์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์ƒํ’ˆ ๋ฐฐ์†ก ์ •๋ณด๋ฅผ kafka๋ฅผ ํ†ตํ•ด Delivery-Service๋กœ ์ „๋‹ฌํ•˜๊ฒŒ ๋œ๋‹ค.

โœ”๏ธ ํšŒ๊ณ 

์ด๋ฆ„ ๋‚ด์šฉ
์ด์ƒ์› msa ํ™˜๊ฒฝ์—์„œ ์„œ๋น„์Šค์— ์ ์ ˆํ•œ ํ…Œ์ด๋ธ” ๋ถ„๋ฆฌ์™€ ํด๋ž˜์Šค ์„ค๊ณ„๊ฐ€ ์ž˜ ์ด๋ค„์กŒ์œผ๋ฉฐ, ์ดํ›„ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์„ฑ๋Šฅ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ๊ณผ ํ•จ๊ป˜ ์„ค๊ณ„๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. jpa์˜ ์˜์†์„ฑ์— ๋Œ€ํ•œ ๋” ๊นŠ์€ ์ดํ•ด๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ๋Š๊ผˆ์œผ๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ฑ๋Šฅ์— ๋Œ€ํ•œ ํ•™์Šต๊ณผ ๊ณ ๋ฏผ์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•ด ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ํ”„๋ก ํŠธ ๊ธฐ์ˆ ์Šคํƒ์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ๋ถ€์กฑํ•ด ๊ธฐ์ˆ ์„ ์ œ๋Œ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•œ ๊ฒƒ์ด ์•„์‰ฝ์Šต๋‹ˆ๋‹ค. ์ดํ›„ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ํšจ์œจ์ ์ธ ํ˜‘์—…๊ณผ ์ฝ”๋“œ๋ฆฌ๋ทฐ๋กœ ์ž˜ ์„ค๊ณ„๋œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
์ด์šฐ์—ฝ Spring Security์™€ JWT์— ๋Œ€ํ•ด ๋ฐฐ์šฐ๊ณ  ์ ์šฉํ•˜๋Š” ๋ถ€๋ถ„์—์„œ ๋™์ž‘์›๋ฆฌ์— ๋Œ€ํ•ด ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ๋งŽ์ด ๊ฒช์œผ๋ฉด์„œ, ๋งŽ์ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ Spring Security์—์„œ ๋” ๊นŠ๊ฒŒ ์•Œ์•„๋ณด๊ณ ์ž ํ•˜๋Š” ์š•์‹ฌ๋„ ์ƒ๊ฒจ์„œ ๋” ํŒŒ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ github ํ™œ์šฉ์ด๋‚˜ ํ˜‘์—…ํ•˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•ด ๊ฐ€์žฅ ๋งŽ์ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
์ด์ง„์šฐ ๊ฒฐ์ œ ๊ณผ์ •์—์„œ ํ•„์š”ํ•œ API ์„ค๊ณ„์™€ ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ์— ๋Œ€ํ•ด ๊ณ ๋ฏผํ•ด๋ณผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ MSA ๊ตฌ์กฐ์—์„œ DB์„ค๊ณ„ ๋ฐฉ๋ฒ•๊ณผ Spring Data JPA์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ์†Œ์ค‘ํ•œ ์‹œ๊ฐ„์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ์ž˜ ์งœ์—ฌ์ง„ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด์„œ ๋งŽ์ด ๋ฐฐ์šธ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ์ œ ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ณผ์ •์—์„œ ํ”„๋ก ํŠธ ๊ธฐ์ˆ ์„ ์™„์ „ํžˆ ์ดํ•ดํ•˜์ง€ ๋ชปํ• ์ฑ„๋กœ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด ์•„์‰ฌ์› ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ํ”„๋กœ์ ํŠธ์—์„œ ๋ณด์™„ํ•  ์ ๋“ค์„ ๊นจ๋‹ฌ์„ ์ˆ˜ ์žˆ์–ด์„œ ์ข‹์•˜์Šต๋‹ˆ๋‹ค.
์ด์ฑ„๋ฏผ ๊ธฐํš ๊ณผ์ •์—์„œ ๊ธฐ๋Šฅ์„ ๋„ˆ๋ฌด ๋ฐฉ๋Œ€ํ•˜๊ฒŒ ์žก์•„๋†จ๋”๋‹ˆ ๊ธฐ๋Šฅ์„ ๊ณ ๋„ํ™”์‹œํ‚ค์ง€ ๋ชปํ•œ ๋ถ€๋ถ„์ด ์ปธ๋˜๊ฒƒ ๊ฐ™๋‹ค. ๋‹ค์Œ๋ถ€ํ„ฐ๋Š” ๊ธฐ๋Šฅ์„ ๊ณ ๋„ํ™”์‹œํ‚ฌ๋ถ€๋ถ„ ์ƒ๊ฐํ•˜๊ณ  ๊ธฐ๋Šฅ์„ ์ƒ๊ฐํ•ด์•ผ๊ฒ ๋‹ค. ๋น„๋ก ์•„์‰ฌ์›€์ด ๋‚จ์ง€๋งŒ ์ž˜ ๋งž๋Š” ํŒ€์›๋“ค์„ ๋งŒ๋‚˜์„œ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ์‹œ๊ฐ„์ด์—ˆ๋‹ค.
์ตœ์†Œ์˜ MSA, VUE3, Kafka ๋“ฑ ์ฒ˜์Œ ์‹œ๋„ํ•˜๋Š” ๊ธฐ์ˆ  ์Šคํƒ์ด ๋งŽ์€ ๋งŒํผ ๋ฐฐ์šด ์ ์ด ๋งŽ์€ ํ”„๋กœ์ ํŠธ์˜€์Šต๋‹ˆ๋‹ค. ๋งก์€ ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ๊ตฌํ˜„ํ•˜์˜€์ง€๋งŒ, ์ฝ”๋“œ ๋ฆฌํŽ™ํ† ๋ง, ๋””๋ฒจ๋กญ์„ ํ•˜์ง€ ๋ชปํ•ด, ์•„์‰ฌ์›€์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด, ๊ฐ ์„œ๋น„์Šค์— ์ ํ•ฉํ•œ ์„ค๊ณ„๋ฅผ ์ฐพ์œผ๋ฉฐ, ํƒ„ํƒ„ํ•˜๊ฒŒ ์„ค๊ณ„๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ•œ์ง€ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ข‹์€ ํŒ€์›์„ ๋งŒ๋‚˜์„œ ์ข‹์€ ๊ฒฐ๊ณผ๋ฌผ์„ ์–ป์„ ์ˆ˜ ์žˆ์—ˆ๊ณ , ๋˜, ์žฆ์€ ํšŒ์˜์™€ ์†Œํ†ต์„ ํ†ตํ•ด ์งง์€ ๊ฐ€๊ฐ„์—๋„ ํ”„๋กœ์ ํŠธ๋ฅผ ์›ํ™œํ•˜๊ฒŒ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published