학생에서 개발자로: 로또 구현부터 레거시 개선까지, 서버의 흐름을 배우다
온보딩 3단계를 거치며 서버 개발의 기준을 TDD와 리팩터링으로 익혔다.
2026 신입공채 테크 뉴크루들은 TDD & OOP 구현, 레거시 코드 인수 테스트, 레거시 코드 리팩터링의 3단계를 거치며 기능을 만드는 법보다 어떻게 개발할지를 배웠다.
첫 번째 미션은 로또 게임 구현이었다. 1장 1000원, 자동 발급과 수동 발급, 당첨 통계 계산을 구현하면서도 들여쓰기 depth 1단계, 메서드 10라인 이하, 원시값 포장, Early Return 같은 제약을 지켜야 했고, 모든 구현은 TDD로 진행됐다.
랜덤 로직은 테스트 가능해야 했기 때문에 번호 생성 전략을 인터페이스로 추상화해 주입받는 구조로 바꿨다. 또 1부터 45까지의 숫자를 매번 새로 만들지 않고 캐싱한 뒤 재사용하는 방식으로, 객체의 정체성과 값의 동일성을 구분하는 설계 기준도 익혔다.
두 번째 미션은 실제 서비스 수준의 레거시 코드에 대한 인수 테스트였다. 보호해야 할 대상을 사용자 행동, 시스템 반환 결과, 외부에서 관찰 가능한 상태 변화로 나누고, Strong Assertion과 Cucumber 기반 BDD를 적용해 "올바르게 성공했는지"를 증명하는 테스트를 만들었다.
테스트 환경도 운영과 최대한 같게 맞췄다. H2 데이터베이스를 PostgreSQL로 바꾸고, Docker로 실행 환경을 통일했으며, Gradle Task로 테스트를 자동화했다. 데이터 격리는 FK 역순 삭제, TRUNCATE ... CASCADE, 공통 Cleanup 유틸리티로 해결해 테스트가 항상 같은 상태에서 시작되도록 만들었다.
마지막 미션은 레거시 코드 리팩터링이었다. 핵심 원칙은 구조 변경과 동작 변경을 분리하는 것이었고, 구조를 정리할 때는 동작을 바꾸지 않고, 동작을 수정할 때는 구조를 건드리지 않았다. 이 과정에서 PR 리뷰는 단순한 코드 점검이 아니라 변경을 예측하고 통제하는 훈련이 됐다.
AI도 적극적으로 활용했지만, 넓은 범위를 한 번에 맡기면 검증이 어려워진다는 한계를 확인했다. 이후에는 작은 단위로 요청하고, 반복적 작업은 AI에게 맡기되 최종 판단은 사람이 하며, AI가 작성한 코드도 테스트 없이 신뢰하지 않는 원칙을 세웠다.
수백 개의 PR과 수백 건의 리뷰를 거치며 서버 개발은 더 이상 거대한 벽이 아니라 문제를 구조적으로 풀어가는 과정으로 바뀌었다. 테스트, 설계, 리팩터링, 검증의 순서를 익히면서, 막연했던 서버 개발은 이제 질문과 기준으로 다룰 수 있는 영역이 됐다.
이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.
요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.