본문 바로가기

JPA17

Spring Security 간단 적용 애플리케이션을 만들기 위해서는 보통 인증/인가 등의 보안이 필요합니다. 스프링 시큐리티는 스프링 기반의 애플리케이션을 위한 보안 솔루션을 제공합니다. 인증 웹에서 인증이란 해당 리소스에 대해서 작업을 수행할 수 있는 주체인지 확인하는 것 예를들어 커뮤니티 사이트에서 게시판의 글을 보는 것은 로그인을 하지않아도 되지만, 댓글을 작성하려면 로그인을 해야하기때문에 인증이라는 절차가 필요하다. 인가 인증 과정 이후에 일어나는 일로 커뮤니티를 관리하는 관리자 페이지에는 관리자만 접근할 수 있고 일반 사용자의 접근을 막아야한다. 이때 접근하는 사용자가 관리자 페이지 URL에 대해서 인가된 회원인지를 검사하는 것이다. maven으로 security dependency를 추가하였다. org.springframework.. 2022. 8. 1.
Querydsl 소개 기존에 스프링 데이터 jpa를 사용하면서 JPQL을 사용하여 query를 진행하였다. JPQL은 복잡한 로직의 경우 그 길이가 길어져 복잡하고 반복적으로 사용하게 된다. Querydsl을 사용하면 1. java 코드를 작성하듯 쿼리를 작성하여 컴파일 시점에 오류 체크가 가능 2. IDE의 자동완성 기능의 도움을 받을수 있음 3. 동적인 쿼리 작성 편리 이 외에도 수많은 장점이 있다. @Test public void startJPQL() { //member1을 찾아라. String qlString = "select m from Member m " + "where m.username = :username"; Member findMember = em.createQuery(qlString, Member.clas.. 2022. 7. 19.
스프링 데이터 JPA 소개 그동안 JPA CRUD를 직접 작성하였다. 그런데 스프링 데이터 JPA를 이용하면 가장 기본적인 CRUD - save, delete, find, findAll, count 등 (그 이외에도 정말 많은) 다양한 기능들이 구현되있는 인터페이스를 상속받아 사용할 수 있다. 직접 사용해보았는데 신세계다. @Repository public class MemberJpaRepository { @PersistenceContext private EntityManager em; public Member save(Member member) { em.persist(member); return member; } public void delete(Member member) { em.remove(member); } public M.. 2022. 7. 15.
API 개발 고급 - 지연 로딩과 조회 성능 최적화 실무에서 매우 중요함. 100% 이해를 목표로 공부할 것. 간단한 주문 조회 V1: 엔티티를 직접 노출 엔티티를 노출하면 양방향 연관관계 있는 부분에서 무한루프에 빠질 위험이 있다. (@JsonIgnore로 해결가능하긴함) 엔티티를 직접 노출하면 엔티티가 변경되었을 때 API의 스펙이 모두 바뀐다. 성능상에도 문제가 생긴다. 따라서, DTO로 변환해서 반환하는 것이 좋은 방법이다. 간단한 주문 조회 V2: 엔티티를 DTO로 변환 DTO를 생성하여 반환하는 값들을 선언하고 반환한다. 엔티티가 바뀌어도 API 스펙이 바뀔리가 없다. 그런데 V1과 V2 모두 LAZY_Loading으로 인한 쿼리가 너무 많이 호출된다는 문제가 있다. -> N+1 문제가 발생함 간단한 주문 조회 V3: 엔티티를 DTO로 변환 -.. 2022. 7. 10.
프록시와 연관관계 (즉시로딩, 지연로딩) 내가 이해한 방향 프록시는 가짜 객체다. 실제 클래스를 상속 받아서 만들어지고 실제 클래스와 겉모양이 같다. 프록시 객체는 실제 객체의 참조(target)을 보관하고 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드를 호출한다. 프록시의 특징 프록시 객체는 원본 엔티티를 상속받음, 따라서 타입 체크시 주의해야함 (== 비 교 실패, 대신 instance of 사용) 영속성 컨텍스트에 찾는 엔티티가 이미 있으면 em.getReference()를 호출해도 실제 엔티티 반환 영속성 컨텍스트의 도움을 받을 수 없는 준영속 상태일 때, 프록시를 초기화하면 문제 발생 (하이버네이트는 org.hibernate.LazyInitializationException 예외를 터트림) 즉시로딩과 지연로딩 즉시로딩은 fe.. 2022. 7. 2.
상속관계 매핑 객체는 상속관계가 있지만 관계형 데이터베이스는 상속관계라는 개념이 없다. 따라서 슈퍼타입과 서브타입의 관계를 매핑하는 방법을 사용한다. 슈퍼타입 서브타입 논리 모델을 실제 모델로 구현하는 방법 각각 테이블로 변환 -> 조인 전략 통합 테이블로 변환 -> 단일 테이블 전략 서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전략 조인 전략 장점 테이블 정규화 외래 키 참조 무결성 제약조건 활용가능 저장공간 효율화 단점 조회시 조인을 많이 사용, 성능 저하 조회 쿼리가 복잡함 데이터 저장시 INSERT SQL 2번 호출 단일 테이블 전략 장점 조인이 필요 없으므로 일반적으로 조회 성능이 빠름 조회 쿼리가 단순함 단점 자식 엔티티가 매핑한 컬럼은 모두 null 허용 단일 테이블에 모든 것을 저장하므로 테이블이.. 2022. 6. 29.