실록⑤: 지원 종료 서버에서 2일 만에 구출

AI 도입 사례

'작동하고 있으니, 손대지 않는다'. 그렇게 계속 이야기되던 시스템이, 정신을 차려 보니 10년 전 그대로 사내의 중심에서 작동하고 있었습니다——많은 기업이 짐작 가는 바가 있을 것입니다. 이번에는, 2016년 릴리스의 프로젝트 관리 시스템이,2020년에 지원이 종료된 OS 위에서 인터넷에 공개된 채로사용되던 상태로부터, 최신 환경으로 이전한 실록입니다. 실 작업 2일.티켓 3,623건·첨부 4.0GB를, 단 1건의 손실도 없이 이관했습니다.

'작동하고 있으니 손댈 수 없다'가, 10년간 이어졌습니다.

대상은 사내의 프로젝트 관리 시스템(Redmine). 안건의 진행, 장애 대응 기록, 고객과의 주고받은 경위——10년치가 이곳에 쌓여 있습니다. 그야말로멈출 수 없으니 손댈 수 없다라는 상태였습니다.

그러나 내용을 조사해 보니, 결코 방치해도 되는 상태가 아니었습니다.

항목이전 전이전 후
OSCentOS 6.10
(2020년 지원 종료)
AlmaLinux 10.1
애플리케이션Redmine 3.2.1 (2016년)Redmine 6.1.3
실행 환경Ruby 2.2.4Ruby 3.3.10
데이터베이스MySQL 5.7MariaDB 10.11
웹 서버Apache 2.2 + Passengernginx 1.26 + puma

OS의 지원이 끊긴 지 6년.그동안 공개된 취약점의 수정은, 일절 적용되지 않았습니다. 그것이 사외에서 접근할 수 있는 상태로 계속 작동하고 있었습니다. '작동하고 있으니 안전'이 아니라,'작동하고 있을 뿐, 보호되고 있지는 않다'라는 것이 정확한 표현입니다.

레거시의 진짜 리스크는 '언젠가 망가지는 것'이 아닙니다.
망가지지 않은 채, 방어만이 멈춰 있는 것입니다.

이전의 성패는, 착수 전의 실측에서 결정되어 있었습니다.

이전에 들어가기 전에, 현황을 숫자로 파악했습니다. 이 부분이 결과적으로, 공수를 크게 좌우하고 있습니다.

  • 데이터베이스 38MB / 첨부 파일 4.0GB
  • 1일당 20~30요청=현역으로 사용되고 있다
  • 확장 플러그인: 제로. 독자 디자인: 없음

마지막 1줄이 결정적이었습니다. 이런 종류의 이행에서 가장 말썽이 되는 것은,나중에 붙인 확장 기능이 새 버전에서 작동하는지 여부입니다. 작동하지 않으면 '대체품을 찾는다', '기능을 포기한다', '직접 고친다'의 세 가지 선택지가 되고, 거기서 몇 주간이 사라집니다. 이번에는 그 장애물이 처음부터 존재하지 않았습니다.

이 실측을 바탕으로, 착수 전에 3가지 방침을 정했습니다.

1. 버전을 한 단계씩 올리는 것을 그만두었다

당초에는 3.2 → 4.2 → 5.1 → 6.x로 단계적으로 올리는 것을 전제로 견적을 냈습니다. 그런데 검증해 보니,10년치를 한 번에 뛰어넘어 갱신할 수 있다는 것을 알게 되었습니다. 상정하고 있던 공수가 통째로 불필요해졌습니다.

2. 데이터베이스의 종류를 바꾸지 않았다

다른 시스템과 운용을 맞추기 위해, 다른 데이터베이스 제품으로 옮기는 안도 있었습니다. 그러나 이행 원본의 데이터 형식이 다르기 때문에, 변환 처리를 끼워 넣을 필요가 있습니다.티켓 3,623건·이력 6,071건이라는 '사라져도 알아채기 어려운 데이터'에, 변환이라는 리스크를 들이지 않습니다.운용의 통일보다, 데이터가 1건도 빠지지 않는 것을 우선했습니다.

3. 기존 서버를 직접 업그레이드하지 않았다

새 서버를 별도로 준비하여, 전환은 입구의 설정을 1줄 고쳐 쓰는 것만으로 했습니다.실패해도 1줄 되돌리면 원상 복구라는 상태를, 끝까지 유지하기 위해서입니다.

시간을 빼앗긴 것은, Redmine이 아니었습니다.

여기부터가 실무입니다. 이전 중에 마주친 문제를 나열해 보니, 경향이 뚜렷이 드러났습니다.

오래된 서버와 새 서버가, 애초에 통신할 수 없다OS최신 OS가, 구세대의 암호 방식을 안전하지 않다며 거부합니다.4GB의 파일을 옮길 수단이 없는지점에서 이전이 시작되었습니다. 구 서버 측에 임시 전달 창구를 만들고, 종료 후에 닫아 대처.
10년치의 버전 업이, 한 번에 통과되었다애플리케이션Redmine이 과거 모든 갱신 절차를 보유하고 있기 때문에, 중간 버전을 경유하지 않고 최신판으로 직행할 수 있었습니다. 57건의 갱신 처리가 오류 없이 완료.확장 기능이 제로였기 때문에 성립한지름길입니다.
필요한 부품이 표준 구성에 포함되어 있지 않다애플리케이션웹 서버와의 연계에 사용하는 부품이 Redmine 본체에 동봉되어 있지 않습니다. 향후 버전 업으로 덮어쓰이지 않는, 공식 확장 틀에 추가 기입하여 해결.
권한을 전부 개방해도 '권한이 없습니다'라며 거부된다OSOS의 보안 기구가, 파일 권한과는 다른 계층에서 통신을 차단하고 있었습니다.권한 설정을 아무리 완화해도 해결되지 않는전형적인 예. 접속 방식 자체를 변경하여 대응.
로그인한 순간에 '페이지를 찾을 수 없습니다'통신 경로경로상의 2대 서버가 같은 정보를 서로 덮어써, 암호화 통신의 정보가 사라져 있었습니다. 애플리케이션은 정상이고,전송 대상만이 존재하지 않는다라는 알아채기 어려운 장애.
알림 메일이 인증서 오류로 발송되지 않는다암호화IP 주소로 접속하고 있었기 때문에, 인증서의 명의와 일치하지 않았습니다.검증을 무효화하여 회피하지 않고, 인증서에 맞는 이름을 정의하여, 검증을 유효화한 채로 해결.
비밀번호 무차별 대입을 막는 기능이, 표준에 없다애플리케이션Redmine에는 '규정 횟수 실패 시 잠금'의 표준 기능이 없습니다. 웹 서버 측에서 시도 횟수를 제한하여 보강.차단하는 위치를 잘못 잡으면 전 직원이 접근을 차단당한다따라서, 실제 접근 출처를 올바르게 식별하는 설정이 전제가 됩니다.
소스 코드와의 연계가, 구 서버에 의존하고 있었다외부 연계구 서버 내의 파일을 직접 참조하는 설정이라, 이전하면 전부 망가집니다. 사내 Git 서버에서 자동 복제하는 구조를 만들어,15분마다 갱신되는 구성으로. 동결 상태였던 연계가 오히려 부활했습니다.

8가지 가운데,Redmine 본체에서 비롯된 것은 3가지뿐. 게다가 그중 1가지는 '생각보다 쉬웠다'라는 좋은 오산입니다. 실질적으로 애를 먹은 것은 2가지에 지나지 않습니다.

나머지는 OS의 세대 차이, 보안 기구, 통신 경로, 암호화, 외부 시스템 연계——모두 애플리케이션의 바깥쪽에 있습니다.

레거시 이행의 공수를 잡아먹는 것은, 애플리케이션 그 자체가 아닙니다.
10년치 쌓인 '주변 환경의 차이'입니다.

'1줄로 되돌릴 수 있다'를 끝까지 놓지 않습니다.

전환은, 입구 서버의 전송 대상을 새 서버로 향하게 하는 것만. 되돌릴 때도 1줄입니다. 그리고구 환경은 정지시키지 않고, 작동하는 채로 남겨 두었습니다.

전환 당일은 '작동하는 구 환경'과 '작동하는 새 환경'이 병존하여, 어느 쪽으로든 1줄로 오갈 수 있는 상태를 유지하고 있습니다. 며칠 두고 문제가 없음을 확인한 뒤에, 구 시스템을 정지시켰습니다.

'전환'과 '구 환경의 정지'를, 다른 날로 나눕니다.그것만으로 당일의 판단이 달라집니다. 무슨 일이 있으면 되돌릴 수 있다는 것을 알고 있으면, 허둥대며 원인 불명인 채로 응급 처치를 거듭할 필요가 없습니다. 이행 작업에서 가장 비싸게 치르는 것은,되돌릴 수 없는 상태에서 조급해하는 것입니다.

이전으로 끝내지 않고, 10년치의 부족을 메웠습니다.

새 환경에서는, 구 환경에 없던 것을 동시에 갖추었습니다.

  • 매일의 백업(7세대) — 구 환경에는 백업의 구조 자체가 없었습니다
  • 접근 출처의 기록 — 이전 전에는 전체 접근이 동일하게 보여, 누가 어디에서 오는지 추적할 수 없는 상태였습니다
  • 로그인 시도의 제한 — 표준 기능이 없기 때문에, 웹 서버 측에서 보강
  • 소스 코드 연계의 자동 갱신 — 사실상 동결되어 있던 연계가 15분마다 갱신되도록

결과적으로 이관한 데이터는 다음과 같습니다. 구 환경과 새 환경에서, 건수가 완전히 일치함을 확인하고 있습니다.

21프로젝트
3,623티켓
6,071대응 이력
4.0GB첨부 파일(손실 0)

외부 시스템으로부터의 연계도, 설정 변경 없이 그대로 작동하고 있습니다.이용자 입장에서 보면, 로그인 화면이 새로워졌을 뿐——이전으로서 이상적인 착지입니다.

'우리에게도, 같은 서버가 있다'라면.

이번 이전이 단기간에 끝난 이유는, 3가지로 집약할 수 있습니다.

  • 확장 기능이 들어 있지 않았다——그래서 10년치를 한 번에 뛰어넘을 수 있었다
  • 착수 전에 실측했다——판단의 재료가 숫자로 갖춰져 있었다
  • 되돌릴 수 있는 상태를 유지했다——전환 당일에 도박을 하지 않아도 되었다

반대로 말하면,이 3가지는 착수 전에 확인할 수 있습니다.'지원이 끊긴 서버에서, 멈출 수 없는 시스템이 작동하고 있다'——혹시 짐작 가는 바가 있다면, 우선 현황을 숫자로 파악하는 것부터 상담해 주세요. 옮길 수 있는지 여부는, 대개 조사해 보면 알 수 있습니다.

당사는, 지원이 종료된 OS·오래된 프레임워크 위에서 계속 작동하고 있는 업무 시스템의 이전·쇄신을 지원하고 있습니다.
현황 조사(버전·데이터양·확장 기능의 유무·공개 범위)는 무료. 레거시 시스템의 쇄신(AI Re: Platform/약칭: AIR Platform)과 함께,지금 바로 문의해 주세요.

문의 양식('레거시 이전 상담 희망'이라고 덧붙여 적어 주세요)/ info@flagship-ai.jp

시리즈 '레거시 to AI 실록'

※본 기사의 수치는 2026년 8월 시점의 실측값입니다. 이전에 소요되는 기간·작업 내용은 시스템의 구성·확장 기능의 유무에 따라 다릅니다.

카테고리:

태그:

🌐 한국어