ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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 관계가 아니다.

     

    이정도로 이해한 것으로 오늘의 회고를 마치겠다!

     

Designed by Tistory.