덤프(Dump)
Q. 데이터베이스 덤프(Dump)가 무엇인가요? 사용해본적인 있다면 어떠한 상황에서 덤프를 사용하셨나요?
데이터베이스 덤프는 데이터베이스의 구조와 내용을 파일로 추출하는 작업입니다. 제가 실제로 사용했던 경험을 말씀드리자면, 테스트 데이터베이스 구축 과정에서 활용한 적이 있습니다. 처음에는 테스트할 때마다 필요한 데이터를 수작업으로 생성했었는데요. 이 방식은 매번 일관된 테스트 환경을 유지하기가 어려웠습니다. 그래서 운영 중인 데이터베이스의 덤프 파일을 생성하고, 이를 로컬 환경에 복원해서 테스트 데이터베이스를 구축했습니다. 이렇게 함으로써 두 가지 이점이 있었는데요. 첫째로 실제 운영 데이터와 동일한 환경에서 테스트가 가능했고, 둘째로 운영 데이터베이스를 직접 건드리지 않고도 필요한 테스트를 수행할 수 있었습니다.
Q. 환경을 구축 하면서 어려웠던 점이 있었나요?
구축하면서 가장 어려웠던 점은 대용량 데이터를 다룰 때 였습니다.
도커 컨테이너에서 MySQL 덤프를 진행하면서 가장 어려웠던 점은 'Lost connection to MySQL server during query' 에러가 발생하는 문제였습니다.
처음에는 단순히 덤프 파일을 복원하려고 했는데, 데이터가 많다 보니 중간에 계속 연결이 끊기는 현상이 발생했습니다. 이 문제를 해결하기 위해 도커 컴포즈 파일의 MySQL 설정을 수정했는데요.
command
옵션에 max_allowed_packet
을 1024MB로 늘리고, net_read_timeout
과 net_write_timeout
을 3600초로 설정했습니다. 이렇게 패킷 크기와 타임아웃 시간을 늘림으로써 대용량 데이터 덤프 복원 시에도 연결이 끊기지 않고 안정적으로 작업을 수행할 수 있었습니다.
이 경험을 통해 도커 환경에서 데이터베이스 작업을 할 때는 컨테이너의 설정 값 들도 꼼꼼히 확인하고 조정해야 한다는 것을 배웠습니다.
Q. 그러면 그러한 덤프는 물리적 덤프 인가요? 논리적 덤프 인가요?
제가 사용했던 것은 논리적 덤프입니다. 논리적 덤프는 SQL문 형태로 데이터를 추출하는 방식인데요. 물리적 덤프는 데이터베이스 파일을 그대로 복사하는 방식이라 속도는 빠르지만, 같은 버전의 DBMS에서만 사용이 가능합니다. 반면 논리적 덤프는 SQL 문으로 변환되어 추출되기 때문에 다른 DBMS나 버전이 다른 환경에서도 사용할 수 있다는 장점이 있습니다. 제 경우에는 개발 환경과 운영 환경의 데이터베이스 버전이 달랐기 때문에, 호환성이 좋은 논리적 덤프를 선택했습니다. 물론 논리적 덤프가 물리적 덤프보다 속도가 느리다는 단점이 있지만, 테스트 환경 구축이 목적이었기 때문에 속도보다는 호환성을 우선시했습니다.
Last updated