소프트웨어 엔지니어라면 누구나 한 번쯤 내가 작성한 소프트웨어 성능을 의심하고 고민하며 밤을 지새워 본 적이 있을 것입니다. 고도화된 프레임워크와 수많은 오픈소스를 활용하며, 사용자 다수가 이용하는 소프트웨어를 개발하는 엔지니어에게는 더욱 민감한 문제가 아닐 수 없을 것입니다. 역자의 짧은 경력 안에서도 소프트웨어를 개발하면서 안개가 낀 듯 관측하기 어렵고, 원인을 집어내기 까다로운 성능 문제들을 만나 두려움에 가슴이 뛰었던 날을 기억합니다. 모순적이게도 원인을 관측하기 어렵고 해결법이 모호해 나아가기 힘든 상황일수록 오히려 자연히 해소되는 천운은 더욱 피하고 싶었습니다.
저자는 우리가 피하고 싶은 이 안개가 걷히는 방법을 책 속에서 제시합니다. 소프트웨어 성능에 영향을 주는 4가지 근본이 되는 하드웨어 자원을 설명하고 이들의 상호작용의 이해와 구조적인 분석을 통해 성능의 병목을 가시적으로 확인하는 방법과 더불어 해결법을 서술합니다. 그뿐만 아니라, 다양한 커널 도구들과 함께 KUtrace를 활용해 잠재적인 문제를 찾아내는 방법도 독자에게 제공합니다.
이 책은 저자가 하드웨어와 소프트웨어의 상호작용을 이해하며 성능을 개선하기 위해 보내온 수많은 세월의 결과를 집대성한 책이기도 합니다. 추상적인 개념만을 소개하는 것이 아닌, 구체적인 사례를 제시함으로써 독자들은 이 글을 통해 저자의 경험에 공감하며 행간에 담긴 내용을 이해할 수 있을 것입니다.
이 책을 한국어로 옮기는 과정 자체만으로도 짧은 제 경력에 큰 영향을 주는 값진 경험이 됐습니다. 안개가 낀 듯한 제 소프트웨어는 현재도 다름이 없겠지만, 그 안개 속을 나아가는 방법을 알게 됐고, 뿌연 상황 속에서 어떤 곳에 초점을 맞춰야 할지 생각할 수 있는 힘을 얻게 됐습니다. "A man should look for what is, and not for what he thinks should be(존재할 것이라고 믿는 것이 아니라 찾아내야 한다)."라고 저자가 책 속에 인용했던 알베르트 아인슈타인의 말처럼 흔적을 남기고 그 흔적을 통해 원인을 찾아 개선해내는 유능한 엔지니어가 가는 길을 이 경험과 함께 좇고자 합니다.