[Node.js][TIL] Layered Architecture - Repository

Trippy·2023년 12월 6일
0

Node.js

목록 보기
23/28
post-thumbnail

저장소(Repository)

저장소 계층은 데이터 엑세스 계층이라고도 불리는데, 주로 데이터베이스와 관련된 작업을 처리하는 계층이다.

  • 데이터 접근과 관련된 세부 사항을 숨기는 동시에, 메모리상에 데이터가 존재하는 것처럼 가정하여 코드를 구현하게 된다.

  • 저장소 계층을 도입하면, 데이터 저장 방법을 더욱 쉽게 변경할 수 있고, 테스트 코드 작성시 가짜 저장소(Mock Repository)를 제공하기가 더 쉬워진다.

  • 어플리케이션의 다른 계층들은 저장소의 세부 구현 방식에 대해 알지 못하더라도 해당 기능을 사용할 수 있다.즉, 저장소 계층의 변경 사항이 다른 계층에 영향을 주지 않는 것이다.

    → 객체 지향의 개념 중 추상화(Abstraction)와 관계가 있다.


  • 저장소 계층데이터 저장소를 간단히 추상화한 것으로, 이 계층을 통해 모델 계층데이터 계층을 명확하게 분리할 수 있다.
  • 대표적인 저장소 계층의 메서드
    • add(), create() : 새 원소를 저장소에 추가한다.
    • get(), find() : 이전에 추가한 원소를 저장소에서 가져온다.

저장소 계층의 장점

  • 데이터 모델데이터 처리 인프라에 대한 사항을 분리했기 때문에 단위 테스트(Unit test)를 위한 가짜 저장소(Mock Repository)를 쉽게 만들 수 있다.
  • 도메인 모델을 미리 작성하여, 처리해야 할 비즈니스 문제에 더 잘 집중할 수 있게 된다.
  • 객체테이블매핑하는 과정을 원하는 대로 제어할 수 있어서 DB 스키마단순화할 수 있다.
  • 저장소 계층ORM을 사용하면 필요할 때 MySQLPostgres와 같은 다른 데이터베이스로 쉽게 전환할 수 있다.

저장소 계층의 단점

  • 저장소 계층이 없더라도 ORM은 모델과 저장소의 결합도를 충분히 완화 시켜 줄 수 있다.
    -> ORM이 없을 떄 대부분의 코드는 Raw Query로 작성되어 있기 때문이다.

  • ORM 매핑을 수동으로 하려면 개발 코스트가 더욱 소모된다
    -> 여기서 설명하는 ORM은 이전에 사용한 Prisma와 같은 라이브러리를 말한다.

Express로 구현하는 저장소 계층

  • 데이터베이스 관리(연결, 해제, 자원 관리) 역할을 담당한다.
  • 데이터베이스의 CRUD작업을 처리한다.

3계층 마지막 계층인 저장소 계층(Repository Layer)이다.
이전에 작성했던 코드에서 서비스 계층인 AuthServices에서 AuthRepository를 호출하여 데이터를 요청하는 것을 확인 할 수 있었다.

Post.repository.js

import { prisma } from "../utils/prisma/index.js";

export class AuthRepository {
    login = async (email) => {
      // ORM인 Prisma에서 users모델의 findUnique메서드를 사용해 데이터를 요청한다.
        const user = await prisma.users.findUnique({ where: { email } });
	 // 값들을 반환 해준다.
        return user;
    };
}

저장소 계층에서는 AuthRepository 클래스에서 Prisma의 메소드를 사용해 데이터를 조회하거나 생성하는 것이 가장 핵심적인 내용이다

단일 테이블만 사용하요 Prisma를 사용했기 때문에 코드가 복잡해지지 않았다, 그러나 어플리케이션의 규모가 커지거나 데이터베이스의 구성이 복잡해질 경우에는 저장소 계층의 구조 또한 복잡해질 것이다.

profile
감금 당하고 개발만 하고 싶어요

0개의 댓글