[인프런 강의] 스프링 부트 개념과 활용 - 9

2020. 6. 10. 17:31강의/스프링 부트 개념과 활용

지난 정리까지는 스프링 웹 MVC에 대한 내용을 정리해다면 이번 정리부터는 스프링 데이터에 대해서 정리하게 될 것이다. 강의를 들으면서, 해당 실습 코드들을 깃허브에 정리하고 있어서 정리한 글과 코드를 함께 보면 더욱 도움이 될 것 같다. (물론 남이 보기엔 가독성이 매우 좋지 않겠지만 내가 다시 복습할 때...)
(스프링 부트 개념과 활용 코드)

 

1. 인메모리 데이터 베이스

스프링 부트가 제공하는 인메모리 데이터베이스에는 H2, HSQL, Derby 가 있지만 이 강의에서는 H2로 진행하였다. 실습을 위해 프로젝트를 만들 때 Web, H2, jdbc의존성을 추가하여 만들어 준다. jdbc의존성이 들어올 때는 히카리 컬렉션 풀 라이브러리가 함께 들어온다. spring.factories를 살펴보면 DataSourceAutoConfiguration과 JdbcTemplateAutoConfiguration이 적용되어 있는 것을 볼 수 있다. 이를 통해서 바로 데이터베이스를 사용할 수 있게 된다. H2 의존성을 등록하고, 데이터 소스 설정에 대한 아무런 설정도 하지 않게 되면 인메모리 데이터베이스를 사용하게 되는 것이다. 

jdbc와 h2의존성 등록
두 기능이 자동으로 autoConfiguration에 등록된다.

이렇게 설정된 인 메모리얼 데이트를 사용하는 예제를 살펴보자.

 

1)  Runner를 만든다.

자동으로 등록되어있는 인메모리 데이터의 URL과 UserName을 확인하기 위해 실행시켜보면

이와 같은 결과를 확인할 수 있다. 

 

2)인메모리 데이터베이스에 예제 쿼리문 

이와 같이 쿼리문을 예제로 만들어 실행시켜보고 결과를 확인해본다.

 

3) H2콘솔을 이용하여 결과 확인

H2 콘솔을 사용하는 방법에는 아래와 같은 방법이 있다.

  • spring-boot-devtools 의존성을 추가
  • spring.h2.console.enabled=true 만 추가. 이후에 /h2-console로 접속 (이 path도 바꿀 수 있음)

나는  application.properties에 spring.h2.console.enabled=true를 설정하여 확인해 보았다.

 

이와 같이 설정하고 애플리케이션을 실행한 후 localhost:8080/h2-console로 접속해보면 그 결과를 확인할 수 있다.

 

 

 

* 최근 버전의 경우 보안상의 이유로 웹 콘솔에서 새 데이터베이스를 작성할 수 없다 한다. 따라서 위에서 Connect를 할 경우 연결이 안 된다. 만약 확인하고 싶다면 h2를 별도로 설치 후 dababase를 직접 생성한 후에 작업해야 한다.

 

JdbcTemplate을 사용하면 더욱 간결한 코드가 가능해진다.

 

 

 

2. DBCP

스프링 부트는 DBCP를 지원한다. (DBCP는 DataBase Connect Pool이다.) 위에서 본 것처럼 데이터베이스에 연결하기 위해서는 커넥션을 생성해야 하는데 이와 같은 작업이 꽤 복잡하므로 커넥션 풀에 커넥션을 보관하고 있다가 필요시에 할당하여 사용하는 방식을 DBCP라고 할 수 있다. 이때 미리 만들어놓을 커넥션을 몇 개로 할 것이며 어느 정도의 시간 동안 사용되지 않으면 커넥션을 없앨 것이냐 등의 여러 가지 설정을 할 수 있다. DBCP는 실제로 애플리케이션의 성능에 매우 영향을 주기 때문에 버그가 있을 경우 큰 결함으로 이어진다. 

 

스프링 부트는 기본적으로 히카리CP를 사용한다. https://github.com/brettwooldridge/HikariCP#frequently-used를 방문하면 히카리CP를 통해 설정할 수 있는 다양한 항목을 볼 수 있다.

 

3. MySQL

스프링 부트에서  MySql을 사용하기 위해서는 먼저 커넥터 의존성을 추가해야 한다. 

 

강의에서는 도커를 이용하여 진행하였지만 도커에 대한 지식이 부족하여 미리 설치되어있는 mysql에 데이터베이스를 새로 만들고, 연결하여 확인하는 작업을 하였다. 

 

1) 데이터베이스 생성

2) 유저를 만들고 권한 부여

3) 스프링 부트에 연결

 

 

4) MysqlRunner실행

 

5) 데이터베이스 결과 확인

 

연동이 잘되어 데이터베이스에 정보가 저장된 것을 확인할 수 있었다.