본문 바로가기
배우고 있습니다/back-end 개발

[Mysql+Spring] DB연동 및 DataSource 사용하기

by 유헤 2019. 5. 28.

기존의 JSP/Servlet 방식에서는 getConnection이라는 메소드를 따로 주어 매번 DB에 연결하는 드라이버매니저를 사용했다.

하지만,

Connection 관리

기존 JDBC 프로그램 구현으로 DBMS와 연동 작업을 할때는 웹 클라이언트로부터 요청이 있을 때마다 DB서버에 연결하기 위해 Connection 객체를 얻어내야 했습니다. 이러한 기존의 JDBC 프로그래밍 작업에는 다음과 같은 문제가 있습니다.

  • DB프로그램에서 트랜잭션 처리와 Connection 관리는 시스템의 성능과 안전성에 큰 영향을 미친다.
  • Connection 과정은 일정 시간이 필요한 부담과 작업이다.
  • 불필요한 연결에 의한 서버 자원의 낭비를 발생한다.
    https://opentutorials.org/module/3569/21223

이라고 적혀져 있듯이, Connection 과정을 최소화 하기 위해 나타난 것이 DataSource입니다.

 

InitialContext 라는 객체를 사용하는데 이게 바로 JNDI(Java Naming  and Directory Interface) 라고 하며, 디렉터리 서비스에서 제공하는 데이터 및 객체를 발견하고 참고하기 위한 자바 API입니다.

 

Naming & Directory 서비스는 실제 어떤 자원을 가지고 서비스 한다는 의미가 아니라, 어떤 서버나 애플리케이션에서 분산환경에 서비스하고자 하는 자원을 이 Naming & Directory 서버에 이름값과 실제 자원을 연결하여 등록하면, 해당 자원을 이용하고자 하는 다른 애플리케이션에서 Naming & Directory 서버에 접근하여 이름값만을 가지고 자원을 연결하여 이용할 수 있게 하는 개념입니다.

네이밍 서비스의 대표적인 예로 DNS서버가 이런 기능을 한다. 브라우저창에 URL을 입력하면 브라우저는 DNS서버를 통해 도메인에 해당하는 IP주소를 얻습니다. 그리고 IP 주소를 통해 실제 인터넷 서버에 접속합니다. 결국 DNS 서버는 실제 인터넷 서비스를 수행해주는 곳이 아니며, 단지 도메인과 IP 주소만을 연결해주는 기능을 하는 것입니다. 

Naming & Directory 서버 또한 분산환경에서 자원을 연결해주는 기능을 합니다.

https://opentutorials.org/module/3569/21223

 

간단히 말해, 이름-환경설정 형식으로 정해놓으면 "이름"이라고 불리는 객체만 불러도 해당 자원을 가져올 수 있다는 뜻입니다.

 

설정하는 방법은 Servers(Tomcat) - context.xml 에서 

이런식으로 설정해주면 됩니다. (참고 인프런 신입 프로그래머를 위한 자바 스프링 (Spring) 프레임워크 강좌  https://www.inflearn.com/course/%EC%9E%90%EB%B0%94-%EC%8A%A4%ED%94%84%EB%A7%81-%EA%B0%95%EC%A2%8C/lecture/1140 )

 


이렇게 JDNI 를 사용하는 방법이 있고,

스프링 어노테이션으로 설정하는 방법은

root-context.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    

    <!-- Root Context: defines shared resources visible to all other web components -->

    

    <!-- MySQL dataSource -->

    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"

        <property name="driverClassName" value="com.mysql.jdbc.Driver"/

        <property name="url" value="jdbc:mysql://127.0.0.1:3306/test"/

        <property name="username" value="user"/

        <property name="password" value="user123"/>

    </bean>

                

</beans>

이렇게 설정해줄 경우, Datasource에 @Autowired 만 해줘도 등록이 됩니다.

자세한 설정 방법은 https://its-easy.tistory.com/15 에 나와있으므로, 참고해주시면 될거 같습니다.