모든 파일을 열어 보고 구조를 다 파악하려다 며칠을 쓰고도 남는 게 없습니다. 지도를 통째로 외우는 것과 같습니다.
이 파트에서 다루는 내용
첫날 코드를 다 이해하려 하면 반드시 지칩니다
합류하면 수십만 줄의 코드가 눈앞에 있습니다. 이걸 다 이해해야 일을 시작할 수 있다고 생각하면 첫 주부터 무너집니다.
경력자도 낯선 코드베이스 전체를 머릿속에 담지 못합니다. 필요한 부분을 그때그때 파악하며 일합니다. 신입이 전체를 외우려는 것은 잘못된 목표입니다.
적응의 목표는 코드를 다 아는 것이 아니라, 필요할 때 필요한 곳을 찾아 들어가는 길을 익히는 것입니다.
지금 맡은 작업에 관련된 부분부터 따라갑니다. 그 길을 여러 번 다니면서 점점 넓혀 갑니다. 목적지가 있으면 지도가 눈에 들어옵니다.
실행해 보는 것이 읽는 것보다 빠릅니다
코드를 눈으로만 읽으면 무엇이 실제로 일어나는지 모릅니다. 먼저 프로젝트를 실행해 동작을 보고, 그다음에 그 동작을 만드는 코드를 찾는 편이 훨씬 빠릅니다.
터미널·서버 코스에서 다룬 로그 읽기와 요청 추적이 여기서 바로 쓰입니다. 한 요청이 어떤 로그를 남기는지 보면 코드의 흐름이 눈에 들어옵니다.
README를 따라 로컬에서 실행합니다. 잘 안 되면 그 자체가 첫 질문거리입니다. 환경 구성 과정에서 프로젝트 구조를 자연스럽게 익힙니다.
화면의 버튼 하나를 눌러 보고, 그 요청이 어디로 가서 무엇을 거쳐 응답이 되는지 추적합니다. 로그와 코드를 오가며 한 흐름을 끝까지 봅니다.
중단점을 걸거나 로그를 찍어 값이 어떻게 흐르는지 봅니다. 추측하지 말고 실제 값을 확인합니다. 터미널 코스의 로그 추적과 이어집니다.
코드는 넓게가 아니라 세로로 읽습니다
폴더를 하나씩 열어 모든 파일을 훑는 것은 비효율적입니다. 대신 하나의 기능을 처음부터 끝까지 세로로 관통하는 편이 구조를 이해하는 데 빠릅니다.
- 1. 진입점을 찾습니다. 웹이면 컨트롤러, 화면이면 페이지 컴포넌트입니다.
- 2. 거기서 시작해 서비스, 데이터 접근까지 한 기능의 호출을 따라갑니다.
- 3. 그 과정에서 만나는 공통 모듈과 관례를 메모합니다.
- 4. 한 기능을 관통했으면 비슷한 다른 기능은 훨씬 빨리 읽힙니다.
프로젝트마다 폴더 구조, 이름 규칙, 계층 나누는 방식이 있습니다. 새 코드를 쓰기 전에 기존 코드가 어떻게 하는지 봅니다. 그 관례를 따르는 것이 첫 기여의 기본입니다.
테스트 코드는 그 기능이 무엇을 보장하는지 보여 줍니다. 문서가 없을 때 테스트를 읽으면 의도를 빠르게 파악할 수 있습니다.
이 코드가 왜 이렇게 됐는지 궁금하면 커밋 이력과 PR을 봅니다. Git 코스에서 다룬 이력 추적이 코드 이해에도 쓰입니다.
바꾸기 전에 왜 이렇게 됐는지 봅니다
낯선 코드를 보면 이상하거나 비효율적으로 보이는 부분이 눈에 띕니다. 신입이 흔히 하는 실수는 이걸 바로 고치려는 것입니다.
대부분의 이상한 코드에는 이유가 있습니다. 특수한 요구사항, 과거의 장애 대응, 외부 시스템의 제약일 수 있습니다. 맥락을 모르고 고치면 그 이유가 만든 방어를 걷어내게 됩니다.
왜 있는지 모르는 울타리를 함부로 치우지 않습니다. 이유를 먼저 이해한 뒤에 판단합니다. 코드도 같습니다. 왜 이렇게 됐는지 알기 전에는 그대로 둡니다.
이상해 보이면 고치지 말고 묻습니다. 이 부분이 왜 이렇게 되어 있는지 물으면, 숨은 이유를 알거나 정말 개선점이라는 확인을 받습니다.
맡은 작업과 무관한 코드를 함께 고치면 리뷰가 어려워지고 위험도 커집니다. 개선점은 따로 기록해 두고 맡은 것부터 끝냅니다.
첫 몇 주의 목표는 '한 기능을 혼자 끝내기'입니다
적응이 잘 되고 있는지 판단하는 기준은 코드를 얼마나 아느냐가 아닙니다. 작은 기능 하나를 스스로 파악해서, 만들고, 검증하고, 올리기까지 해내는 것입니다.
이 한 바퀴를 돌면 개발 흐름 전체를 경험하게 됩니다. 그다음부터는 규모만 커질 뿐 같은 과정의 반복입니다.
전체 코드를 이해했는가가 아니라, 작은 작업 하나를 처음부터 끝까지 혼자 돌릴 수 있는가로 판단합니다. 실행해서 동작을 보고, 한 흐름을 관통해 읽고, 관례를 따라 고치고, 검증해서 올리는 것. 이 한 바퀴가 적응의 목표입니다.