Repository Pattern
2022. 9. 17. 16:42ㆍNest.js
Service와 DB 사이에 중개자 역할을 하는 패턴
Service가 다수일 경우 그 사이에서 일어나는 순환참조 문제(해결할 수 있으나 최선은 아님)를 해소하고
Service 레이어에서 데이터의 출처와 관계없이 동일한 방식으로 DB에 접근할 수 있다. ex) DB가 다수일 경우 각 DB에 접근하는 쿼리가 다름. Repository 패턴을 적용하므로써 이를 해결할 수 있다.
가령, DB를 MongoDB에서 MySQL로 변경할 경우 Repository 패턴을 적용하면 Repository의 코드만 수정하면 되지만, Repository를 두지 않는 경우 각 Service의 코드를 MySQL에 맞게 수정해야한다.
//cats.service.ts
//Service에 Repository 의존성 주입
export class CatsService {
constructor(private readonly catsRepository: CatsRepository) {}
async signUp(body: CatRequestDto) {
const { email, name, password } = body;
const isCatExist = await this.catsRepository.existsByEmail(email);
if (isCatExist) {
throw new UnauthorizedException('해당하는 고양이는 이미 존재합니다.');
}
const hashedPassword = await bcrypt.hash(password, 10);
const cat = await this.catsRepository.create({
email,
name,
password: hashedPassword,
});
return cat.readOnlyData;
}
}
//cats.repository.ts
@Injectable()
export class CatsRepository {
constructor(@InjectModel(Cat.name) private readonly catModel: Model<Cat>) {}
이처럼 Service와 DB가 직접 접근하는 것이 아니라 Repository라는 중개업자를 사이에둔다.
'Nest.js' 카테고리의 다른 글
예외처리 (0) | 2022.09.06 |
---|---|
미들웨어 (0) | 2022.09.06 |
Module / 캡슐화 (0) | 2022.09.04 |
Providers/ DI (0) | 2022.09.04 |
Controller (0) | 2022.09.04 |