Base/개념정리

DAO와 Repository

findmypiece 2021. 4. 2. 22:10
728x90

둘은 모두 Persistence 을 구현하는 객체이다. Persistence는 한글로 표현하면 영속성이다.

그럼 영속성은 뭔가? 좀 더 익숙한 동의어로 표현하면 지속성을 의미한다.

IT 기준에서 본다면 프로그램이 종료되어도 유지될 수 있는 데이터를 저장하는 것을 의미한다.

데이터베이스를 사용한다고 했을 때 프로그램상에서 데이터베이스와 통신하는 객체를

우리는 Repository 또는 DAO 라고 부른다.

예전부터 뜻도 모르고 DAO 라는 객체를 만들어서 써왔는데 어느순간 Repository 라는 용어가 등장했다.

이렇게 비슷한 의미를 가진 용어가 등장하게 되면 패키지명, 클래스명, 변수명 등을 정할 때

바빠죽겠는데 불필요한 고통에 시달리게 된다.

이를 사전에 방지하고자 의미를 좀 더 명확하게 정리해보고자 한다.

용어 그대로 해석하면 Repository 는 저장소라는 뜻이고

Dao(Data Access Object)는 데이터 접근 객체라는 뜻이다.

사실 데이터 저장소는 메모리가 될 수도 있고, 데이터베이스가 될 수도 있고, 파일이 될 수도 있다.

이처럼 실제 저장소는 따로 있기 때문에 Repository 라는 표현은 맞지 않을 수 있다.

영속성 객체는 이러한 저장소와 프로그램을 연결해주는 역할을 할 뿐이다.

그런데 왜 Repository 라는 표현이 생겨났을까?

생각해보면 Repository 라는 표현이 시작된 것은 ORM(Object Relational Mapping)이 등장하면서 였다.

기존에는 줄창 Sql Mapper 만 써왔는데 DAO에서 Sql Mapper를 통해 Sql을 매핑하고

Sql을 통해 데이터베이스에 접근하는 구조였다.

다만 데이터 접근을 위해 마지막으로 거치는 Object 이기 때문에

Data Access Object 라는 표현이 적절하게 보여진다.

그런데 ORM 이 등장하면서 소스상에서 Sql 이 사라지고

Object와 데이터베이스를 직접 매핑하는 개념이 생겨났다.

물론 ORM 프레임워크 내부에서 Sql을 생성해주는 개념이지만

이를 자동으로 해주다보니 적어도 개발자가 만드는 프로그램 입장에서는

Object와 데이터베이스의 직접 매핑된다고 볼 수 있다.

어쨋든 DAO 와 마찬가지로 데이터 접근을 위해 마지막으로 거치는 Object 이긴 하지만

중간에 추가적인 매핑 없이 곧바로 데이터베이스와 매핑되기 때문에 프로그램 입장에서는

그 자체를 저장소 보는 것도 적절한 표현으로 보여진다.

이처럼 DAO와 Repository 는 비슷하지만 분명한 차이가 있다.

정확히 구분하고 싶다면 구분해서 사용하고 하나로 통합해서 사용하고 싶다면

좀 더 포괄적인 개념인 DAO을 쓰는 게 맞아보인다.

728x90