2020.12.13 - [프로그래밍언어/JAVA] - Thread
<JAVA>Thread
Os 수업을 들었다면 알거라고 생각하지만 한번더 정리하는 개념으로 Process 실행중인 프로그램OS로부터 메모리르 할당 받음 Thread실제 프로그램이 수행되는 작업의 최소 단위하나의 프로세스에는
kwaksh2319.tistory.com
스레드 개념을 한번쯤 보면 좋을것같습니다 ㅎ 둘은 좀 다르지만 일단 둘다 비동기 처리입니다.(기초가 중요하다!)
@Async 어노테이션은 주로 Spring Framework에서 사용되며, 메서드를 비동기적으로 실행할 수 있도록 해줍니다. 이를 통해 긴 작업이나 I/O 작업 등을 별도의 스레드에서 실행하여, 호출하는 쪽에서는 즉시 다음 작업을 진행할 수 있게 됩니다.
비동기 처리 활성화:
@Async를 사용하기 전에, 애플리케이션 설정에 @EnableAsync를 추가하여 비동기 처리를 활성화해야 합니다.
@Configuration
@EnableAsync
public class AsyncConfig {
// Executor 설정 등 추가 설정 가능
}
메서드에 적용:
비동기 처리가 필요한 메서드 위에 @Async 어노테이션을 붙입니다. 이 메서드는 호출한 스레드와 별도로, 스레드 풀에서 실행됩니다.
@Service
public class MyService {
@Async
public void executeAsyncTask() {
// 시간이 오래 걸리는 작업
}
}
반환 타입:
- void: 결과를 기다리지 않을 경우 사용합니다.
- Future / CompletableFuture: 비동기 작업의 결과를 받아보고 싶을 때 사용합니다.
@Async
public CompletableFuture<String> asyncMethodWithReturn() {
// 처리 로직
return CompletableFuture.completedFuture("완료");
}
주의 사항:
- public 메서드여야 프록시를 통한 AOP 적용이 제대로 이루어집니다.
- 같은 클래스 내부에서 호출하는 경우에는 프록시가 적용되지 않아 비동기 처리가 동작하지 않을 수 있으므로, 별도의 빈으로 분리하여 호출하는 것이 좋습니다.
- 스레드 풀 설정을 커스터마이징하여, 애플리케이션에 맞는 스레드 수와 동작 방식을 조정할 수 있습니다.
주의사항
- 스레드 관리: 비동기 처리 시에는 스레드 풀이나 이벤트 루프 등을 적절하게 설정해, 자원 누수나 과도한 스레드 생성 문제를 피해야 합니다.
- 동시성 이슈: 여러 스레드에서 동시에 데이터에 접근할 경우 동기화 문제가 발생할 수 있으므로, 상태 관리에 주의해야 합니다.
- 프레임워크 선택: Java에서는 Netty, Spring WebSocket, Reactor 등 비동기 처리를 지원하는 프레임워크를 활용하면 편리합니다.
간단히 알아봤는데요. 음 뭐 스레드 사용해서 비동기 처리하는 부분인데요. 이론은 알아도 개발하면서 이해하는 것 만큼 좋은것 없는것같습니다.
다음에 소켓통신을 통해서 개발한 부분을 비동기 처리를 해보도록 하겠습니다. ㅎㅎ ( 실은 회사에서 업무할때 자동화 시스템 추가 개발하는데 async를 써보는데 파일업로드가 비동기 처리가 안되더라고요 , 이유가 파일 업로드의 경우 클라이언트와의 연결이 파일 전송 완료까지 유지되어야 하고, 해당 요청 자체가 블로킹 I/O를 필요로 하므로, 비동기 처리의 효과가 제한이 되더라거요 ㅎ 사실 자주 안써보다보니 이번에 같이 공부하면서 자세히 다뤄보도록 하겠습니다. )
'웹 > Spring' 카테고리의 다른 글
@Builder? 와 Bulder 패턴? (0) | 2025.02.12 |
---|---|
Reflection api GetMethod (0) | 2024.04.20 |
Spring Data JPA - 구성 (0) | 2024.02.25 |
Spring Data JPA- repository 인터페이스의 정의 (0) | 2024.02.18 |
Spring Data JPA - 핵심 개념 (0) | 2024.02.03 |