(M시리즈 맥 기준으로 작성되었습니다.)
현재 완전하게 끝나지 않은 프로젝트는 MariaDB를 사용중이고, 지금 시작하는 프로젝트는 MySQL을 사용하고 싶은데, 맥에서는 둘 다 동시에 돌리는 것을 지원하지 않는다.
MySQL과 MariaDB를 동시에 돌릴 수 있는 해결 방법은 로컬에서는 MariaDB를 사용하고 Docker를 이용해서 MySQL을 돌리면 된다.
또 다른 이유로는 Docker를 사용하는 경우 다른 어플리케이션도 마찬가지로 로컬에 설치할 필요 없이 Docker만 설치해서 사용할 어플리케이션을 올려서 사용하면되기 때문에 로컬에 부담이 적다.
docker.com
docker desktop 어플리케이션이 없는 경우 위의 URL에서 본인의 컴퓨터에 맞는 버전으로 다운 받기!
나는 맥 M1을 사용중이기 때문에 아래와 같이 apple silicon버전으로 받았다.

설치가 완료되면 응용프로그램에서 방금 설치한 docker 앱을 열어주고, 가입!
# docker 버전 확인으로 설치가 성공적으로 되었는지 확인
docker -v
# mysql 이미지 올리기 (둘 중 하나 사용하면 된다.)
docker pull mysql:8.0.33 # 특정버전을 원하는 경우
docker pull mysql # 특정 버전이 아닌 최신 버전을 올리는 경우
# 이미지 올라가는 과정 발생
# ...
# 완료되면 아래의 명령어 수행
# 이미지 성공적으로 올려졌는지 확인
docker images
# 아래와 같이 출력되면 이미지가 성공적으로 올라갔음을 의미
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 8.0.33 a5e6f938c138 19 months ago 587MB
# 컨테이너 실행하기
docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=12345 -d -p 3306:3306 mysql:8.0.33
# docker run -- name [이름 지정] -e MYSQL_ROOT_PASSWORD=[비밀번호 지정] -d -p 3306:[원하는 포트 지정, 기본 3306] mysql:8.0.33
# 이제 내가 만든 container에 접속하자
docker exec -it mysql-container bash
위까지 입력하면 bash 4.4# 이런게 나온다.
mysql-container안에 기존 쉘이 bash로 실행되었다는 의미이다.
이 컨테이너 내부에서 원하는 명령어를 실행해주면 된다.
# 이제 container안에서 mysql을 실행해보자, 방법은 docker아 아닌 terminal에서 했던 방법과 동일
mysql -u root -p
# 이후에 비밀번호 입력해주면 성공적으로 mysql에 들어옴
어차피 teminal로 확인했기 때문에 굳이 ui로 확인하지 않아도 되는 부분이지만, docker app에서도 올려준 이미지와 컨테이너를 확인할 수 있다.


기존에 진행했던 프로젝트는 모두 application.properties에 모든 설정을 때려넣었었는데 이번에는 가독성이 좋은 yaml파일을 사용해보려고 한다.
dependencies {
runtimeOnly 'com.mysql:mysql-connector-j'
}
만약 yaml이 아닌 application.properties를 활용하고 싶다면 아래와 같이 설정해주면 된다.
spring.application.name=[프로젝트 이름]
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/
spring.datasource.username=root
spring.datasource.password=12345
spring:
application:
name: TripTogether
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/
username: root
password: 12345
jpa:
hibernate:
ddl-auto: create
properties:
hibernate:
format_sql: true
dialect: org.hibernate.dialect.MySQL5InnoDBDialect
DB의 비밀번호같은 민감한 정보가 있기 때문에 git ignore로 push할 때 git hub에 올라가지 않게 해주는 게 좋다. 지금은 로컬에만 있는 데이터베이스여서 크게 상관은 없지만, AWS 같은 클라우드 서비스로 연결하는 경우 누군가 악의적으로 사용하면 비용적인 출혈이 매우 크기 때문에 주의해야한다.
# Spring Boot 설정 파일 제외
src/main/resources/application.properties
위와 같이 .gitignore파일을 사용해서 ignore해줬는데도 올라가는 경우라면, 이미 Git에 추적되고 있는 상태일 가능성이 있다.(초기 인텔리제이 설정할 때 git add를 자동으로 해주는 기능을 켜놓았기 때문이라고 추측중이다.)
.gitignore는 새로운 파일을 무시하기 때무에 이미 올라간 파일을 제외하려면 아래와 같은 과정이 필요!
1. git status로 추적중인지 확인
git status
2. 이미 올라간 파일은 .gitignore에 추가하고 캐시에서 제거
git rm --cached src/main/resources/application.properties
git rm --cached src/main/resources/application.yml
git cached는 Git 추적을 제거하는 역할
3. 변경 사항을 커밋
git commit -m "[적합한 커밋 메시지 작성]"
4. 변경 사항을 푸시
git push origin [브랜치 이름]
훨씬 간단하다
1. + 선택 후 Data Source, MySQL 선택하기

2. 나머지 설정 값 기입

Name: 데이터베이스가 여러개 있는 경우 알아보기 쉽게 프로젝트 명 적어주기
Host: 아무 설정도 따로 해주지 않은 경우, localhost
Port: 기본값 3306, docker run -- name [이름 지정] -e MYSQL_ROOT_PASSWORD=[비밀번호 지정] -d -p 3306:[원하는 포트 지정, 기본 3306] 지정해준 값 사용
User: 마찬가지로 아무 설정도 해주지 않은 경우, root
Password: docker에서 설정해준 값, docker run -- name [이름 지정] -e MYSQL_ROOT_PASSWORD=[비밀번호 지정] -d -p 3306:[원하는 포트 지정, 기본 3306] 지정해준 비밀번호 값 적어주면된다.
이렇게 하면 프로젝트에서 DB를 사용할 수 있는 준비는 모두 끝났다!
이제 원하는 기능을 넣어보자!