작업을 순차적으로 실행하는 동기식 프로그래밍은 코드 흐름을 이해하기 쉽지만 장시간 실행되는 작업이 있을 경우 전체 프로그램의 응답성을 저하시킬 수 있다. 반면 비동기식 프로그래밍은 작업을 병렬로 실행하여 하나의 작업이 완료될 때까지 다른 작업을 기다리지 않는다. 이를 통해 프로그램의 응답성을 높이고, 시스템 자원을 효율적으로 사용할 수 있다.
@Test
fun sync() {
println("시작")
executeLongMethod()
println("종료")
}
@Test
fun async() {
println("시작")
val thread = Thread { executeLongMethod() }
thread.start()
println("종료")
thread.join()
}
private fun executeLongMethod() {
Thread.sleep(3000)
println("긴 작업 완료")
}
sync 메서드의 경우
async 메서드의 경우
@Async 어노테이션은 스프링에서 제공하는 에노테이션으로, 특정 메서드를 비동기로 실행할 수 있게 도와준다. 이를 통해 특정 메서드를 메인 스레드와 별개로 처리할 수 있게 해준다.
[@Async의 특징]