안녕하세요.
아이티이지(ITEASY) 서비스 운영팀에서 엔지니어로 일하고 있는 반훈 매니저 입니다.
이번에 소개할 아이티이지 고객사례는 ‘고객 맞춤형 DB 백업 및 복원 솔루션 개발 사례’ 입니다.
아이티이지의 시스템 엔지니어의 Golang과 Docker 활용기, 아래의 내용을 확인해 주세요!
혹시 데이터를 안전하게 지키고 계신가요?
현대 IT 환경에서 데이터는 기업의 가장 중요한 자산 중 하나로,
그 가치는 점점 더 커지고 있습니다. 특히 클라우드 환경에서는 데이터의 가용성, 안정성,
그리고 복구 가능성이 비즈니스 연속성의 핵심 요소로 자리 잡고 있습니다.
또한, 데이터베이스 백업과 복원은 단순히 데이터를 저장하는 작업이 아니라 예상치 못한
장애나 보안 위협, 자연재해와 같은 비상 상황에서도 비즈니스가 중단 없이 운영될 수 있도록
지원하는 중요한 안전망 역할을 합니다.
🔎 데이터와 백업의 중요성
오늘날 대부분의 기업은 데이터를 기반으로 의사 결정을 내리고, 고객에게 서비스를 제공하며,
내부 프로세스를 자동화합니다. 이러한 데이터 중심의 운영 방식에서 데이터 손실은 다음과
같은 심각한 결과를 초래할 수 있습니다.

1. 비즈니스 중단 :
중요한 데이터에 대한 접근 불가 시, 운영은 즉시 멈추게 됩니다.
이는 매출 손실만 아니라 고객 신뢰도 저하로 이어질 수 있습니다.
2. 법적 및 규제적 문제 :
많은 산업에서 데이터 보호와 백업은 법적으로 요구되고 있으며,
데이터 복구 실패는 규제 위반으로 이어질 수 있습니다.
3. 복구 비용 증가 :
데이터가 완전히 손실되었을 경우, 복구 작업은 시간이 오래 걸리고 비용이 많이 발생합니다.
이러한 문제 때문에 기업은 백업과 복구에 대한 강력한 솔루션을 도입하고 유지하는 것이
필수가 되었습니다. 특히 클라우드 기반 환경에서는 데이터가 분산되어 관리되기 때문에
더욱 복잡한 문제를 동반하고 있는 점을 참고해 주세요.
🔎 경량화된 백업 솔루션의 필요성
기존의 백업 솔루션은 주로 전체 데이터베이스를 백업 및 복원하는 방식으로 동작합니다.
이는 안정성을 제공하지만, 다음과 같은 한계점이 존재합니다.
1. 리소스 과다 사용 :
전체 데이터베이스를 복원하는 데 상당한 시간과 시스템 자원이 소요됩니다.
이 과정에서 서비스 성능이 저하될 수 있습니다.
2. 부분 복구의 어려움 :
고객이 특정 데이터베이스나 테이블만 복구하고 싶어도
기존 솔루션에서는 전체 복원을 요구하는 경우가 많습니다.
3. 사용 편의성 부족 :
일부 백업 솔루션은 수동 작업이 많아 관리자가 직접 개입해야 하는 경우가 많습니다.
경량화된 백업 솔루션은 이러한 문제를 해결하는 데 초점을 맞추고 있습니다.
특히, 다음과 같은 특징이 요구됩니다.
1. 부분 복구 지원 :
전체 데이터를 복원하지 않고 필요한 데이터베이스만 선택적으로 복원할 수 있어야 합니다.
2. 리소스 효율성 :
최소한의 시스템 자원으로 최대의 성능을 제공하여, 백업 및 복원 중에도 서비스 성능이 유지됩니다.
3. 자동화 및 간소화 :
주기적인 백업을 자동으로 수행하며, 관리자가 편리하게 사용할 수 있는 인터페이지 제공합니다.
🔎 경량화된 솔루션의 중요성
현대의 클라우드 환경에서는 데이터베이스가 수십 개에서 수백 개에 이르기 때문에,
복잡성이 기하급수적으로 증가합니다. 이러한 환경에서 경량화된 백업 솔루션의 도입은
단순히 효율성을 넘어, 비즈니스 민첩성과 비용 절감을 지원하는 핵심 기술입니다.

1. 비즈니스 민첩성 :
데이터 복구 시간을 단축하여 장애 상황에서도 빠르게 서비스를 재개할 수 있습니다.
2. 운영 비용 절감 :
리소스 사용량을 줄이고, 관리 프로세스를 자동화하여 운영 비용을 절감합니다.
3. 사용자 경험 개선 :
관리자는 간단한 UI를 통해 작업을 수행하고, 복잡한 스크립트 작성에서 해방될 수 있습니다.
데이터 백업과 복원은 매우 중요한 과제입니다.
특히 클라우드 환경에서는 데이터 가용성과 안정성이 핵심입니다.
해당 글에서는 클라우드 환경에서 경량화된 데이터베이스 백업 및 복원 솔루션을
개발한 사례를 공유합니다. 고객의 기존 요구 사항에서 출발하여, 기술 선정, 솔루션 구현,
배포 및 확장 가능성까지의 과정을 상세히 다룹니다.
1. 클라우드 백업 및 복원의 필요성 : 문제 정의
1-1. 데이터베이스 복원 작업의 주요 과제
▶ 클라우드 환경에서 대규모 데이터베이스를 백업하고
복원하는 작업은 리소스와 시간이 많이 소모됩니다.
▶ 기존의 백업 솔루션(DPM 등)은 전체 데이터 복원을 기반으로 하여,
특정 데이터베이스만 빠르게 복원하려는 고객의 요구와는 상충되었습니다.
▶ 오버헤드를 최소화하고, 가볍고 빠른 데이터 복원 솔루션이 필요했습니다.
1-2. 고객의 주요 니즈
▶ DB의 부분 복원 :
전체 데이터를 복원하지 않고, 특정 데이터베이스만 경량화된 방식으로 복원
▶ 자동화된 프로세스 :
수동 작업 없이 주기적인 백업 및 복원으로 지원
▶ 편리한 관리 인터페이스 :
백업 상태 확인, 다운로드 및 실행, 그리고 상태 점검 기능 제공
2. 기술 선택 : 고민과 과정
2-1. 기존 도구 검토
▶ mysqldump :
MySQL 데이터베이스를 백업하는 데 유용하지만, 수동 작업이 필요하고 자동화가 부족
▶ crontab :
주기적으로 명령을 실행할 수 있지만, 새로운 데이터베이스 추가 시 즉각적으로 반영 불가
▶ mysqlshow :
현재 서버의 모든 데이터베이스를 나열할 수 있지만, 단독으로는 복잡한 로직 구현이 어려움
💡 결론 : 위 도구들을 조합하여, 자동화된 경량 백업 솔루션을 개발해야 했던 부분입니다.
2-2. 프로그래밍 언어 선택
다양한 언어를 검토한 결과, 최적의 솔루션을 개발하기 위해 Golang을 선택했습니다.
주요 언어에 대한 평가를 아래에 정리했습니다.
▶ Shell Script
1) 특징
Shell Script는 운영체제의 명령어를 조합하여 간단한 작업을 자동화할 수 있는
스크립트 언어이며, 리눅스나 유닉스 환경에서 기본적으로 사용 가능 합니다.
추가적인 설치 없이 바로 실행 가능합니다.
2) 장점
– 간단함 : 운영체제에 기본적으로 포함되어 있으며, 짧은 코드로 기본적인 작업을 빠르게
처리 가능합니다. 예를 들어, 특정 디렉토리에서 파일을 복사하거나 정기적으로 명령을
실행하는 작업에는 최적입니다.
– 스케줄링 : crontab과 결합하여 백업 작업을 주기적으로 실행할 수 있습니다.
3) 단점
– 유지보수 어려움 :
코드가 복잡해질수록 가독성이 떨어지고, 나중에 수정하거나 디버깅하기 어려워집니다.
– 복잡한 로직 부적합 :
조건문이나 반복문은 지원하지만, 복잡한 데이터 처리나 동시성 작업을 구현하기에는
한계가 있습니다. 예를 들어, 다수의 데이터베이스를 병렬로 백업하는 작업은
Shell Script로 구현하기 어렵습니다.
– 환경 의존성 : 특정 운영체제나 쉘 환경에 의존적이어서 이식성이 떨어질 수 있습니다.
▶ Python
1) 특징
Python은 범용 스크립트 언어로, 높은 생산성과 광범위한 라이브러리를 자랑합니다.
데이터베이스와의 상호작용을 위한 다양한 라이브러리를 제공하며, 복잡한 작업도
비교적 간단히 처리할 수 있습니다.
2) 장점
– 유연한 라이브러리 제공 : Python은 MySQL과 같은 데이터베이스와 쉽게
통합할 수 있는 라이브러리(mysql-connector, SQLAlchemy 등)를 제공하며,
이를 활용해 백업 및 복원 작업을 자동화할 수 있습니다.
– 가독성 : 코드가 직관적이고 읽기 쉬워, 초보자도 쉽게 배울 수 있습니다.
– 다양한 작업 가능 : 데이터 분석, 웹 개발 등 데이터베이스 작업 이외에도
다양한 용도로 사용 가능합니다.
3) 단점
– 메모리 사용량 :
Python은 인터프리터 언어로 실행되므로, 실행 속도가 느리고 메모리 사용량이 많습니다.
대규모 데이터 작업에서는 성능이 병목될 수 있습니다. 예를 들어, 백업 작업 중
대용량 데이터를 처리할 경우 실행 시간이 오래 걸릴 수 있습니다.
– 동시성 처리 성능 제한 :
Python의 기본적인 쓰레딩 모델은 GIL(Global Interpreter Lock)이라는 제약으로 인해
동시성 처리가 제한적입니다. 이를 극복하려면 추가 라이브러리(asyncio, multiprocessing)를
사용해야 하지만, 복잡성이 증가합니다.
▶ Golang
1) 특징
Golang(Go)은 구글에서 개발한 언어로, 높은 성능과 간결함을 특징으로 합니다.
특히 네트워크 및 동시성 처리가 중요한 애플리케이션에서 강력한 성능을 발휘합니다.
2) 장점
– goroutine을 통한 동시성 처리:
Golang의 goroutine은 백그라운드에서 동시에 실행되는 경량 쓰레드입니다. 시스템 리소스를
최소화하며, 다수의 데이터베이스를 병렬로 백업할 수 있습니다. 예를 들어, 10개의 데이터베이스를 순차적으로 처리하던 작업을 goroutine으로 병렬 처리하면 작업 시간이 크게 단축됩니다.
– 경량화된 바이너리:
Golang은 컴파일된 언어로, 단일 실행 파일로 프로그램을 배포할 수 있습니다.
추가적인 런타임 환경이나 의존성 설치가 필요 없어 배포가 간단합니다.
– 성능 최적화 :
Golang은 C와 유사한 성능을 제공하며, 대규모 데이터 작업에서도 안정적입니다.
특히, 데이터베이스 백업과 같은 I/O 집약적인 작업에서 높은 성능을 발휘합니다.
3) 단점
– 러닝 커브 :
Python이나 Shell Script와 비교했을 때, 상대적으로 배우기 어렵습니다.
특히 초보자에게는 동시성 처리나 메모리 관리를 다루는 것이 생소할 수 있습니다.
– 개발 초기 속도 :
Golang은 간결한 문법을 지향하지만, 개발 초기에는 언어의 특징과 철학을 이해하는 데
시간이 걸릴 수 있습니다. 그러나, 초기 학습 곡선을 넘어서면 생산성과 효율성이 크게 향상됩니다.
💡 Golang의 주요 선택 이유
위 언어들을 비교한 결과, 고객의 요구를 가장 잘 충족시킬 수 있는 언어로 Golang을 선택했습니다. 그 이유는 다음과 같습니다.

1) goroutine
동시성 처리가 매우 용이하며, 병렬 처리를 통해 백업 작업의 효율성을 극대화할 수 있습니다.
이는 대규모 데이터베이스를 병렬로 백업해야 하는 고객의 니즈와 완벽히 일치합니다.
2) 이식성
컴파일된 단일 바이너리 파일로 배포할 수 있어,
클라우드 및 온프레미스 환경 모두에서 쉽게 실행할 수 있습니다.
3) 성능 최적화
Golang은 높은 성능을 제공하면서도 메모리 사용량이 적어, 대규모 데이터 작업에 적합합니다.
4) 확장 가능성
Golang은 네트워크 기반 애플리케이션 개발에 강점이 있어,
향후 클라우드 확장 및 웹 UI 통합에도 적합합니다.
3. 솔루션 개발 : Golang 사용기
3-1. Golang 프로젝트 초기화
go mod init backup-solution Golang의 모듈 시스템을 활용해 의존성을 관리하고,
체계적으로 프로젝트를 구성했습니다.
3-2. Goroutine을 활용한 동시 백업
기존 솔루션은 데이터베이스를 순차적으로 처리했지만, Goroutine을 사용해
병렬 처리를 구현했습니다.
* 동시성 처리 예제 코드
func backupDatabase(dbName string) {
cmd := exec.Command("mysqldump", "-u", "user", "-p", "password", dbName)
err := cmd.Run()
if err != nil {
log.Printf("Error backing up %s: %v", dbName, err)
}
}
func main() {
databases := []string{"db1", "db2", "db3"}
var wg sync.WaitGroup
for _, db := range databases {
wg.Add(1)
go func(db string) {
defer wg.Done()
backupDatabase(db)
}(db)
}
wg.Wait()
}
3-3. 성능 결과
– 기존 솔루션 : 백업 소요 시간 30분
– Golang 솔루션 : goroutine 적용 후 12분으로 단축
4. Docker 사용기: 컨테이너화의 이점
Docker를 활용해 백업 솔루션을 컨테이너화했습니다.
이는 배포와 관리의 복잡성을 크게 줄였습니다.
4-1. Docker란 무엇인가?
Docker는 소프트웨어 컨테이너를 생성하고 관리하는 데 사용되는 오픈소스 플랫폼입니다.
컨테이너란 응용 프로그램과 그 실행 환경(라이브러리, 종속성, 설정 등)을 패키징하여
운영체제에 독립적으로 실행할 수 있는 단위를 말합니다. Docker는 개발자와 운영자가
응용 프로그램을 빌드, 배포, 실행하는 방식을 단순화하고 표준화합니다.
4-2. Docker를 사용하는 이유
Docker는 다음과 같은 이유로 현대 개발 환경에서 널리 사용되고 있습니다.
▶ 일관성 보장 :
개발, 테스트, 배포 환경이 동일하기 때문에 “개발 환경에서는 잘 되는데,
배포 환경에서는 안 되는” 문제를 방지합니다.
▶ 빠른 배포 :
컨테이너는 몇 초 내로 시작할 수 있으므로 애플리케이션의 배포와 업데이트 속도가 빨라집니다.
▶ 효율성 :
컨테이너는 운영체제의 커널을 공유하여 가상 머신보다 경량화되어 리소스를 적게 사용합니다.
▶ 확장성 :
컨테이너 기반 시스템은 애플리케이션을 손쉽게 수평 확장할 수 있어,
클라우드 환경에서 특히 유리합니다.
1) Docker의 장점
– 이식성 : 동일한 컨테이너 이미지를 어디서든 실행 가능
– 격리성 : 각 환경 간의 충돌 방지
– 자동화 : Docker Compose를 통해 전체 스택을 자동으로 설정
2) Dockerfile 예제
FROM golang:1.20
WORKDIR /app
COPY ././
RUN go build -o backup-service
CMD ["./backup-service"]
5. 고객 중심 웹 UI: 비전문가도 손쉽게 사용할 수 있도록
5-1. React 기반의 UI 설계
고객이 백업 상태를 쉽게 확인하고 제어할 수 있도록 직관적인 UI를 설계했습니다.
① 대시보드 : 백업 상태를 실시간으로 보여주는 화면
② 버튼 인터페이스 : 파일 전송, 다운로드, 상태 확인 등 주요 작업 수행
5-2. Nginx를 통한 최적화
① 정적 파일 서빙 및 리버스 프록시 설정
② HTTPS 적용으로 보안 강화
6. 결론
이 솔루션은 고객의 요구를 충족시키기 위해 기존 기술과 현대적 프로그래밍 접근 방식을
결합하여 성공적으로 구현된 사례입니다. 특히, 데이터 가용성과 안정성이라는 클라우드 환경의
핵심 요구를 충족시키면서도, 경량화와 자동화를 통해 실질적인 효율성을 달성하였습니다.

🔎 주요 성과 및 효과
1. 경량화된 DB 복원 : 효율성과 생산성 극대화
기존 방식 대비 60% 이상의 시간 절약을 실현했습니다.
이는 데이터베이스 복원 작업이 대규모 프로젝트에서도 빠르게 완료될 수 있음을 의미합니다.
고객은 더 적은 자원으로 더 빠른 결과를 얻을 수 있어 비용을 절감하고 운영 효율성이 향상되는 효과를 누립니다.
2. 사용자 친화적 관리 : 직관적인 UI 제공
웹 기반 대시보드를 통해 현재 백업 상태를 실시간으로 확인할 수 있으며,
복원 작업 역시 클릭 한 번으로 실행 가능합니다. IT 비전문가도 복잡한 명령어 없이
손쉽게 시스템을 운영할 수 있습니다.
3. 유연한 배포 : 이식성과 확장성 확보
Docker를 활용해 동일한 솔루션을 다양한 환경(로컬, 클라우드, 하이브리드 등)에서 손쉽게
배포할 수 있습니다. 또한, 컨테이너화된 설계를 통해 확장성과 유지보수 용이성을 극대화하며,
클라우드 네이티브 환경에서 유리한 구조를 확보했습니다.
아이티이지는 시스템 엔지니어링에 머무르지 않고,
고객 맞춤형 솔루션을 제공할 수 있는 기술 역량을 갖춘 회사로 자리 잡으며,
앞으로도 고객의 니즈에 부응하는 혁신적인 솔루션 개발에 앞장 서겠습니다!
추가로, 아이티이지 유튜브 채널에서는 다양한 서비스 소개 및 이벤트 영상을 확인할 수 있습니다.
함께 보면 좋은 ‘ITEASY 고객사례 컨텐츠’ 영상도 참고해 주세요!
추가로 궁금하신 사항이 있으시다면,
아래의 댓글 및 아이티이지 홈페이지 ‘문의하기‘ or ‘채널톡’을 통해 남겨주세요!
다음 포스팅도 기대해 해주세요!
🔗 아이티이지 서비스 구경하러 가기
💌 현재 진행중인 이벤트 바로가기
감사합니다.
IT is easy, ITEASY!
