Notice
Recent Posts
Recent Comments
Link
반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 김영한
- 자바스크립트
- kubernetes
- 스프링핵심원리
- 이차전지관련주
- 코딩테스트
- 자바
- ElasticSearch
- effectivejava
- 오블완
- 티스토리챌린지
- 예제로 배우는 스프링 입문
- Sort
- Effective Java
- java
- 알고리즘정렬
- 알고리즘
- Effective Java 3
- 엘라스틱서치
- 카카오 면접
- Spring
- 스프링부트
- 카카오
- 스프링 핵심원리
- JavaScript
- 클린아키텍처
- 이펙티브자바
- k8s
- 스프링
- 이펙티브 자바
Archives
- Today
- Total
Kim-Baek 개발자 이야기
Spring 비동기 Async 본문
Spring의 @Async: 쉽게 이해하기
@Async는 비동기 작업을 간단히 처리하도록 도와주는 Spring의 애노테이션입니다.
비동기란, 어떤 작업을 요청하고 그 작업이 끝날 때까지 기다리지 않고 바로 다음 작업을 진행하는 것을 말합니다.
예를 들어:
- 동기 작업: 요리를 하면서 밥솥이 밥을 다 지을 때까지 기다리는 것
- 비동기 작업: 밥솥에 밥을 맡기고, 기다리지 않고 동시에 반찬을 준비하는 것
Spring의 @Async를 사용하면 "밥솥에 밥을 맡기고 바로 반찬 준비" 같은 비동기 작업을 쉽게 구현할 수 있습니다.
@Async를 사용하는 방법
1. 준비 작업: 설정 파일에서 활성화
Spring에서 비동기 기능을 사용하려면 먼저 설정에서 이를 활성화해야 합니다.
설정 클래스에 @EnableAsync를 추가하면 됩니다.
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
@Configuration
@EnableAsync
public class AppConfig {
// 추가 설정이 필요하다면 여기에 작성
}
2. 비동기로 처리할 메서드에 @Async 추가
@Async를 메서드에 붙이면, 해당 메서드는 새로운 스레드에서 실행됩니다.
이렇게 하면 메서드를 호출한 쪽에서 기다릴 필요 없이 바로 다른 작업을 할 수 있습니다.
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
@Service
public class AsyncService {
@Async
public void performAsyncTask() {
System.out.println("비동기 작업 시작!");
try {
Thread.sleep(5000); // 5초간 기다리는 작업
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("비동기 작업 완료!");
}
}
3. 메서드 호출
다른 클래스에서 이 @Async 메서드를 호출하면 호출한 쪽에서는 기다리지 않고 바로 다음 작업을 진행합니다.
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@Controller
public class TestController {
@Autowired
private AsyncService asyncService;
public void executeTask() {
System.out.println("메서드 호출 시작!");
asyncService.performAsyncTask(); // 비동기 메서드 호출
System.out.println("메서드 호출 끝!");
}
}
4. 출력 결과
위 코드를 실행하면 다음과 같이 출력됩니다:
메서드 호출 시작!
메서드 호출 끝!
비동기 작업 시작!
비동기 작업 완료!
- performAsyncTask()는 비동기로 처리되기 때문에 메서드 호출 끝!이 먼저 출력됩니다.
- 비동기 작업은 뒤에서 따로 실행됩니다.
주의할 점
- @Async는 public 메서드에서만 동작합니다.
- Spring의 AOP를 사용하기 때문에 private 메서드에서는 동작하지 않습니다.
- 메서드 반환값
- 반환값이 없는 경우에는 void로 설정합니다.
- 반환값이 있는 경우에는 CompletableFuture 같은 비동기 객체를 사용해야 합니다.
@Async public CompletableFuture<String> performTaskWithResult() { return CompletableFuture.completedFuture("작업 완료!"); }
- 별도의 스레드 풀 설정 가능
- 기본적으로 Spring은 SimpleAsyncTaskExecutor를 사용하지만, 성능 최적화를 위해 **스레드 풀(Thread Pool)**을 설정할 수 있습니다.
요약
- @Async는 간단히 비동기 작업을 처리하도록 도와줍니다.
- 설정(@EnableAsync)만 추가하면 비동기 메서드를 쉽게 구현할 수 있습니다.
- 호출한 쪽에서는 기다릴 필요 없이 바로 다음 작업을 진행할 수 있습니다.
비동기 처리가 필요한 곳에서 매우 유용하게 사용할 수 있습니다! 😊
반응형
Comments