본문 바로가기

TIL139

23.07.27 엔티티의 이벤트를 감시하는 Auditing Auditing 을 사용하면 엔티티를 누가 언제 생성/마지막 수정 했는지 자동으로 기록되게 할 수 있다. Auditing 적용 방법 메인 애플리케이션 위에 @EnableJpaAuditing 추가 엔티티 클래스 위에 @EntityListeners(AuditingEntityListener.class) 추가 AuditorAware 구현체 만들기 createdAt, modifiedAt 은 구현체 없이 동작하지만 createdBy, modifiedBy 는 구현체가 필요하다. SpringSecurity 의 SecurityContextHolder 에서 인증정보안에 담긴 UserDetailsImpl 을 사용하여 user 객체를 가져와서 넣어준다. @EnableJpaAuditi.. 2023. 7. 27.
23.07.26 ORM이 가지고 있던 문제와 해결 방법 상속 문제 : 매핑정보에 상속정보를 넣어준다. (@OneToMany, @ManyToOne) 관계 문제 : 매핑정보에 방향정보를 넣어준다. (@JoinColumn, @MappedBy) 탐색 문제 : 매핑/조회 정보로 참조탐색 시점을 관리한다. (@FetchType, fetchJoin()) 밀도 문제 : 크기가 큰 멤버 객체는 테이블을 분리하여 상속으로 처리한다. (@embedded) 식별성 문제 : PK 를 객체 Id로 설정하고 EntityManager는 해당 값으로 객체를 식별하여 관리 한다. (@Id, @GeneratedValue) ORM이 가지는 장점 1. 1차, 2차 캐시 1차 캐시 영속성 컨텍스트 내부에는 엔티티를 보관하는 저장소가 있는데 이를 1차 캐시라고.. 2023. 7. 26.
23.07.25 스프링 심화 주차로 넘어오면서 JPA에 대해 더 자세히 다루게 되었다. 모든 회사의 모든 프로젝트가 JPA 적용되어있는게 아니므로, ORM에 대해 알아야 할 필요가 있다. JDBC > QueryMapper > ORM(JPA)로 발전해오면서 각 기능을 포함하고 있기 때문에, 어떤 단점을 보완하기 위해 JPA가 생긴 것인지 알아야 제대로 쓸 수 있다. JDBC : JAVA와 DB를 연결해주기 위해 생긴 기술, JPA도 이 기술을 사용한다. JDBC Driver는 여러 데이터베이스와 연결할 수 있는 기능을 제공한다. JDBC Driver Manager는 런타임 시점에 Connection을 생성하여 쿼리를 요청할 수 있는 상태로 만들어주고, Statement를 생성하여 쿼리를 요청, ResultSet을 생성해 .. 2023. 7. 25.
23.07.14 어제 확인해본 내용과 상이한 글을 확인해 Refresh토큰에 대해 다시 알아보려 한다. 어제 확인한 글에서는 random string이나 uuid로 만들어야 서버측에서 탈취단한 토큰을 삭제할 수 있다고 했는데, 서버에 저장하는(stateful) 방식만 취한다면 JWT토큰이여도 삭제할 수 있다고 한다. 또한 refresh 토큰을 저장하는 위치도 cookie, session, local storage 등 다양하던데, 튜터님은 셋 모두 각자의 장단점이 있을 뿐 어디에 저장하든 탈취당하지 않도록 관리하는 방법 자체가 중요하니 당장은 구현하기 쉬운 곳에 구현하는 것이 좋다고 말씀하셨다. 저장 위치에 따른 장단점은 아래 블로그를 참고하자. https://velog.io/@jisu2281l/TIL-Refresh-To.. 2023. 7. 14.