본 포스팅은 PropertySource 사용하기 이후 DBMS를 이용하는 내용입니다.

GIT 주소 : https://github.com/lahuman/SpringBoot.Sample


DBMS 란?


DBMS(database management system) 은 다수의 사용자들이 데이터베이스 내의 데이터를 접근할 수 있도록 해주는 

소프트웨어 도구의 집합니다.

WIKI 내용 참고 


선행 학습 사항


DBMS 연동


1. DBMS 연동을 위한 DB POOL 및 DRIVER 준비 하기

[JDBC, c3p0, H2 등 설정 추가]

DB POOL의 경우 c3p0를 이용하였습니다.

(DBCP 대신 c3p0가 더 좋다는 몇몇 내용을 참고하여 2012년 이후부터는 가능하면 c3p0를 사용합니다. 상세 내용은 다음을 참고 하여 주세요.

http://stackoverflow.com/questions/520585/connection-pooling-options-with-jdbc-dbcp-vs-c3p0)


2. 서버 기동시 DBMS 함께 기동 하기

H2 DBMS의 특징 중, 서버에 embed 가 가능합니다. 

다음 소스는 kr.pe.lahuman.spring.Application에 추가 됩니다.


[서버 기동시 DBMS 기동]


DBMS 기동시, 특정 TABLE이 존재 하지 않으면, 생성 하도록 하는 명령도 함께 추가 하였습니다.

WORKER 라는 테이블은 이후, CRUD 기능을 위한 기본 테이블 정보 입니다.


추후 DAO 패턴을 이용시, DB POOL에서 CONNECT를 쉽게 얻기 위해 DataAccessConfig 설정 파일을 추가 한다.

DataAccessConfig 에서는 Transaction 을 관리하도록 TransactionManagementConfigurer를 상속 받아 구현 한다.


package kr.pe.lahuman.spring;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.h2.jdbcx.JdbcDataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.context.annotation.Bean;
import org.springframework.core.env.Environment;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.TransactionManagementConfigurer;
import javax.sql.DataSource;
import java.beans.PropertyVetoException;

/**
 * Created by lahuman on 2014-11-26.
 */
@Configurable
@EnableTransactionManagement
public class DataAccessConfig implements TransactionManagementConfigurer {

    private Logger log = LoggerFactory.getLogger(DataAccessConfig.class);

    @Autowired
    private Environment env;

    @Override
    public PlatformTransactionManager annotationDrivenTransactionManager() {
        try {
            return new DataSourceTransactionManager(dataSource());
        } catch (PropertyVetoException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Bean
    public DataSource dataSource() throws PropertyVetoException {
        ComboPooledDataSource  dataSource = new ComboPooledDataSource();
        dataSource.setDriverClass(env.getProperty("db.driver"));
        dataSource.setJdbcUrl(env.getProperty("db.url"));
        dataSource.setUser(env.getProperty("db.user"));
        dataSource.setPassword(env.getProperty("db.password"));
        dataSource.setPreferredTestQuery("select 1");
        dataSource.setMinPoolSize(3);
        dataSource.setMaxPoolSize(20);
        dataSource.setIdleConnectionTestPeriod(300);
        dataSource.setMaxIdleTimeExcessConnections(240);
        dataSource.setAcquireIncrement(1);

        return dataSource;
    }
}

3. 간단한 근무자 관리 프로그램 생성


[CLASS DIAGRAM]


클래스 다이어 그램과 같이 해당 기능을 생성 합니다.

상세 소스는 kr.pe.lahuman.spring.employee 밑의 소스를 확인하셔요.


[구현 SOURCE]


추가 적으로, Controller에서 json Message를 자동으로 Converter 하기 위해, kr.pe.lahuman.spring.Application 클래스에 다음의 method를 추가 합니다.


[JSON을 위한 설정 추가]


UI는 

http://www.sitepoint.com/creating-crud-app-minutes-angulars-resource/ 를 가져와서 이름만 바꿔 사용 하였습니다.

AngulraJs는 따로 공부를 해야 합니다.



[결과 화면]


Spring 기초 사용법은 이 POST를 마지막으로 종료 합니다.

뭐 보는 사람도 없어서.. 혼자 쓴 내용이지만요.

스터디를 해볼지, 뭔가를 개발을 해볼지 상당히 고민되는 시점이네요.


다른 재미있는 내용을 준비해서 다시 글을 올리겠습니다.





Posted by lahuman

댓글을 달아 주세요