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..
Layout Dialect 1. Thymeleaf Layout Dialect 의존성 주입 nz.net.ultraq.thymeleaf thymeleaf-layout-dialect 2.5.1 2. header / footer / layout 생성 resources/templates/fragments/header.html, header.html resources/templates/layouts/layout1.html 3. header / footer 코드 다른 페이지 (layout)에 포함시킬 영역을 th:fragment 로 선언 header footer 4. layout 코드 layout 기능을 사용하기 위해서 layout 네임스페이스 추가 script, css 를 추가할 영역을 layout:fragment..
Querydsl 1. Querydsl SQL 쿼리문을 문자열이 아닌 소스코드로 작성하도록 지원하는 빌더 API (프레임워크) 2. Querydsl 의 장점 ① 고정된 SQL 문이아닌 조건에 맞게 동적으로 쿼리 생성 가능 ② 제약 조건 조립 및 가독성 향상 ③ 컴파일 시점에 오류를 발견할 수 있음 ④ 자동 완성 기능으로 인한 생산성 향상 3. Querydsl 의존성 주입 com.querydsl querydsl-jpa ${querydsl.version} com.querydsl querydsl-apt ${querydsl.version} 4. Qdomain 플러그인 추가 엔티티를 기반으로 접두사(prefix) 'Q'가 붙는 클래스를 자동으로 생성하는 플러그인 Querydsl 수행 시 엔티티가 아닌 Qdomain..
@Query 어노테이션 1. Spring Data JPA @Query 어노테이션 SQL과 유사한 JPQL (Java Persistence Query Language) 라는 객체지향 쿼리 언어를 통해 복잡한 쿼리 처리를 지원 JPQL - 테이블이 아닌 엔티티 객체를 대상으로 검색하는 객체지향 쿼리, SQL 추상화로 인해 특정 db sql 에 의존하지 않음 2. @Query 를 이용한 조회 상품 상세 설명(itemDetail)으로 상품을 조회하고 결과는 가격순으로 정렬 select "엔티티명" = select "*" @Param 을 통해 매개변수로 넘어온 값을 JPQL에 들어갈 변수로 지정 3. @Query 를 이용한 조회 테스트 수행 ItemDetail 컬럼 값에 "테스트 상품 상세 설명" 문자열이 포함되..