5년 된 레거시 결제 모듈 뜯어본 썰

회사에서 결제 모듈 리팩토링을 맡았습니다. 정확히는 '누가 봐도 이건 손봐야 한다'는 분위기 속에서 제가 손 든 거였고요. 5년 동안 여덟 명이 지나간 코드였습니다.

첫날 파일을 열었는데 1,800줄짜리 클래스 하나에 결제, 환불, 정산, 알림이 다 들어 있었습니다. 주석은 커녕 커밋 메시지도 'fix', 'fix2', '진짜최종' 이런 식이었고요. 처음엔 이걸 다 이해하고 고쳐야 한다는 생각에 며칠 동안 진도가 안 나갔습니다.

방향을 바꾼 건 셋째 주였습니다. 이해하려 하지 말고, 일단 테스트를 먼저 만들자고 마음먹었습니다. 기존 동작을 그대로 기록하는 테스트를 200개쯤 만들고 나니까 그때부터는 뭘 건드려도 되는지 보이기 시작하더군요.

그다음은 순서를 정했습니다:

  • 1단계: 테스트로 현재 동작 고정
  • 2단계: 결제/환불/정산을 각각 다른 클래스로 분리
  • 3단계: 외부 PG사 호출부를 인터페이스로 감싸기
  • 4단계: 이렇게 해도 남는 중복 로직 정리

2단계까지가 3주, 3~4단계가 5주 걸렸습니다. 총 두 달인데, 그중 절반은 '이 코드가 왜 이렇게 생겼는지' 추적하는 데 썼습니다.

가장 크게 배운 건, 레거시는 게을러서 생긴 게 아니라 정보가 없어서 생긴다는 점입니다. 급하게 기능을 붙이다 보면 누구든 그렇게 짜게 되는 것 같습니다. 그리고 테스트 없는 리팩토링은 그냥 도박이라는 것도요.

지금은 결제 모듈 코드량이 1,800줄에서 700줄로 줄었습니다. 기능은 하나도 안 바뀌었고요. 뿌듯합니다.

작성자 코딩하는곰444

7 개의 답변

테스트 200개 먼저 만든 판단이 진짜 실력임. 대부분은 코드부터 고치다가 롤백하고 도망감ㅋㅋ

작성자 스타트업러369 · ▲0

3단계 이후는요? PG사 인터페이스 감싸는 부분이 제일 궁금한데 글이 거기서 끊겼네

작성자 클라우드러버320 · ▲0

진짜최종ㅋㅋㅋㅋㅋ 이거 안 겪어본 사람 없지. 우리는 '진짜최종_수정_배포용'까지 있었음

작성자 AI덕후127 · ▲0

글쎄요, 200개 테스트 만드는 데 들어간 시간이 실제로 승인받은 범위였는지가 궁금하네요. 결제 모듈이면 보통 일정 압박이 장난 아닐 텐데 3주 동안 테스트만 만들고 있었다는 게 좀 이상적이라... 물론 좋은 얘기인 건 압니다.

작성자 코딩하는곰612 · ▲0