서버 마이그레이션 기록: OS 업그레이드
목차
개요#
지원이 종료된 CentOS 7.9 환경에서 개발 서버를 운영하던 중, 커널 버전 문제로 파이썬 라이브러리 설치가 실패하는 이슈가 발생했다.
당장의 처리는 가능하겠지만, 장기적인 운영 안정성을 고려했을 때 OS 업그레이드가 시급하다 느꼈다.
일반적인 OS라면 다음 버전으로 업그레이드가 비교적 간단하겠지만, CentOS 7.9의 경우 이후 버전이 유료 라이센스로 전환됨에 따라 직계 업그레이드가 불가능한 상태였다. 그렇다면 OS 자체를 교체해야만 하는데, 이 과정에서 고민을 정말 많이 했다.
서로 다르 성격을 가진 여러 프로젝트들의 설정과 데이터를 모두 안전하게 보존하면서 업그레이드를 해본 경험이 없기에 확신도 없었고 부담도 컸다. 그러나 "지금이 제일 빠를 때"라는 생각으로, 더 안정적인 서버 환경 구축을 위해 마이그레이션을 진행하기로 결심했다.
진행 문제점#
서버에 적용된 여러 설정들을 확인하고, 중요한 파일 데이터의 보존을 계획하던 도중 Docker와 관련하여 문제가 확인되었다.
이 서버에는 Dockefile과 Docker compose를 활용한 인프라 관리 개념이 아직 자리잡기 전에
docker run 명령어로만 실행된 컨테이너들이 다수 존재했고,
문제는 이 컨테이너들이 실행된 상태에서 지속적으로 개발 및 변경이 이루어져 왔다는 것이다. 결과적으로 이들의 경우 실행 중인 컨테이너 인스턴스 자체를 백업하고 복원해야 하는 상황이었다.
진행 방향#
마이그레이션 방향에 대해 크게 두 가지를 생각했다.
1. ELEvate 도구 활용
AlmaLinux에서 제공하는 ELEvate는 CentOS 7 환경을 Rocky Linux 8이나 AlmaLinux 8로 마이그레이션해 주는 자동화 도구다.
- 장점: 성공할 경우 기존 환경을 거의 그대로 유지하면서 OS만 교체할 수 있다.
- 단점: 커스텀 설정이 많은 서버 특성상 결과에 대한 확신을 갖기 어려웠다.
2. 구형 개발 서버 활용
현재 동작이 멈춘 구형 서버를 타겟 환경으로 재구축한 뒤, 데이터를 하나씩 옮기는 방식이다.
- 장점: 각 프로젝트를 한 단계씩 수동으로 이전하며 테스트할 수 있어 안정성이 높다.
- 단점: 시간이 오래 걸리고 수작업이 많아 공수가 크다.
위 두 방법을 비교했을 때, 다소 시간이 걸리겠지만 각 서비스의 동작을 검증하며 안정적으로 진행할 수 있는 두 번째 방식으로 진행하기로 결정했다.
진행 과정#
본 작업은 기존 업무와 병행하며 개인적으로 시간을 내어 진행할 계획이다보니, 길게 잡고 여러 날에 걸쳐 단계별로 완수하는 것을 목표로 한다.
1. 구형 개발 서버 환경 구축 (2026-02-10)
본격적인 이전에 앞서, 샌드박스 역할을 해줄 타겟 서버를 준비했다. 현재는 사용하지 않는 구형 개발 서버를 활용하기로 했으며, 미리 설치해 둔 Rocky Linux 8을 기반으로 기초 설정을 시작했다.
먼저 원활한 마이그레이션 작업을 위해 전체 패키지를 최신 상태로 업데이트하고, 서버 관리와 모니터링에 필요한 필수 도구들을 설치했다.
# 시스템 패키지 최신화
dnf update -y
# EPEL 저장소 및 필수 유틸리티 설치
dnf install -y epel-release
dnf install -y vim wget curl git htop net-tools그리고 컨테이너 환경을 재구현하기 위해 Docker를 설치했다. 현행 개발 서버의 모든 데이터를 한꺼번에 옮기기보다는, 서비스별로 하나씩 데이터를 가져오며 점진적으로 반영하는 방식을 택했기에 기반 환경 구축이 최우선이었다.
# Docker 공식 저장소 추가
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# Docker Engine 및 관련 플러그인 설치
dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# Docker 서비스 활성화 및 즉시 시작
systemctl enable --now docker
# 설치 완료 확인 (Docker Compose V2 버전 체크)
docker compose version이제 기존 서버에서 컨테이너들을 하나씩 추출해 새 환경으로 옮겨오는 작업을 진행해보자