-
[TIL] 엔티티와 테이블의 차이TIL(Today I Learned) 2023. 1. 26. 23:26
*20230126의 회고
JPA 공부를 하던 중, 엔티티와 테이블 이라는 개념에 대해 의문이 생겼다. 비슷한 것 같지만 구분해서 사용하는 것 같고, @Entity 와 @Table 의 어노테이션도 따로 존재하는 것을 보니 분명한 차이점이 존재할 것이다. 따라서 이 개념에 대해 한 번 정리해보면 좋을 것 같아서 오늘 찾아보며 공부한 내용을 기록해보려 한다.
- 객체에 @Entity 어노테이션을 붙이면 JPA가 이 객체를 엔티티로 관리해주게 된다.
- 엔티티는 실제로 존재하지 않는다. DB상에 물리적으로 존재하는 것은 테이블이다.
- 엔티티는 현실세계에 존재하는 것을 DB상에서 표현하기 위해 사용하는 추상적인 개념이다.
- 엔티티는 객체이다!
- @Entity(name = "~~~~")
- JPA 에서 사용할 엔티티 이름을 지정해주는 어노테이션
- 기본값은 클래스 이름을 그대로 사용.
- @Table
- 엔티티와 매핑할 테이블을 지정하는 어노테이션
- @Table(name="~~~~")
- "~~~~" 라는 테이블과 매핑하겠다는 의미
- 기본값은 엔티티 이름을 사용.
결국, 엔티티를 테이블에 매핑해서 사용한다는 의미가 된다. 테이블 이름의 기본값으로 엔티티 이름을 사용하기 때문에 개념적으로 헷갈렸던 것 같다. 예를 들면, 'Member' 라는 객체를 생성해서 엔티티로 지정해준 후, DB에 들어가서 확인하면 테이블 명이 'MEMBER' 라고 생성되어 있기 때문에(엔티티 명을 테이블 명으로 사용하기 때문에) 혼란이 왔었던 것 같다.
이러한 이유는 JPA 의 로직이 그렇게 짜여졌기 때문인데, 그렇기에 엔티티와 테이블은 1:1 관계인가? 라는 의문을 가질 수 있을 것 같다. 결론적으로는 그것 또한 아니다. 테이블 2개가 엔티티 하나가 될 수 도 있는 것이다. 그러나 지금까지 내가 배운 정도에서는 객체 하나당 테이블 하나가 생성되도록 구현해왔기 때문에, 객체 하나를 테이블 두개로 저장하는 것에 대해 로직을 작성하는 건 아직 모르겠다. 깊게 파고 들려면 한도 끝도 없을 것 같기에, 그건 차차 내 실력이 성장함에 따라 더 깊게 이해할 수 있는 날이 올거라 생각한다.
따라서 결론은,
1. 엔티티는 객체이다.
2. 엔티티와 테이블은 다른 개념이다.
3. 테이블은 DB상에 존재하는 물리적인 것이다.
4. 엔티티와 테이블은 1:1 관계가 아니다.
이정도로 이해한 것으로 오늘의 회고를 마치겠다!
'TIL(Today I Learned)' 카테고리의 다른 글
[TIL] Builder 패턴 사용하기 (0) 2023.02.13 [TIL] Controller 에서 Entity 를 그냥 반환하면 안되는 이유 2가지 (0) 2023.01.30 [TIL] DTO에 왜 @Getter 어노테이션이 필요할까...? (0) 2023.01.18 [TIL] 인프런 JPA 프로그래밍 기본 강의내용 요약 (0) 2023.01.17 [TIL] 에라토스테네스의 체(소수 찾기) (0) 2023.01.13