Todo 앱 MySQL에 연결하기

Soo·2024년 3월 16일

지금까지는 H2 데이터베이스를 사용해서 인메모리 형식으로 간단하게 데이터를 저장했습니다.

사실 Spring Data JPA를 사용하면 데이터베이스 변경을 어렵지 않게 할 수 있습니다.

지금부터는 H2 데이터베이스를 MySQL로 변경해보겠습니다.

MySQL은 Docker를 사용해서 실행하겠습니다.

먼저, Docker를 설치하겠습니다.

Install Docker Desktop on Windows

위 사이트에 접속해서 본인의 OS에 맞는 Docker를 설치하시면됩니다.

Docker가 정상적으로 설치가 되었다면 터미널을 열어서 아래의 문자열을 입력합니다.

docker run --detach --env MYSQL_ROOT_PASSWORD=dummypassword --env MYSQL_USER=todos-user --env MYSQL_PASSWORD=dummytodos --env MYSQL_DATABASE=todos --name mysql --publish 3306:3306 mysql:8-oracle

docker run --detach : 컨테이너를 실행하고 백그라운드에서 실행합니다.

--env MYSQL_ROOT_PASSWORD=dummypassword: MySQL 루트 사용자의 비밀번호를 "dummypassword"로 설정합니다.

--env MYSQL_USER=todos-user: MySQL에 생성될 사용자의 이름을 "todos-user"로 설정합니다.

--env MYSQL_PASSWORD=dummytodos : "todos-user" 사용자의 비밀번호를 "dummytodos"로 설정합니다.

--env MYSQL_DATABASE=todos : "todos"라는 이름의 데이터베이스를 생성합니다.

--name mysql : 컨테이너의 이름을 "mysql"로 지정합니다.

--publish 3307:3306 : 호스트의 3306 포트와 컨테이너의 3306 포트를 연결하여 MySQL 서버에 접근할 수 있도록 합니다.(기존에 MySQL이 설치되어 있을 수 있어서 3307과 연결합니다)

mysql:8-oracle : Docker Hub에서 가져올 MySQL 이미지의 이름과 태그입니다. "mysql"은 이미지 이름이며, "8-oracle"은 태그입니다.

docker container ls : 현재 실행되고 있는 컨테이너 확인

실제 Todo 애플리케이션과 연결해보겠습니다.

Pom.xml

MySQL 의존성을 추가합니다.

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.33</version>
</dependency>

Application.properties

spring.datasource.url=jdbc:mysql://localhost:3306/[DB이름]
spring.datasource.username=[userName]
spring.datasource.password=[Password]
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect

spring.jpa.hibernate.ddl-auto=update

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect: DB마다 문법이 조금씩 다르기 때문에(방언이라합니다) 설정해주어야합니다.

spring.jpa.hibernate.ddl-auto : 데이터베이스 스키마를 자동으로 생성 또는 업데이트하는 방법을 설정하는 속성입니다.

  • create: 애플리케이션 실행 시마다 스키마를 삭제하고 새로 생성합니다.
  • create-drop: 애플리케이션 실행 시마다 스키마를 생성하고, 애플리케이션 종료 시에는 스키마를 삭제합니다.
  • update: 기존 테이블은 그대로 유지하고, 새로운 테이블이나 컬럼을 추가합니다. 기존 데이터는 유지됩니다.
  • validate: 애플리케이션 실행 시에 스키마를 유효성 검사합니다. 엔티티 클래스와 데이터베이스 스키마가 일치하지 않으면 예외가 발생합니다.
  • none: Hibernate가 자동으로 스키마 생성 또는 업데이트를 수행하지 않도록 합니다. 이 옵션을 선택할 경우, 개발자가 직접 스키마를 관리해야 합니다.

로그인

http://localhost:8080/list-todos로 접속을 하면 list가 비어있습니다. 당연합니다. 우리는 아직까지 MySQL에 데이터를 저장한 적이 업습니다. 실제 데이터베이스에 연결하면 data.sql이 실행되지 않기 때문입니다.

여기서 궁금한 점은 todo 애플리케이션이 실제로 MySQL과 연결되었냐는 점입니다.

mysqlsh를 통해서 확인하겠습니다.

MySQL :: MySQL Shell 8.0 :: 2 Installing MySQL Shell

mysqlsh를 실행합니다.

\connect [username]@localhost:3307 //정상 작동한다면 비밀번호를 작성 후 mysqlsh로 접속합니다.
\use todos //todos 데이터베이스 사용합니다.
\sql //sql을 작성하기 위한 명령어

데이터 조회

  • select * from todo;

테이블이 비어있는 것을 확인할 수 있습니다.

데이터 추가

MySQL에 추가된 것을 학인할 수 있습니다.

이제 서버를 재시작해도 데이터가 사라지지 않습니다. 좋습니다.

0개의 댓글