확장성은 CPU, 메모리, 디스크, I/O 처리 장치 등의 추가적인 장비를 사용해 처리량이나 용량을 얼마나 쉽게 키울 수 있을지를 말한다.
병렬 프로그램 환경에서 확장성을 충분히 가질 수 있도록 애플리케이션을 설계하고 튜닝하는 방법은 기존에 해오던 일반적인 성능 최적화 방법과 다른 부분이 많다. 성능을 높이기 위해 튜닝하는 작업을 하는 경우 그 목적은 어쨌건 동일한 일을 더 적은 노력으로 하고자 하는 것이다.
성능이라는 단어에 포함된 '얼마나 빠르게'와 '얼마나 많이'라는 두 가지의 의미는 완전히 다른 뜻을 가지며, 심지어는 서로 화합할 수 없는 상황도 발생한다. 더 높은 확장성을 확보하거나 하드웨어 자원을 더 많이 활용하도록 하다 보면, 앞서 큰 작업 하나를 작은 여러 개의 작업으로 분할해 처리하는 것처럼 개별 작업을 처리하는 데 필요한 작업의 양을 늘리는 결과를 얻을 때가 많다. 우습게도 단일 스레드 애플리케이션에서 사용하던 성능 개선 방안은 대부분 확장성 측면에서 효과적이지 않다.
서버 애플리케이션을 만들 때는 성능의 여러 가지 측면 가운데 '얼마나 빠르게'라는 측면보다 '얼마나 많이'라는 측면, 즉 확장성과 처리량과 용량이라는 세 개의 측면을 훨씬 중요하게 생각하는 경우가 많다.
참조 도서: 멀티코어를 100% 활용하는 자바 병렬 프로그래밍 p299~p230
'자바' 카테고리의 다른 글
CoroutineScope (0) | 2025.03.25 |
---|---|
스레드 비용 (1) | 2025.03.12 |
세마포어 (0) | 2025.03.06 |
Kotlin Data Classes (0) | 2025.03.04 |
Thread Pool 정리 (1) | 2025.01.01 |