MVC패턴으로 작업하거나 기존의 소스들을 보다보면

항상 interface를 먼저 작성하고 impl 클래스를 구현한다.

하지만 지금까지 해온 프로젝트들 중에서 interface가 없어도 아무런 문제가 없는 경우가 상당히 많았다.

interface를 써야한다고 누군가를 설득해야할 때 이런 경우 설명할 수 없었다.

해봤자 교과서에 나오는 결합도를 낮추고 다형성을 추구한다는 말로는 명확히 설명할 수 없다.


스프링 관련 책에서 postProcessor관련 부분을 보는 중

객체를 캐시가능한 개체로 교체하게 되면 인터페이스가 아닌 기존 설정 클래스로 불러오는 과정에서 에러가 발생한다.

이전 객체는 새 객체로 교체 되었기 때문이다.

이런 경우 인터페이스를 통해 불러오게 된다면 같은 인터페이스를 구현한 객체들을 교체해도 예외가 발생하지 않는다.

간신히 interface와 serviceImpl의 필요성을 느낄 수 있었다.

그런데 스프링 AOP로 구현한다면 proxy객체로 반환할 텐데 이 경우 그대로 serviceImpl을 쓸 수 있는 것 아닌가 생각이 든다.

테스트를 해봐야 하는데 음...





maven을 eclipse에서 maven project만들면서 pom.xml로만 써봤다.

CLI에서 메이븐을 사용해서 자바 소스를 집적 받아오고 또 메이븐 리파지터리에 저장할 수도 있다.

나도 아직 잘 모른다.

링크로 대체 - 이것저것 따라하다 보면 된다.

https://www.lesstif.com/display/JAVA/maven+deploy+plugin

기초적인 스프링 강의를 다 들었다면 누구나 설정할 수 있겠지만

차분히 하나씩 집어 보기로 한다.


JDBC : 자바와 데이터베이스를 연결시켜주는 기술

Java DataBase Connectivity

우리가 꼭알아야 할 것은 커넥션 풀을 만들어주는 DataSource
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.0.1.RELEASE</version>
</dependency>
를 받아서 보면 DataSource 관련 클래스가 있다. DriverManagerDataSource가 있다.
설정을 프로퍼티에 넣어서 빈 등록하면 된다.
apache commons에서 나온 SimpleDataSource나 BasicDataSource같은 것들도 있다.
여기서는 최근에 빠르다고 하는 hikari를 써보겠다. 
메이븐
<dependency>
        <groupId>com.zaxxer</groupId>
        <artifactId>HikariCP</artifactId>
        <version>2.7.2</version>
</dependency>
빈 등록
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource">
<property name="dataSourceClassName" value="com.mysql.jdbc.Driver" />
<property name="dataSourceProperties">
<props>
<prop key="url" >jdbc:mysql//localhost:3306/wook</prop>
<prop key="user">root</prop>
<prop key="password">root</prop>
</props>
</property>
</bean>

SqlSession : statement를 만들고 실행한다.

jsp부터 공부했다면 Statement와 execute() 메서드, ResultSet들을 알것이다.
이를 편리하게 쓰게 해주는 ibatis의 클래스다.
<bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory" >
<property name="dataSource" ref="dataSource" />
</bean>
openSession이란 메서드로 SqlSession을 가져온다.

이렇게 오픈하고 클로즈하는게 귀찮을 수 있다.
<bean class="org.mybatis.spring.SqlSessionTemplate" >
<constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
SqlSessinTemlate을 쓰면 오픈, 커밋, 클로즈의 귀찮음을 피할 수 있다.

이렇게만 설정하면 
org/apache/ibatis/transaction/TransactionFactory  가 없다고 에러가 발생한다.
많이 봤던 getConnection(), close(), commit(), rollback()같은 메서드가 있는 인터페이스다.

메이븐 등록을 해준다.
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.5</version>
</dependency>


다른 dataSource를 쓴다고 spring jdbc를 메이븐 주입안했다면 

org/springframework/jdbc/datasource/TransactionAwareDataSourceProxy

를 찾는 에러가 발생한다. spring-jdbc도 필요하다.

+ Recent posts