Repository, DataMapper와 DAO

Su hwan Choi·2022년 11월 23일
0

비슷해보이지만 서로 다른것들

프로젝트를 시작하면 초반에 한번씩 고민하고 넘어가는 것들이 있다. DTO, VO 와 마찬가지로 DAO, Repository, DataMapper 가 그 중 하나인데, 이번 기회에 정리해보려 한다.

DAO

현재는 사실상 일반화 되서 사용되는 ‘데이터를 가져오는 객체’ 라는 뜻

  • 도메인 모델이 강조되는 근래의 상황에는 사실상 데이터 접근 객체를 뜻하는 단어가 되었다
  • ibatis(Mybatis의 이전이름) 에서는 내부에 DAO 라는 키워드가 존재했으나, Mybatis로 넘어오면서 SQLMapper 라는 키워드로 변경됬다.

Data Mapper

1개의 도메인모델이 여러 테이블과 관련이 있다

  • 도메인 객체의 스키마가 테이블 스키마와 차이가 큰 경우 사용할 수 있다.
  • Mybatis의 @Mapper는 DataMapper가 아닌 SQL Mapper라는 뜻이다.

Repository

테이블은 모르겠고, 프로그램이 동작하는 객체세상에서 도메인모델을 가져오고, 저장하는 주머니

  • 일반적으로 데이터는 RDB에서 나오지만, 객체로 변환되어 메모리에서 가져오고 저장된다.
  • 이 개념이 적용된 패턴이다. 하나의 정해진 패턴이 아닌 RDB로부터 격리할 수 있고 그로인해 단위테스트를 가능하게 한다.
  • Spring의 @Repository는 이 개념을 적용한다. 추가 설명으로 J2EE의 DAO 역할을 하지만 DAO 와 Repository 의 차이점이 있다는 내용도 볼 수 있다.

왜 이렇게 헷갈리는가?

  • 각자 개발자들이 개발하는 환경부터 위의 용어들이 처음 사용되는 시간이 너무나도 다양하기 때문이라 생각한다.
  • Repository, DataMapper 등이 처음 등장했을 때의 시점과 지금의 개발환경은 동일하지 않다.
  • 그렇다고 그당시 내용들을 무시할 수는 없다. 본질은 변하지 않기 때문이다.
  • Spring 중심의 개발이 많아지며, 개발 자체가 쉬워지는 것은 좋은 일이지만 어떤 원리로 동작하는지는 알고 있어야 한다.
  • 리팩토링의 결말인 mybatis-orm 적용 에 관해 얘기해보려 한다.

참고글

0개의 댓글