자바 퍼포먼스 튜닝
튜닝은 좋은 디자인과 프로그래밍 기법을 따르고, 병목현상을 피해 자바를 충분히 빠른 속도로 수행하도록 하는 것이므로, 최상의 결과를 내기 위해서는 반드시 필요한 것이다. 이 책에서는 포괄적이면서 꼭 필요한 튜닝 기법을 제시하여 성능 문제를 해결할 수 있도록 하고 있다. 즉, 예제에서 실용적인 튜닝 기법을 보여주고 있다는 것이 큰 특징이다. 세부적으로는 객체 생성을 줄여야 한다든지, 스트링을 배열로 바꾼다든지, 그 외 코드를 최적화할 수 있는 기법을 알려
- 저자 : 잭 시라지
- 번역 : 홍상욱
- 출간 : 2001-07-18
JAVA 개발자로서 중급 이상의 실력을 갖추고자 노력하는 엔지니어라면 꼭 참고해보아야 할 내용을 갖추고 있다.
모든 소프트웨어 개발에는 일정하게 따라야 할 순서가 있다. 일반적인 관점으로 이 순서를 정리해 보면 설계, 코드 개발, 테스트, 디버깅, 최적화, 배포 및 지원이라고 볼 수 있겠다. 실력 있는 개발자로 인정을 받고자 한다면 이 모든 과정에 대하여 어느 정도의 개념을 갖추고 있고 각 과정에 알맞은 작업을 수행할 수 있도록 노력해야 할 것이다.
현재 자바 언어는 현재 엔터프라이즈 환경에서 가장 각광 받는 개발 언어이고 또한, JAVA2 ME을 발표하여 임베디드 시스템에서도 주목 받는 솔루션으로 자리잡고 있다. 인터넷이나 엔터프라이즈 환경의 프로그램들은 동시에 접근하는 다수의 사용자에 의해 상당한 로드가 집중되어 최적화된 성능의 코드 작성이 매우 중요하다. 또한 임베디드 시스템의 경우, 역시 한정된 시스템 자원을 최대한 이용하기 위해 개발자의 코드 최적화 노력이 많이 요구되는 개발 분야이다. 대부분의 개발자들은 여러 개발 경험과 컴퓨터 공학에 근거한 지식을 통하여 자신만의 최적화 노하우를 가지고 있다. 하지만 정리되지 않은 머리 속의 지식들은 반드시 필요한 순간에 끌어 내어 적용하는 것은 쉬운 일이 아니며, 최적화를 적용해야 할 순간이 오기 전에 문제를 미리 파악하여 설계한다는 것은 쉬운 일이 아니다. 이 책은 개발자들이 위와 같은 어려움을 극복할 수 있도록 프로그램 개발 최적화 단계 및 설계 단계에서 반드시 참고해야 할 주요 가이드 라인을 제공하고 있다.
이 책은 자바 개발자를 대상으로 하여 필자의 경험을 토대로 프로그램의 성능을 향상시키기 위해 필요한 주요 최적화 방법과 여러 자료를 체계적으로 정리, 제공하고 있다. 단순한 자바 코드 작성만을 목표로 삼고 있는 개발자가 아니라면 꼭 한번 살펴보아야 할 것이다. 책의 수준으로 볼 때 자바 초보자를 대상으로 삼지는 않으며 기본적인 자바 언어에 대한 지식은 갖추고 있어야 할 것이다. 현재 자바의 기본을 파악한 개발자나 중급 정도의 실력을 갖추고 있는 개발자라면 일독을 권한다. 책의 내용을 간단히 살펴보기 위해 우선 전체적인 목차를 살펴보도록 하자.
1. 소개
2. 분석도구
3. JDK 개선점
4. 객체 생성
5. 스트링
6. 예외 처리, 캐스팅, 변수
7. 루프와 스위치
8. I/O, 로깅, 콘솔 출력
9. 정렬
10. 스레딩
11. 적합한 데이터 구조체와 알고리즘
12. 분산 컴퓨팅
13. 최적화할 시기는?
14. 운영체제와 네트워크 성능 향상
15. 추가 자료
소개 부분에서는 최적화에 대한 주요 개념과 전체적인 수행 방법을 설명하고 있다. 아직 최적화 과정을 실제로 적용해보지 않은 개발자라면 이 장은 매우 가치 있는 자료를 제공하고 있다. 물론, 최적화 과정을 경험해본 개발자라도 문서로 정리된 최적화에 대한 적용 방법을 살펴본다는 것은 매우 가치 있는 경험일 것이다.
"2장. 분석도구’에서는 최적화의 실제 결과를 확인하기 위하여 자바 개발자들이 사용할 수 있는 측정 방법을 여러 측면에서 제안하고 있다. 물론, 필자가 책에 서술한 듯이 유료로 구입할 수 있는 측정 프로그램을 사용하는 것이 가장 효율이 좋겠지만 기본적으로 갖추고 있는 환경에서 측정할 수 있는 방안을 소개한다.
‘3장. JDK 개선점’에서는 여러 가상머신 간에 있을 수 있는 성능상의 차이점을 설명하고 자바 컴파일러가 수행하는 코드 최적화 기법에 대하여 설명하고 있다. 자바에서 객체 생성과 소멸은 성능에 많은 영향을 미친다.
4장은 이러한 자바 객체 생성의 성능 저하 문제를 해결하기 위한 여러 가지 방안을 제공한다. 프로그램 개발 중에 가장 많이 다루는 데이터는 문자열로, 5장은 자바에서의 문자열 처리시 발생할 수 있는 성능 문제와 스트링 클래스의 성능 문제를 다루고 있다. 자바에서 예외 상항 처리는 성능을 많이 저하시키는 요소이다. 또한, 서로 다른 데이터형간에 변환하는 캐스팅 역시 성능 저하의 주요 요소이다.
6장에서는 이러한 예외 처리, 캐스팅 문제와 여러 변수 타입 중에 어떠한 변수 타입이 가장 성능에 좋은지를 살펴본다. 프로그램의 성능을 결정하는 가장 중요한 코드 요소는 루프이다. 반복적인 동작이 계속적으로 이루어지기 때문에 루프에서 성능이 떨어지는 코드를 사용하면 그 부분이 병목점이 될 가능성이 크다.
7장에서는 이러한 루프에서의 성능 향상 방법과 스위치 및 재귀 함수의 성능 문제도 살펴 본다. 8장은 일반적인 프로그램에서 성능을 떨어트리는 주요 요소인 입출력 과정에 대한 성능 향상 방법을 살펴본다. 9장은 JDK가 제공하는 정렬 알고리즘을 향상시키는 방법과 효율적인 정렬 알고리즘에 대한 정보를 제공하고 있다. 어느 정도 규모의 소프트웨어를 작성하게 되면 대부분 다중스레드를 사용하여 성능 향상을 꾀한다.
10장은 이러한 다중스레드 처리시 중요한 경주 상태 및 데드락, 동기화 문제 등에 대해 살펴보고 스레드 풀을 이용한 성능 향상 기법을 소개한다. 이러한 기법들은 특히, 다중 사용자 지원 서버 프로그램 작성시 매우 중요한 내용이라고 보인다.
11장은 9장에 이어 JDK가 제공하는 여러 알고리즘의 성능을 비교하고 향상시키는 기법들을 소개하고 있다. 또, JDK가 제공하지 않는 다른 알고리즘을 구현하여 성능을 향상시키는 몇 가지 예제를 제공한다.
12장에서는 자바를 이용하여 분산 애플리케이션 개발시 어떻게 성능을 향상시킬 수 있는지 간단하게 정리하고 있다. 실질적인 개발 예제를 제공하지 않아 약간 아쉬운 감이 있지만 체계적으로 정리된 자료만으로도 충분한 가치는 있다고 보인다.
13장에서는 지금까지 살펴본 모든 최적화 방안들을 개발 단계에서 언제 어떻게 적용하는 것이 가장 좋은지 정리하고 있다. 14장은 프로그램이 동작하는 운영 체제와 네트워크 환경의 최적화에 대한 주요 개념을 소개한다. 마지막으로, 독자들의 심화 학습을 위한 여러 자료들을 정리하여 제공한다.
전체적인 책의 구성을 보면, 소프트웨어 개발 과정에서 언제나 참고할 수 있도록 각 장의 마지막 부분에 ‘성능 확인표’를 제공하고 있다. 이 성능 확인표를 개발자들은 각 단계별 최적화를 위한 가이드 라인으로 적용할 수 있을 것이다. 각 장은 내용적으로 연관 관계가 많지 않으므로 필요에 따라 원하는 내용만 우선 살펴볼 수도 있다. 연관 관계가 있는 내용에서는 필자가 언제나 해당 장을 언급하여 그때마다 살펴볼 수 있도록 하였다. 결론적으로 이 책은 단순히 한 번 정독하여 최적화 기법을 습득하기 위한 구성이라기보다는 전체적인 최적화의 개념을 우선적으로 습득한 후 프로그램 개발 및 설계 과정 중에 지속적으로 참고하여 최적화에 도움이 될 수 있는 참고서의 역할을 할 수 있다고 본다.
책의 편집 상태는 한빛미디어의 다른 책과 마찬가지로 군더더기 없는 심플한 편집을 하여 책을 읽는 데 편암함을 주었다. 번역자가 역자 서문에 밝혔듯이 이 책은 역자의 첫번째 번역서이다. 그래서인지 원문 자체의 번역에 집중하여 약간 껄끄러운 번역이 된 부분이 보이나 전체적인 내용 이해에는 큰 문제가 되지는 않았고 뒤로 진행될수록 번역된 글이 읽기 편안해지는 특징이 보였다. 전체 내용에서 약간의 오탈자를 발견하였는데, 이 오탈자는 한빛미디어의 해당 웹페이지에서 볼 수 있으리라 기대한다. 그러나 내용을 이해하는 데 큰 문제를 끼치는 부분은 아니었다.
김원일(wonkim@gtran.co.kr)님은 현재 GTRAN Korea 데이터 S/W팀 전임연구원이자 월간 마이크로소프트웨어의 필자로 활발하게 활동하는 전문 개발자입니다.