DBMS switch
JPA(Java Persistence API)를 사용할 때 주요 장점 중 하나는
특정 데이터베이스에 종속되지 않고 개발할 수 있다는 점입니다.
이는 벤더 독립성(Vendor Independence)이라는 특성 덕분입니다.
JPA 구현체인 Hibernate가 각 DBMS에 맞는 쿼리로 변환해주기 때문에
Connection 설정만 변경하면 간단하게 DBMS를 전환할 수 있습니다.
이번에는 DBMS를 변경해보겠습니다.
지금까지는 데이터를 메모리에서 관리하여 서버를 종료하면 데이터가 사라졌습니다.
물론 H2 DB도 데이터를 삭제하지 않고 계속 사용할 수 있습니다.
그렇지만 실무에서 많이 사용되는 MYSQL과 MSSQL로 테스트를 진행해보겠습니다.
개발 환경
- Windows 11 home 22631.3296
- Docker desktop 4.28.0 (139021)
이 글은 Docker Desktop이 설치되어있다는 가정하에 진행합니다.
여기서 주의사항은 DBMS 설치 이후에 사용할 Database를 생성해야합니다
기존에 사용중이신 DBMS가 있을까봐 기본 포트에 1을 붙였습니다. 필요없으신 분들은 빼주세요
MYSQL 설치
먼저 명령 프롬프트창을 열고 다음 명령어를 복사하고 붙여넣기 합니다
단축키: WIN + R => cmd
docker run ^
-e MYSQL_ROOT_PASSWORD=P@ssw0rd ^
-p 13306:3306 ^
-d ^
--name mysql ^
mysql ^
--character-set-server=utf8mb4 ^
--collation-server=utf8mb4_unicode_ci
MYSQL Database 생성
docker ps 명령어로 mysql의 CONTAINER ID 를 확인합니다
저의 경우는 7b88f66d7a2c이 나왔습니다
다음 명령어를 실행합니다(ID 값 일부만 쳐도 됩니다. 7b8 이렇게요)
# docker exec -it <CONTAINER ID> bash
docker exec -it 7b88f66d7a2c bash
mysql -u root -p
# P@ssw0rd 비밀번호 입력하세요
CREATE DATABASE `test`;
MSSQL 설치
명령프롬프트창에 다음 명령어 붙여넣어주세요
docker run ^
-e "ACCEPT_EULA=Y" ^
-e "MSSQL_SA_PASSWORD=P@ssw0rd" ^
-p 11433:1433 ^
-d ^
--name sql_server_developer2022 ^
mcr.microsoft.com/mssql/server:2022-latest
Database 생성
위에서 docker ps 로 조회했을때 MSSQL ID는 905749e91f07
#docker exec -it <CONTAINER ID> /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P "P@ssw0rd"
docker exec -it 905749e91f07 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P "P@ssw0rd"
CREATE DATABASE test
GO
코드에서 DBMS 변경
MYSQL과 MSSQL 설치가 끝났으면 이제는 코드로 돌아가서 DBMS를 변경해봅시다.
먼저 연결을 위한 라이브러리들을 추가해주세요
build.gradle
...
dependencies {
...
runtimeOnly 'com.microsoft.sqlserver:mssql-jdbc'
runtimeOnly 'com.mysql:mysql-connector-j'
}
...
resources.application.properties
MYSQL용
server.port=80
spring.application.name=tutorial
springdoc.swagger-ui.path=/
# jpa config
spring.jpa.hibernate.ddl-auto=update
## h2-console
#spring.h2.console.enabled=true
#spring.h2.console.path=/h2
## h2-database
#spring.datasource.driver-class-name=org.h2.Driver
#spring.datasource.url=jdbc:h2:mem:test
#spring.datasource.username=sa
#spring.datasource.password=
# mysql
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:13306/test?characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=P@ssw0rd
## sqlserver
#spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
#spring.datasource.url=jdbc:sqlserver://localhost:11433;databaseName=test;trustServerCertificate=true;characterEncoding=UTF-8;
#spring.datasource.username=sa
#spring.datasource.password=P@ssw0rd
MSSQL용
server.port=80
spring.application.name=tutorial
springdoc.swagger-ui.path=/
# jpa config
spring.jpa.hibernate.ddl-auto=update
## h2-console
#spring.h2.console.enabled=true
#spring.h2.console.path=/h2
## h2-database
#spring.datasource.driver-class-name=org.h2.Driver
#spring.datasource.url=jdbc:h2:mem:test
#spring.datasource.username=sa
#spring.datasource.password=
## mysql
#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#spring.datasource.url=jdbc:mysql://localhost:13306/test?characterEncoding=UTF-8
#spring.datasource.username=root
#spring.datasource.password=P@ssw0rd
# sqlserver
spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.url=jdbc:sqlserver://localhost:11433;databaseName=test;trustServerCertificate=true;characterEncoding=UTF-8;
spring.datasource.username=sa
spring.datasource.password=P@ssw0rd
코드는 다음 주소에서 확인 가능합니다
'JAVA > SPRING' 카테고리의 다른 글
Spring Boot 3 Tutorial - 5 Security(2) (0) | 2024.04.16 |
---|---|
Spring Boot 3 Tutorial - 5 Security(1) (2) | 2024.04.12 |
Spring Boot 3 Tutorial - 4 QueryDsl (0) | 2024.04.08 |
Spring Boot 3 Tutorial - 2 CRUD (0) | 2024.04.04 |
Spring Boot 3 Tutorial - 1 Hello World (0) | 2024.04.04 |