해결된 질문
작성
·
39
0
- 학습 관련 질문을 남겨주세요. 질문을 상세히 작성하면 더 좋습니다.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
JDBC, File I/O와 같은 블로킹 I/O작업들은 코루틴에서 수행시 스레드를 반납하지 않는걸로 알고있습니다!
그렇다면 대부분의 작업이 JDBC를 통한 RDB조회라면 코루틴을 통해서 크게 가져갈 수 있는 이점은
코드의 간결함
구조화에서 나오는 장점
예외처리
작업 제어
이정도 되고, 이러한 환경에서는 스레드 반납을 통한 이점은 아쉽지만 크게 못챙겨가는 걸까요?
답변 2
0
estatecloudinc님 안녕하세요. 지식 공유자 조세영입니다.
네 맞습니다. 만약 라이브러리 내부에서 스레드 양보를 하지 않는다면 스레드 반납을 통한 이점이 사라집니다. 일부 라이브러리의 경우 suspend fun으로 선언된 api를 노출하지만 내부에서는 blocking i/o를 하는 경우도 있습니다.
이 경우 말씀해주신 두가지가 가져갈 수 있는 이점이 됩니다.
0
안녕하세요, 인프런 AI 인턴입니다. estatecloudinc님.
JDBC나 File I/O와 같은 블로킹 I/O 작업은 스레드를 차단하여 진행되므로, 이러한 작업이 대부분인 상황에서 코루틴의 비동기적 특성과 스레드 반납의 이점은 제한적일 수 있습니다. 코루틴을 통해 얻을 수 있는 주된 장점은 다음과 같습니다:
코드의 간결함: 코루틴은 비동기 코드를 보다 동기적인 스타일로 작성할 수 있어, 복잡한 비동기 로직도 간결하고 직관적으로 구현할 수 있습니다. 이는 코드를 읽고 유지보수하는 데 큰 도움이 됩니다.
구조화된 동시성: 코루틴은 구조화된 동시성 제공으로, CoroutineScope 등을 사용하여 작업의 생명 주기를 쉽게 관리할 수 있게 합니다. 이는 작업의 시작과 종료를 명확히 할 수 있으며, 예외 처리가 쉽고 안전한 프로그램 작성을 지원합니다.
예외 처리 및 작업 제어: 코루틴은 try-catch 블록을 사용하여 쉽게 예외를 처리할 수 있으며, 코루틴을 취소하거나 시간을 제한하여 제어할 수 있습니다. 이는 특히 비동기 작업에서 유용하며, 코루틴의 계층적 구조 덕분에 자연스럽게 흐름을 제어할 수 있습니다.
JDBC와 같은 블로킹 호출에서는 스레드 반납의 이점이 크지 않지만, 다른 비동기 작업에서 반납을 통해 성능을 극대화할 수 있습니다. 따라서 JDBC 작업과 함께 비동기 네트워크 호출이나 파일 작업 등이 혼용되는 경우, 코루틴이 주는 이점을 더 많이 누릴 수 있습니다.
JDBC 같은 블로킹 자료 접근이 많은 애플리케이션은 코루틴보다 Ktor나 Spring WebFlux 등의 리액티브 프로그래밍 모델이 더 적합할 수 있습니다. 하지만, 코루틴으로 코드의 구조와 관리를 개선할 수 있으며, 비동기식 API가 적용되는 부분에서는 큰 이점을 얻을 수 있습니다.
관련된 질문과 토론은 코루틴과 리액티브 프로그래밍 비교 (강의 링크) 등의 자료들을 참조하시면 더 많은 인사이트를 얻을 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
답변 감사합니다!