내가 공부하는 방법 (3) 라이브러리 코드 보기
# 내가 공부하는 방법 (3) 라이브러리 코드 보기 NOV 13, 2025 • 5분 내가 공부하는 세 번째 방법은 라이브러리 코드를 직접 분석하는 것이다. 이 방법의 시작은 첫 회사에서 리눅스 관련 개발을 맡게 되었을 때였다. 당시 나는 리눅스에 익숙하지 않았고, 리눅스 어플리케이션을 개발하려면 리눅스가 어떻게 동작하는지 잘 알고 있어야 한다고 생각했다. 그래서 인터넷에서 알게 된 리눅스 스터디 그룹에 참여했다. 전원이 인가되고 나서부터 시작되는 ARM 리눅스의 어셈블리 코드부터 시작해서 `start_kernel()`—부트로더가 커널을 메모리에 로드한 후 처음 실행하는 C 코드—까지 한 줄씩 분석하는 스터디였다. 이 경험은 오픈소스 코드에 대한 막연한 두려움을 완전히 없애주었다. 그 전까지는 '내가 그 큰 코드를 읽을 수 있을까?', '어디서부터 봐야 할까?', '이해가 될까?' 같은 의구심이 있었다. 그러나 스터디원들과 함께 '멘땅에 헤딩'하며 하나하나 확인하고 추측해가면서 코드의 역할과 영향을 파악했다. 지금 생각해보면 일부 해석이 틀렸을 수도 있다. 그때는 그저 비슷한 수준의 사람들이 모여 때로는 상상으로 정의한 부분도 있었다. 하지만 그런 과정 자체가 의미 있는 작업이었다. 완벽한 이해보다는 코드를 읽는 것에 대한 두려움을 없애고, 함께 탐구하며 배워가는 경험이 더 중요했기 때문이다. 몇 달간의 스터디 끝에 `start_kernel`까지 도달했을 때 모임은 자연스레 해체되었다. 하지만 나는 혼자서 계속 코드를 파고들었다. 운영체제 책에서 배운 이론들이 실제 리눅스 커널에서 어떻게 구현되었는지 확인하며 지식을 더 확고히 내 것으로 만들었다. 메모리 핸들링 부분까지 본 후에야 나도 그만두었지만, 이 경험은 내 개발자 경력에서 가장 소중한 자산이 되었다. 그 이후부터는 내가 사용하는, 혹은 사용하려는 라이브러리 코드들을 가볍게 뜯어보고, 분석하고, 문제가 발생하면 뜯어보면서 어디서 문제가 발생하고 어떻게 해결해야 하는지 자신있게 할 수 있게 된 것 같다. 라이브러리 코드를 분석하는 목적은 단순히 API 사용법을 익히는 것이 아니다. 설계자의 의도와 구현 방식을 이해함으로써 더 효율적으로 활용하고, 문제 상황에서 원인을 파악할 수 있게 되는 것이다. 코드를 '블랙박스'로 여기지 않고 내부 동작 원리까지 이해하면, 디버깅과 최적화에서 큰 차이가 생긴다. 라이브러리 코드 분석의 또 다른 장점은 고수들의 코딩 패턴과 설계 철학을 배울 수 있다는 점이다. 잘 설계된 오픈소스 프로젝트는 모듈화, 추상화, 에러 처리 등 소프트웨어 공학의 모범 사례를 담고 있다. 이런 코드를 읽는 것은 마치 대가의 작업실을 훔쳐보는 것과 같다. 리눅스 커널 코드 분석 이후, 회사 코드를 대하는 태도도 완전히 달라졌다. 막연하게 두려워하지 않고 내가 다 알고 있어야 하는 내용이라고 생각하게 되었다. 이제는 새로운 회사에 입사할 때마다 개인적으로 목표를 세우고 코드베이스 전체를 체계적으로 읽어본다. 입사 초기는 상대적으로 여유 시간이 많으니 충분히 해볼 만하다. 백엔드 코드를 분석할 때는 DB 모델부터 시작한다. '어떤 데이터를 저장하는가?'를 먼저 이해한 후, API 컨트롤러를 하나씩 살펴본다. 백그라운드 워커들도 별도로 분석하며, 이 과정에서 데이터 흐름 다이어그램을 그려나간다. 프론트엔드는 먼저 API 핸들러를 보고, 다음으로 각 페이지별 코드와 공통 컴포넌트를 분석한다. 이해가 안 되는 부분은 적극적으로 질문하고, 이해한 내용은 주석이나 문서로 남긴다. 이렇게 하면 내가 떠난 후에도 다음 개발자들이 쉽게 코드를 이해할 수 있다. 실제로 한 회사에서는 내가 작성한 코드 문서가 신규 입사자 온보딩 자료로 활용되기도 했다. 이런 방식으로 코드베이스를 체계적으로 분석하면 회사 업무에도 빠르게 적응할 수 있고, 업무 속도도 빨라진다. 코드 구조를 이미 파악했기 때문에 새로운 기능을 추가하거나 버그를 수정할 때 어디를 봐야 할지 바로 알 수 있다.