CS 정리

Java 대용량 데이터 처리 (3) - 비동기 처리

문쿼리 2025. 4. 27. 02:09

3. 즉시응답 -> 비동기 예약 (10만 건 엑셀 다운로드)

즉시 응답 vs 비동기 예약 처리

  • 즉시 응답은 사용자가 요청을 보낸 후 즉시 결과를 반환하는 방식.
    그래서 대용량 데이터 처리 시 서버에 큰 부담을 주고, 응답 속도가 지연.
  • 비동기 예약은 사용자가 요청을 보내면 즉시 예약을 하고, 실제 데이터 처리 작업은백그라운드에서 비동기적으로 처리.
    이 방식은 서버 과부하를 방지하고, 사용자가 요청 상태를 기다리지 않아도 됨. (추후 알림 등 기능과 연계하여 요청완료)

비동기 처리 예제

Bad case: 동기 처리

public class SynchronousProcessing {
    public void processData() {
        // 대용량 데이터 처리
        processLargeData();		// 데이터 조회 및 출력 형식으로 컨버팅 등
        generateExcelReport();  // 엑셀 파일 생성
    }

    private void processLargeData() {
        // 시간 오래 걸리는 데이터 처리 로직
        try {
            Thread.sleep(10000);  // 10초간 대기
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    private void generateExcelReport() {
        // 엑셀 생성
        System.out.println("엑셀 파일 생성 중...");
    }
}

 

Good case: 비동기 처리

public class AsynchronousProcessing {
    private ExecutorService executorService = Executors.newSingleThreadExecutor();

    public void processDataAsync() {
        executorService.submit(() -> {
            processLargeData();  // 비동기적으로 데이터 처리
            generateExcelReport();  // 데이터 처리 후 엑셀 파일 생성
        });
        System.out.println("작업이 백그라운드에서 처리 중입니다.");
    }

    private void processLargeData() {
        // 시간 오래 걸리는 데이터 처리 로직
        try {
            Thread.sleep(10000);  // 10초간 대기
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    private void generateExcelReport() {
        // 엑셀 생성 로직
        System.out.println("엑셀 파일 생성 중...");
    }

    public static void main(String[] args) {
        AsynchronousProcessing asyncProcessing = new AsynchronousProcessing();
        asyncProcessing.processDataAsync();
    }
}

 

요약 정리

  1. 동기 처리는 요청에 대한 대기상태가 필요함, 비동기 처리는 백그라운드에서 처리하기 때문에 대기 상태가 없음.
    (바로 다른 작업을 할 수 있음)
  2. 비동기 처리는 사용자가 즉시적으로 요청에 대한 결과를 받을 수 없기 때문에 알림등과 연계 필요
  3. 비동기 처리에서 쓰래드풀, bean으로 등록된 excutor 등 자원 관리를 통한 성능최적화가 필수적
  4. 백그라운드에서 동작하기 때문에 에러 발생 시 확인 할 수 있는 방책 필요