쏘카, 6년간의 레거시 개선: 코드, ERD, 그리고 조직 문화 혁신

by DD
3개월 전
조회수 10

테스트 코드 0%에서 시작하여 ERD 구조 개선, 코드 리팩토링을 통해 테스트 커버리지 10% 달성

테이블 구조 노후화지식의 속인화 문제를 해결하기 위해 ERD를 개선하고, 코드와 ERD의 일관성을 확보

서비스 중단 없는 테이블 구조 변경을 위해 코드 변경 후 스키마 변경하는 안전한 순서를 확립

Postman 팀 워크스페이스 구축 및 10개 시스템 ERD 작성으로 장애 대응 시간 단축 및 지식 공유 활성화

테스트 코드 부재에서 시작된 ERD 개선

본문에서는 테스트 코드 부재로 인해 ERD 구조를 파악하고, 비즈니스 로직과 ERD 간의 불일치를 발견한 과정을 설명한다. 테스트 케이스 작성의 어려움을 겪으며, ERD를 분석하여 테이블 구조 노후화(Table Structure Aging)의 원인을 파악했다. 특히, 하나의 테이블에 모든 정보를 담아 유지보수(Maintenance)의 어려움을 겪었던 사례를 제시한다. ERD 개선을 통해 비즈니스 흐름을 파악하고, 코드 개선의 필요성을 인지하게 된 점이 핵심이다. ERD 개선과 코드 개선을 병행하여 시스템의 가독성(Readability)을 향상시켰다.

서비스 중단을 막는 테이블 구조 변경

글에서는 서비스 중단 없이 테이블 컬럼을 삭제하는 방법을 제시하며, 코드 변경 우선, 스키마 변경 나중의 원칙을 강조한다. Online DDL(Online DDL)을 활용하여 서비스에 미치는 영향을 최소화하고, 데이터 정합성을 유지하는 방법을 설명한다.

코드에서 컬럼 참조 제거

이원화 데이터 정합성 확인

코드 참조 완전 제거 확인

MySQL 8.0의 MDL(Metadata Lock)을 활용하여 데이터베이스(Database) 잠금 시간을 최소화하고, 안전하게 테이블 구조를 변경하는 방법을 제시한다. 핵심은 DDL 실행 전에 안전한 상태를 만드는 것이다.

신뢰 기반의 조직 문화와 문서화

레거시 개선의 핵심은 기술력이 아닌 조직의 신뢰(Organizational Trust)임을 강조하며, 이원화 기간 동안 발생할 수 있는 리스크를 관리하는 방법을 제시한다. 담당자의 신뢰와 조직의 용기를 바탕으로, 롤백 플랜(Rollback Plan)을 포함한 세 가지 문서를 작성하여 리스크를 최소화했다.

문서 목적

현재 상태

목표 상태

롤백 방법

이러한 문서화는 담당자 부재 시에도 시스템을 유지보수할 수 있도록 돕고, 지식의 속인화(Knowledge Siloing) 문제를 해결하는 데 기여했다.

Postman 워크스페이스와 ERD를 활용한 장애 대응

팀 리드(Team Lead)가 된 후, 장애 대응 속도를 높이기 위해 Postman 팀 워크스페이스와 10개 시스템 ERD를 구축한 경험을 공유한다. Postman 워크스페이스를 통해 장애 대응 시나리오(Disaster Response Scenario)를 문서화하고, 가용 인원이 직접 대응할 수 있도록 했다. 또한, 10개 시스템의 ERD를 작성하여 데이터 구조(Data Structure) 파악을 용이하게 하고, PM 및 사업 담당자와의 소통을 원활하게 했다. 그 결과, 장애 대응의 병목 지점이 사람에서 문서로 바뀌는 효과를 얻었다.

6년간의 레거시 개선, 그리고 미래

저자는 6년간의 레거시 개선 과정을 통해 얻은 교훈을 공유하며, 지속적인 개선(Continuous Improvement)의 중요성을 강조한다. 테스트 가능한 구조를 만드는 것이 테스트 코드 작성보다 우선시되어야 하며, 조직의 신뢰를 바탕으로 안전한 순서로 변경을 진행해야 한다고 말한다. 또한, 지식을 문서화하여 누구나 시스템에 기여할 수 있는 환경을 만드는 것이 중요하다고 강조한다. 레거시 개선은 한 번에 이루어지는 것이 아니라, 매일 조금씩 개선해 나가는 과정임을 강조하며 글을 마무리한다.

팀 레거시 개선 (3) 쏘카존 관리 시스템 - 6년간 진행된 팀 레거시 코드 및 문서 개선기