노드심화 4-6

·2022년 12월 28일
0

study

목록 보기
39/81
post-thumbnail

저장소 계층(Repository Layer) 이란?

저장소 계층(Repository Layer)이란 데이터 엑세스 계층(Data Access Layer)이라고도 불리는데요 대표적으로 Database와 관련된 작업을 수행하는 계층입니다.

  • 모든 데이터Memory상에 존재하는 것처럼 가정해 데이터 접근과 관련된 세부 사항감춥니다
  • 대표적인 저장소 계층의 메소드
    • add() : 새 원소를 저장소에 추가합니다.
    • get() : 이전에 추가한 원소를 저장소에서 가져옵니다.
  • 저장소 계층을 구현했을 때 데이터를 저장하는 방법을 더 쉽게 변경할 수 있고, 테스트 코드 작성시 가짜 저장소(Mock Repository)를 제공하기가 더 쉬워집니다.
  • 어플리케이션의 다른 계층에서는 저장소의 세부 사항이 어떤 방식으로 구현되어 있더라도 영향을 받지 않습니다.객체 지향의 개념 중에서 추상화(Abstraction)와 관계가 있습니다.
  • 저장소 계층은 데이터 저장소를 간단히 추상화한 것으로 이 패턴을 사용하면 모델 계층데이터 계층분리할 수 있습니다.

저장소 계층의 장단점

장점

  • 모델인프라에 대한 사항을 완전히 분리했기 때문에 단위 테스트(Unit test)를 위한 가짜 저장소(Fake Repository)를 쉽게 만들 수 있습니다.
  • 도메인 모델을 미리 작성하면 처리해야 할 비즈니스 문제에 더 잘 집중할 수 있다.
  • 접근 방식을 바꾸고 싶을 때 외래키마이그레이션 등을 염려하지 않고 모델에 반영할 수 있다.
  • 객체테이블매핑하는 과정을 원하는 대로 제어할 수 있어서 DB 스키마단순화할 수 있다.
  • 저장소 계층에 ORM을 사용하면 필요할 때 MySQLPostgres와 같이 DB를 서로 바꾸기 쉬워집니다.

단점

  • 저장소 계층이 없더라도 ORM이 어느 정도 (모델저장소의) 결합을 완화시켜줍니다.
  • ORM 매핑수동으로 하려면 개발 코스트가 더욱 소모됩니다. → 여기서 설명하는 ORM은 저희가 이전에 사용한 Sequelize와 같은 라이브러리를 말합니다.

구현

저장소 계층(Repository Layer)에서는 PostRepository 클래스에서 Sequelize의 메소드를 사용해 데이터를 조회하거나 생성하는 것이 가장 핵심

// repositories/posts.repository.js
const { Posts } = require('../models');

class PostRepository {
  findAllPost = async () => {
    // ORM인 Sequelize에서 Posts 모델의 findAll 메소드를 사용해 데이터를 요청합니다.
    const posts = await Posts.findAll();

    return posts;
  }

  createPost = async (nickname, password, title, content) => {
    // ORM인 Sequelize에서 Posts 모델의 create 메소드를 사용해 데이터를 요청합니다.
    const createPostData = await Posts.create({ nickname, password, title, content });

    return createPostData;
  }
}

module.exports = PostRepository;
profile
개발자 꿈나무

0개의 댓글