[과제 회고] K사 서버 개발하기

2026. 1. 14. 13:38·Spring/Spring 실습

Redis-Kafka 기반의 개념을 학습한 이후 실전과제를 진행하게 되었다.

이번 과제는 큰 제약사항이 없이 중점을 두어야 하는 포인트가 전적으로 나에게 있었던 점을 활용해서 그 범위와 선을 정하는 것이

 

📄 과제 소개

다수 서버 환경에서도 안정적으로 동작하는 커피숍 주문 시스템을 구현하기

  1. 커피 주문에 필요한 메뉴를 구성하고 조회가 가능해야 합니다.
  2. 커피 주문은 포인트로 가능합니다.
  3. 커피 주문내역을 통해 인기 있는 메뉴를 추천합니다.

🔥 구현 필요 API 

  1. 커피 메뉴 목록 조회 API
  2. 포인트 충전하기 API
  3. 커피 주문, 결제하기 API
  4. 인기 메뉴 목록 조회 API

실습 과제를 통해 경험했던 부분과 설계 의도를 정리하고자 한다.

 

🧩 설계 요약

  • 멱등성 키 기반 중복 요청 방지
  • DB + 서비스 레벨 이중 방어로 동시성 대응
  • 주문 결제와 집계 로직의 명확한 책임 분리
  • 이벤트 기반 비동기 처리로 확장성 확보
  • 실시간 조회에 적합한 Redis 집계 구조 적용

 

🤔 설계 및 구현 간 고민했던 부분

트랜잭션의 범위가 적합한가?

일반적으로 사용했던 범위는 비즈니스 로직의 실패가 발생했을 때 롤백이 필요한 경우 트랜잭션을 설정하여 데이터의 오염을 최소화하는 것이 목적이었다.

 

이번에는 집계 기능도 추가 구현하게 되면서 집계를 실패했을 경우에도 트랜잭션이 실패되어야 하는가에 대한 고민을 하게 되었다.

 

그래서 다음과 설계하고자 했다.

 

핵심 트랜잭션만 최소 단위로 유지하자!

주문 도메인

  • 주문 생성
  • 주문 상태 변경
    👉 주문 자체의 정합성만 보장

포인트 도메인

  • 포인트 차감
  • 포인트 거래 이력 저장
    👉 금전 처리의 원자성만 보장

집계 / 전송

  • Kafka 이벤트 발행
  • Redis 집계
    👉 트랜잭션 밖에서 비동기 처리

그 의도가 드러난 코드는 아래와 같이 작성했다.

@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
public void handle(OrderCompletedDomainEvent event) {
    // Kafka 이벤트 전송
}

이 방식의 의미

  • 주문 트랜잭션이 정상 커밋된 이후에만 이벤트를 전송
  • Kafka 전송 실패가 되더라도 주문/결제는 롤백되지 않음
  • 외부 시스템 장애가 핵심 비즈니스 로직에 전달되지 않음

이를 통해 주문/결제는 안정적으로 유지되고 집계 및 데이터 수집 로직은 독립적으로 확장 가능하게끔 구조를 만들었다.

'Spring > Spring 실습' 카테고리의 다른 글

[실시간 대용량 서비스] AccessToken / RefreshToken 분리 설계와 Redis 화이트리스트  (0) 2026.02.02
[실시간 대용량 서비스] 최종 프로젝트 발제  (0) 2026.01.30
[프로젝트 회고] 실시간 채팅 프로젝트  (0) 2025.12.31
[프로젝트] 실시간 데이터 처리 회고  (0) 2025.12.08
[프로젝트] 포인트 기반 결제 시스템 프로젝트 회고  (0) 2025.11.28
'Spring/Spring 실습' 카테고리의 다른 글
  • [실시간 대용량 서비스] AccessToken / RefreshToken 분리 설계와 Redis 화이트리스트
  • [실시간 대용량 서비스] 최종 프로젝트 발제
  • [프로젝트 회고] 실시간 채팅 프로젝트
  • [프로젝트] 실시간 데이터 처리 회고
stark77
stark77
하마의 IT 자기개발 이모저모, 백엔드 개발자로 거듭나기
  • stark77
    하마의 개발자 성장일기
    stark77
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 컴퓨터구조와 운영체제
        • 컴퓨터구조
        • 운영체제
      • SQL 기초
      • Spring
        • 백엔드 기초
        • Spring 실습
      • JAVA
        • Java 실습
      • HTML&CSS
        • HTML&CSS 실습
      • Git&GitHub
        • Git&GitHub 실습
      • 내배캠 끄적끄적
        • Today I Learned
      • 유용한 툴 및 사이트 정리
      • 취미
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    RestTemplate
    객체지향
    Github
    경합조건과 교착상태
    Java 문법기초
    thymleaf
    Stomp
    WebSocket
    다형성
    JPA
    git
    네트워크 기초
    java
    BEAN
    웹소켓
    algorithm
    백엔드 기초다지기
    jsp
    for문
    String.format
    HTML&CSS
    실시간 데이터 처리
    백엔드 기초
    Til
    프로세스와 쓰레드
    객체지향프로그래밍
    Spriingboot
    Spring
    MVC
    SpringSecurity
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
stark77
[과제 회고] K사 서버 개발하기
상단으로

티스토리툴바