DAO는 MyBatis에서만 사용하는 걸까? JPA에서도 활용 가능한가?

문준일·2025년 1월 18일
0
post-thumbnail

개발을 하다 보면 데이터베이스와의 상호작용을 관리하는 DAO(Data Access Object)라는 개념을 자주 접하게 됩니다. 그런데 MyBatis와 JPA 같은 ORM 도구를 사용할 때 DAO의 사용 여부나 방식이 다르다는 이야기를 들어본 적이 있으신가요? 이번 글에서는 MyBatis와 JPA에서 DAO의 역할과 사용 방식, 그리고 두 기술의 차이점을 중심으로 설명드리겠습니다.

1. MyBatis에서의 DAO

MyBatis는 SQL 쿼리를 명시적으로 작성해야 하는 프레임워크입니다. 따라서 MyBatis에서는 DAO 클래스가 SQL 쿼리를 호출하는 중요한 역할을 담당합니다. DAO는 보통 XML 매핑 파일이나 어노테이션을 통해 SQL과 연결되며, 데이터베이스와의 통신을 처리합니다.

MtBatis DAO 예시

@Mapper
public interface UserDAO {
    User findById(@Param("id") Long id);
    void insertUser(User user);
    void updateUser(User user);
    void deleteUser(@Param("id") Long id);
}

특징

  • SQL 작성이 명시적이기 때문에 복잡한 쿼리 작성이 용이합니다.
  • 데이터베이스와 직접적인 상호작용을 수행합니다.
    MyBatis에서는 DAO 패턴이 자연스럽게 적용되며, 이 패턴이 개발 구조를 체계적으로 만들어줍니다.

2. JPA에서의 DAO

JPA는 ORM(Object Relational Mapping) 기술로, 객체와 데이터베이스 간의 매핑을 자동으로 처리합니다. JPA에서는 DAO 대신 Repository 패턴을 사용하는 경우가 많습니다. Repository는 DAO와 유사한 역할을 하지만, 데이터베이스 접근을 더 추상화하여 개발자가 쿼리를 직접 작성하는 부담을 줄입니다.

JPA Repository 예시

public interface UserRepository extends JpaRepository<User, Long> {
    User findByUsername(String username);
}

특징

  • 쿼리 작성이 자동화되거나 최소화됩니다.

  • 메서드 이름 기반으로 쿼리를 생성하므로 반복 작업이 줄어듭니다.

  • 복잡한 쿼리가 필요한 경우 JPQL(Java Persistence Query Language)이나 Native Query를 사용할 수 있습니다.

JPA에서는 DAO라는 개념을 명시적으로 사용하지 않고 Repository가 그 역할을 대신합니다. 하지만 특정한 상황에서는 DAO를 직접 구현해 사용할 수도 있습니다.

3.MyBatis와 JPA의 차이점

4. DAO는 JPA에서도 사용할 수 있을까?

DAO는 JPA에서도 사용할 수 있지만, JPA의 기본 철학은 객체 중심 설계와 자동화된 데이터 접근입니다. 따라서 JPA에서는 보통 Repository를 사용하여 DAO 역할을 대체합니다. 하지만 다음과 같은 경우에는 DAO를 직접 구현하기도 합니다.

  • 복잡한 데이터베이스 쿼리가 필요할 때
  • 특정 프로젝트에서 DAO 패턴을 명확히 유지하려는 경우

결론

DAO는 MyBatis에서만 사용하는 개념이 아닙니다. MyBatis와 JPA 모두에서 DAO는 사용할 수 있지만, 두 기술의 철학과 접근 방식에 따라 구현 방식이 다릅니다. MyBatis는 명시적인 SQL 작성을 지원하기 때문에 DAO 패턴이 필수적이며, JPA는 Repository 패턴을 통해 더 추상화된 데이터 접근을 제공합니다. 상황에 맞는 패턴을 선택해 사용하는 것이 중요합니다.

profile
하나씩 실천하는 개발자

0개의 댓글