엔티티와 레포지토리
2024-10-17

Nest.js로 개발을 하다보니까 entity와 repository 개념이 나온다. 이전에도 가끔 들어본 개념이긴하지만 감으로만 알고 있고 정확하게 무엇인지는 알아본 적이 없어서 정리해보려고 한다.


엔티티(Entity)와 레포지토리(Repository)는 데이터베이스와의 상호작용을 구조화하고 관리하는 핵심 개념이다.

Entity

엔티티는 데이터베이스의 테이블 구조를 클래스로 정의한 것을 말한다. 엔티티 클래스는 데이터베이스 테이블의 각 열을 클래스로 표현하며, 각 필드가 데이터베이스에서의 열과 매핑된다.

  • 데이터베이스 테이블을 애플리케이션 내에서 클래스로 표현함
  • 데이터베이스 테이블의 스키마를 정의하고, 테이블의 각 열을 속성으로 가짐
  • ORM에서는 엔티티를 사용해 데이터베이스 테이블을 자동으로 생성하거나 변경할 수 있고, 이를 통해 객체 지향 프로그래밍의 이점을 활용하여 데이터베이스와 상호작용할 수 있음

Repository

  • 데이터베이스와의 상호작용을 담당
  • 데이터를 조회, 삽입, 업데이트, 삭제하는 등의 작업을 제공
  • 서비스 계층과 데이터베이스 계층을 분리하여 코드의 유지보수성을 높임

Entity와 Repository의 관계

  • 엔티티는 데이터베이스 테이블과의 매핑을 담당하고, 애플리케이션에서 테이블 구조를 정의함
  • 레포지토리는 이 엔티티를 사용하여 실제 데이터베이스와의 상호작용을 하는 계층임, 레포지토리는 서비스 계층에서 호출되어 CRUD 작업을 수행함

서비스와의 관계

  • 서비스는 비지니스 로직을 처리하는 곳이며, 레포지토리는 서비스가 데이터베이스와 상호작용할 때 사용함
  • 서비스는 레포지토리로부터 데이터를 가져오거나 변경된 데이터를 저장하며, 데이터베이스에 직접 접근하는 로직을 서비스와 분리하는 것이 목적이다.
  • 서비스는 레포지토리를 통해 데이터를 관리함
  • 이 구조는 비지니스 로직과 데이터 접근 로직을 분리하여 애플리케이션의 유지보수성을 높이고 테이스틀 용이하게 만듦