본문 바로가기
IT/Spring

DAO의 분리

by Jeami 2013. 6. 28.
반응형


Spring DAO

스프링이라는 것으로 DAO를 분리한다는 프레임워크는 어떤 장점과 효율성을 갖고 있는지가 스프링을 접하는 초기 개발자에게는 여간 중요한 것이 아닌 것 같습니다.

"그냥 스프링이 편리한가 보다"라고 생각하고 조금씩 이해해가도 좋지만, 이해해야만 하는 개념과 궁극적으로 스프링의 목적이 무엇인지를 알아야 프로그래밍할 때에 그 목적에 맞게 작업할 수 있게 된다고 생각합니다.

단적으로 표현하면 스프링,

자유롭고 편리하게 변경, 발전, 확장시키는데 유용하며 미래를 생각하고 보다 광대한 자료를 목적으로 한다면 반드시 스프링으로 작업해두는것이 좋겠습니다. 이것이 스프링의 사용 목적입니다.

결국은 유지보수 문제인 것입니다.

한 명은 단 몇 줄의 코드만 수정하고 그 기능을 사용하는데 전혀 문제가 없는 반면, 동일한 기능을 구현하기 위해 다른 한 명은 코드의 많은 부분을 변경하고 그에 따라 시간을 10배 이상으로 소요하게 된다면 어느쪽이 현명하고 미래지향적이며 뛰어난 사람이라고 할 수 있을까요? 물론 전자입니다.

이것이 스프링의 기능입니다.





========================================

UserDao라는 클래스가 있습니다. 추측할 수 있듯이 사용자 정보 DB를 관리하는 클래스입니다.

그렇다면 이 클래스의 관심사는 무엇일까요? 즉, 무슨 기능을 하려고 하는 걸까요?

3가지 정도로 구분해볼 수 있겠습니다.

1. DB연결을 위한 커넥션

    어떤 DB, 드라이버를 쓰며 로그인 정보는 어떤 것인가?

    그 커넥션을 생성하는 방법은 무엇인가?


2. DB 삽입, 수정, 삭제, 검색 등의 기능을 위한 SQL문 처리는 어떻게 할 것인가?

    Statement, PreStatement를 어떻게 적절하게 사용할 것이며 그 문법은 무엇인가?


3. 작업이 끝났을 때, Statement와 Connection 오브젝트를 close 해 줌을써 공유한 리소스를 반환한다.

이런 정도의 목적과 목표가 있을 것입니다.


먼저, DB연결을 위한 Connection 부분부터 살펴보도록 하겠습니다. 가장 먼저 생각해야 할 부분이니까요^^

public void add(User user) throws ClassNotFoundException, SQLException {

Connection conn = getConnection() ;

}

public User get(String id) throws ClassNotFoundException, SQLException { 

Connection conn = getConnection() ;

}

--------------------

위와 같이 UserDao클래스 안에 중복된 코드가 있다고 한다면 아래와 같이 중복코드 메소드를 추출할 수 있겠습니다.


private Connection getConnection() throws ClassNotFoundException, SQLException {
    Class.forName("com.oracle.jdbc.Driver");

   Connection conn = DriverManager.getConnection(

"jdbc:oracle://localhost/8080", "spring, "exam");

)

}

(설명을 위한 임시생성 코드이며 실제로 작동되지는 않습니다)

------------------

이렇게 중복된 코드를 추출해내 간단하게 만들어줍니다.

메소드가 100개 이상 500개 이상 되어버리고, DB 연결과 관련된 부분에 수정을 해야할 경우,

위와 같이 하나로 만들어두지 않으면 모든 메소드 안의 내용을 수정해주어야 합니다. 여간 고생이 아닐 수 없겠죠?^^

그렇기 때문에 언제나 미래를 염두해둔 유지보수를 생각하며 코딩해야 합니다.

이렇게 기능이 추가되거나 변경된 부분은 없지만 간단하게 만들어 사용하기 쉽게 코딩해주는 작업은 리펙토링 작업이라고 합니다.

더불어 중복된 메소드를 추출하여 뽑아내는 것을 리팩토링의 메소드 추출 기법이라고 합니다.


 리팩토링

기존의 코드를 외부의 동작방식에는 변화없이 내부 구조를 변경해 재구성하는 작업.

코드 내부 설계가 개선되어 코드를 이해하기 쉬워지고, 유지보수에 용이합니다.

생산성이 향상되어 경고하면서도 유연한 프로그램을 만들 수 있게 됩니다.^^

리팩토링은 본격적으로 적용하기 위해선 학습과 훈련이 필요합니다. 

어떤 경우에 리팩토링을 해야하는 것인지, 그 방법은 무엇인지를 알아야 할테니까요.



반응형

'IT > Spring' 카테고리의 다른 글

DB Connection의 독립  (0) 2013.06.28
오브젝트  (0) 2013.06.25
Spring(스프링)이란 무엇인가?  (0) 2013.06.24
스프링의 특징(Spring)  (0) 2013.06.24

loading