스프링에서 JDBC를 사용해려면 pom.xml을 다음과 같이 구성해야 합니다.
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
<version>8.5.27</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
</dependencies>
* spring-jdbc : JdbcTemplate 등 JDBC 연동에 필요한 기능을 제공합니다.
* tomca-jdbc : DB 커넥션풀 기능을 제공합니다.
* mysql-connector-java : MySQL 연결에 필요한 JDBC 드라이버를 제공합니다.
스프링이 제공하는 트랜잭션 기능을 사용하려면 spring-tx 모듈이 필요한데, spring-jdbc 모듈에 대한 의존을 추가하면 spring-tx 모듈도 자동으로 포함되어 사용할 수 있습니다.
커넥션 풀이란?
최초 연결에 따른 응답 속도 저하와 동시 접속자가 많을 때 발생하는 부하를 줄이기 위해 사용하는 것이 커넥션 풀입니다. 커넥션 풀은 일정 개수의 DB 커넥션을 미리 만들어두는 기법입니다. DB 커넥션이 필요한 프로그램은 커넥션 풀에서 커넥션을 가져와 사용한 뒤 커넥션을 다시 풀에 반납합니다. 커넥션을 미리 생성해 두기 때문에 커넥션을 사용하는 시점에서 커넥션을 생성하는 시간을 아낄 수 있습니다. 또한 동접자가 많더라도 커넥션을 생성하는 부하가 적기 때문에 더 많은 동접자를 처리할 수 있습니다. 커넥션도 일정 개수로 유지해서 DBMS에 대한 부하를 일정 수준으로 유지할 수 있게 해 줍니다.
이런 이유로 실제 서비스 운영 환경에서 매번 커넥션을 생성하지 않고 커넥션 풀을 사용해서 DB 연결을 관리합니다. DB 커넥션 풀 기능을 제공하는 모듈로는 Tomcat JDBC, HikariCP 등이 있는데, 현시점에서는 이 두 가지를 많이 권장합니다.
DB를 사용해서 MemberDao를 구현해 봅시다.
MemberDao
package spring;
import java.util.Collection;
public class MemberDao {
public Member selectByEmail(String email) {
return null;
}
public void insert(Member member) {
}
public void update(Member member) {
}
public Collection<Member> selectAll(){
return null;
}
}
DB 테이블 생성
[mysql 설치]
MySQL :: Download MySQL Installer
Note: MySQL 8.0 is the final series with MySQL Installer. As of MySQL 8.1, use a MySQL product's MSI or Zip archive for installation. MySQL Server 8.1 and higher also bundle MySQL Configurator, a tool that helps configure MySQL Server.
dev.mysql.com
MySQL에 root 사용자로 연결한 뒤 해당 쿼리를 실행해서 DB사용자, 데이터베이스, 테이블을 생성해 봅시다.
1. MySQL DB에 spring5 계정생성 (암호 : spring5)
create user 'spring5'@'localhost' identified by 'spring5';
2. spring5fs DB 생성
create database spring5fs character set=utf8;
3. spring5fs DB에 spring5 계정이 접근할 수 있도록 권한부여
grant all privileges on spring5fs.* to 'spring5'@'localhost';
4. spring5fs DB에 MEMBER 테이블 생성
create table spring5fs.MEMBER(
ID int auto_increment primary key,
EMAIL varchar(255),
PASSWORD varchar(100),
NAME varchar(100),
REGDATE datetime,
unique key(EMAIL)
) engine=InnoDB character set = utf8;
한글 등 다국어 보관을 위해 데이터베이스와 테이블의 캐릭터 셋을 UTF-8로 설정하는데, MySQL은 하이픈(-) 없는 utf8를 사용해야 합니다.
MEMBER 테이블에 더미 데이터 생성하기
insert into spring5fs.MEMBER(EMAIL, PASSWORD, NAME, REGDATE)
values ('happyvirus@happyvirus.net', '1234', 'cbk', now());
DataSource 설정하기
JDBC API는 DriverManager 외에 DataSource를 이용해서 DB 연결을 구하는 방법을 정의하고 있습니다. DataSource를 사용하면 다음 방식으로 Connection을 구할 수 있습니다.
Connection conn = null;
try {
// datasource 는 생성자나 설정 메서드를 이용해서 주입받음
conn = dataSource.getConnection();
...
}
스프링이 제공하는 DB 연동 기능은 DataSource를 사용해서 DB Connecdtion을 구합니다. DB 연동에 사용할 DataSource를 스프링 빈으로 등록하고 DB 연동 기능을 구현한 빈 객체는 DataSource를 주입받아 사용합니다.
Tomcat JDBC 모듈은 javax.sql.DataSource를 구현한 DataSource 클래스를 제공합니다. DataSource를 스프링 빈으로 등록해서 DataSource를 사용할 수 있습니다.
package config;
import org.apache.tomcat.jdbc.pool.DataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class DbConfig {
//0. destroyMethod 속성 값을 close로 설정, close 메서드는 커넥션 풀에 보관된 Connection을 닫음.
@Bean(destroyMethod = "close")
public DataSource dataSource() {
//1. DataSource 객체 생성
DataSource ds = new DataSource();
//2. JDBC 드라이버 클래스 지정, MySQL 드라이버 클래스를 사용한다.
ds.setDriverClassName("com.mysql.jdbc.Driver");
//3. JDBC URL을 지정한다. 데이터베이스와 테이블의 캐릭터셋을 UTF-8로 설정했으므로,
//characterEncoding 파라미터를 이용해서 MySQL에 연결할 때 사용할 캐릭터셋을 UTF-8로 지정함.
ds.setUrl("jdbc:mysql://localhost/spring5fs?characterEncoding=utf8");
//4. DB연결 시 사용할 사용자 계정과 암호 지정
ds.setUsername("spring5");
ds.setPassword("spring5");
ds.setInitialSize(2);
ds.setMaxActive(10);
return ds;
}
}
스프링 DataSource로 mysql 연동하는 설정 클래스까지 작성해 보았습니다. 다음 포스팅에서는 Tomcat JDBC의 주요 프로퍼티에 대해 알아보겠습니다.
'Spring' 카테고리의 다른 글
[Spring] Spring JDBCTemplate 쿼리실행 (0) | 2024.02.19 |
---|---|
[Spring] Spring DB 연동 - Tomcat JDBC의 프로퍼티 (0) | 2024.02.18 |
[Spring] 스프링 DB 연동 (0) | 2024.02.16 |
[Spring] Spring AOP - @Around의 Pointcut 설정과 @Pointcut 재사용 (0) | 2024.02.16 |
[Spring] Spring AOP - Advice 적용순서 (0) | 2024.02.14 |