Docker를 이용한 DB 사용
Docker를 이용한 DB 사용
지금까지 스프링 부트에서 DB를 이용해서 공부를 해왔는데,
이게 잘못된 건 아니지만 나중에 확장을 위해 컴퓨터와 프로그램을 격리시키는 작업을 진행할 것이다.
로컬 환경에서 사용하는 것이 아니라, 가상머신에 띄우는 방식이라서
성능상 다운그레이드가 될 수 있지만, 크게 체감될 정도는 아니라고 한다.
그리고 로컬에서 어떤 DB를 사용한다고 가정하면,
DB를 삭제했을 때 관련된 모든 것이 사라지는 것이 아니고 레지스트리 등 몇가지는 삭제되지 않는다.
전부 찾아서 지울 수 있긴 하지만, 윈도우가 너무 복잡하고, 귀찮기도 하다.
뿐만 도커를 사용하면 귀찮고 안좋은 점들을 해결해준다.
바로 사용하면서 알아보자.
1. docker 설치
www.docker.com으로 로 가면 된다.
그냥 구글에 docker 검색하면 제일 위에 나온다.
첫 화면에 바로 download for window 있으니까 그거 사용하면 된다.
당연히 윈도우 아닌 사람들은 각자에 맞게 설치하고
설치파일을 실행하면 바로가기는 취향껏 하고 WSL이라 적힌건 체크하고 설치해야 한다.
리눅스용 윈도우 하위 시스템(windows subsystem for linux의 약자) 윈도우에서 자체적으로 제공해주는 기능이라서
설치가 끝나면 정상적으로 동작하기 위해 재부팅을 해야 한다.
재부팅 후 약관에 동의할 건지 말건지 물어보는데 동의하면 설치가 된 것이다.
cmd에서 `docker -v` 또는 `docker --version`을 입력해서 잘 설치되었는지 확인해보자.
버전이 나오면 잘 된 것이다.
2. MariaDB 설치
cmd에 `docker pull mariadb`를 입력하면 설치가 된다.
`docker images`를 입력해보면 알 수 있다.
여기 보면 TAG에 latest라고 적혀있는데, 최신 버전이라는 말이다.
이렇게 하지 않고, 직접 선택할 수도 있다.
참고
여기서 image라는 것은 우리가 흔히 알고 있는 사진이 아니라,
컨테이너 실행에 필요한 실행 파일, 설정 값들을 가지고 있는 것이다.
docker search mariadb를 입력하자.
OFFICIAL에 [OK] 표시가 있는 것들만 공식적으로 인증해주고 있는 것들이다.
stars는 docker를 사용하는 누군가가 해당 리포지토리를 즐겨찾기 해놓은 것이다.
즉 인기순같은 것인데 많은 것을 쓰는게 안전해보이니까 mariadb를 이용해야겠다.
docker pull mariadb:(버전 명)을 입력하면 내가 원하는 버전으로 설치할 수도 있다.
10.6을 이용해보자.
>docker pull mariadb:10.6 입력
이제 docker의 image 카테고리에서 확인할 수 있다.
`docker run -p 3306:3306 --name mariadb -e MARIADB_ROOT_PASSWORD=test1234 -d mariadb:10.6`
를 추가로 입력하자
방화벽 기능 알림이 뜨는데 체크해주자.
이제 containers에서도 확인할 수 있다.
이 컨테이너에 접근해볼 수도 있다.
3. 컨테이너 사용
docker exec -it mariadb /bin/bash를 입력하자
이제 docker의 image, 즉 컨테이너에 진입할 수 있다.
cmd에서 경로도 바뀐다.
mysql --version이라고 검색해보자.
mysql이랑 섞여있는 거라서 잘 나온다.
버전같은 것들이 나오는데, 컨테이너에 들어온 상태이다.
mysql이 설치된 리눅스 서버에 들어와있다고 생각하면 된다.
mysql -u root -p를 입력하자.
비밀번호를 물어보는데 아까 설정했을 때 입력했던 값을 입력해주면 db에 접속할 수 있다.
여기서 스키마, 테이블, 사용자에 대한 어떤 작업을 하면 실제로 반영이 된다.
exit 명령어로 탈출할 수도 있다.
db에서 탈출할 때, 컨테이너에서 탈출할 때 둘 다 전부 exit이다.
나가는데 인사도 한번씩 해주는 걸 보니 친절한 친구다.
아무튼 이제 스프링 부트에서 application.properties의 url, username, password를 전부 설정했던 값으로 맞춰주면
실제로 db에 반영이 되는 것을 확인해볼 수 있다.
4. 정리
docker를 사용해봤는데, 비전공자라 그런지 다른 사람들의 글이나 영상을 봐도
가상화, OS, 컨테이너들 관련해서 여러 개념이 나오는데 머리로 과정은 이해해도 잘 와닿지는 않는데,
나 같은 사람이 많을 것이다.
정확한 예시라고 하긴 뭐하지만 대충 정리하면 이런 느낌인 것 같다.
문제상황
Q1. 내가 컴퓨터에 설치된 자바(jdk8)를 이용해서 만들어놓은 프로그램 2개, 각각 p1과 p2가 돌아가고 있다.
Q2. 근데 p1 때문에 내 컴퓨터에 설치된 자바에 변경사항(예 : jdk8 > jdk17로 변경)이 생겼다.
Q3. 자바가 바뀐 영향이 p2에 영향을 미치게 되버려서 뭐가 안된다.
해결 방안
A1. 흠... 그럼 환경을 분리시켜서 p1(jdk17), p2(jdk8)이 되도록 만들면 되겠다.
A2. 근데 가상머신을 사용하려니까 너무 느리다.
A3. 리눅스의 컨테이너(LXC)를 이용하자니 너무 어렵다.
A4. LXC를 이용해서 나온 docker를 이용하자.
요즘은 에디터에 jdk가 내장돼서 나와가지고 이럴 일이 없기는 한데,
예시를 생각해보다가 없어서 아쉬운대로 이렇게 써봤다.
물론 docker를 이용하지 않아도 위 상황을 해결할 수는 있지만,
docker를 이용하면 좀 더 편하게 해결할 수 있는 것 같다.
근데 공부한 내용이 뭐 너무 가벼워가지고 이거 뭐 어디 써먹을 수는 있으려나...?
나중에 보충하던가 해야겠다.