티스토리 뷰

WEB/자바

Dao는 어떤경우에 쓰나요?

silverline79 2026. 3. 25. 21:17

**DAO(Data Access Object)**는 이름 그대로 **'데이터 접근을 전담하는 객체'**입니다.

최근 스프링 부트(Spring Boot)와 JPA를 사용하는 환경에서는 Repository라는 용어를 더 많이 쓰지만, MyBatis나 JDBC를 직접 사용하는 환경에서는 여전히 DAO라는 명칭을 자주 사용합니다.

어떤 경우에 DAO를 쓰는지, 그리고 왜 쓰는지 핵심을 짚어드릴게요.


1. DAO를 사용하는 주요 상황

① DB 로직과 비즈니스 로직을 분리하고 싶을 때 (관심사 분리)

서비스(Service) 계층에서 SQL 쿼리를 직접 작성하거나 DB 연결 코드를 넣으면 코드가 매우 지저분해집니다. 이때 **"DB랑 대화하는 건 네가 다 해"**라고 역할을 맡기는 대상이 DAO입니다.

② MyBatis나 JDBC를 사용할 때

MyBatis 설정에서 인터페이스와 XML을 연결하거나, SqlSession을 직접 호출하여 데이터를 가져오는 로직을 캡슐화할 때 DAO 클래스를 생성합니다.

③ 데이터 소스가 여러 개일 때

애플리케이션이 하나 이상의 데이터베이스(예: MySQL + Oracle)에 접근해야 한다면, 각 DB에 맞는 DAO를 만들어 서비스 계층에 일관된 인터페이스를 제공할 수 있습니다.


2. DAO vs Repository (차이점이 뭔가요?)

두 용어는 혼용되기도 하지만, 엄밀히 따지면 지향점이 조금 다릅니다.

구분 DAO (Data Access Object) Repository (저장소)
관점 데이터베이스 중심 (Table 중심) 도메인 객체 중심 (객체 상태 관리)
역할 SQL을 실행하고 데이터를 CRUD 하는 데 집중 객체를 컬렉션처럼 관리하며 비즈니스적 의미를 가짐
기술 주로 MyBatis, JDBC에서 많이 사용 주로 JPA, Hibernate에서 많이 사용

3. DAO를 쓰면 얻는 이점

  1. 코드의 재사용성: 동일한 Select 쿼리가 여러 서비스에서 필요할 때, DAO의 메서드 하나만 호출하면 됩니다.
  2. 유지보수 용이: DB 테이블 구조가 변경되어 쿼리를 수정해야 할 때, 서비스 코드는 건드리지 않고 DAO 내부만 수정하면 됩니다.
  3. 낮은 결합도: 서비스 계층은 어떤 DB 기술(MyBatis인지 JDBC인지)이 쓰이는지 몰라도 데이터만 잘 받아오면 됩니다.

4. 흐름 속의 DAO 위치

  • Service: "회원 가입을 처리해줘." (비즈니스적 명령)
  • DAO: (내부적으로) INSERT INTO members ... 실행. (기술적 처리)

요약하자면

"DB와 관련된 모든 지저분한 코드(SQL, 커넥션 등)를 한곳에 몰아넣고 관리하고 싶을 때" DAO를 사용한다고 보시면 됩니다.

 

※ 해당 내용은 Google Gmini3.0에서 작성되었습니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2026/03   »
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
글 보관함