업무

docker로 mysql띄우고 Next.js로 연결해보기(prisma)-1

모_아이 2024. 5. 13. 15:06

제목만 보면 뭔가 되게 많아 보이는데 실은 별거 없다.

docker를 이용해서 가상 컨테이너로 mysql 서버를 만들고 Next.js와 prisma를 사용해서 쉽게 mysql에 내가 원하는 타입과 결과를 넣어보려고 하는거다.

docker와 next.js의 server action, prisma를 연습하기 위해 한번 실행해 봤다.

본 작성글은 window 환경에서 작업한 작성물입니다.

docker로 mySQL 컨테이너 올리기

먼저 docker가 있어야 하지 않을까? 해당 링크로 가서 docker를 먼저 설치하자

https://www.docker.com/get-started/

무사히 설치가 됐다면 cmd 창을 열자 git bashwindow powershell도 괜찮습니다.
저는 window powershell에서 실행했습니다.

docker pull mysql:8.0

 

먼저 입력해주자. 하나씩 살펴보면 dockerdocker명령어들을 실행하기 위한 것이고 우리가 라이브러리 설치하려 할 때 앞에 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로 저장했다.
    이는 이따 컨테이너에서 mySQL에 접속할 때 사용할 비번을 설정하는 것!
  • --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를 쓰면 되는데 runattach모드가 디폴트이고 startdetached모드가 디폴트이니 우리는 detached모드를 부여했음으로 start를 쓰자
docker start mysql_test를 입력해주고 다시 docker ps -a를 입력하면 정상적으로 STATUSUP으로 바뀐 걸 볼 수 있다.

mySQL 컨테이너에 접속하여 설정하기

무사히 컨테이너가 올라갔다면 이제 접속해서 권한 설정을 해보자

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 workbench는 다운로드 하자. mySQL홈페이지로 들어가 설치 하면 된다.
https://dev.mysql.com/downloads/workbench/

무사히 실행이 완료 되었다면 아래와 같은 화면일 텐데 My SQL Connections부분에 + 버튼을 눌러 데이터 베이스를 연결해보자

 

+버튼을 클릭할 경우 아래와 같은 창이 나올텐데 순서대로 입력해주자

connection name은 내가 만들었던 db이름으로 적어주고(본인이 우너하는 대로 적어도 상관없긴 하지만 맞춰서 적어줘야 직관적이다!)

 

Hostnamedocker로 올렸기 때문에 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.jsprisma 를 통해 데이터 베이스에 접근하고 사용할 수 있는지 테스트 해보자!

Reference: https://mungto.tistory.com/328

반응형