Servlet JSP MVC Spring

[Spring] 마이바티스 프레임워크, 애너테이션

vhxpffltm 2020. 6. 23. 22:59
반응형

Spring JDBC로 DB와의 연동 설정

sql문이 복잡해지면서 개발이나 유지관리에 어려움이 생기고 확장된 JDBC의 기능을 스프링에서 제공한다.

물론 JDBC보다는 마이바티스나 하이버네이트 같은 데이터베스 연동 관련 프레임워크를 사용하니 간단하게만 알아보고 간다.

 

나중에 Spring 프로젝트를 하게 되면 아래와 같은 JDBC 관련 설정 파일을 확인할 수 있다. 

File Description
web.xml ContextLoaderListener를 이용해 빈 설정 xml 파일들을 읽음
action-servlet.xml 스프링에서 필요한 여러 가지 빈을 설정
jdbc.properties 데이터베이스 연결 정보 저장
action-service.xml 서비스 빈 생성을 설정
action-dataSource 스프링 JDBC 설정에 필요한 정보를 설정

 

마이바티스 프레임워크

 

이전까지의 JDBC를 연동하려면 SQL문이 프로그래밍 코드에 섞여 코드를 복잡하게 만든는 문제가 있다. 이 방법을 개선해 SQL문의 가독성을 높여 사용하기 편하게 만든것이 마이바티스 프레임워크이다.

 

마이바티스 프레임워크는 아래의 특징이 있다.

1) SQL실행 결과를 자바 beans 또는 Map 객체에 매핑해 주는 Persistence 솔루션으로 관리한다. SQL을 소스코드가 아닌 XML로 분리한다

2) SQL문과 프로그래밍 코드를 분리해 구현한다.

3) 데이터소스(DataSource) 기능과 트랜잭션 처리 기능을 제공한다.

 

데이터베이스 연동 시 사용되는 SQL문을 미리 xml에 작성해 놓고 애플리케이션에 데이터베이스 연동 시 해당 SQL문에서 사용될 데이터를 지원하는 해당 매개변수에 저장한 후 SQL문에 전달한다. 그리고 전달된 매개변수와 SQL문을 DBMS로 전송하여 실행하고 그 결과를 애플리케이션에서 제공하는 자료형으로 반환한다.

 

마이바티스를 이용한 CRUD는 진행하지 않는다.

 

여기서는 STS 환경에서 마이바티스 라이브러리를 적용시켜본다.

 

스프링의 pom.xml 파일의 <dependecy> 태그를 이용하면 바로 적용할 수 있다. commons-beantuils 등 데이터베이스 기능 관련 라이브러리와 mybatis.jar, mybatis-spring.jar 라이브러리를 설정하고 mysql 드라이버 및 오라클 드라이브를 아래와 같이 적용할 수 있다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<!--........ 중략 ...... -->
<!-- Test -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.7</version>
            <scope>test</scope>
        </dependency>    
        
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.8.0</version>
        </dependency>
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.2.2</version>
        </dependency>
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib-nodep</artifactId>
            <version>2.2</version>
        </dependency>
        <!--  데이터소스 관련 라이브러리 -->
        
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.1.0</version>
        </dependency>
        <!--  마이바티스 관련 라이브러리 설정 -->
        
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.29</version>
        </dependency>
        <dependency>
            <groupId>jdbc.oracle</groupId>
            <artifactId>OracleDriver</artifactId>
            <version>12.1.0.2.0</version>
            <scope>system</scope>
            <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/ojdbc8.jar</systemPath>
        </dependency>
        <!-- 로컬에 설치한 오라클 드라이버 라이브러리 설정, systempath로 로컬에 설치한 위치를 지정 -->    
            
    </dependencies>
<!--........ 중략 ...... -->
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

 

디렉토리 구조는 아래와 같으며 pom.xml을 수정하면 라이브러리가 추가된 것을 확인할 수 있다.

 

이번에는 마이바티스 관련 XML 파일들을 추가한다.

 

스프링 프로젝트에 위의 그림과 같이 추가해준다. member.xml에는 CRUD에 대한 SQL문이 들어있고 modelConfig.xml 에는 alias가 들어있다. 추후 프로젝트를 할때 연동하고 코드를 설명하겠다.

 

중요한것은 이 두개의 xml 파일을 읽어들이는 부분인데 이는 스프링 프로젝트를 시작할 때 상세하게 설명한다. 

스프링 프로젝트에서 web.xml을 통해 마이바티스 프레임워크 설정파일을 읽는 부분을 부르고 해당 설정 파일을 부르는곳에서 2개의 xml 설정파일을 읽는 방식이다.

 

스프링 애너테이션

스프링 3.0 이상부터는 DI(의존성 주입) 같은 자바 코드와 관련된 설정은 직접 코드에서 할 수 있게 애너테이션 기능을 제공한다.

이를 사용하려면 애너테이션 관련 클래스를 xml 설정 파일에서 빈으로 설정해야 한다.

 

<context:component-scan > 태그로 패키지 이름을 지정하여 애플리케이션 실행 시 해당 패키지에서 애너테이션으로 지정된 클래스를 빈으로 만들어 준다.

이 태그로 지정한 패키지에 위치하는 클래스에 지정하는 여러 애너테이션이 있다.

annotation 기능
@Controller 스프링 컨테이너가 component-scan에 의헤 지정한 클래스를 컨트롤러 빈으로 자동 반환
@Service 스프링 컨테이너가 component-scan에 의헤 지정한 클래스를 서비스 빈으로 자동 반환
@Repository 스프링 컨테이너가 component-scan에 의헤 지정한 클래스를 DAO 빈으로 자동 반환
@Component 스프링 컨테이너가 component-scan에 의헤 지정한 클래스를 빈으로 자동 반환

 

여기까지 스프링에 필요한 이론에 대해 정말 간단하게 알아보았다.

다음엔 이전에 사용한 게시판으로 프로젝트를 하면서 천천히 코드를 보며 직접 웹 페이지를 STS Spring 프로젝트로 진행해보자. 

 

Reference

자바 웹을 다루는 기술 -길벗-

반응형