홈 › 고급 › 04 / 10

Stream API와 병렬 처리

섹션 7진행 0 / 10

스트림(Stream) API — 선언적 데이터 파이프라인과 지연 평가

스트림이 컬렉션과 어떻게 다른지(내부 반복, 지연 평가, 일회성), 중간/최종 연산과 Collectors 를 자유자재로 조합하고, 병렬 스트림이 언제 이득이고 언제 손해인지 판단해 주문 집계·로그 파싱 같은 실무 데이터 처리를 작성할 수 있게 됩니다.

1. 왜 배우는가

실무 자바 코드의 데이터 처리는 대부분 "컬렉션을 받아 → 걸러내고 → 변환하고 → 묶어서 → 새 컬렉션이나 요약값을 만드는" 일입니다. 고객별 매출 합계, 월별 주문 건수, 카테고리별 평균 단가, 실패한 로그만 추출 — for 문과 if, 임시 Map 으로 짜면 20줄이고 의도가 코드에 묻힙니다.

스트림으로 짜면 groupingBy(Order::customer, summingLong(Order::amount)) 한 줄이고, 읽는 사람이 "고객별로 금액을 합친다"를 바로 읽습니다.

스트림은 JPA 결과 후처리, REST 응답 DTO 변환, 배치 파일 처리, 테스트 데이터 조립 등 모든 계층에서 쓰입니다. 그러나 원리를 모르면 함정에 빠집니다. 스트림을 두 번 쓰려다 IllegalStateException, peek 이 실행되지 않아 당황, toMap 에서 키 충돌로 운영 장애, parallelStream() 을 붙였더니 오히려 느려지거나 결과가 깨지는 일 — 전부 지연 평가와 병렬 처리 원리에서 비롯됩니다.

이 레슨은 "어떤 메서드가 있다"보다 왜 그렇게 동작하는가(지연 평가, 파이프라인 융합, ForkJoinPool 분할)에 집중합니다. 이를 알면 스트림 API 문서를 읽지 않아도 동작을 예측할 수 있습니다.