[졸프]Spring Boot에서 동기 vs 비동기 + 이벤트 기반 처리 (유저 벡터 생성 사례)

ssun·2025년 8월 12일

졸업프로젝트

목록 보기
13/21

이번에 졸프에서 비동기+이벤트 방식으로 ML 벡터 생성 호출을 하게 되었다. 근데 동기와 비동기의 차이를 제대로 알지 못해서 공부해보기로 결정!

1. 동기(Synchronous) vs 비동기(Asynchronous)

동기 (Synchronous)

  • 요청 → 응답이 순차적으로 진행됨.
  • 이전 작업이 끝나야 다음 작업이 시작.
  • 호출한 쪽이 결과가 올 때까지 대기.
  • 예: 은행 창구에서 번호표를 뽑고 차례를 기다리는 상황.
// 동기 예시
String data = callApi();  // 응답이 올 때까지 대기
System.out.println(data); // 이후 코드 실행

장점

  • 구현이 단순, 직관적
  • 순서 보장 쉬움

단점

  • 느림 (대기 시간 ↑)
  • 긴 작업이 전체를 막음

비동기 (Asynchronous)

  • 요청 후 대기 없이 다음 작업 진행.
  • 결과가 준비되면 콜백/이벤트/Future 등을 통해 전달.
  • 예: 음식점에서 주문 후, 음식 나오면 벨로 알림.
// 비동기 예시
CompletableFuture.supplyAsync(() -> callApi())
    .thenAccept(data -> System.out.println(data));

장점

  • 빠른 처리 가능
  • 병렬 처리로 자원 효율 ↑

단점

  • 코드 복잡도 ↑
  • 예외 처리 어려움
구분동기(Sync)비동기(Async)
실행 방식순차 실행요청 후 대기 없이 다음 실행
응답 대기응답 받을 때까지 대기응답이 오면 알림
구현 난이도쉬움복잡
장점직관적, 순서 보장빠른 처리, 자원 효율
단점느림, 자원 낭비복잡성, 예외 처리 어려움

2. 이번 작업: 비동기 + 이벤트 기반 유저 벡터 생성

요구사항

  • 회원가입 설문 완료 또는 도서 READ 상태 등록 시,
    ML 서버에 유저 벡터 생성 API 호출 필요.
  • API 호출 지연으로 인한 사용자 응답 속도 저하 방지 → 비동기 처리
  • DB 저장 성공 후에만 호출 → 이벤트 기반 처리

설계 흐름

  • 도서 READ 상태 저장 시 → 이벤트 발행
  • 비동기 리스너에서 ML 서버 API 호출
  • AFTER_COMMIT 단계에서 호출 → DB 롤백 시 호출 방지

롤백이란?
데이터베이스에서 실행한 작업을 취소하고, 이전 상태로 되돌리는 것

트랜잭션과의 관계
트랜잭션(Transaction): DB 작업을 하나의 단위로 묶은 것
롤백(Rollback): 트랜잭션을 취소하고 이전 상태로 되돌림
커밋(Commit): 트랜잭션을 확정하고 변경 내용을 저장

3. 적용 효과

  • API 호출 지연 제거 → 사용자 응답 속도 향상
  • DB 트랜잭션 커밋 후 호출 → 데이터 정합성 보장
  • 스레드풀 활용 → 안정적인 비동기 처리
profile
안녕하세요! 백다현입니다

0개의 댓글