7일 차 TIL
오늘은 Spring 숙련강의 지연로딩부터 cascade, orphanRemoval, @Scheduled, 헤더로 JWT 주고받기에 대해서 배웠다.
어제 배운 Entity 연관 관계에 이어서 연관 관계 매핑 애노테이션들의 옵션들과
Spring Security + JWT의 회원가입 로직에서 쿠키방식이 아닌 헤더방식으로 개선했다.
내일의 목표는 Spring 숙련 강의 수강 완료하기
그리고 숙련 강의 듣기 시작하기
그러면 18일에 숙련강의를 다 듣고
19일에 MSA강의를 하루만에 다 들어야 한다.
사전캠프를 3일밖에 못 들었더니 일정이 빠듯하다.
지연로딩
즉시 로딩(Eager) vs 지연 로딩(Lazy)
즉시 로딩은 연관 관계로 매핑된 객체들을 한 번에 가져온다.
지연 로딩은 연관 관계로 매핑된 객체들을 필요할때만 가져온다.
@OneToMany처럼 Many로 끝나는 경우 기본값이 지연로딩이다.
여러객체를 가져오는 만큼, 다 가져오면 서버 부하가 심해져서
필요할 때만 가져오도록 설정한다.
@ManyToOne처럼 One으로 끝나는 경우는 기본값이 즉시로딩이다.
단일 객체를 받아오기에 상관없다.
지연로딩 설정된 엔티티를 조회할 때는 영속성 컨텍스트가 필요하다.
즉 트랜잭션 환경이 필요하다.
영속성 전이를 위해
@OneToMany같은 연관관계매핑 애노테이션 옵션으로 cascade를 줄 수 있다.
옵션값으로 CascadeType.PERSIST를 하면 저장될 때 연관 관계 매핑된 객체까지 같이 저장된다.
CascadeType.REMOVE는 삭제할 때 연관 관계 매핑된 객체까지 같이 삭제된다.
JPA로 orphanRemoval = true 옵션을 주면
연관 관계를 제거하는것 만으로도 해당 엔티티를 제거할 수 있다.
이는 CascadeType.REMOVE의 기능도 포함한다.
근데 @ManyToOne에는 이 orphanRemoval 옵션이 없다.
그 이유는 이 기능 자체가 부모가 자식을 소유할 때, 부모를 삭제하면 자식도 같이 삭제시키는 것을 말하는데
다대일의 경우에는 자식을 삭제한다고해서 부모도 같이 삭제되면 안되기 떄문이다.
Scheduler
특정 시간에 자동으로 정보를 업데이트 해주는 기능 만들기
@Scheduled(cron = "0 0 1 * * *") 을 사용한다.
초 분 시 일 월 주 순서로 cron의 값을 지정한다.
ex) 매 5분마다면 cron = "0 */5 * * * *" 이다.
이 애노테이션을 메서드위에 붙여서 사용하면
해당 메서드가 cron에 설정한 값을 주기로 자동으로 실행된다.
이 기능을 사용하려면 main 클래스에 @EnableScheduling를 추가해야한다.
회원기능 구현
기존에는 서버가 쿠키를 직접 생성해서 클라이언트에게 전달,
응답 헤더에 Set-Cookie로 저장되었다.
또한 서버에서 Request에 담긴 쿠키 값들 중 JWT에 해당하는 값을 가져와 사용했다.
이번엔 응답 헤더에 토큰을 담아 보낸다.
그리고 요청 헤더에서 JWT를 가져와 사용한다.
즉, JWT를 쿠키를 통해 주고 받던걸
헤더를 통해 주고받는다.
'내배캠' 카테고리의 다른 글
| [내일배움캠프 본캠프] 9일 차 TIL 소셜 로그인(OAuth), 단위 테스트, AOP, 예외 처리 (0) | 2026.02.18 |
|---|---|
| [내일배움캠프 본캠프] 8일 차 TIL 페이징처리, 다대다, AWS (0) | 2026.02.17 |
| [내일배움캠프 본캠프]6일 차 TIL RestTemplate, Entity 연관 관계 (0) | 2026.02.16 |
| [내일배움캠프 본캠프] 5일 차 TIL Spring Security + JWT (0) | 2026.02.14 |
| [내일배움캠프 본캠프] 4일 차 TIL Bean 수동 등록, 쿠키/세션 (0) | 2026.02.14 |
