[JPA] 자바 ORM 표준 JPA 프로그래밍(기본편) 3 - 엔티티 매핑

유승선 ·2022년 9월 5일
0
post-thumbnail

오늘은 JPA 를 사용하는데 있어서 가장 기본이 되는 엔티티 매핑에 관련해서 글을 작성한다. 처음 실습 위주의 프로젝트를 따라했을때 굉장히 이해가 안갔던 부분들이 여기서 설명이 되었다. 지금 보니 꽤 기본적인것들이기 때문에 빠르게 익히고 다음 단계로 넘어가고 싶다.


객체와 테이블 매핑

객체와 테이블 매핑

엔티티 매핑에 기본이 되는 어노테이션이다. 연관관계 매핑은 다음 강의에서 더 자세히 다룰거고 다른것들을 먼저 소개하겠다.

JPA 를 사용할때 만드는 클래스에 항상 @Entity 라는 어노테이션을 붙혔는데 JPA가 관리 할 수 있도록 도와주는 것이었다. 애초에 Entity 어노테이션이 없으면 JPA가 관리를 할 수 없던것이였기에 필요성을 이제야 느꼈다.

주의점으로는 꼭 기본 생성자를 넣어줘야 한다는 점이다. 지난 실무 프로젝트에서 그 예시가 나왔으니 참고 하면 좋을거 같다.

(수정) 기본 생성자가 필수인 부분이 솔직히 이해가 잘 안됐다. 왜냐면은 jpaShop 프로젝트를 확인 했을때 기본 생성자가 없어도 돌아갔기 때문이다. 지금 다시 확인 해보니깐 질문 에 답을 해주었고

위와 같은 답변을 얻을 수 있었다. 추가적으로 Java Reflection 과 관련해가지고 JPA에 기본 생성자가 있어야 한다고 말해주었는데 Reflection 설명 이런 이유가 있었다. JPA가 엔티티 호출 과정에서 필요한 작업인데 흥미로웠다.

또 한가지 흥미로운 점은 Entity 어노테이션 안에 따로 이름을 지정해주지 않는 이상 기본적으로 내가 만든 클래스의 이름을 따라간다고 한다.

데이터 베이스 스키마 자동 생성

데이터 베이스 스키마 자동 생성

JPA 와 연결후에 show_sql_ddl 을 True 로 설정해준다면 코드를 실행 할 때마다 테이블에 어떤 일들이 나오는지 확인 할 수 있는데 그 생성 전략을 정하는 단계이다.

위와 같이 ddl 전략을 어떻게 바꾸냐에 따라서 DROP 을 언제 할지 CREATE 를 언제 할지 등등 사용 할 수 있다. 솔직히 필요성은 아직까지는 잘 모르겠다.

그래도 강의에서는 실습 이후에는 이렇게 주의점을 나열 해줬고 개발단계에서 잘 따라가면 좋을거 같다.


필드와 컬럼 매핑

필드와 컬럼 매핑

매핑 어노테이션을 설명 해주었는데 가장 쓸만하다고 생각하는 것은 @Column @Enumerated 같다.

컬럼 같은 경우 위와 같이 많은 속성과 기능들이 있지만 보통 name 필드에서 많이 쓰이는 거 같다. 변수를 설정하고 컬럼을 특정 이름 (member_id) 와 같이 바꾸는걸 가장 많이 하는거 같다.

자바를 잘 몰랐을때는 enum 타입이 뭔지 잘 몰랐는데 숫자로 데이터 베이스에 저장하는것은 많은 리스크가 온다고 한다. 실무 프로젝트에서는 배달 상태나 어떤 상태 메세지를 저장할때 자주 쓰는것을 확인했다.

추가

@Temporal 같은 경우는 날짜타입을 원할때 많이 쓰인다 하던데 최신 자바 버전을 기준으로 LocalTime 클래스를 더 많이 사용한다고 설명 해주었다.


기본 키 매핑

기본 키 매핑

처음 JPA 를 사용했을때 가장 궁금했던 어노테이션이었다. 개인적으로도 몇번 검색 해서 알긴 알았지만 강의를 보니 더 잘 이해 했던거같다.

자동생성 (GeneratedValue) 를 안붙히고 그냥 @Id 만 붙힐 경우에는 자유롭게 PK 를 설정 할 수 있지만 상당히 불편한 작업이다. 그래서 @GeneratedValue 로 자동생성 하게 만들고 특정 전략에 맞춰서 Id 를 자동으로 올려준다.

Identity 전략같은 경우 이런식으로 코드를 적어주면 되고,

특징 같은 경우는 위와 같이 있다. 다른 전략들도 많이 소개 했지만 무난하게 AUTO_INCREMENT 정도로만 두어도 충분하다고 했다. 물론 다른 전략들도 나중에 더 공부해봐야겠다.

profile
성장하는 사람

0개의 댓글