본문 바로가기

spring

(29)
SpQL (Spring Expression Language) 에 대해서 [인트로] @Value와 같은 어노테이션으로 쉽고 간편하게 필드의 값을 주입하여 빈에 대한 설정을 했지만 이때 value에 지정하는 값이 어떤 규칙으로 사용되는지에 대해서 크게 궁금하지는 않았지만 어쩌다 보니 이런 표현식이 많은 부분에서 사용되는 것을 발견하고 잘 쓸 수 있다면 spring 개발을 함에 있어서 유용한 경우가 있을 것 같다는 생각에 공부를 해보았다. [spQL을 어디서 흔히 볼 수 있을까?] 1. spring framework : @Value 2. data : @Query 3. security : @PreAuthorize @PostAuthorize @PreFilter @PostFilter 4. view : thymeleaf 스프링과 관련된 많은 부분에서 spQL을 사용하고 있었다. [spQ..
[JPA] 영속성 컨테이너 관련 의문점. 엔티디의 생명주기가 어떻게 되는가? new : 식별자(id)가 존재하지 않은 새로운 엔티디 Managed : 영속성 컨테이너에 저장된 엔티디로서 무결성을 지니고 있다. Detached : 식별자(id)가 존재하는 엔티디로서 무결성이 없다. Removed : 삭제된 인스턴스 영속성 컨테이너는 쓰레드끼리 공유되는 객체인가? 영속성 컨테이너는 공유 자원이 아니다. 영속성 컨테이너는 하나의 요청(쓰레드)에서 사용하는 1차 캐시로서의 역할을 한다. 어플리케이션 단에서 공유되는 캐시 자원이 있는데 이 자원은 EntityManagerFactory를 통해서 얻을 수 있다. EntityManagerFactory를 통해서 2차 캐시를 얻을 수 있다. 이때 2차 캐시는 어플리케이션 단에서 공유되는 캐시이다. [JPA] 트랜..
[Spring security] Redis를 이용한 글로벌 세션 스토리지 시작글 Spring security는 Authentication 인증 객체를 세션에 보관하여 사용하는 것이 디폴트이다. 하지만 세션은 분산 컴퓨팅 환경에서 세션 또한 분산된다. 이점은 로그인 처리시에 로그인 상태를 확인하는 기능을 구현할 때 장애를 유발할 수 있다. 따라서 세션을 이용한 로그인 상태 처리 방식은 분산 환경에서 결함을 지니고 있다. 이를 해결하기 위한 방법은 in memory database를 이용하는 방법이다. 이런 DB 중에 하나가 Redis인데 이것을 이용하여 세션을 대체하는 방법을 적용해보자. +) 처음에는 SecurityContextRepository와 SecurityContext를 커스텀해서 사용해야하나? 생각했는데 다행히 더 좋은 효과적인 방법이 있었다. 이 방법은 HttpSe..
[Spring] UsernamePasswordAuthenticationFilter 를 통한 폼 로그인 하기 로그인 구현하기 UsernamePasswordAuthenticationFilter 는 폼 양식을 통한 로그인 처리를 시도할 때, 최소한의 개발로 로그인 처리를 쉽게 처리할 수 있게 도와준다. 폼 로그인을 구현하기 위해서 폼의 액션과 메서드 POST 방식 그리고 인풋 name이 username, password이어야 정상적으로 동작하기에 이를 주의하자. 구현을 위한 절차는 이렇다. 1. UserDetailsService 구현하기 요청한 로그인 유저이름을 통해서 db에 유저 정보를 조회하여 UserDetails 객체에 담아서 반환하도록 구현해야한다. 2. UserDetails 구현하기 UserDetails 인터페이스에 따른 역할에 맞게 구현해주면 된다. 메서드 이름을 보면 어떤 것을 구현할지 명확해서 이해하..
Oath2 로그인 구현 - 구글 Spring Oauth2 client를 이용하여 구글 로그인을 구현해 보자. 구현 절차 1. 구글 api 콘솔 프로젝트 등록 https://console.cloud.google.com/apis/dashboard?project=natural-reserve-315509 Google 클라우드 플랫폼 로그인 Google 클라우드 플랫폼으로 이동 accounts.google.com OAuth 동의 화면 설정하기 사용자 인증정보 > + 사용자 인증 정보 만들기 > OAuth 클라이언트 ID 만들기 "/login/oauth2/code/google" 이 디폴트 설정이라서 그대로 작성하면 되지만 중간에 url을 매핑 처리하는 어플리케이션 라우터 Kong을 운영하고 있어서 백엔드로 리디렉션을 요청할 수 있도록 "/api"..