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
- 공부
- kotlin coroutine
- PETERICA
- IntelliJ
- APM
- Java
- 정보처리기사 실기
- 오블완
- kotlin
- minikube
- 정보처리기사실기 기출문제
- mysql 튜닝
- CKA 기출문제
- 티스토리챌린지
- Pinpoint
- 기록으로 실력을 쌓자
- Spring
- 정보처리기사 실기 기출문제
- kotlin spring
- MySQL
- aws
- CKA
- CloudWatch
- Kubernetes
- 코틀린 코루틴의 정석
- kotlin querydsl
- AI
- Elasticsearch
- AWS EKS
- Linux
Archives
- Today
- Total
피터의 개발이야기
[Kotlin] Kotlin Spring에서 API 요청 시 응답 후 비동기 처리, 코루틴 비동기처리 본문
Programming/Kotlin
[Kotlin] Kotlin Spring에서 API 요청 시 응답 후 비동기 처리, 코루틴 비동기처리
기록하는 백앤드개발자 2024. 7. 23. 10:10반응형
ㅁ 들어가며
ㅇ Kotlin Spring에서 API 요청에 대해 즉시 성공 응답을 반환하고, 비동기로 특정 작업을 실행하는 코드를 작성해았다.
ㅇ @Async 대신 Kotlin의 코루틴을 사용하여 비동기 처리를 구현하였다.
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RestController
@RestController
class AsyncTaskController(private val asyncTaskService: AsyncTaskService) {
@PostMapping("/api/task")
fun startTask(@RequestBody request: TaskRequest): ResponseEntity<TaskResponse> {
// 요청 받은 작업을 비동기로 실행
CoroutineScope(Dispatchers.Default).launch {
asyncTaskService.performLongRunningTask(request)
}
// 즉시 성공 응답 반환
return ResponseEntity.ok(TaskResponse("Task started successfully"))
}
}
class TaskRequest(val taskId: String, val taskData: String)
class TaskResponse(val message: String)
class AsyncTaskService {
suspend fun performLongRunningTask(request: TaskRequest) {
// 여기에 시간이 오래 걸리는 작업을 구현
println("Starting long running task: ${request.taskId}")
// 예: 대용량 파일 처리, 외부 API 호출 등
kotlinx.coroutines.delay(5000) // 5초 대기 (예시)
println("Completed long running task: ${request.taskId}")
}
}
ㅇ CoroutineScope(Dispatchers.Default).launch를 사용하여 비동기 작업을 시작한다.
ㄴ 관련 정리 [kotlin] 코틀린 코루틴의 정석- CoroutineDispatcher
ㅇ Dispatchers.Default
ㄴ 대용량데이터를 처리하기 위해 CPU 사용량에 맞추어진 스레드풀이다.
ㄴ 입출력작업과 CPU바운드작업
ㅇ 컨트롤러는 작업 시작 후 즉시 성공 응답을 반환하여 클라이언트는 오래 기다리지 않고 응답을 받을 수 있다.
ㅇ AsyncTaskService의 performLongRunningTask 메서드는 suspend 함수로 선언되어 있어, 코루틴 내에서 실행된다.
ㅇ 실제 긴 작업은 performLongRunningTask 메서드 내에서 구현한다.
ㅇ 여기서는 예시로 5초 대기하는 코드를 넣었다.
ㅁ 주의점
ㅇ 비동기로 실행되는 작업의 결과나 상태를 클라이언트에게 알려주려면 추가적인 메커니즘이 필요할 수 있다.
ㅇ 대량의 요청이 들어올 경우 리소스 관리에 주의해야 한다.
반응형
'Programming > Kotlin' 카테고리의 다른 글
[Kotlin] Kotlin의 스프레드 연산자 (Spread Operator) 이해하기 (0) | 2024.07.26 |
---|---|
[Kotlin] Resilience4j로 서킷브레이커 패턴 구현하기 (2) | 2024.07.24 |
[Kotlin] Entity list에서 id 추출하기 (0) | 2024.07.22 |
[Kotlin] QueryDSL java.lang.NoSuchFieldError: TREATED_PATH (0) | 2024.07.20 |
[Kotlin] Spring에 MapStruct와 Lombok을 함께 사용할 때 isCompleted 필드가 null로 넘어오는 문제 (0) | 2024.07.19 |
Comments