본문 바로가기

자바의 봄(Spring)/자바와 스프링 공부하기23

양방향 연관 관계 1. 양방향 연관 관계 - 서로 단방향 연관 관계 2개를 만든게 양방향 연관 관계라고 부른다. 2. 하지만 DB에서는 외래키 (FK) 하나만 있으면 서로 다른 두 테이블이 모두 왔다갔다 할 수 있다. 3. 연관 관계의 주인 - 연관 관계의 주인만이 외래 키를 관리할 수 있다. - 주인이 아닌 쪽은 읽기만 가능하다. - 주인은 mappedBy - 외래키가 있는 곳을 주인으로 정해라 4. 양방향 맵핑 시 발생할 수 있는 문제 - 무한 루프가 발생할 수 있다. ex toString , lombok , JSON 생성 라이브러리 ( 컨트롤러에서는 엔티티를 반환하지 말자 , 계속 참조하기 때문에 무한 루프가 발생 할 수 있다. ) - 설계 시 단방향 맵핑으로 연관 관계 맵핑을 완료시키는 것이 좋다. - 양방향으로 .. 2024. 4. 21.
JPA란 무엇인가 ? 1. JPA의 정의 2. JPA에서 중요한 영속성 컨텍스 - 영속성 컨텍스트 영속성 컨텍스트는 엔티티를 영구 저장하는 환경 - 영속성 컨텍스트의 이점 1. 1차캐시 - 1차 캐시에서 Key Value 값으로 저장이 됩니다. - find로 찾으면 캐시에서 조회를 하게 된다. - 조회를 했는데 select 쿼리가 안나갔다. 왜냐하면 캐쉬에서부터 먼저 조회를 했기 때문에 2. 동일성 보장 - DB에서 한번 조회하고 , 다시 조회를 한다면 같은 객체라고 본다. 3. 트랜잭션을 지원하는 쓰기 지연 - 쓰기 지연 SQL 저장소와 1차 캐시가 존재한다. - 영속성 컨텍스트에서 flush를 하게 되면 저장이 된다. - 버퍼링을 모아서 커밋을 할 수 있는 이점이 있다. ( 모아서 저장 할 수 있다.) 4. 엔티티 수정 .. 2024. 4. 20.
UserDetailsService와 UserDetails에 대해 오늘 프로젝트를 하면서 스프링 시큐리티에 대해서 다시 복습하는 시간을 가졌다. 예전에 프로젝트를 하면서 스프링 시큐리티에 대해서 굉장히 대충 공부하고 넘어갔는데 , 이번에는 좀 자세하게 들여다봤다. 우선 DB에 들어있는 사용자들을 불러와서 이메일과 패스워드 , 권한 관련 설정을 인터페이스가 있다 . 바로 UserDetailsService 라는 인터페이스다 . 아래와 같은 모습을 하고 있다. public interface UserDetailsService { UserDetails loadUserByUsername(String username) throws UsernameNotFoundException; } 그리고 이 인터페이스를 구현한 구현체(UserDetailsManager)와 상속받아 만든 클래스(Jd.. 2024. 4. 1.
JPA에서 인덱스 생성하기 대량의 데이터를 조회하기 위해서는 그냥 조회하는 것이 아닌 인덱스를 추가하여 조회를 하면 더 빠르게 검색을 할 수 있다. 아래와 같이 엔티티를 생성할 때 인덱스를 걸어줄 수 있다. @Table(indexes = {@Index(name = "IDX_USER_EMAIL", columnList = "username,email")}) 그러면 아래와 같이 쿼리문이 나가는 것을 확인할 수 있다. 또한 MySQL에서 인덱스가 적용됐는지 확인할 수 있다. explain 실행계획을 붙여서 확인해보면 위와 같이 나오게 된다. possiblekey가 Null이고 type ALL이면 인덱스를 타지 않고 검색했다는 뜻이다. 아래는 인덱스를 탔을 경우의 예시이다 . 2024. 3. 23.