2026. 6. 27.
멈추지 않고 갈아끼우기 — 대규모 레거시 PMS를 점진적으로 현대화하는 법

오래 운영된 프로젝트 관리 시스템(PMS)은 어느 순간 '손대기 두려운 시스템'이 됩니다. 화면 수가 천 단위로 늘어나고, 수년간 쌓인 비즈니스 로직이 곳곳에 녹아 있기 때문입니다. 최근 유토닉스는 천 개가 넘는 화면으로 구성된 대규모 레거시 PMS를 현대화하는 작업을 진행했고, 그 과정에서 얻은 핵심 교훈을 공유합니다.
전면 재작성은 답이 아니었습니다
가장 먼저 떠올리는 선택지는 "처음부터 새로 만들기"입니다. 하지만 1,000개가 넘는 화면을 한 번에 갈아엎는 것은 현실적이지 않습니다.
- 재작성 기간 동안 기존 시스템은 그대로 운영되어야 합니다.
- 수년간 검증된 비즈니스 로직을 다시 구현하면서 새로운 버그가 들어옵니다.
- "완성될 때까지" 사용자는 어떤 개선도 체감하지 못합니다.
전면 재작성은 위험이 크고, 가치를 전달하는 시점이 너무 늦습니다.
핵심만 교체하는 점진적 현대화
그래서 택한 방식은 한 번에 하나씩 갈아끼우기였습니다. 시스템 전체가 아니라, 사용자가 가장 자주 마주치고 불편을 느끼는 데이터 그리드(표) 컴포넌트부터 현대적인 그리드로 교체했습니다.
레이아웃, 폼, 툴바 같은 나머지 구성 요소는 그대로 유지했습니다. 덕분에:
- 페이지 단위로 마이그레이션 완료 화면과 기존 화면이 공존할 수 있었습니다.
- 문제가 생기면 해당 화면만 되돌리면 되므로 위험이 작았습니다.
- 전환된 화면부터 사용자가 즉시 개선을 체감했습니다.
신구 공존을 위한 '격리' 설계
오래된 시스템에 새 기술을 넣을 때 가장 흔한 사고는 스타일 충돌입니다. 새로 도입한 CSS가 레거시 화면의 디자인을 깨뜨리는 것이죠. 이를 막기 위해 두 가지 원칙을 세웠습니다.
- 레거시 스타일은 건드리지 않는다. 기존 스타일시트는 '수정 금지'로 동결하고, 신규 스타일은 별도 파일로 분리했습니다.
- 새 스타일에는 울타리를 친다. 새로 도입한 CSS 유틸리티에는 전용 접두사(prefix)를 붙이고, 전역 초기화(reset)는 비활성화했습니다. 새 스타일이 자기 영역 밖으로 새어 나가지 않도록 한 것입니다.
백엔드를 건드리지 않는 호환 어댑터
또 하나의 핵심은 백엔드를 그대로 둔 것입니다. 기존 화면들은 서버가 내려주는 데이터 형식과 저장 방식에 맞춰져 있었습니다. 새 그리드를 이 형식에 직접 끼우는 대신, 둘 사이를 변환해 주는 호환 래퍼(adapter) 를 한 겹 두었습니다.
이 래퍼가 기존 데이터 형식을 새 그리드가 이해하는 형태로 바꿔주고, 저장 동작도 기존 방식과 호환되도록 중계합니다. 결과적으로 서버 코드는 거의 손대지 않고 화면만 현대화할 수 있었습니다.
정리하며
대규모 레거시 시스템의 현대화는 '얼마나 새것으로 바꾸느냐'가 아니라 '어떻게 멈추지 않고 바꾸느냐' 의 문제입니다. 이번 프로젝트의 핵심은 분명했습니다.
한 번에 하나씩, 격리하고, 되돌릴 수 있게.
전면 재작성의 유혹을 내려놓고 핵심 컴포넌트부터 교체하면, 운영을 멈추지 않으면서도 사용자에게 개선을 빠르게 전달할 수 있습니다. 유토닉스는 이런 방식으로 오래된 시스템에 새 생명을 불어넣고 있습니다.