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();
}
}
요약 정리
- 동기 처리는 요청에 대한 대기상태가 필요함, 비동기 처리는 백그라운드에서 처리하기 때문에 대기 상태가 없음.
(바로 다른 작업을 할 수 있음) - 비동기 처리는 사용자가 즉시적으로 요청에 대한 결과를 받을 수 없기 때문에 알림등과 연계 필요
- 비동기 처리에서 쓰래드풀, bean으로 등록된 excutor 등 자원 관리를 통한 성능최적화가 필수적
- 백그라운드에서 동작하기 때문에 에러 발생 시 확인 할 수 있는 방책 필요
'CS 정리' 카테고리의 다른 글
Java 대용량 데이터 처리 (5) - 캐시 계층 활용(L1, L2, DB) (1) | 2025.05.02 |
---|---|
Java 대용량 데이터 처리 (4) - 비동기 데이터 수집 (0) | 2025.04.29 |
Java wrapper class and caching, boxing & unboxing (0) | 2025.04.24 |
Java 대용량 데이터 처리 (2) - Stream 메모리 효율 높이기 (0) | 2025.04.20 |
Java 대용량 데이터 처리(1) - Cursor 방식 (0) | 2025.04.20 |