똑같은 삽질은 2번 하지 말자

Spring Boot 개념다지기 No.15 (Spring Data) 본문

Spring/Spring Boot

Spring Boot 개념다지기 No.15 (Spring Data)

곽빵 2020. 5. 3. 15:26

SpringBoot가 지원하는 Spring Data 연동기술

SQL DB NoSQL
  • 인메모리 데이터베이스 지원
  • DataSource 설정
  • DBCP 설정
  • JDBC 사용하기
  • 스프링 데이터 JPA 사용하기
  • jOOQ 사용하기
  • 데이터베이스 초기화
  • 데이터베이스 마이그레이션 툴 연동하기
  • Redis (Key/Value)
  • MongoDB (Document)
  • Neo4J (Graph)
  • Gemfire (IMDG)
  • Solr (Search)
  • Elasticsearch (Search & Analytics)
  • Cassandra
  • Couchbase
  • LDAP
  • InfluxDB

 

H2

스프링부트가 지원하는 인메모리 DataBase:H2

우리가 H2에대한 아무런 설정을 하지않으면 자동으로 인메모리데이터베이스로 설정된다.

 

Spring-JDBC가 classpath 에 있으면 자동 설정이 필요한 빈을 설정 해줍니다.

  • DataSource
  • JdbcTemplate

H2 콘솔 사용하는 방법

  • spring-boot-devtools를 추가하거나...
  • spring.h2.console.enabled=true 만 추가.
  • /h2-console로 접속 (이 path도 바꿀 수 있음)

 

MySQL

DBCP란?

WAS 실행 시 미리 일정량의 DB Connection 객체를 생성하고 Pool 이라는 공간에 저장해 둡니다.

그리고 DB 연결 요청이 있으면, 이 Pool 이라는 공간에서 Connection 객체를 가져다 쓰고 반환 하게 됩니다.

 

그러니 위 코드에서 Connection connection = DataSource.getConnection();

이 커넥션을 만드는 과정이 안보여서 그렇지 절대 절대 짧은 과정이 아니다.

 

지원하는 DBCP

  1. HikariCP (SpringBoot에선 이 친구가 기본)
    1. https://github.com/brettwooldridge/HikariCP#frequently-used
  2. Tomcat CP
  3. Commons DBCP2

DBCP 설정(application.properties)

  • spring.datasource.hikari.* 
  • spring.datasource.tomcat.*
  • spring.datasource.dbcp2.*

MySQL 커넥터 의존성 추가

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

 

MySQL 5.* 최신 버전 사용할 때

문제 Sat Jul 21 11:17:59 PDT 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
해결 jdbc:mysql:/localhost:3306/springboot?useSSL=false

MySQL 8.* 최신 버전 사용할 때

문제 com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Public Key Retrieval is not allowed
해결 jdbc:mysql:/localhost:3306/springboot?useSSL=false&allowPublicKeyRetrieval=true

MySQL 라이센스 (GPL) 주의

 

PostgreSQL

의존성 추가

<dependency>
   <groupId>org.postgresql</groupId>
   <artifactId>postgresql</artifactId>
</dependency>

 

PostgreSQL 설치 및 서버 실행 (docker)docker run -p 5432:5432 -e POSTGRES_PASSWORD=pass -e POSTGRES_USER=keesun -e POSTGRES_DB=springboot --name postgres_boot -d postgres docker exec -i -t postgres_boot bash su - postgres psql springboot 데이터베이스 조회 \list 테이블 조회 \dt 쿼리 SELECT * FROM account;

Comments