관심쟁이 영호

[#7.1] Spring Boot ㅣ 스프링 부트 ㅣ Entity Class 개발 본문

Bank-End/인프런- Spring 공부

[#7.1] Spring Boot ㅣ 스프링 부트 ㅣ Entity Class 개발

관심쟁이 영호 2021. 4. 6. 01:30
반응형

 

이제 본격적으로 개발을 시작한다.

이번 강의는 이전 강의에서 분석했던것을 차례대로 개발하는 것이다.

 

엔티티 클래스 개발이라는 것은 객체 하나하나를 코딩하기 시작한다는 뜻인것 같다.

해보자.

 

시작하기에 앞서, 예제에서는 모든 클래스에 Getter, Setter를 설정한다.

※ 실무에서는 Getter만 열어두고, Setter는 필요시에만 설정해두는 것을 추천하신다.

-> Getter는 조회를 실제로 엄청나게 많이 하기 때문에 열어두는 것이 좋고, Setter는 열어두었다가 데이터가 변경되는 경우가 있어서, 어디서 어떻게 데이터가 바뀌는지 파악하기가 힘들어서 개발장애가 일어나는 일이 있을 수 있다고 하신다.

 

1. domain pakage 생성

해당 "domain pakage"는 주요 Entity를 모두 넣을 예정이다.

관리하기 쉽게 하려고 하시는 거겠지?

 

2. Member (회원) Entity 생성

- Member 클래스를 생성하고, 내부에 필요한 변수를 선언해준다. 이전 포스팅에서 했던 Entity 설계 박스 내부에 있는 모든 변수를 선언해준다.

 

- 그리고 테이블 설계에서 있던 PK(Primary Key)가 id 이므로 Annotation을 지정해준다.

방법은 id에 "@Colum(name = "member_id")로 지정한다.

 

- 어노테이션 내부에 "name = "은 미리 스프링부트에 지정되어 있는 것이겠지.

 

- 객체 타입으로 선언을 해야해서 필요한 Address, Order 클래스도 생성해준다.

 

★ 실무에서는 설계에 대한 문서를 자주 읽는 일이 있을 것 같다. 

 

2. 나머지 클래스를 문서설계

- Order 클래스 작성

- 선언되어 있는 각 변수들은 문서의 박스안에 있는 것들이다.

 

- OrderStatus는 enum이고, ORDER, CANCEL 두 가지의 값이 있다.

 

 

그 다음은 다음 게시글에서 다룰 예정이다!

 

3. 어노테이션 연관관계 설정

- 여기를 가장 강조하신다. 진짜진짜 중요한 부분인것 같다.

 

- 클래스를 써내려가면서 각각 어노테이션을 통해서 다른 클래스와의 관계를 어노테이션을 이용하여 설정한다.

여기서 가장중요한게, 설정을 해주면서 잘못 설정하게되면 크나큰 문제에 마주칠 수 있기에 잘 설정해야한다.

 

- 먼저 일대다, 다대일 관계를 어노테이션으로 지정해주어야한다.

Member클래스에서 orders에 어노테이션을 추가한다. -> 

 //order 테이블에 있는 member 테이블에 의해서 매핑된거야! 나는 거울일 뿐이야. -> 읽기 전용
@OneToMany(mappedBy = "member")
private List<Order> orders = new ArrayList<>();
    

위 코드를 살펴보면 mappedBy = "member" 코드를 볼 수 있다.

해당 코드는 Member - Order에서 연관관계 주인을 설정하는 부분이라고 생각하면 된다.

 

★ 연관관계 주인을 설정해주지 않으면 나중에 복잡하게 이어져있는 데이터들이 어떤 테이블(FK설정이 되어있어서) 떄문에 데이터가 업데이트 되었는지 파악이 불가능하다. 

그래서 연관관계 주인을 설정하고 주인의 업데이트만 다른 테이블에 영향을 주도록 mappedBy = "member"로 설정해주어야 한다.

 

Order클래스에서 member에 어노테이션을 추가한다. ->

@ManyToOne// 다대일 관계 명시
    @JoinColumn(name = "member_id")  // 매핑 - FK 지정
    private Member member;

- 실제 내용으로 들어가보면, Member - Order 관계에서 FK설정을 해주어야 한다.

 

 

 

해당 강의는 인프런의 "김영한" 개발자님의 강의 정리했습니다.

www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-JPA-%ED%99%9C%EC%9A%A9-1/dashboard

300x250
Comments