본문 바로가기

윈도우 개발환경

윈도우에 만드는 리눅스 개발 환경; 5. Docker로 MySQL시작하기

윈도우에 만드는 리눅스 개발 환경 목차

1. 우분투 리눅스 설치 (윈도우 10)

2. 윈도우에 Docker 설치

3. 속도 개선 후 node.js 설치

4. VSCode 설치 후 리눅스 연결

5. Docker로 MySQL시작하기

6. Docker로 MongoDB 시작하기

7. 윈도우 11에 우분투 설치

8. Docker로 PostgreSQL 시작하기

0. 노트북에 DB를 설치하기 전에

사실 회사에서는 개발을 위해 DB (데이터베이스)를 노트북에 설치하는 것은 좋은 습관은 아니다. 왜냐하면

  • 대부분 DB설계하고 관리하는 DBA와 개발자는 분리되어 있다

따라서 DB를 노트북에 설치하면 개발에 사용하는 DB구조가 회사의 DB구조와 다를 수 있다. 다시 말해 개발 오류가 발생하는 원인이 된다.

  • 개발에 사용하는 샘플 데이터도 외부로 유출되면 안 되는 경우가 많다

물론 엄격한 관리하에 승인을 거쳐 샘플 데이터를 내어주기도 하지만 그래도 샘플 데이터를 유출하는 것이 보안에 위배될 수 있다.

  • 노트북 속도가 떨어진다.

대부분 DB는 내가 사용하지 않더라도 백그라운드에서 지속적으로 관리 작업을 진행한다. 또한, DB의 특성상 컴퓨터의 성능에 영향을 미치는 IO작업이 지속적으로 수행된다. 이 때문에 다른 프로그램의 실행 속도를 떨어뜨리는 원인이 된다.

 

하지만,

  • 소규모 프로젝트이거나
  • 내가 개발자이면서 DB설계자이거나
  • 출장이나 이동 중에도 네트워크 연결 없이 개발을 계속해야 하는 등

노트북에 DB를 돌려야 하는 많은 상황이 존재한다. 이 경우 Docker를 사용하면 간단하게 DB환경을 만들 수 있다.

 

이제 내 노트북 개발환경에 Docker를 사용해서 MySQL을 구성해 보려고 한다.

1. MySQL에 대해

MySQL은 오픈소스 데이터베이스 중에서 아마 가장 인기 있는 RDBMS(Relational DataBase Management System) 프로그램일 것이다. 내가 근무한 적이 있는 썬 마이크로시스템즈(Sun Microsystems)에서 오픈소스 생태계를 확장하려고 2008년에 인수를 했는데, 썬 마이크로시스템즈가  2010년에 오라클로 인수되면서, MySQL은 기능이 더 복잡해지고 상용에 가까운 데이터베이스로 바뀌고 있다. 인수 수 오라클의 정책에 반대하던 MySQL의 초기개발자들이 나가서 MariaDB를 만들었지만, 여전히 MySQL을 개발용 데이터베이스로 쓰는 경우가 더 많은 것 같다. 최근에는 MySQL의 모든 상용기능까지 무료로 사용할 수 있는 PostgreSQL도 스타트업회사에서 점차 사용하고 있는 추세이다.

 

개발자 입장에서는 어떤 데이터베이스를 사용하든 데이터베이스 앞단에 사용하는 프레임워크 또는 미들웨어가 점차 발달하면서 ORM (Object Relational Mapping)이나 GraphQL로 옮겨가고 있어 직접 데이터베이스를 핸들링해야 할 일이 줄어들고 있다. ORM과 GraphQL은 NextJS나 NestJS 등의 프레임워크를 사용하면서 자세히 살펴보려고 한다.

2. Docker를 이용한 MySQL구성

  • 먼저 앞에서 설치한 우분투 리눅스를 실행한다. 

  • Docker desktop을 실행한다.

우분투 콘솔 docker명령를 넣었을 때 docker가 없다는 메세지가 보이면 docker desktop을 실행해서 docker engine을 먼저 실행한다.

 

  • mysql을 docker로 실행한다.
docker run --name mysqldb -p3306:3306 -e MYSQL_ROOT_PASSWORD=your_password -d mysql

 

--name 옵션으로 docker 컨테이너의 이름을 주고 우분투 리눅스나 윈도우 프로그램으로 외부에서 접근할 수 있도록 TCP포트 3306을 -p3306:3306으로 열어주고 my.cnf 파일을 제공하거나 -e 환경변수를 통해 필요한 정보를 전달하고 -d 데몬으로 실행한다. 마지막 mysql뒤에 tag를 주지 않았으므로 최신버전 (:latest) 이미지를 가져오는데 만일 다른 버전이 필요하면 mysql:8.0과 같이 지정한다. Docker hub에 설명되어 있는 몇 가지 많이 사용하는 환경변수는 

 

MYSQL_ROOT_PASSWORD: root사용자의 패스워드를 지정한다.

MYSQL_USER, MYSQL_PASSWORD: 새로운 사용자를 지정된 user와 password로 만들고 슈퍼유저 권한을 부여한다.

MYSQL_ALLOW_EMPTY_PASSWORD: root의 패스워드 없이 로그인이 가능하다. 편한 점도 있지만 보안 문제가 없다고 확신이 되지 않으면 사용하지 않는 것을 권한다.

MYSQL_RANDOM_ROOT_PASSWORD: root패스워드를 랜덤으로 생성하고 화면에 보여준다.

MYSQL_ONETIME_PASSWORD: 다음에 로그인할 때 바꾸도록 설정한다.

 

  • mysql이 잘 실행되고 있는지 docker명령으로 확인한다.
docker logs mysqldb

 

설치하면서 에러를 봤으면 여기서 찾을 수 있다. 그렇지 않으면 아래 명령으로 실행되고 있는 상태를 확인할 수 있다.

 

docker ps -a

 

mysql이 잘 동작하고 있는 것을 확인했으니, 개발에 사용할 데이터 베이스를 생성하고 사용자를 만든다.

 

  • 먼저 docker명령어로 mysql 컨테이너에 연결한다.
docker exec -it mysqldb bash

 

-it 옵션은 interactive 하게 사용할 tty터미널을 띄우라는 약자인데, 쉽게 말하면 콘솔을 띄우라는 것이다.

 

  • 콘솔이 보이면 다음 명령으로 mysql에 접속한다
mysql -uroot -p

 

  • mysql> 프롬프트가 보이면 db를 만들고 사용자를 만들어 db에 대한 권한을 설정한다.
create database devdb;
create user devuser identified by 'password';
grant all on devdb.* to 'devuser'@'%';

 

나는 개발용 db의 이름을 devdb로 이 db의 사용자를 devuser로 설정하고 암호를 password로 하였고, 이 사용자에게 CRUD (Create, Read, Update, Delete)이 모든 권한을 devdb에 있는 모든 테이블에 주는 명령을 실행하였다. 필요에 따라 해당 부분을 고쳐서 사용하면 된다.

 

이제 잘 동작하는지 확인해 보자.

 

  • 우분투에 mysql client를 설치하고 연결해 보자
sudo apt install mysql-client

 

설치가 완료되면 접속해 보자.

 

mysql -h127.0.0.1 -udevuser -p

 

docker컨테이너 내에서 접속할 때처럼 문제없이 접속이 되면 우분투에서 만든 개발환경에서 mysql을 사용하는데 문제가 없을 것이다.

 

보통 때는 노트북에 부하를 주거나 전원에 연결이 되어 있지 않으면 배터리를 많이 소모시키니 mysql컨테이너를 중지시켜 놓고 필요할 때만 사용하면 된다.

 

  • 편리한 GUI 방식의 MySQL Workbench를 설치한다

ERD를 그려서 DB를 설계하거나 GUI로 MySQL을 관리하려면 MySQL Workbench를 설치하면 된다.

 

MySQL :: Download MySQL Workbench

Select Operating System: Select Operating System… Microsoft Windows Ubuntu Linux Red Hat Enterprise Linux / Oracle Linux Fedora macOS Source Code Select OS Version: All Windows (x86, 64-bit) Recommended Download: Other Downloads: Windows (x86, 64-bit), M

dev.mysql.com

 

이제 개발에 사용할 mysql이 준비되었다.