서버의 관리를 용이하게 하기 위해 Spring Project 를 구동시키고 있는 모모 서버와 데이터를 저장하는 DB 서버를 분리하였다. 하지만 DB 서버도 마찬가지로 EC2 환경에서 구축해야 했다. AWS 의 RDS 를 사용했다면 MySQL 의 설치 및 설정이 편리했겠지만 우아한테크코스 교육에서 EC2 만을 제공했기 때문에 EC2 를 이용하여 DB 서버를 구축하였다.

사실 별다른 문제는 없지만 서버가 DB 서버이다보니 private 으로 설정하여 API 서버에서만 접근 가능하도록 설계하였다. (실제로는 AWS 의 동일한 VPC 내에서 접근 가능하다.) 하지만 서버를 private 으로 구축하니 인터넷을 이용하여 외부 패키지를 다운로드 받을 수가 없었다.

private 서버에서 MySQL 패키지 설치

이전에 회사를 다닐 적에 내부망을 사용하던 환경에서 원하는 패키지를 다운로드 받았던 경험이 있었다. 그 때의 경험을 살려 MySQL 패키지를 설치해보았다.

일단 구축된 서버 환경은 다음과 같다.

Web Server(Public) ----> API Server(Public) --|--> DB Server(Private)

동일한 사양의 AWS EC2 서버인 API 서버에서 원하는 패키지를 다운로드(설치x) 받은 후 이를 DB 서버에게 업로드 및 설치할 계획이다.

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install --download-only mysql-server

--download-only 옵션을 이용하여 install 의 과정을 생략하였다. 리눅스에서는 다운로드 받은 패키지를 /var/cache/apt/archives 에 보관한다. 필요한 패키지만을 가져와도 되지만 그 외 기본적인 패키지들도 최신 버전으로 설치하기 위해 모든 패키지를 포함하여 압축하였다. 그 이후에는 압축한 파일을 API 서버를 통해 DB 서버로 보낸 후 설치만 하면 끝난다.

$ sudo dpkg --force-all  -i *.deb

패키지를 설치하다보면 현재 설치하려는 패키지가 의존하고 있는 패키지가 있다. 의존 패키지가 필요하고 해당 패키지가 존재하지 않을 경우 설치에 실패한다. 이러한 경우를 방지하기 위해 —force-all 옵션을 추가하였다. 의존 패키지가 없어 넘어간 경우를 대비하여 위의 명령어를 두 번 실행한다.


회사에서 다운로드 받으려던 패키지들은 의존 패키지들이 많이 얽혀있던 패키지였다. 또한 안타깝게도 install 로 패키지를 다운로드 받아도 의존 패키지가 자동으로 다운로드 되지 않는다. 이러한 경우 어쩔 수 없이 간단한 python 로직으로 해결했지만 이번에 다운로드 받으려던 MySQL 패키지는 의존 패키지가 없어 비교적 간단하게 해결할 수 있었다.