기능별로 파일 생성
기능명
|---src
|---main(많이 쪼개야 한다면, 다시 기능별로 파일 쪼개서 설정)
|---config
|---controller
|---dto
|---entity
|---repository
|---service
|---test
오픈소스 구독/청구(Billing) 및 결제 플랫폼 https://github.com/killbill/killbill
대용량 배치 처리 참조
https://github.com/jojoldu/spring-batch-in-action/tree/master/src/main/java/com/jojoldu/batch
알림 시스템 아키텍처
https://github.com/novuhq/novu
우테코 프로젝트
https://github.com/woowacourse-teams
https://week-year.tistory.com/131
MySQL, Redis, Kafka만 포함된 도커를 EC2에 배포해서 사용 → 주요 기능 api 구현 → 더미 데이터 생성 후 테스트 → 백이랑 프론트로 배포
위와 같이 DB서버를 진행한다면
백, 프론트 서버(Nginx 사용) ↔ DB 서버 로 구현을 해야하지 않나 생각한다.
-- AI 추천 --
API Server (Spring Boot Web):
사용자 요청(청구서 조회 등)을 처리
JPA를 통해 MySQL에서 데이터를 조회
발송 요청이 오면 Kafka에 메시지(Topic: email-send-request)를 던집니다(Produce).
Batch Server (Spring Boot Batch):
(API 서버와 같은 jar파일로 실행하되 프로필만 다르게 하거나, 아예 내부 스케줄러로 같이 돌립니다)
MySQL에서 UsageHistory(사용량)를 1000개씩 읽어옵니다(Chunk Orientied).
요금을 계산하고 Bill 테이블에 저장
동시 실행을 막기 위해 Redis나 MySQL 네임드 락을 사용
Message Consumer (Async Worker):
Kafka를 계속 감시(Subscribe)하고 있다가 메시지가 오면 꺼내기
이메일 발송 로직(Mock)을 수행
실패 시 재시도 하거나 SMS 토픽으로 넘김
Database (MySQL):
Member, Usage, Bill 등 모든 영속 데이터를 저장
대용량 처리를 위해 적절한 인덱스(Index) 튜닝