Entity, Repository

Kkd·2024년 12월 13일
0

매일메일 개념정리

목록 보기
27/93

Entity와 Repository 개념 정리


Entity

  1. 정의

    • 데이터베이스의 테이블 구조와 매핑되는 객체.
    • 데이터베이스에서 하나의 테이블에 해당하며, Entity 클래스의 각 필드는 테이블의 컬럼에 대응.
  2. 특징

    • JPA(Java Persistence API)에서 사용되며, @Entity 어노테이션을 사용하여 정의.
    • 데이터의 상태를 나타내는 객체이며, 데이터베이스와 동기화되어 데이터의 삽입, 수정, 삭제, 조회가 가능.
    • 일반적으로 비즈니스 로직은 포함하지 않고, 데이터를 표현하는 데 초점.
  3. 사용 사례

    • 테이블의 구조와 동일하게 매핑.
    • JPA에서 데이터베이스와 상호작용할 때 중간다리 역할.
  4. 주요 어노테이션

    • @Entity : 클래스가 엔티티임을 선언.
    • @Id : 기본 키를 지정.
    • @GeneratedValue : 기본 키 값 자동 생성 전략 설정.
    • @Column : 필드를 테이블의 특정 컬럼에 매핑.
    • @Table : 엔티티와 매핑될 테이블 이름 지정 (생략 시 클래스 이름이 기본값).
  5. 장점

    • 데이터베이스의 구조를 Java 객체로 표현하여 코드와 데이터베이스 간의 구조적 일관성을 유지.
    • ORM(Object-Relational Mapping)을 통해 SQL을 직접 작성하지 않아도 데이터베이스와 상호작용 가능.

Repository

  1. 정의

    • 데이터 접근 계층(Data Access Layer, DAO)에 해당하며, 데이터베이스와의 상호작용을 담당.
    • Entity를 기반으로 CRUD(Create, Read, Update, Delete) 작업 처리.
  2. 특징

    • JPA에서는 JpaRepository 또는 CrudRepository 인터페이스를 확장하여 사용.
    • Entity 객체와의 연계를 통해 복잡한 SQL 없이 데이터 저장, 조회, 수정, 삭제가 가능.
    • 페이징, 정렬, 트랜잭션 관리 등 고급 기능 제공.
  3. 사용 사례

    • 데이터를 저장하거나 수정, 삭제, 조회 등 CRUD 작업 수행.
    • 데이터베이스와의 복잡한 상호작용을 간단하게 처리.
    • @Query 어노테이션을 활용해 직접 쿼리를 정의하여 복잡한 조건의 데이터 조회.
  4. 주요 메서드

    • save(T entity) : 데이터를 저장 또는 업데이트.
    • findById(ID id) : 기본 키로 데이터 조회.
    • findAll() : 모든 데이터 조회.
    • delete(T entity) : 데이터를 삭제.
  5. 장점

    • 데이터 접근 계층 코드를 추상화하여 코드량 감소.
    • 유지보수성 향상 및 생산성 증가.
    • 페이징과 정렬을 쉽게 구현 가능.

Entity와 Repository의 역할 구분

구분EntityRepository
역할데이터베이스의 테이블 구조를 표현데이터베이스와의 상호작용 담당
주요 기능데이터를 저장, 수정, 삭제, 조회하기 위한 객체 생성CRUD 작업 및 복잡한 데이터 쿼리 처리
구성 요소테이블 컬럼에 대응하는 필드, 매핑 어노테이션(@Entity, @Id 등)JPA 인터페이스(JpaRepository, CrudRepository) 확장
비즈니스 로직일부 간단한 로직 포함 가능비즈니스 로직과는 분리되어 순수 데이터 접근 역할 수행

추가적으로 기억하면 좋은 점

  1. Entity는 데이터베이스의 구조를 코드로 표현하는 데 집중하며, 비즈니스 로직은 최소화해야 합니다. 복잡한 비즈니스 로직은 Service 계층에서 처리하는 것이 일반적입니다.
  2. Repository는 데이터베이스 접근과 관련된 모든 로직을 캡슐화하여, 다른 계층(Service, Controller 등)이 데이터 접근을 쉽게 처리할 수 있도록 돕습니다.

이 두 가지를 분리하면 코드의 가독성과 유지보수성이 크게 향상됩니다

추가 학습 자료

profile
🌱

0개의 댓글