웹개발

스프링 웹개발 용어정리:: DAO 란?

업무 중 2020. 9. 28. 22:05

DAO

Data Access Object의 약자로 간단히 Database의 data에 접근을 위한 객체이다.

Database에 접근을 하기위한 로직과 비즈니스 로직을 분리하기 위해서 사용한다.

 

웹 서버는 DB와 연결하기 위해 매번 커넥션 객체를 생성하는데, 이것을 해결하기 위한 것이 커넥션풀(ConnectionPool)이다. ConnectionPool이란 connection 객체를 미리 만들어두고 그것을 가져가 사용하거나, 다 쓴 후 반환하는 것인데...

 

사용자가 접속하여 한 커넥션만 이용하고 종료하는 것이 아니고, 말그대로 액팅하는 모든 것에서 커넥션이 발생한다. 그렇기에 커넥션풀은 커넥션을 만드는 오버헤드를 효율적으로 이용하기 위해 DB에 접속하는 객체를 제한하고, 모든 페이지에서 그 객체만을 이용하는 것으로 트래픽을 줄일 수 있는 듯 하다.

 

즉, 어떤 클래스에서든 한 객체만 연결해두면 결과적으로 모든 데이터베이스에 접근할 수 있게 된다. 그를 위해 제한한 객체를 DAO객체라고 표현한다. 

 

DB를 사용해 데이터를 조회하거나 수정 등 조작하는 기능을 전담하는 오브젝트이다.

 

이를통해 사용자는 자신이 필요한 인터페이스를 DAO에게 보내고, DAO는 인터페이스를 구현한 객체를 사용자가 이용하기 좋도록 반환해준다. DB에 대한 접근을 오로지 DAO만 담당하도록 함으로써 다수의 원격호출을 줄일 수 있고, DB의 과부하를 방지할 수 있다.


DTO와 VO를 정리하다보니 자연스레 DAO도 궁금해졌다.

DTO(VO)와 DAO는 뗄레야 뗄 수 없는 관계.

 

간단히 표현해보자면,

DB가 은행의 금고라면,

DAO는 금고를 열 수 있는 패스워드나, 고객의 요청에 따라 금고에 접근할 수 있는 관리자라고 할 수 있겠다. 

실제로 자신의 돈은 아니지만, 꺼내서 가져다 줄 수 있는 !

 

DTO나 VO의 경우, 입출금을 하기 위해 작성하는 간단한 입출금요청서 자체라고 생각하면 이해가 좀 빠를지도 모르겠다.