본문 바로가기

TIL(Today I Learned)

TIL-230707

📝오늘 공부한 것

  • 스파르타코딩클럽 Spring 숙련주차 2주차 1~13 강의 듣기

 

알게 된 점

[RestTemplateget요청]

Client입장 서버

- UriComponentsBuilder를 사용하여 URI를 만들 수 있음.

- getForEntityget방식으로 해당 URI의 서버에 요청을 진행

- 요청의 결과값에 대해서 직접 JSON TO Object를 구현 할 필요없이 자동으로 처리

 

[RestTemplatepost요청]

Client입장 서버

- UriComponentBuilderexpand를 사용하여 {query} 안의 값을 동적으로 처리

- RestTemplatepostForEntityPost방식으로 해당 URI의 서버에 요청을 진행

 

[RestTemplateexchange]

exchange를 사용

 

[Entity간의 연관 관계]

- DB 테이블에서는 테이블 사이의 연관관계를 FK(외래 키)로 맺을 수 있고 방향 상관없이 조회가 가능

- Entity에서는 상대 Entity를 참조하여 Entity 사이의 연관관계를 맺을 수 있음.

- 하지만 상대 Entity를 참조하지 않고 있다면 상대 Entity를 조회할 수 있는 방법이 없음.

- 따라서 Entity에서는 DB테이블에는 없는 방향의 개념이 존재

 

[11관계]

단방향 관계

- Entity에서 외래 키의 주인은 일반적으로 N()의 관계인 Entity이지만 11관계에서는 외래 키의 주인을 직접 지정해야 함.

- 외래 키 주인만이 외래키를 등록, 수정, 삭제할수 있으며, 주인이 아닌 쪽을 오직 외래키를 읽기만 가능

- @JoinColumn()은 외래 키의 주인이 활용하는 애너테이션

 

양방향 관계

- 양방향 관계에서 외래 키의 주인을 지정해 줄 때 mappedBy 옵션을 사용

- mappedBy의 속성값은 외래 키의 주인인 상대 Entity의 필드명을 의미

 

!중요!

1. 외래 키의 주인 Entity에서 @JoinColumn() 애너테이션을 사용허지 않아도 dafault 옵션이 적용되기 때문에 생략 가능

- 다만 1N관계에서 외래 키의 주인 Entity@JoinColumn()을 생략한다면 JPA가 외래 키를 저장할 컬럼을 파악할 수가 없어서 의도하지 않은 중간 테이블이 생성됨

- 따라서 외래 키의 주인 Entity에서 @JoinColumn()을 활용

2. 양방향 관계에서 mappedBy 옵션을 생략할 경우 JPA가 외래 키의 주인 Entity를 파악할 수가 없어 의도하지 않은 중간 테이블이 생성되기 때문에 반드시 설정

 

[지연로딩과 즉시로딩]

Fetch Type종류

Lazy: 지연로딩, 필요한 시점에 정보를 가져옴

Eager: 즉시로딩, 조회할 때 연관된 모든 Entity의 정보를 즉시 가져옴

 

- 지연로딩도 영속성 컨텍스트의 기능 중 하나

- 지연로딩된 Entity의 정보를 조회하려고 할 때는 반드시 영속성 컨텍스트가 존재해야함

- 트랜잭션이 적용되어있어야 한다라는 의미와 동일

 

[고아 Entity삭제]

- Cascaderemove 옵션을 적용하면 해당 Entity 객체를 삭제 했을 때 연관된 Entity 객체들을 자동으로 삭제할 수 있음.

- orphanRemoval을 이용하면 자동으로 해당 Entity도 삭제됨.

 

느낀 점🤔

Entity간의 연관관계 부분은 다른 부분보다 이해하기 쉬웠다. 예전에 컴활1급 공부할 때 했던 엑세스랑 비슷한 것 같아서 친숙했다. 컴활을 따고 나서 엑세스는 한번도 쓴적이 없어 도대체 이걸 왜 배웠던 거지..? 했는데 그게 바로 지금을 위한 것이었나....껄껄껄

엑셀이랑 엑세스 공부했을 때 뭔가 재밌었던 것 같았는데,,

뭔가 컴퓨터 관련 공부할 때는 다른 것들 공부할 때보다 재밌고 시간도 빨리가고 집중도 잘되는 것 같아서 신기하다