자바 잘 읽는 법 - 자바 코드를 이해하고, 디버깅하고, 최적화하는 요령
라우렌치우 스필커 지음, 이일웅 옮김 / 제이펍 / 2024년 5월
평점 :
장바구니담기


일반적인 글과 컴퓨터 언어는 비슷하면서도 다르죠. 공통점인 점은 의사소통할 때 세계 공용어인 영어 사용한다는 점을 볼 수 있습니다. 글은 텍스트 파일 하나로 보통 위에서 아래로 차례대로 읽습니다. 소스 코드는 파일을 역할 별로 쪼개서 여러 개로 작성하는데요. 컴퓨터나 사람이 읽을 때는 버튼을 클릭하거나 등 실행을 하게 되면 실행 순서대로 여기 파일 저기 파일 읽으면서 작동을 하게 됩니다. 그렇기 때문에 코드를 분석할 때에는 쭉 일자로 읽기보다는 디버깅 툴을 활용합니다.



1) 디버깅

산증인은 바로 <자바 잘 읽는 법>책의 저자인 라우렌치우 스필커입니다. 저자는 오픈소스인 스프링 시큐리티를 디버깅을 한 경험을 바탕 전작인 <스프링 시큐리티 인 액션(위키북스)> 책을 썼습니다. 스프링 시큐리티는 인증과 인가를 구현한 라이브러리인데요. 예를 들어 쿠팡 등 쇼핑몰에서 일반 구매자인지 일반 셀러, 전략 셀러 등 로그인 사용자를 인증 및 권한 부여할 때 씁니다. 인증과 인가는 회사마다 스프링 시큐리티를 안 쓰고 한 땀 한 땀 직접 구현하는 회사도 있습니다. 자세한 소스코드는 그 회사 직원만 알겠죠.


​디버깅은 머릿속에 생각한 소스코드의 흐림이 맞는지 확인하는 용도로 전체 구조를 볼 때 씁니다. 하는 방법은 간단한데요. 확인하고 싶은 코드 라인 앞에 클릭을 하면 빨간 점이 보입니다. 그 후 디버거로 앱을 실행하면 해당하는 코드 라인가 작동을 하면 그 라인에 멈춥니다. 그때  변수 등 정보가 나오고 확인 후 다음 버튼을 누르면서 머릿속의 코드 실행 흐름과 보이는 코드 실행 흐름과 맞는지 확인하면 됩니다. ​ 디버깅하다가 어려운 점은 브레이크 포인트를 어디에 찍어야지 감이 안 잡힐 때가 있습니다. 그때 프로파일러를 사용해서 소스코드가 어느 부분들이 실행되는지 확인해 보면 됩니다.






2) 프로파일러

일반적으로 프로파일러라는 말은 범죄자를 찾는 프로파일러가 떠오를 것입니다. 현실에서 프로파일러는 사람의 말이나 행동 등 범죄자의 특징을 모아서 패턴화해서 분석하는 일을 주로 합니다. ​ 그럼 개발 쪽에서 프로파일러는 무엇일까요? 개발에서는 트러블슈팅하는 도구로 주로 쓰입니다. 예를 들어 스마트폰 앱이 특정 페이지에 가면 계속 꺼지는 거예요. 사용자는 답답하죠. 왜 꺼지지? 이유를 모르게 말이죠.


사용자는 앱을 만든 회사에 메일 등으로 문의를 납깁니다. 메인 페이지에서 출석 페이지 클릭하니까 ​ 앱이 꺼져요 확인 좀 해줘요. 이 문의를 본 개발자는 프로파일러 도구를 킵니다. 사용자가 알려준 데로 앱을 실행해 봅니다. 개발자는 놀랍니다. 해당 페이지에 메모리가 누수가 발생하고 있기 때문이죠. 메모리 누수는 화장실에서 물을 틀어 놓은 거라 비슷한데요. 최신 스마트폰의 메모리는 6~ 8기가가 있습니다. 이때 해당 페이지에 가게 되면 그 이상을 쓰거나 제한된 양을 사용하게 되면 스마트폰이 앱을 죽이는 거죠. 그래서 앱이 꺼지게 됩니다. 개발자는 소스코드를 수정해 메모리 누수를 잡습니다. ​ 


보통 개발을 할 때 최신 폰이 아닌 최소 OS 기준으로 최저 사양의 스마트폰을 맞춰서 개발을 합니다. 어르신들이나 동남아 나라의 국가는 스마트폰의 스펙이 좋지 않기 때문인데요. 민원 방지와 사용자 경험을 위해서 최소 사양에 맞춰서 개발을 합니다. 실예로 모 은행은 앱 사용이 안 된다고 어르신께서 지속적으로 연락했습니다. 은행 측 확인 결과 해당 문제는 소스코드를 수정해도 해결할 수 없어서 신형 스마트폰으로 교체해 줬습니다.




PS

최근 들어 개발자 부트캠프나 인강이 많아서 기술을 쉽게 배울 수 있는데요. 강의를 따라 소스코드만 타이핑하다 보면은 에러를 거의 만나 볼 수 없을 것입니다. 강의를 준비한 강사님이나 관계자들이 코드를 미리 검증을 하기 때문이죠. 이때 따로 사이드 프로젝트나 개인 개발을 하면서 많은 에러를 접하지 못하고 회사에 가면 상당히 힘이 들 수 있습니다.  참고로 이 책은 JVM 밑바닥까지 파헤치지는 않는데요. 트러블 슈팅 관점으로 바라보시면 좋습니다.


이때 자바 잘 읽는 법 책의 방법들을 숙지하고 있다가 다양한 이슈들이 발생했을 때 당황하지 않고 해결할 수 있는 능력을 갖추는 것은 어떨까요?


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo