스프링 부트 활용

DBCP

   DBCP란 DataBase Connection Pool을 줄인 말이다.

connection을 여러개 미리 만들어 놓고 필요할 때 마다 가져다 쓰는 것이다. 몇 개를 만들어놓을지, 얼마나 응답이 없으면 error를 던질지 등의 여러가지 설정을 할 수 있다. 이러한 DBCP가 애플리케이션 성능에 아주 핵심적인 역할을 한다.

스프링부트는 기본적으로 HikariCP라는 DBCP를 선택했다.

스프링부트 DBCP 설정

application.properties에 spring.datasource.사용하는DBCP이름.설정값=으로 설정한다.

spring.h2.console.enabled = true
spring.h2.console.path = /h2-console

spring.datasource.hikari.maximum-pool-size = 4

MySQL

pom.xml에 mysql에 접속할 수 있는 connector(jdbc 구현체)의존성을 추가해줘야한다.

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

그 다음에 MySQL을 설치해줘야한다.

도커1를 사용하면 MySQL을 쉽게 설치할 수 있다.

터미널로 아래의 명령어를 입력한다.

docker run -p 3306:3306 --name mysql_boot -e MYSQL_ROOT_PASSWORD=1 -e MYSQL_DATABASE=springboot -e MYSQL_USER=grace -e MYSQL_PASSWORD=password -d mysql

컨테이너에 있는 3306포트를 localhost의 3306포트로 연결해달라는 뜻으로 mysql_boot는 이 컨테이너의 이름이고, MySQL 설정들을 해준 것이다. 그리고 docker ps를 실행해보면 mysql 인스턴스를 확인할 수 있다.

mysql에 접속하려면 application.properties에 다음 설정을 적어준다.(mysql 설치 때 설정해준 값)

spring.datasource.hikari.maximum-pool-size = 4

spring.datasource.url = jdbc:mysql://localhost:3306/springboot
spring.datasource.username = grace
spring.datasource.password = password

터미널로 mysql에 접속하기 위해 아래의 명령어를 입력한다. 컨테이너 안에 들어가서 bash를 실행하라는 명령어이다.

docker exec -i -t mysql_boot bash

mysql -u mysql계정 -p 으로 접속한다.

mysql -u grace -p 으로 접속한다.

그 다음 MySQL 러너를 만들어 mysql에 쿼리를 던져보자.

@Component
public class MySQLRunner implements ApplicationRunner {

  @Autowired
  DataSource dataSource;

  @Autowired
  JdbcTemplate jdbcTemplate;

  @Override
  public void run(ApplicationArguments args) throws Exception {
    try(Connection connection = dataSource.getConnection()) {

      System.out.println(connection.getMetaData().getURL());
      System.out.println(connection.getMetaData().getUserName());

      Statement statement = connection.createStatement();
      String sql = "CREATE TABLE USER(ID INTEGER NOT NULL, name VARCHAR(255), PRIMARY KEY (id))";
      statement.executeUpdate(sql);

    }

    jdbcTemplate.execute("INSERT INTO USER VALUES (1, 'grace')");
  }

}

Reference


1 : 컨테이너 솔루션. 커널을 공유하여 가상머신보다 훨씬 빠르게 설치할 수 있다.