관리 메뉴

피터의 개발이야기

[JAVA] Stream의 병렬 처리 장점, Parallel Stream 본문

Programming/JAVA

[JAVA] Stream의 병렬 처리 장점, Parallel Stream

기록하는 백앤드개발자 2024. 6. 15. 10:10
반응형

ㅁ 들어가며

ㅇ 멀티 스레드, 병렬처리에 관한 개발 이야기는  parallelStream을 이용한 방식이었다.

[Spring] parallelStream, Intercom 데이터 백업하기에서 페이징처리로 속도제한이 되어 있는 intercom의 데이터를 병렬처리로 다운로드 속도를 극복했던 과정이다.

ㅇ 멀티 스레드에 관한 글, [JAVA] JDK21, Virtual Thread, Continuation에 대한 이해[kotlin] 코틀린 코루틴의 정석 - 코루틴의 동작 원리(Coroutine과 Continuation)을 작성하면서 Java Stream의 병렬 처리 장점에 대해서 다시 생각하게 되었다.

 

ㅁ Java Stream의 병렬 처리 장점

ㅇ Java 8부터 도입된 Stream API는 함수형 프로그래밍 방식으로 데이터를 처리한다.

Stream API의 핵심 기능 중 하나는 멀티스레드를 이용한 병렬 처리 기능이다.

 

ㅁ 병렬 처리란 무엇인가?

ㅇ 병렬 처리란 여러 개의 작업을 동시에 수행하는 처리 방식이다. 

ㅇ 멀티코어 CPU와 같은 하드웨어를 활용하여 여러 작업을 분산시켜 처리함으로써 처리 속도를 향상시킬 수 있다.

 

ㅁ Stream의 병렬 처리 장점

ㅇ 자연스러운 표현: Stream API는 데이터 처리를 순차적인 흐름으로 표현하도록 설계되었다. 이는 병렬 처리를 명시적으로 코딩하지 않고도 자연스럽게 병렬 처리를 수행할 수 있도록 한다.

ㅇ 내부적인 병렬 처리: Stream API는 구현체에 따라 병렬 처리를 최적화하도록 설계되었다. 개발자는 직접 병렬 처리 알고리즘을 고민할 필요 없이 Stream API를 사용하면 자동으로 병렬 처리가 수행됩니다.

ㅇ 다양한 병렬 처리 유형 지원: Stream API는 parallel() 메서드를 통해 병렬 처리를 명시적으로 활성화할 수 있으며, forEachParallel() 메서드와 같은 병렬 처리 전용 메서드를 제공한다. 또한, StreamPipeline 인터페이스를 통해 커스텀 병렬 처리 로직을 구현할 수도 있다.

ㅇ 성능 향상: 병렬 처리를 활용하면 CPU 코어 수만큼 처리 속도가 향상될 수 있다. 특히, 데이터 양이 많고 I/O 작업이 적은 경우 병렬 처리의 효과가 더욱 뚜렷하게 나타납니다.

 

ㅁ Stream 병렬 처리 활용 사례

Stream API의 병렬 처리 기능은 다음과 같은 다양한 상황에서 활용될 수 있다.

 

ㅇ 대규모 데이터 처리: 수백만 또는 수천만 개의 데이터 레코드를 처리하는 경우 Stream API의 병렬 처리 기능을 사용하면 처리 속도를 크게 향상시킬 수 있다.

ㅇ 머신 러닝: 머신 러닝 알고리즘은 일반적으로 대량의 데이터를 처리해야 하기 때문에 Stream API의 병렬 처리 기능이 매우 유용하게 활용됩니다.

ㅇ 데이터 분석: 데이터 분석 작업에서도 Stream API의 병렬 처리 기능을 사용하여 데이터 집계, 필터링, 변환 등을 빠르게 수행할 수 있다.

 

ㅁ 주의 사항

Stream API의 병렬 처리 기능을 사용할 때는 다음과 같은 사항에 주의해야 한다.

ㅇ 데이터 공유: 병렬 처리에서 여러 스레드가 동시에 데이터에 접근할 수 있기 때문에 데이터 공유 문제에 주의해야 한다. 스레드 간의 데이터 충돌을 방지하기 위해 적절한 동기화 방식을 사용해야 한다.

I/O 바운드 작업: 데이터 처리 작업이 I/O 작업에 의해 병목 현상이 발생하는 경우 병렬 처리의 효과가 제한적일 수 있다.

ㅇ 작업 크기: 병렬 처리 작업의 크기가 너무 작으면 오히려 오버헤드가 발생하여 성능이 저하될 수 있다. 일반적으로 작업 크기가 일정 수준 이상인 경우 병렬 처리가 효과적이다.

 

ㅁ 마무리

ㅇ Java Stream API의 병렬 처리 기능은 데이터 처리 속도를 향상시키고 개발 생산성을 높이는 데 매우 유용한 도구이다. 
ㅇ 하지만, 병렬 처리의 특성을 이해하고 주의 사항을 고려하여 적절하게 활용해야 한다.
ㅇ Stream API의 병렬 처리 기능과 함께 JPA, MyBatis와 같은 ORM 프레임워크를 활용하면 더욱 효율적이고 생산적인 데이터 처리 환경을 구축할 수 있다.

 

ㅁ 함께 보면 좋은 사이트

[JAVA] Stream, 스트림과 병렬처리

[Java] 병렬 스트림(ParallelStream) 사용 방법 및 주의사항

반응형
Comments