[이론] Entity, Repository
필기자
2022-09-06 22:21
4,326
0
본문
- Entity : 실제 데이터베이스 테이블과 매핑되는 클래스로 데이터베이스 테이블이라 생각해도 좋다. 다만 Entity는 관계형 데이터베이스를 객체로서 표현하기 위해 고안된 방법이므로 절대적으로 관계형 데이터 베이스를 지칭하진 않는다. 스프링부트에서 JPA(Java Persistence API)를 사용을 위해 관계형 데이터베이스와 매핑되는 Entitiy 클래스를 구성해야한다. Dto 클래스를 Entity로 Entity 클래스를 Dto로 혼용하여 사용하는 경우가 있는데 지양해야할 개발방법이다.
주의 : DTO 는 데이터 전달, Entity는 테이블 매핑!, Entity는 Setter X
Entity 클래스 예제@Getter @NoArgsConstructor @Entity @Table(name = "member") public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(length = 50, nullable = false) private String nickname; @Column(length = 50, nullable = false) private String email; @Column(length = 255, nullable = true) private String address; @Builder public Member(String nickname, String email, String address){ this.nickname = nickname; this.email = email; this.address = address; } }
- Repository : 저장소 즉 JPA 에서 Entity를 이용하여 CRUD 명령을 실행하는 인터페이스이다. DAO(Data Access Object) 역할을 한다. 인터페이스이므로 기본 CRUD와 관련된 Method는 정의되어 있다. 따라서 가져다 쓰기만 하면된다. 일부 Query를 직접 작성하여 CRUD를 구현할 수도 있다. 다만 Mybitis 기술을 주로 사용하던 시절의 Native Query가 아닌 표준 Query(JPQL:Java Persistence Query Language)를 사용하여 내부적으로 Native Query로 변환해 주는 역할을 수행하므로 Native Qurey에 익숙한 기존 개발자는 다소 생소하게 느낄 수 있다. 이는 데이터베이스의 벤더와 관계 없이 Query를 수행하게 하므로 차후 데이터베이스 벤더가 바뀌더라도 Query를 수정하지 않아도 되는 유지 관리상의 장점이 있다.
이름 조작 SQL Create 생성 INSERT Read(또는 Retrieve) 읽기(또는 인출) SELECT Update 갱신 UPDATE Delete(또는 Destroy) 삭제(또는 파괴) DELETE
JPA 기술은 근본적으로 ORM(Object Relational Mapping)를 실현하고자 하는 기술이기 때문에 관계형 데이터베이스의 데이터 중심 모델링을 객체 모델로 바라보는 스킬이 필요하다(어렵다... 귀찬다...). 100% 일치 시킬순 없지만 개념적으로 OMR를 구현함에 있어 객체 지향적 장점을 추구하기 위해 Entity 를 설계해야 한다.
스프링 부트에서는 JpaRepository<대상으로 지정할 엔티티, 해당 엔티티의 PK의 타입> 를 상속 받아 Repository 인터페이스를 설계한다.
public interface MemberFlowRepository extends JpaRepository<MemberFlowEntity, Long> { /* @Override MemberFlowEntity save(MemberFlowEntity memberFlowEntity); */ }
Query를 사용하지 않고 정의된 Method 만으로 데이터베이스를 사용할 수 있다. save(), findById(), findAll(), deleteById() 등등
댓글목록0