[스프링] 6. DB 연동(데이터 베이스 연동)

PYOUNANI·2023년 11월 6일
0

Spring

목록 보기
13/31
post-thumbnail
📢 장정우님이 지음, 
[스프링부트 핵심가이드 : 스프링 부트를 활용한 애플리케이션 개발 실무] 책을 읽고 정리한 글입니다.

책에서는 마리아DB를 사용하지만 스터디에서 MySQL를 사용하기로 했으므로 설정 부분을 수정을 했습니다.

1. MySQL 설치하기

로컬 환경에서 돌릴 MySQL DB가 필요한데요, 이번 코스에서는 로컬에서 진행합니다.

중요!!: MySQL 을 설치하면서 Root Password를 물어보는 경우, 설정했을 때 다음 단계에서 사용해야하니 꼭 저장해둡시다.

2. MySQL Workbench 설치하기

MySQL 에 있는 데이터를 쉽게 보고 다룰 수 있게 해주는 툴 MySQL Workbench입니다.

  1. Connection Name: local
  2. Hostname: 127.0.0.1
  3. Port: 3306
  4. Username: root
  5. Password: Store in Keychain위에서 저장해둔 Root Password 입력
  6. OK 클릭

3. DB Schema 만들기

  1. 왼쪽 상단에 create a new schema 아이콘 클릭
  2. schema 명 입력
  3. apply 클릭
  4. 다음 팝업창에서 apply 클릭
  5. 리프레시 버튼 클릭 후 만든 스키마 생성된거 확인

4. intellij 프로젝트 내 DB 접속 관련 설정을 합니다

Dependency 설치

  • maven
    5장에서 생성한 방식과 동일합니다.

  • build.gradle
    build.gradle 파일 안에 아래 dependency를 추가하고 오른쪽 위 코끼리 아이콘을 누르시면 해당 library들을 다운받아 설치합니다.

dependencies {
	...
	//JPA 관련
	implementation 'org.springframework.boot:spring-boot-starter-jdbc'
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	runtimeOnly 'com.mysql:mysql-connector-j'
	implementation 'org.hibernate:hibernate-search:5.11.1.Final'
	...
}

application.properties 에 DB접속 정보 관련 내용 추가

src/main/resources/application.properties 내에 방금 설치한 MySQL 접속정보를 추가해야 프로젝트에서 DB와 연결됩니다.

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/<스키마 이름>
spring.datasource.username=root
spring.datasource.password=<위에서 저장해둔 Root Password 입력>

spring.jpa.hibernate.ddl-auto=create
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
  • 1번 줄에는 spring.datasource.driverClassName에는 연동하려는 데이터베이스의 드라이버를 정의한다.
  • 2번 줄에는 spring.datasource.url 항목에서 MySQL의 경로임을 명시하고 경로와 데이터베이스명을 입력한다.
  • 3~4번 줄에는 데이터베이스를 설치할 때 설정한 계정 정보를 기입한다. 사실 프로퍼티 파일에 패스워드가 그대로 들어가는 것은 보안상 취약하기에 일반적으로 패스워드를 암호화해서 사용한다.
  • 6~8번 줄은 하이버네이트를 사용할 때 활성화할 수 있는 선택사항이다. 6번 줄의 ddl-auto는 의미 그대로 데이터베이스를 자동으로 조작하는 옵션이다. 여기서 사용할 수 있는 옵션과 설명은 아래와 같다.
    1. create : 애플리케이션이 가동되고 SessionFactory가 실행될 때 기존 테이블을 지우고 새로 생성한다.
    2. create-drop : create 와 동일한 기능을 수행하나 애플리케이션울 종료하는 시점에 테이블을 지운다
    3. update : SessionFactory가 실행될 때 객체를 검사해서 변경된 스키마를 갱신한다. 기존에 저장된 데이터는 유지된다.
    4. validate : update처럼 객체를 검사하지만 스키마는 건드리지 않는다. 검사 과정에서 데이터베이스의 테이블 정보와 객체의 정보가 다르면 에러가 발생한다.
    5. none : ddl-auto 기능을 사용하지 않는다.

운영 환경에서는 create, create-drop, update 기능은 사용하지 않는다. 데이터베이스에 축적된 데이터를 지워버릴 수도 있고, 사람의 실수로 객체의 정보가 변경됐을 때 운영 환경의 데이터베이스 정보까지 변경될 수 있기 때문이다. 운영 환경에서는 대체로 validate나 none을 사용한다. 반면 개발 환경에서는 create 또는 update를 사용하는 편이다.

  • 7번 줄의 show-sql은 로그에 하이버네이트가 생성한 쿼리문을 출력하는 옵션이다. 아무 설정이 없으면 저장에 용이한 형태로 출력되기 때문에 사람이 보기에는 불편하게 한 줄로 출력된다. 8번 중에서 사용한 format_sql 온션으로 사람이 보기 좋게 포매팅할 수 있다.

0개의 댓글