[221224] Repository 패턴
[TIL-221224] Nestjs 공부
Type: Backend 작성일: 2022년 12월 24일
배운 점
배움 1.
Repository 패턴
Service → DB 사이에 Repository라는 레이어 추가
즉, Service → Repository → DB 형태의 패턴
NestJS에서 Resposiroty Pattern을 사용하는 이유
서비스 로직에서 바로 DB에 접속할 경우 문제점
DB의 Data Source를 여러 개 사용할 경우, 각각의 서비스에서 Data Source에 맞게 쿼리를 생성해야함.
Data Source가 변경될 경우(ex. mongo → mysql), 각각의 서비스에서 수정을 해주어야 함.
Service에서 DB에 바로 접근할 경우, 다른 서비스에서 해당 서비스의 코드를 참조하면서 순환 참조가 생길 수 있음.(순환 참조는 해결 가능하지만, 가독성 저하 발생)
Repository Pattern을 통해 얻는 이점
여러 개의 Data Source를 사용해도 Repository 한 곳에서 각각의 Data Source에 맞게 쿼리를 생성하면, 각각의 서비스에서는 동일한 형식(함수)으로 코드를 생성하면 됨.
Data Source가 변경될 경우에도 각각의 서비스에 있는 함수를 일일이 수정할 필요 없이, Repository 한 곳에서 수정하면 됨.
쿼리 로직이 복잡해질 경우, 서비스 로직에 집중하기 힘듦. 따라서, 분리하여 각각의 로직에 집중할 수 있도록 함
(+ Prisma ORM의 경우, Prisma Client에서 해당 역할을 수행해주어 Repository Pattern을 굳이 적용하지 않아도 됨)
위의 이점을 고려하여 Repository Pattern을 적용하면 된다. 하지만, 보통 DB를 바꾸는 일은 거의 없으므로 특별한 이유가 없을 경우에는 Repository Pattern을 굳이 사용하지 않고 Service에서 DB에 접근하여도 무방하다.
의미 1.
기존에 Prisma를 사용할 때는 Repository Pattern에 대해 자세히 모르고, 사람들이 적용 안 하기에 따라서 적용하지 않았었다. 이제는 이유를 알고 있으니 답답함이 사라지고, 만일 Repository Pattern을 적용하지 않아서 생기는 불편함이 있다면 해결 방법을 알고 있으니 Pattern을 적용하여 해결할 수 있다.
Last updated