📝오늘 공부한 것
- 스파르타코딩클럽 Spring 숙련주차 2주차 1~13 강의 듣기
알게 된 점❗
[RestTemplate의 get요청]
Client입장 서버
- UriComponentsBuilder를 사용하여 URI를 만들 수 있음.
- getForEntity는 get방식으로 해당 URI의 서버에 요청을 진행
- 요청의 결과값에 대해서 직접 JSON TO Object를 구현 할 필요없이 자동으로 처리
[RestTemplate의 post요청]
Client입장 서버
- UriComponentBuilder의 expand를 사용하여 {query} 안의 값을 동적으로 처리
- RestTemplate의 postForEntity는 Post방식으로 해당 URI의 서버에 요청을 진행
[RestTemplate의 exchange]
exchange를 사용
[Entity간의 연관 관계]
- DB 테이블에서는 테이블 사이의 연관관계를 FK(외래 키)로 맺을 수 있고 방향 상관없이 조회가 가능
- Entity에서는 상대 Entity를 참조하여 Entity 사이의 연관관계를 맺을 수 있음.
- 하지만 상대 Entity를 참조하지 않고 있다면 상대 Entity를 조회할 수 있는 방법이 없음.
- 따라서 Entity에서는 DB테이블에는 없는 방향의 개념이 존재
[1대 1관계]
단방향 관계
- Entity에서 외래 키의 주인은 일반적으로 N(다)의 관계인 Entity이지만 1대 1관계에서는 외래 키의 주인을 직접 지정해야 함.
- 외래 키 주인만이 외래키를 등록, 수정, 삭제할수 있으며, 주인이 아닌 쪽을 오직 외래키를 읽기만 가능
- @JoinColumn()은 외래 키의 주인이 활용하는 애너테이션
양방향 관계
- 양방향 관계에서 외래 키의 주인을 지정해 줄 때 mappedBy 옵션을 사용
- mappedBy의 속성값은 외래 키의 주인인 상대 Entity의 필드명을 의미
!중요!
1. 외래 키의 주인 Entity에서 @JoinColumn() 애너테이션을 사용허지 않아도 dafault 옵션이 적용되기 때문에 생략 가능
- 다만 1대 N관계에서 외래 키의 주인 Entity가 @JoinColumn()을 생략한다면 JPA가 외래 키를 저장할 컬럼을 파악할 수가 없어서 의도하지 않은 중간 테이블이 생성됨
- 따라서 외래 키의 주인 Entity에서 @JoinColumn()을 활용
2. 양방향 관계에서 mappedBy 옵션을 생략할 경우 JPA가 외래 키의 주인 Entity를 파악할 수가 없어 의도하지 않은 중간 테이블이 생성되기 때문에 반드시 설정
[지연로딩과 즉시로딩]
Fetch Type종류
Lazy: 지연로딩, 필요한 시점에 정보를 가져옴
Eager: 즉시로딩, 조회할 때 연관된 모든 Entity의 정보를 즉시 가져옴
- 지연로딩도 영속성 컨텍스트의 기능 중 하나
- 지연로딩된 Entity의 정보를 조회하려고 할 때는 반드시 영속성 컨텍스트가 존재해야함
- 트랜잭션이 적용되어있어야 한다라는 의미와 동일
[고아 Entity삭제]
- Cascade의 remove 옵션을 적용하면 해당 Entity 객체를 삭제 했을 때 연관된 Entity 객체들을 자동으로 삭제할 수 있음.
- orphanRemoval을 이용하면 자동으로 해당 Entity도 삭제됨.
느낀 점🤔
Entity간의 연관관계 부분은 다른 부분보다 이해하기 쉬웠다. 예전에 컴활1급 공부할 때 했던 엑세스랑 비슷한 것 같아서 친숙했다. 컴활을 따고 나서 엑세스는 한번도 쓴적이 없어 도대체 이걸 왜 배웠던 거지..? 했는데 그게 바로 지금을 위한 것이었나....껄껄껄
엑셀이랑 엑세스 공부했을 때 뭔가 재밌었던 것 같았는데,,
뭔가 컴퓨터 관련 공부할 때는 다른 것들 공부할 때보다 재밌고 시간도 빨리가고 집중도 잘되는 것 같아서 신기하다
'TIL(Today I Learned)' 카테고리의 다른 글
TIL-230711(Column '컬럼 이름' cannot be null 오류) (0) | 2023.07.12 |
---|---|
TIL-230710(Github Organization에 IntelliJ로 프로젝트 올리기) (0) | 2023.07.10 |
TIL-230706 (0) | 2023.07.06 |
TIL-230705(로그인 기능 구현하기) (0) | 2023.07.05 |
TIL-230704(회원가입 기능 구현하기) (0) | 2023.07.04 |