Rails 업그레이드 성공을 위한 핵심 전략
1. 주인의식 확보 (Ownership)
Rails 업그레이드의 첫걸음은 문제에 대한 주인의식을 갖는 것입니다. 종종 팀들은 이 책임을 DevOps나 인프라 팀에 전가하려 하지만, 만약 강제 업그레이드(예: CVE 발생 시)로 인해 본인 팀이 직접적인 영향을 받는다면, 이는 해당 팀의 문제이며 최우선 과제로 다루어져야 합니다. DevOps 팀은 애플리케이션 컨텍스트가 부족하고 리소스가 제한적인 경우가 많으므로, 그들에게 모든 책임을 넘기는 것은 실패를 자초하는 행위입니다. 주인의식을 갖고 업그레이드를 주도하는 것은 애플리케이션의 다양한 영역에 대한 깊이 있는 이해와 빠른 경력 성장의 기회를 제공합니다.
2. 체계적인 계획 수립 (Crafting the Plan)
업그레이드 계획은 단순히 코드를 변경하는 것을 넘어선 체계적인 접근이 필요합니다.
-
의존성 감사:
Gemfile을 면밀히 검토하고, 다음 Rails 마이너 버전으로 로컬에서 업그레이드를 시도하여 발생하는 오류들을 목록화합니다. 실패하는 Gem들을 하나씩 해결하며 의존성 목록을 정리합니다. -
기능적 레이아웃: Rails 공식 가이드의 업그레이드 섹션을 활용하여 주요 비권장(deprecation) 사항들을 파악하고, 코드베이스에서 해당 패턴들을 검색합니다. 프로덕션 환경에서의 데이터베이스 마이그레이션(예: Active Storage 변경 사항) 및 배포 전략(예: 듀얼 부트)을 미리 고려해야 합니다.
-
계획 문서화: 무질서한 목록을 바탕으로 구체적인 ‘물리적 날짜’(분기 단위가 아닌)가 명시된 마일스톤을 설정합니다. 목표는 현실적이면서도 도전적으로 설정하고, 초기 계획은 유연하게 조율할 수 있음을 명심합니다. 후반 마일스톤일수록 세부 사항은 줄여나가고, 반복적인(iterative) 방식으로 채워나갑니다.
-
세부 구현 지양: 계획에는 ‘Faraday 다음 버전으로 업그레이드’ 또는 ‘비권장 호출 사이트 제거’와 같이 ‘무엇을 할 것인가’에 초점을 맞추고, ‘어떻게 할 것인가’와 같은 구현 세부 사항은 나중에 해결합니다.
-
부록 추가: 배포 플레이북(인프라 팀과 협력하여 롤백 계획 및 데이터베이스 작업 포함)과 테스트 플랜(다른 팀의 핵심 기능 테스트 경로 수집)을 추가하여 만반의 준비를 합니다.
-
AI 활용: AI 도구를 활용하여 Rails 또는 Ruby 버전 간의 차이점을 분석하거나, 코드 경로를 식별하고, 심지어 초기 Pull Request를 생성하는 데 도움을 받을 수 있습니다.
3. 계획 공유 및 실행 (Socialization and Execution)
수립된 계획은 조직 내에서 공개적으로 접근 가능하도록(예: Confluence, Google Docs) 공유하고, 팀원 및 리더십과 논의하여 피드백을 반영해야 합니다. 업그레이드를 통해 얻을 수 있는 이점(예: Ruby 3.1의 해시 생략 문법, 새로운 라이브러리 사용 가능)을 강조하여 팀의 동기를 부여합니다. 이 작업은 다른 기능 개발 프로젝트와 동일하게 프로젝트 관리 도구(Jira, Kanban 등)를 사용하여 관리합니다. 때로는 반복적이고 지루한 작업이 필요할 수 있으므로, 팀원들에게 적절한 격려와 보상(예: 피자 파티)이 중요합니다.
4. 테스트 및 배포 (Testing and Deployment)
다른 팀들과 협력하여 테스트 및 배포를 진행합니다. 배포 날짜에 대해 확고한 태도를 유지하고, ‘X주 내에 배포될 예정이니 문제가 있다면 알려달라’는 식으로 대화를 재구성하여 다른 팀에 책임감을 부여합니다. 인프라 파트너와 함께 플레이북을 기반으로 게임 데이를 진행하고, 롤백 계획을 포함하여 실제와 유사한 환경에서 배포를 시뮬레이션합니다. 각 팀으로부터 핵심 기능 테스트 계획을 수집하여 문서화하고, 향후 업그레이드 시 다시 활용할 수 있도록 합니다.
5. 성공과 실패 (Success and Failure)
-
성공: 업그레이드가 성공하면 크게 축하하고(팀 예산 내에서), 리더십에 성과를 알립니다. 그리고 즉시 다음 마일스톤을 계획하여 모멘텀을 이어갑니다. 초기 업그레이드 후에는 새로운 기능을 많이 사용하지 않았기 때문에 다음 버전으로의 전환이 더 쉬울 수 있습니다.
-
실패: 실패하더라도 포기하지 않고, 무엇이 잘못되었는지 원인을 파악하는 데 집중합니다. 계획을 재평가하고, 필요한 경우 수정하여 ‘매우 신속하게’ 다시 시도해야 합니다. 하루 만에 재시도하는 것도 좋은 방법입니다.