제목만 보면 뭔가 되게 많아 보이는데 실은 별거 없다.
docker를 이용해서 가상 컨테이너로 mysql 서버를 만들고 Next.js와 prisma를 사용해서 쉽게 mysql에 내가 원하는 타입과 결과를 넣어보려고 하는거다.
docker와 next.js의 server action, prisma를 연습하기 위해 한번 실행해 봤다.
본 작성글은 window 환경에서 작업한 작성물입니다.
먼저 docker
가 있어야 하지 않을까? 해당 링크로 가서 docker
를 먼저 설치하자
https://www.docker.com/get-started/
무사히 설치가 됐다면 cmd
창을 열자 git bash
나 window powershell
도 괜찮습니다.
저는 window powershell
에서 실행했습니다.
docker pull mysql:8.0
먼저 입력해주자. 하나씩 살펴보면 docker
는 docker
명령어들을 실행하기 위한 것이고 우리가 라이브러리 설치하려 할 때 앞에 npm
을 붙여 npm
을 사용하는 것과 같다.
pull
은 다운로드 받는 걸 뜯하고 mysql:8.0
은 어떤걸 다운 받은 건가 이다.
npm install mysql:8.0
과 똑같이 생각하자.
이때 mysql
만 해도 되는데 뒤에 :8.0
은 뭐지? 할 수 있는데 이건 mysql workbench
를 사용하는데 있어 버전을 맞추기 위해 뒤에 버전을 따로 tag
한 것이다.
이는 이따 다른 명령어들을 실행할 때도 주의해서 작성해주자
무사히 mysql:8.0
이 설치 되었다면 한번 확인해보자
docker images
를 입력시 내가 다운 받은 이미지들을 전부 띄우는 것으로 입력히 아까 다운받은 mysql
이 떠야한다.
위처럼mysql
이란 이름과 tag
부분에 8.0
으로 들어가 있으면 성공적으로 mysql:8.0
버전으로 이미지가 설치 된 것이다.
이후 컨테이너를 설정해서 올려야 한다.
컨테이너와 이미지의 차이점은 docker 공식문서나 여러 블로그들을 참고해서 한번 알아보자.
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=dev --name mysql_test mysql:8.0
docker run
:도커로 실행하겠다-d
:detach
모드의 약자로 컨테이너가 백그라운드에서 실행된다 생각하면 된다. 우리가 어떤 다른 작업을 한다해도 docker container는 계속 올라가서 유지되고 있다는 것-p <호스트 포트> <컨테이너 포트> :
p 3306:3306`으로 포트를 서로 연결한다.-e
: 컨테이너에서 사용할 환경변수를 설정한다. 우리가 개발 할 때 .env
파일에 비밀 변수들을 추가하는 것이라 생각하면 된다MYSQL_ROOOT_PASSWORD
라는 이름의 환경변수를 dev
로 저장했다.--name <container name>
컨테이너의 이름을 설정한다. 우리가 만든 컨테이너는 mysql_test
이다mysql:8.0
컨테이너를 어떤 이미지를 사용해서 띄울건지로 우리는 mysql:8.0으로 컨테이너를 띄웠다여기서 한번 궁금할텐데 port는 왜 3306이어야 할까 한다.
https://www.cbtnuggets.com/common-ports/what-is-port-3306
이 페이지를 참고해보자!
이후 컨테이너가 정상적으로 생성되고 돌아가고 있는지 확인하려면
docker ps -a
를 입력해서 확인 해 보자.
정상적으로 떠있는 걸 확인할 수 있다.
이때 STATUS
부분을 확인해 보면 되고 UP
이면 컨테이너가 올라가 있다. 즉, 사용할 수 있다는 뜻이고 멈추고 싶다면 docker container stop [컨테이너ID]
를 입력해주자
입력 후 다시 docker ps -a
를 작성해보면 방금과 동일하게 뜨지만 STATUS
부분이 EXITED
로 변경된 부분을 확인 할 수 있다
다시 docker를 올리고 싶다면 run
이나 start
를 쓰면 되는데 run
은 attach
모드가 디폴트이고 start
는 detached
모드가 디폴트이니 우리는 detached
모드를 부여했음으로 start
를 쓰자
docker start mysql_test
를 입력해주고 다시 docker ps -a
를 입력하면 정상적으로 STATUS
가 UP
으로 바뀐 걸 볼 수 있다.
무사히 컨테이너가 올라갔다면 이제 접속해서 권한 설정을 해보자
docker exec -it mysql_test bash
이는 docker exec
가 컨테이너에 특정 명령을 실행할 수 있는 명령인데 이를 이용해서 컨테이너에 접속 할 수 있다.
뒤에 -it
는 본래 -i -t
의 명령어로 표준 입력 활성화와 컨테이너와 연결되지 않더라도 표준 입력을 유지한다. TTY
모드로 Bash를 사용하려면 해당 옵션을 사용하라고 되어 있다. 상호 입출력과 bash를 사용하기 위해 넣는다고 간단하게 일단 생각하고 넘어가자.
이후 컨테이너 이름을 적어주고 뒤에 bash
를 사용해 bash
환경으로 실행하자
그러면 이제 창에 명령 입력 부분이 이렇게 변할 것이다.
현재 상태는 컨테이너에 접속하였고 bash 명령어들을 입력할 수 있게 되었다.
그러면 mysql에 접속해보자
mysql -u root -p
를 입력시
이렇게 비밀번호를 입력하라고 나오는데 우리가 위에서 환경변수로 만든 MYSQL\_ROOT\_PASSWORD
에 입력한 값을 넣자.
키보드로 입력하는데 화면에 아무것도 안나온다고 걱정하지 말자. 보안상 나타나지 않는 것이고 작성되고 있음으로 정확한 비밀번호를 입력하고 엔터로 입력시 무사히 mySQL에 접속 된 걸 확인할 수 있다.
여기서 mysql -u root -p
부분은 보통 우리가 root
의 경우 관리자 계정이고 관지라 계정으로 접속한다는 뜻으로 이해하자
위와 같은 화면이 뜰 경우 성공적으로 접속했다.
그럼 항상 관리자 모드로 접속 할 수는 없으니 우리가 사용할 유저 하나를 만들고 권한을 부여하자
CREATE USER 'dev'@'%' IDENTIFIED BY '1234';
mysql
문법을 사용해서 입력해주고 끝에 꼭 세미콜론(;
)은 잊지말고 작성해주자.mysql
의 기본임으로!
CREATE USER
유저를 생성하겠다 'dev'
dev란 이름으로 이때 '%'
외부에서 접근을 허용 하겠다.
이후 뒤는 비밀번호 설정이다.
이렇게 권한을 부여한 dev
란 유저를 만들었다. 그럼 잘 만들어졌는지 확인해 보고 싶은데 어떻게 할까?
use mysql;
select host,user from user;
이렇게 입력시 mysql
이라는 기본적으로 mysql
이 가지고있는 데이터베이스로 접근할 수 있고 이후 select
문을 사용해서 user 부분을 가져올 경우
이렇게 내가 만든 `dev`를 확인할 수 있다
물론 현재는 유저만 만든것이기에 따로 권한이 없어 mysql 작업을 못하니 이제 권한을 부여해보자
다시 입력창에
GRANT ALL PRIVILEGES ON *.* TO 'dev'@'%';
이 명령어는 dev
에게 모든 권한을 부여했음을 뜻하며 권한을 따로따로 설정별로 주고 싶을 경우 mySQL문서에서 찾아서 권한을 따로 부여할 수 있도록 연습해보자.
이후 우리는 꼭 root
가 아닌 dev
로 mysql에 접속할 수 있다.
quit
mysql -u dev -p
quit
를 통해 mysql에서 나온 뒤 다시 mysql -u dev -p
를 입력해서 내가 만든 유저로 무사히 접속 되는지 확인해보자.
만약 접속한 컨테이너 환경에서 나오고 싶을 경우 명령어 exit
를 입력시 나올 수 있다
그럼 우리가 테스트 할 데이터 베이스를 하나만 만들고 컨테이너에서 나와보자
mysql -u dev -p
로 다시 mysql
에 접속하고
CREATE DATABASE test;
를 통해 test
라는 데이터 베이스를 만들고 잘 만들어 졌는지 확인해보자
show databases;
아래 보면 test
라고 무사히 database가 만들어진 걸 확인해 볼 수 있다.
그럼 아까 mysql
데이터 베이스에서 user
를 찾았던 것처럼 test
라는 데이터베이스에 접속하려면 어떻게 해야할까?
use test
로 test
데이터 베이스에 접속할 수 있다!
이로써 docker 컨테이너를 이용해서 mysql 서버를 하나 만들어 보았다. 그럼 마지막으로 mysql workbench에만 한번 등록을 해보고 끝내보자
먼저 mySQL workbench는 다운로드 하자. mySQL홈페이지로 들어가 설치 하면 된다.
https://dev.mysql.com/downloads/workbench/
무사히 실행이 완료 되었다면 아래와 같은 화면일 텐데 My SQL Connections부분에 + 버튼을 눌러 데이터 베이스를 연결해보자
+버튼을 클릭할 경우 아래와 같은 창이 나올텐데 순서대로 입력해주자
connection name
은 내가 만들었던 db이름으로 적어주고(본인이 우너하는 대로 적어도 상관없긴 하지만 맞춰서 적어줘야 직관적이다!)
Hostname
은 docker
로 올렸기 때문에 localhost
를 작성해주고 port
는 mysql 포트인 3306
그대로 두고
username
은 아까 우리가 만든 user의 이름인 dev
를 집어 넣는다.
Default Schema
는 우리가 기본으로 사용할 스키마를 고르는 것으로 아까 만든 test
라는 이름의 database
를 적어넣어서 기본적으로 workbench
에서 mysql_test
라는 데이터베이스에 접속시 test
데이터베이스로 들어갈 수 있도록 한다
이후 바로 들어가는게 아닌 password
부분은 Store in Vault
를 통해 비밀번호를 입력하자!
클릭할 시
이런 창이 나오는데 아까 우리가 아까 도커 컨테이너의 mysql에 들어가서 CREATE USER
하면서 같이 적었던 비밀번호를 입력해주자
OK
를 누른 뒤 우측 하단의 Test Connection
으로 정상적으로 연결 되었는지 확인해보자!
Successfully
로 뜰경우 성공적으로 연결된 것이니 ok
누르고 다시 우측 하단 ok
를 눌러서 무사히
이러한 데이터베이스가 생겼는지 확인해보자! 더블클릭 할 경우 우리가 잘 만든 mysql_test
서버에 들어왔고 test
데이터베이스가 default
로 되어 있는 걸 확인 할 수 있다
여기까지 모두 성공했다면 무사히 docker를 통해 mysql서버를 컴퓨터로 띄울 수 있었고 데이터베이스도 사용할 수 있게 된 것이다.
그러면 다음 글에서 next.js
와 prisma
를 통해 데이터 베이스에 접근하고 사용할 수 있는지 테스트 해보자!
Reference: https://mungto.tistory.com/328