Auditing 1. Auditing 엔티티에 공통으로 들어가는 멤버변수들 (등록시간, 수정시간, 등록자, 수정자 등등)을 추상클래스로 만들고, 해당 추상 클래스를 상속받아 엔티티에 공통적인 기능을 수행하도록 하며 엔티티의 생성과 수정을 감시하는 기법 2. Auditing 필요성 여러 엔티티에 공통된 멤버변수가 존재할 때 하나의 추상클래스로 통합하여 구현할 수 있음 등록시간, 수정시간, 등록자, 수정자 등등의 엔티티 상태 변경에 대한 정보를 기록할 수 있음 기록을 바탕으로 버그 문의, 업데이트 변경 대상 조회 등등 여러 상황에서 사용됨 3. AuditorAware 로그인한 사용자를 등록자 및 수정자로 지정하기 위해 AuditorAware 인터페이스를 구현 현재 로그인한 사용자의 정보를 추출 Authent..
즉시로딩 1. 즉시로딩 엔티티를 조회할 때 연관된 엔티티도 함께 조회하는 Fetch EAGER 타입 2. 즉시로딩 테스트 OrderItem 객체 조회 3. 즉시로딩 select 쿼리문 OrderItem 엔티티와 연관된 엔티티를 조회하고 연관된 엔티티의 연관된 엔티티 또한 조회 지연로딩 1. 지연로딩 연관된 엔티티는 사용할 때 조회하는 Fetch LAZY 타입 실제 비즈니스 구현 시 매핑되는 엔티티의 개수 ↑ 사용하지 않는 데이터도 한꺼번에 조회하므로 성능 ↓ 2. 지연로딩 설정 @ManyToOne 어노테이션에 fetch 설정 지정 3. 지연로딩 테스트 OrderItem 객체 조회 orderItem.getOrder().getClass() 수행 결과 - 실제 객체가 아닌 프록시 객체를 넣어둠 - 프록시 객체..
영속성 전이 (CASCADE) 1. 영속성 전이 (CASCADE) " cascade : 폭포, 폭포처럼 흐르다 " 라는 사전적 의미를 바탕으로 엔티티의 상태를 변경할 때 해당 엔티티와 연관된 엔티티의 상태 변화를 전파시키는 옵션 부모는 One 에 해당하는 Entity 자식은 Many 에 해당하는 Entity 부모 Entity 가 존재해야 자식 Entity 가 부모를 참조하며 생성될 수 있음 2. CASCADE 종류 CASCADE설명 PERSIST 부모가 영속화될 때 자식도 영속화 MERGE 부모가 병합될 때 자식도 병합 REMOVE 부모가 삭제될 때 자식도 삭제 REFRESH 부모가 refresh 되면 자식도 refresh DETACH 부모가 detach 되면 자식도 detach ALL 부모의 상태 변화..
Entity 연관 관계 매핑 1. 연관 관계 매핑 종류 ① 일대일(1:1) - @OneToOne ② 다대일(N:1) - @ManyToOne ③ 일대다(1:N) - @OneToMany ④ 다대다(N:M) - @ManyToMany 2. 연관 관계 매핑 방향 데이터베이스 중심 설계 테이블에서 관계는 항상 양방향 JPA 객체지향 중심 설계에서는 단방향, 양방향 존재 일대일 단방향 1. 일대일 단방향 매핑 cart ⟶ member Cart (장바구니) Entity 생성 cart 테이블 생성 cart 테이블 생성 후 alter 명령어로 외래키(FK) 지정 2. CartRepository 장바구니 조회를 위한 Repository 3. 장바구니 조회 테스트 (즉시로딩) 장바구니 조회 테스트 클래스 생성 및 DI car..
페이지 권한 설정 1. 상품 등록 페이지 ADMIN (관리자) 계정만 접근할 수 있는 상품 등록 페이지 2. 상품 등록 페이지 접근 Controller 상품 등록 페이지에 접근하는 Controller 3. AuthenticationEntryPoint AuthenticationEntryPoint 인터페이스 구현 클래스 인증되지 않은 사용자가 리소스 요청 시 "Unauthorized" 에러를 발생시킴 4. SecurityConfig HttpServletRequset 에 대해서 security 처리를 수행 anyRequest() - 위에 존재하는 url patterns 들을 제외한 나머지 요청들 권한에 맞지 않는 사용자가 리소스에 접근할 때 수행되는 핸들러 static 디렉터리의 하위 파일은 인증을 무시하도록..
로그인 / 로그아웃 1. UserDetailsService 데이터베이스에서 회원 정보를 가져오는 인터페이스 loadUserByUsername() 메소드를 통해 회원정보를 조회 -> UserDetails 인터페이스 반환 2. UserDetails 회원 정보를 담는 인터페이스 직접 구현하거나 스프링 시큐리티에서 제공하는 User 클래스 사용 (구현체) 3. MemberService 로그인 / 로그아웃 구현 UserDetailsService 인터페이스를 구현하고 loadUserByUsername() 메소드 오버라이딩 Builder 패턴을 이용하여 UserDetail 인터페이스를 구현한 User 객체 생성 후 반환 @Override public UserDetails loadUserByUsername(String..
회원가입 로직 1. 회원 역할(Role) 구분 com.shop.constant.Role.java, enum 클래스 생성 일반 유저 / 관리자 package com.shop.constant; public enum Role { USER, ADMIN } 2. 회원 가입 정보 DTO 회원 가입 화면으로 부터 넘어오는 가입정보를 담을 DTO 객체 @Getter @Setter public class MemberFormDto { private String name; private String emial; private String password; private String address; } 3. Member Entity 회원 정보를 저장하는 Member Entity(Model) 생성 Member 객체를 생성하기 ..
Spring Security 1. Spring Security Spring 기반 애플리케이션의 보안(인증과 인가 등)을 담당하는 스프링 하위 프레임워크 2. Spring Security 구조 Spring Security 기능은 request 가 DispatcherServlet 에 도달하기 전에 수행되야함 Servlet Container 에서는 Spring Container Bean 객체 사용 불가 따라서 DelegatingFilterProxy 가 SpringSecurityFilterChain 을 찾아 보안 처리 위임 FilterChainProxy 를 SpringSecurityFilterChain 이라는 이름으로 구현 FilterChains 에는 여러 filter 존재 WebSecurityConfigure..