Data Access Objects의 약어로써

실질적인 DB와의 연결을 담당하는 일을 가진 객체를 말합니다.

DAO를 사용하는 이유는... 효율적인 컨넥션 관리와 어느정도의 보안성입니다.

 

일단 DAO를 왜 사용하는지 아시면 답변이 될꺼 같네요...

보통 웹페이지에서 DB에 있는 자료를 가져올때는 컨넥션 객체를 통해서 가져옵니다.

이 컨넥션 객체는 웹서버와 디비간의 연결통로를 열어주는 역할을 한다고 보시면 됩니다.

 

예를 들어 검색을 할경우...

사용자가 검색을 하면 웹페이지는 웹서버에 검색을 요청 합니다. 그러면 웹서버는 컨넥션 객체를 생성한 후에 이 컨넥션 객체를 통해서 디비에 쿼리를 날립니다. 그러면 디비는 쿼리후에... 결과를 컨넥션 객체를 통하여 ResultSet에 담아서 반환합니다. 그리고는 컨넥션 객체는 가비지에 의해서 사라지죠^^

가비지 특성상 언제 사라지는지는 모릅니다 ㅋ

 

문제는... 분당 수십에서 많게는 수천번의 DB연결을 요청할경우...

웹서버는 DB와 연결하기 위해서 매번 컨넥션 객체를 생성합니다.

컨넥션 객체를 생성하는데에는 메모리와 시간을 꽤 잡아먹죠....

이것을 해결하기 위해 나온것이 컨넥션 풀입니다.

 

ConnectionPool 이란...

컨넥션 객체를 미리 만들어 놓고 그것을 가져다 쓰는것입니다.

또 다쓰고 난 후에는 반환해 놓는것이죠...

매번 만들었다가 지울 필요가 없기때문에 매우 효율적이죠...

 

하지만 유져 한명이 접속해서 한번에 컨넥션만 일으킬까요?

보통은 아니죠....

게시판 하나만 봐도... 목록볼때 한번, 글읽을때마다 한번, 글쓸때 한번 등등...

엄청나게 많은 컨넥션이 일어나죠...

그런데 매번 페이지 마다 컨넥션이 일어나면.... 아무리 컨넥션풀이라도 컨넥션이 금방 동이 나버리겠죠.... 그럼 컨넥션풀은 컨넥션을 또 만들게 됩니다... 그럼 이것도 엄청난 오버헤드죠....

이런 일을... 더욱더 효율적으로 하기위해 DB에 접속하는 객체를 전용으로 하나만 만들어서 사용하면? 그리고 모든 페이지에서 그 객체를 호출해다 사용한다면?

그렇습니다... 바로 컨넥션을 하나만써도 되는것이죠.

이렇게 컨넥션을 하나만 가져오고 그 컨넥션을 가져온 객체가 모든 DB와의 연결을 하는것이 바로 DAO객체입니다^^


참조 - http://blog.naver.com/wkdal001/40028348252

[출처] DAO란...|작성자 꿈가득

Posted by linuxism

댓글을 달아 주세요