본문 바로가기
반응형

Spring91

authentication 메커니즘 * 인증 ( Authentication ) Authentication은 사이트에서 "통행증" 역할을 한다. Authentication을 구현하는 객체들은 대체로 메서드 이름 맨 뒤에 AuthenticationToken이 붙는다. 그래서 구현체들을 인증토큰이라고 부른다. Credentials : 인증을 위해 필요한 정보(input, 비밀번호) Principal : 인증된 결과, 인증대상(output) Details : 기타 정보, 인증 관련 주변 정보들(ip, session 관련) Authorities : 권한 정보들 (권한을 담당하는 GrantedAuthority를 구현한 객체들을 Authorities에 넣어둔다. ) Authentication 객체는 SecurityContextHolder를 통해 세션이.. 2021. 10. 8.
basic login 과정 @EnableWebSecurity(debug = true) public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests(request -> { request .antMatchers("/").permitAll() .anyRequest().authenticated(); }); } } "/" 이외에 모든 경로는 허용이 안된다. 요청이 오면 인증을 해야 한다. 하지만, 해당 코드에는 오류가 있다. 정적인 web resource에 대해서는 경로를 열어주어야 한다. @Override p.. 2021. 10. 8.
간단한 로그인 페이지 만들기 스프링 시큐리티는 안전한 로그인을 위해 가장 많이 사용되며, 계정별로 권한을 부여할 때 사용한다. 간단한 방식으로 시큐리티가 적용된 로그인 페이지를 만들어보도록 한다. * 스프링 시큐리티 간단한 계정 설정 application.yml에서 임의의 계정을 추가할 수 있다. 하지만, 1개밖에 추가하지못한다. (다수 계정 설정을 위해서 WebSecurityConfigurerAdapter를 상속받은 클래스가 필요하다.) spring: security: user: name: user1 password: 1111 roles: USER 스프링 시큐리티에서 계정 정보는 크게 name, password, roles 3가지가 필요하다. * 스프링 시큐리티 로그인 정보 확인하기 @RequestMapping("/auth") p.. 2021. 10. 7.
페치 조인 ( fetch join ) - 2 *목차 페치 조인 특징 3가지와 한계 1. 페치조인에 별칭을 줄 수 없다. 2. 둘 이상의 컬렉션을 페치조인 할 수 없다. 3. 컬렉션 페치조인은 페이징 API를 사용할 수 없다 - 페이징 API 한계 해결하기 1. 엔티티 페치조인 API로 뒤집기 2. LAZY 조회하기 3. @BatchSize 이용하기 * 페치 조인의 특징과 한계 1. 페치 조인 대상에는 별칭을 줄 수 없습니다. (하이버네이트는 가능하지만, 가급적 사용하지 않는다.) 페치 조인의 컨셉은 "나랑 연관되어 있는 애들을 모두 가져오겠다" 입니다. Team의 연관 컬렉션 Member가 5명인데 특정 3명만 조회하고 싶다면, 페치 조인을 가급적 사용하면 안됩니다. 무의식적으로 5명을 기대하고 Member 리스트를 사용할 가능성이 있습니다. //.. 2021. 10. 6.
페치 조인 ( fetch join ) -1 *목차 fetch join 특징 설명 DB SQL, JPA fetch join 쿼리 비교 연관 엔티티 LAZY 조회 확인 한계 극복 fetch join을 이용한 연관 엔티티 조회 fetch join을 이용한 연관 컬렉션 조회 한계 극복 fetch join & 일반 조인 차이 * 페치 조인 특징 1. SQL 조인 종류가 아니다. 2 JPQL에서 성능 최적화를 위해 제공한다. 3. 연관된 엔티티나 컬렉션을 SQL 한번에 함께 조회한다. 페치 조인은, 일반적으로 SQL 문법을 사용했다면 낯선 용어입니다. 왜냐하면 전통 SQL의 방식이 아니기 때문입니다. 페치 조인은 JPQL에서 제공하는 쿼리 방식으로, 연관된 엔티티나 컬렉션을 한번에 조회하고 싶을 때 사용합니다. 일반적인 DB SQL과 JPA fetch jo.. 2021. 10. 5.
N + 1 문제 개요 N + 1이란, JPA를 사용하면서, 연관관계에 있는 엔티티들을 조회할 때, 조인과 관련하여 쿼리 실행 횟수가 불필요하게 늘어나는 경우를 말합니다. N + 1 문제를 위해서, 엔티티의 연관관계 설정에 따라서 발생하는 결과를 알아봅니다. 연관관계 조회 타입 엔티티 연관관계에서 기본 설정 값은 아래와 같습니다. @OneToOne, @ManyToOne : EAGER (연관 엔티티가 1개만 있기 때문에 하나정도는 같이 조회하는 의미로 EAGER로 만들지 않았나 생각합니다.) @ManyToMany, @OneToMany : LAZY (연관 엔티티가 여러개인 리스트라 쿼리 양이 많으므로, 최대한 해당 엔티티 리스트를 사용할 때 쿼리를 날리라는 의미에서 LAZY라고 생각합니다. ) 아래 Review 엔티티가 US.. 2021. 9. 30.
영속성 전이(CASCADE)와 고아객체 * 개요 영속성과 고아객체는 DB에서 사용하는 CASCADE와 관련이 있습니다. DB에서 설정이 가능하지만, 이 관계는 또한 JPA를 사용해서 자바 코드단에서 설정할 수 있습니다. 이번 시간에 사용방법을 알아보겠습니다. * 영속성 전이(CASCADE)를 사용하는 때는? 특정 엔티티를 영속 상태로 만들 때, 연관된 엔티티도 함께 영속 상태로 만들고 싶을 때 사용합니다. 예를 들어, 부모 엔티티를 저장할 때, 자식 엔티티도 저장할 수 있습니다. * DB SQL로 제약상태 추가하기 DB에서 테이블을 만들 때, 수정과 삭제를 전이시키기 위해서 CASCADE를 사용합니다. 조건은 부모 테이블의 PK칼럼을 참조해야하며, 부모의 PK 칼럼을 자손에서는 FK칼럼으로 등록해야 합니다. 예를들어, ON DELETE CAS.. 2021. 9. 14.
JPA 프록시(+즉시로딩, 지연로딩 비교) 개요 엔티티가 양방향으로 매핑을 하는데 혹시 연관관계를 조회할 필요가 없는 경우는 어떻게 할까요? 예를들어, Member가 Team을 칼럼으로 가지고 있지만, Member만 조회하고 싶을 때 어떻게 해야할까요? Team을 거의 사용하지 않은 경우, 매번 Member와 함께 조회하는 것은 비효율적입니다. JPA는 Proxy와 지연로딩을 통해서 해당 문제를 해결합니다. JPA 프록시 내부 동작 방식 JPA라고 해서 프록시가 특별한 것은 아닙니다. 단지 Hibernate가 내부적으로 프록시를 이용해서 구현할 뿐입니다. 기존의 프록시의 특징과 비교해서 살펴보면 이해가 쉽습니다. "JPA 프록시"의 핵심은 가짜 엔티티 객체를 조회해서 실제 DB조회를 끝까지 미루기 위함입니다. 1. JPA 프록시 객체는 실제 클래.. 2021. 9. 14.
N:M 테이블 관계 설계하기 * 개요 4가지 JPA 관계 중에, N:M을 알아봅니다. N:M은 실무에서는 잘 사용하지 않는 관계로, 1:N, N:1로 나누어 관리하는 것이 좋습니다. * 특징 관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없습니다. 따라서, 일대다, 다대일 관계로 풀어내야 합니다. 객체는 컬렉션을 사용해서 객체 2개로 다대다 관계가 가능합니다. @ManyToMany @JoinTable 2개를 이용해서, 각 MEMBER_ID, PRODUCT_ID를 PK, FK를 가지는 중간 테이블을 생성할 수 있습니다. 양방향 매핑, 단방향 매핑 모두 가능합니다. 하지만, 중간테이블에 주문시간, 수량같은 데이터가 추가되는 경우가 있을 수 있기 때문에 사용하지 않는게 좋습니다. * 한계 극복 중간 테이블을 엔티티.. 2021. 9. 13.
반응형