Skip to content

[REFACOTR] AI 비용 객체 동시성 이슈로 분석결과가 날아가는 문제 해결 #84

@coli-geonwoo

Description

@coli-geonwoo

문제 상황

서비스 정책 : 레포지토리 등록과 동시에 3개의 PR을 분석해준다

과정

  • 레포지토리로부터 10개의 PR 목록을 가져옴
  • PR 중 본인이 작성한 것을 최대 3개 분석하는 이벤트를 동시에 발행한다
  • 이벤트 수신 시, AI 에게 PR 정보를 기반으로 질문을 생성한다

문제 원인

  • Ai 비용은 각 월을 기준으로 조회됨 (2025-8)
  • 만약 해당 월의 비용이 없다면 저장 후 반환함
    @Override
    public AiCharge getByYearAndMonth(int year, int month) {
        return chargeJpaRepository.findByYearAndMonth(year, month)
                .orElseGet(() -> {
                    AiCharge initializeCharge = new AiCharge(year, month, BigDecimal.ZERO);
                    return chargeJpaRepository.save(AiChargeEntity.from(initializeCharge));
                }).toDomainEntity();
    }
  • 만약 해당 월의 AI 비용이 아직 저장되어 있지 않고 + 레포를 등록하면 => 동시에 3개의 질문 분석 이벤트가 발행됨
  • 질문 분석 후, 해당 월의 AI비용을 탐색할 때 트랜잭션 범위에 따라 AI 비용을 3개의 트랜잭션 모두 찾지 못하여 모두 새로운 AiCharge를 만들어 저장 시도
  • 한개 트랜잭션의 AICharge는 저장되나, 나머지 AiCharge는 (year, month) 유니크 조건으로 인해 AiCharge 가 저장되지 못함
  • 2개의 PR이 분석되지 못하는 결과를 얻게 됨
Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions