사전 조사

AI·2026년 1월 11일

폴더 구조

기능별로 파일 생성

기능명
|---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

파일 네이밍

  • 누구나 알기 쉬운 단어 사용
  • 패키지명은 단어가 달라져도 소문자 사용
  • 클래스의 경우 Pascal Case로 작성
  • 변수나 함수의 경우 CamelCase로 작성
  • 상수는 전부 대문자로 네이밍
  • 컬력션 사용시, 컬렉션 명시
  • 되도록 짧은 이름 선택

참고한자료

https://week-year.tistory.com/131

DB 서버

MySQL, Redis, Kafka만 포함된 도커를 EC2에 배포해서 사용 → 주요 기능 api 구현 → 더미 데이터 생성 후 테스트 → 백이랑 프론트로 배포

참고한 자료

https://velog.io/@fkdldj48/AWS-EC2-%EC%84%9C%EB%B2%84%EC%97%90-Docker-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0

아키텍쳐

위와 같이 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) 튜닝

0개의 댓글