목록2025/03 (4)
HJW's IT Blog
이전 포스팅에서 OAuth2.0 과 JWT 를 이용한 로그인 기능을 구현하였다. 이제 여기에 form login 방식을 추가하여 두가지 방식의 로그인을 가능하게 만들어 볼 것이다.UserDetails 와 UserDetailsServiceSpring Security 의 Form Login 을 이해하기 위해선, Spring Security 가 제공하는 UserDetails 객체와 UserDetailsService 를 이해하고 넘어가야 한다. 한번 UserDetails 를 살펴보자public interface UserDetails extends Serializable { Collection getAuthorities(); String getPassword(); String getUsername..
이번 사이드 프로젝트를 진행하며, OAuth 2.0 에 더불어 JWT 인증 시스템을 채택하여 진행하였다.OAuth 2.0 FlowClient 의 로그인 요청 : GET /api/oauth2/authorize/{provider} 로 요청을 보낸다서버는 돌아올 콜백 URI 를 포함한, 제공자에 맞는 URL 로 리다이렉션을 한다클라이언트가 제공자의 페이지에서 승인을 한다제공자는 콜백 URI 을 사용해 서버의 엔드포인트에 인증 코드를 포함해 보낸다서버는 해당 인증 코드를 가지고 다시 제공자에 Token요청을 한다Token 이 유효하다면, 제공자는 미리 명시된 (ex. email, providerId) 데이터를 서버로 보내준다.Spring Security 를 사용하게되면, 2 ~ 5번의 과정을 자동으로 진행해 준..
1. 엔티티 리스트를 조회했는데 프록시가 반환되었다JPA 를 다루며 쿼리 최적화를 위해 디버거와 로그를 통해 분석중 이었다. 그때, `Channel` 리스트를 조회해야 하는 쿼리의 반환값이 이해하기 힘들었다. 4개는 실제 객체, 2개는 프록시 객채였던 것이다. `Lazy Loading` 으로 불러온 객체들도 아닌, SimpleJpaRepository 의 findByIdIn 을 사용해 불러온 객체들 중 프록시가 포함되어 있다는 것이 이해가 되질 않았다. 아래는 이 현상을 분석하기 위해 Hibernate ORM 공식 문서와, 1차 캐시를 뜯어보며 분석해본 결과이다. 2. 세션과 영속성 컨텍스트 [공식문서]2.9.2. Natural Id APIAs stated before, Hibernate provides..
0. N + 1 이란Spring Data JPA 에서 연관관계가 있는 엔티티를 조회할 때, Lazy Loading 을 활용하여, 실제 데이터가 필요한 시점까지 연관 엔티티의 조회를 미룰 수 있다. 이는 양날의 검과 같다. 최적화를 하는 동시에 성능에 지대한 영향을 미칠 수 있다. 단편적인 예시가 바로 N + 1 문제이다. 한번의 부모 엔티티 조회 후, 각 자식 엔티티를 개별적으로 조회하는 비효율적인 쿼리 실행 문제를 두고 부르는 말이다. @Entitypublic class User { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "user", fetch = FetchType.LAZY) ..