DAO 패턴 vs Repository 패턴, @Repository

초코칩·2024년 4월 25일
0

spring

목록 보기
10/16
post-thumbnail

스프링은 의존성 주입(Dependency Injection) 컨테이너로 사용되며, @Component로 등록된 Bean을 생성하고 관리한다. 이는 애플리케이션의 다양한 부분에서 사용되는 객체들을 관리하고, 필요한 곳에 주입하여 사용할 수 있도록 한다. 스프링은 또한 @Autowired 주석을 사용하여 Bean들 간의 의존성을 자동으로 주입할 수 있다. 이를 통해 객체 간의 결합도를 낮추고 유연하고 확장 가능한 애플리케이션을 만들 수 있다.

데이터 계층에서 Repository 패턴과 DAO 패턴의 차이를 알아보고, @Repository 어노테이션에 대해 알아보자.

DAO 패턴

DAO(Data Access Object) 패턴은 저수준 데이터 엑세스 API 및 데이터 조작을 고수준 비즈니즈 서비스와 분리할 때 사용한다. DAO 패턴에는 다음 컴포턴트로 구성된다.

  • DAO 인터페이스: 클라이언트에서 사용하는 모델 객체(또는 여러 모델 객체)에서 수행될 표준 조작이다.
  • DAO 구현체: DAO 인터페이스의 상세 구현체이다. 일반적으로 이 클래스는 단일 모델 객체를 처리할 때 JDBC 커넥션 또는 Datasource를 사용한다.
  • 데이터 객체 또는 엔티티라고도 불리는 모델 객체: 테이블 레코드에 매핑되는 간단한 POJO이다.
public class Reservation {
    private Long id;
    private String name;
    private LocalDate date;
    private ReservationTime time;
	
    //...
}

Repository 패턴

Repository 패턴은 저장소라는 뜻으로 데이터베이스로부터 도메인 객체에 대한 액세스를 위한 컬렉션과 유사한 인터페이스를 제공한다. 즉, Repository는 DB의 페러다임 불일치를 객체지향답게 도메인 객체의 집합을 조작하게 하는 역할인 것이다.

public class Reservations {
    List<Reservation> reservations = new ArrayList<>();

    public void add(Reservation reservation) {
        reservations.add(reservation);
    }

    public Reservation get(int index) {
        return reservations.get(index);    
    }
    
    //...
}

위와 같이 Reservation의 집합인 Reservations 또한 객체의 집합이므로 respository 패턴으로 볼 수 있다.

Repository 패턴은 결국 도메인 내의 객체들을 관리하는 클래스일 뿐이기에 여전히 도메인 영역에 가깝다.

Respository 패턴과 데이터 영속성

Repository 패턴을 활용하여 데이터 영속성에서 이용할 수 있다.

public interface ReservationRepository {
    void add(Reservation reservation);

    Reservation get(int reservationId);
}

데이터와 관련된 작업을 처리하고 DAO와 비슷하게 쿼리를 숨기지만, 도메인의 비즈니스 로직에 더 가까운 고수준의 위치에 있다.

Repository는 데이터베이스에서 데이터를 가져와 도메인 객체를 채우기 위해 DAO를 사용할 수 있다. 또는 도메인 객체에서 데이터를 준비하고 지속성을 위해 DAO를 사용하여 데이터를 저장소 시스템에 전송할 수도 있다.

@Repository

@Repository 어노테이션은 데이터베이스를 조작하는 Bean에 적용하도록 특수하게 설계된 어노테이션이다.

해당 어노테이션이 적용돼 있는 클래스에는 데이터 엑세스 코드가 들어 있다는 뜻이므로 스프링은 각 데이터베이스의 SQL 예외를 좀 더 애플리케이션 친화적인 DataAccessException 계층 예외로 변환한다.

Ref

profile
초코칩처럼 달콤한 코드를 짜자

0개의 댓글

관련 채용 정보