Spring JDBC 실습2: 프로젝트설정 { 라이브러리추가, ApplicationConfig, DBConfig, DataSource Test }
Ben의 프로그램2023. 7. 26. 19:47
728x90
수업목표
Spring JDBC에 대해 알아보도록 하겠습니다.
- DTO와 DAO에 대한 개념을 이해합니다. - Spring JDBC를 이용해 DAO를 작성할 수 있습니다.
Maven 프로젝트 생성
Spring JDBC 실습을 진행하겠습니다. 우선 연결이 잘 되는지부터 확인을 해볼건데요. 프로젝트 생성 먼저 진행하겠습니다.
maven-archetype-quickstart 로 Maven 프로젝트를 시작할 건데요. artifact id 는 daoexam 으로 설정하여 생성하였습니다.
위와 같이 성공적으로 프로젝트가 생성된 것을 확인할 수 있습니다.
pom.xml 라이브러리 추가
pom.xml 에 필요한 라이브러리들을 추가해주는 작업을 우선 해주도록 하겠습니다. 우선 Spring 을 사용할 것이니까 Spring-Context 가 필요하겠죠. 또한 Spring JDBC를 사용할 예정이니까 spring-jdbc 와 spring-tx 를 추가해줍니다. mysql 을 사용할 예정이므로 mysql-connector-java 라이브러리도 추가해주었습니다. 그 다음에 필요한 것은 data source 입니다. data source 도 종류가 여러가지인데 우리는 apache 에서 제공하는 commons-dbcp2 를 사용했습니다.
properties 는 위와 같이 설정해주었다. 여기까지 설정했다면 maven update 를 수행해주자. 여기까지 진행하였으면 Spring JDBC 를 이용할 준비를 마쳤습니다.
개발자가 작업하는 부분 1 : ApplicationConfig (@Import), DBConfig
우리 이전 시간에 위와 같은 설계도를 그려보았는데요. 우선 ApplicationContext 라는 공장은 Spring JDBC가 생성합니다. 우리가 작업해주어야 하는 부분은 ApplicationContext 한테 어떤 부분들을 읽어들여서 공장을 만들어달라는 설정파일을 만들어야 하기 때문에 ApplicationConfig 를 개발자가 작업해주어야 합니다.
config 파일은 일반 java 파일과는 성격을 달리하죠. 따라서 config 라는 패키지를 만든 다음에 해당 패키지 안에 ApplicationConfig 파일을 만들었습니다.
우선 이 클래스가 Configuration 이라는 것을 ComponentScan 이 알 수 있게 @Configuration 어노테이션을 만들어줍니다. 그 다음에 @Import 라는 어노테이션을 사용할 건데요. @Import 어노테이션을 사용하면 설정 파일을 여러개로 나누어서 작성을 할 수 있습니다. 현재 ApplicationConfig 파일에 모든 설정을 다 넣는 것이 아니라 데이터베이스 연결에 관한 연결은 따로 빼주어서 설정의 성격에 따른 분류를 해준 것이라고 이해하시면 됩니다. 이렇게 작성했다면 이번에는 DBConfig 파일을 실제로 작성해줄 차례입니다.
DBConfig 파일도Configuration 이잖아요. @Configuration 어노테이션을 추가해줍니다. 그 다음은 @EnableTransactionManagement 어노테이션을 추가해주는데요. 트랜잭션과 관련해서는 다음파트에서 배울예정이니까 지금은 우선 트랜잭션과 관련된 설정이구나하고 이해하고 넘어가면 될 것 같습니다.
DBConfig 파일은 DB와 관련한 설정 파일이죠. 어떤 설정을 해주어야 할까요?우선 driverClassName 이 필요하구요. 어떤 데이터베이스에 접속할 것인지 url 정보를 주어야 하구요. DB에 접속하기 위한 username 과 password 정보가 필요합니다.
그 다음에 Spring JDBC 에서 DB에 접속을 할 때 Connection Pool 을 통해서 커넥션을 얻어서 접속을 하려고 하는데요. 이때 ConnectionPool 을 관리하는 것이 DataSource 라고 했었습니다. 이 DataSource 를 사용하기 위해서 어떤 클래스가 필요하냐면, 바로 DataSource 를 생성할 수 있는 클래스가 필요합니다. 그래서 개발자가 DataSource 객체를 Bean 객체로 등록을 해주어야 합니다. Bean 객체로 등록할 수 있는 @Bean 어노테이션을 사용하면 됩니다.
그런데, DataSource 는 우리가 인스턴스를 생성하지 않고 Bean 공장에서 만들어주는데요. 우리가 방금 전에 Dependency 로 DataSource 관련 라이브러리를 다운로드 받은 이유입니다. 위에 보이는 DataSource 객체를 개발자가 생성하지 않고 공장이 생성한 것을 가져다가 사용하기 위한 설정을 지금 작성하는 것입니다.
Bean 등록하는 방법은 메서드 쓰는 방법과 유사하게 사용하면 된다고 했었는데요. 리턴 값으로 DataSource 객체를 받을 것이구요. 메서드의 이름은 Bean에 자동으로 등록이 될 때 Id 로 지정이 되는 이름과 같게 설정해야합니다.
DataSource 가 생성될 때 알아야하는 정보가 무엇이어야 할지 생각해보아야 하는데요. DataSource 는 Connection 을 관리할 것이기 때문에 JDBC Driver 라던가, URL, Username, Password 에 대한 정보를 알고 있어야 합니다. 여기까지 진행을 했다면 최소한의 설정은 끝난 상태입니다. 이런 정보들을 잘 읽어들여서 데이터베이스에 잘 접속이 되는지 확인해보겠습니다.
개발자가 작업하는 부분 1 테스트하기 : DataSourceTest
DB 연결이 잘 진행되는지 테스트를 진행해보겠습니다.
main 패키지를 만들고 DataSourceTest 파일을 생성했습니다.
우선 Bean 들을 여러개 생성하고 관리하는 공장을 만들어야합니다. ApplicationContext 공장을 생성합니다. 이때 현재 우리의 ApplicationContext 는 Annotation 을 읽어들여야하는데요. 관련 설정을 ApplicationConfig.java 에 구현해 놓았었습니다. 따라서 new AnnotationConfigApplicationContext 의 인자로 ApplicationConfig.class 를 넣어줍니다.
이 공장을 통해서 DataSource 객체를 얻어내야하는데요. 공장의 getBean( ) 메서드를 통해서 얻어왔습니다.
현재 우리가 DataSource 를 사용하는 이유는 ConnectionPool 에서 Connection 을 얻어오기 위해서였죠. 이번에는 getConnection( ) 메서드를 통해서 DataSource 에서 Connection 을 얻어왔습니다. 그리고 연결이 성공적으로 진행되었다면 "접속 성공"을 출력하는 코드를 작성하였습니다. 예외 처리는 간단하게 예외구문만 보는 것으로 처리를 했구요. 현재 객체를 열어서 정보를 얻었는데요. 객체를 열었으면 반드시 닫아주어야 오류가 발생하지 않는다고 했었죠. finally 에서 객체를 닫아주었습니다.
이 Test 코드를 실행시켜서 "접속 성공" 이라는 메시지가 나오면 우리의 실습은 성공한 겁니다. 잘 실행되고 있는 것을 확인할 수 있습니다.