안녕하세요 devwriter입니다. 오늘은 [자바 잘 읽는 법] 책에 대한 리뷰를 작성하겠습니다.
책은 크게 트러블슈팅 기본 테크닉, 트러블슈팅 고급 테크닉, 대규모 시스템의 트러블슈팅, 부록으로 나뉘어 있습니다.
트러블슈팅 기본 테크닉
먼저 트러블슈팅이란 무엇일까요?
위키백과에 따르면 트러블슈팅은 다음과 같이 정의되어 있습니다.
트러블슈팅(troubleshooting)은 문제 해결의 일종으로, 망가진 제품, 또는 기계 시스템의 망가진 프로세스를 수리하는 일에 주로 적용된다. 문제 해결을 위해 문제의 원인을 논리적이고 올바르게 찾는 일이며 제품이나 프로세스의 운영을 재개할 수 있게 한다. 트러블슈팅은 증상 식별에 필수적이다.
이렇듯 트러블슈팅은 문제를 해결하는 과정의 일종이며, 실제 서비스가 돌아가는 상황에서의 장애를 수리하기 위해서는 트러블슈팅을 어떻게 하는지 알아두어야 할 필요가 있습니다.
그렇지만 초심자 분들은 자바 트러블슈팅을 어떻게 해야 하는지 감이 오지 않고, IDE의 디버깅 정도만이 그 기능을 해줄 수 있겠다고 생각하기 쉽습니다. 이 책을 읽기 전의 저 또한 트러블슈팅 = 디버깅으로만 알고 있었습니다.
바로 이러한 문제를 덜어주기 위해, 이 책에서는 트러블슈팅을 위한 코드 조사 기법으로는 디버깅만 있는 것이 아니라 프로파일링, 메모리 상태 분석, 스레드 상태 분석 등 다양한 조사 기법이 있음을 알려줍니다.
더불어 운영 중인 프로그램을 원격으로 검사하는 방법, 디버깅을 더 효율적으로 진행할 수 있는 방법, 로그를 남기고 추론하는 방법 등에 대해서도 알려줍니다.
트러블슈팅 고급 테크닉
이 챕터에서는 VisualVM과 JProfiler 도구를 이용하여 더 고급 정보를 이끌어낼 수 있는 방법을 알려줍니다. 프로그램을 활용하여 진행하는 만큼, 기본 테크닉에서는 책을 읽는 것만으로 충분히 이해할 수 있었으나 이 장에서는 책의 내용대로 직접 실습을 해 봐야 더 이해하기 쉬웠습니다.
VisualVM과 JProfiler를 통해서는 프로그램을 실행할 때 CPU가 얼마나 소모되는지, 힙 메모리는 얼마나 사용되는지 등을 감시할 수 있으며, 데이터베이스에게 요청을 얼마나 보냈는지의 정보도 가져올 수 있음을 보여줍니다. 저 또한 이 부분을 참고하여 이전에 쓴 글인 자바 성능 문제 개선 글에서 성능 비교를 분석하였습니다.
또한 컴퓨터공학의 운영체제 내용 중 생산자-소비자 예시가 있는데요, 이 부분을 코드로 실행해 보며 그동안 이론으로만 알았던 지식을 체화할 수 있는 과정을 얻어가실 수 있습니다.
대규모 시스템의 트러블슈팅
이 장에서는 배포된 앱의 동작을 조사하는 방법에 대해서 알려줍니다. HTTP 통신 과정을 관찰하고, 모니터링을 왜 해야 하는지 등에 대한 내용이 작성되어 있습니다.
그동안 모니터링 도구라면 프로메테우스와 그라파나 정도만 이름으로 알고 있었는데, 이것들 말고도 다른 모니터링 도구가 있음을 알게 되었고 모니터링의 필요성에 대한 근본적인 이유를 알 수 있었습니다.
부록
부록에는 책을 읽으며 필요한 스레드, 자바 메모리 관리 체계에 대한 이해를 도와주도록 글이 작성되어 있습니다. 책에서 작성된 내용이 스레드와 힙 등의 중요한 개념이기 때문에, 다른 자료를 찾지 않으면서 이해할 수 있도록 구성되어 있습니다.
총평
더 나은 개발자가 되고 싶었던 저로써는 디버깅 도구가 단순히 디버깅하는 것에서 그치지 않고, 다른 기법들이 있고 그것들을 어떻게 적용할 수 있는지 얻어갈 수 있던 것만으로도 큰 수확이었습니다.
다만 후반부로 갈수록 스레드, 힙 등 CS 지식에 대해 잘 알고 있지 못한다면 이해하기 어려워지는 게 느껴졌는데, 그런 점에서 후반부에 작성된 부록이 많은 도움이 되었습니다.
책을 완벽히 이해하지 못했다고 느낀 만큼, 두고두고 읽으면서 더 나은 성능의 앱을 개발할 수 있는 개발자가 되어야겠다는 생각을 가지게 되었습니다.
더 나은 자바 개발자가 되고 싶으신 분들께 이 책을 추천합니다!
본 글은 제이펍 출판사로부터 도서를 지원받아 작성되었습니다.