본문 바로가기

web/spring7

Spring JPA - 페치조인 최적화 - intro - 두번째 프로젝트를 진행하면서 특정 멤버가 쓴 모든 리뷰를 조회하는 상황이 생겼다. 처음에는 단순히 Page findByMemberId(Long memberId, PageRequest pageRequest); 로 만들었는데 해당 로직을 실행해보니 n+1 문제가 터짐을 확인했다. => 인프런 김영한님의 jpa강의에서 배웠던 페치조인최적화를 사용했는데 이때 겪었던 문제에 대해 정리해보고자 한다. - 정리 - 1. 페치조인은 페치조인 코드를 사용한 쿼리를 직접 만들어주어야 한다. 직접 쿼리를 지정하면 Spring Data JPA는 해당 메소드의 이름을 분석하지 않고 사용자가 제공한 JPQL 쿼리를 사용한다. 따라서 @Query 어노테이션을 사용한 경우에는 메소드의 이름을 보고 자동으로 쿼리를 .. 2024. 3. 23.
HttpServletRequest, HttpServletResponse 생성 시점 & 사용이유 & 사용방법  HttpServletRequest 생성 시점 웹클라이언트(웹브라우저)로부터 서버로 요청이 들어오면 서버에서는 HttpServletRequest를 생성하여, 요청정보에 들어있는 path로 매핑된 서블릿에게 전달한다 (응답을 보낼 때 사용하기 위해 HttpServletResponse 객체도 생성해 함께 전달) HttpServletRequest 사용 이유 http 프로토콜의 request정보를 서블릿에게 전달하기 위해서 사용한다. 헤더정보, 파라미터, 쿠키 등의 정보를 읽을 수 있는 메소드를 가지고 있다. Body의 Stream을 읽어들이는 메소드를 가지고 있다. HttpServletResponse 사용 이유 요청을 보낸 클라이언트에게 content type,응답메세지 등 응답에 관련된 정보를 보내기 위해.. 2024. 3. 18.
Spring Security (스프링 시큐리티) OAuth2 정리 현재 개발중인 프로젝트에서 여러 소셜 로그인을 사용할 예정이므로 OAuth 2.0 에 대해 학습 및 구현에 대해 정리하고자 한다. OAuth 2.0 란? 구글, 네이버 등 다양한 플랫폼의 특정한 사용자 데이터에 접근하기 위해 제 3자 클라이언트(우리가 출시한 웹 또는 앱 서비스)가 사용자의 권한을 위임 받을 수 있는 표준 프로토콜이다. 예를 들어, 우리가 웹서비스를 출시했다고 할 때 우리의 웹을 이용하는 사용자의 타사 플랫폼 정보에 접근하기 위한 권한을 타사 플랫폼으로부터 위임받는 것이다. OAuth 2.0 특징 인증을 위한 개방현 표준 프로토콜이다. '제 3자 애플리케이션'이 사용자를 대신해 HTTP 서비스를 이용할 수 있는 권한을 부여하는 메커니즘을 제공한다. 구글, 카카오, 네이버 등에서 제공하는 .. 2024. 3. 7.
Cascade, OrphanRemoval 정리 1. Cascade 란? 특정 엔티티를 영속상태로 만들 때, 연관된 엔티티도 함께 영속상태로 만들고 싶은 경우 Cascade 옵션을 통해 영속성 전이를 설정하고 관리할 수 있다. 1.1. CascadeType.PERSIST PERSIST는 부모와 자식엔티티를 한 번에 영속화할 수 있다. CascadeType.PERSIST로 설정하고 부모인 Team을 영속화했을 경우, members에 담긴 Member까지 함께 영속화가 된다. 즉, 부모가 자식의 전체 생명 주기를 관리하게 된다. @Entity public class Team { @Id @GeneratedValue private Long id; @OneToMany(mappedBy = "team", cascade = CascadeType.PERSIST) pr.. 2024. 2. 23.
Spring Security (3) - Security Filter Chain Security Filter Chain Spring Security에서 제공하는 인증, 인가를 위한 필터들의 모음 1. 필요한 필터 생성 (HttpSecurity) Spring Security는 인증, 인가에 대한 처리를 여러개의 필터를 연쇄적으로 실행하여 수행한다. 이때 필요한 필터와 필요하지 않은 필터를 명시해야 하는데 이를 WebSecurityConfigurerAdapter를 구현한 설정 파일에 명시한다. HttpSecurity클래스에서 이를 기반으로 해당되는 필터를 생성한다. 설정 파일 별로 필터 목록을 생성 후 WebSecurity로 전달한다. WebSecurity는 필터 목록들을 FilterChainProxy로 전달한다. SpringSecurityFilterChain으로 생성되는 bean이다... 2024. 2. 3.
Spring Security(2) - 주요 모듈 Spring Security 주요 모듈 1) SecurityContextHolder 보안 주체의 세부정보를 포함하여 응용 프로그램의 현재 보안 컨텍스트에 대한 세부정보가 저장된다. 2) SecurityContext Authentication을 보관하는 역할을 하며 SecurityContext를 통해 Authentication객체를 꺼낼 수 있다. 3) Authentication 현재 접근하는 주체의 정보와 권한을 담는 인터페이스이다. public interface Authentication extends Principal, Serializable { // 현재 사용자의 권한 목록을 가져옴 Collection 2024. 2. 3.