본문 바로가기

Back-End53

Spring Security 동작 및 구조에 대한 심화 학습 최근에 Spring Security를 구현하고 있는데, 기존의 Form 방식이 아니며, JWT 토큰을 사용하지 않고 REST API + 자동로그인을 구현하면서 실제로 어떤 클래스들이 동작하는지 그리고 구조를 더 이해하기 위해서 공부를 하는 겸 Spring Security 에 대해 추가적으로 포스팅합니다. 기본적인 동작구조는 아래 링크에 작성은 해뒀습니다. https://awse2050.tistory.com/98?category=882914 Spring Security 동작 과정 JWT를 사용하기 전 여러모로 깨우친게 생겨서 추가로 정리하게 되었다. Spring Security 기반으로 JWT 를 사용하려면 Security 구현체를 직접 구현시켜서 사용해야 하기 때문에 어느정도 알 필요는 있다. awse2.. 2022. 9. 6.
querydsl 단 건 조회시 firstResult/maxResults specified with collection fetch; applying in memory! Querydsl private Member getMember(Long memberId) { return jpaQueryFactory .selectFrom(member).distinct() .leftJoin(member.groupMember, groupMember).fetchJoin() .leftJoin(groupMember.group, group).fetchJoin() .where(member.id.eq(memberId)) .fetchFirst(); } Member Entity의 코드이다. // Member.class @Column(name = "email", nullable = false, unique = true) private String email; @Column(name = "name", nul.. 2022. 9. 2.
멀티 모듈에서 JPA 모듈을 사용하기 위한 설정 및 내 견해 이전 포스트와 이어집니다. 타 모듈의 클래스들을 빈으로 등록하기 위한 설정 java-core 모듈을 빈으로 등록해서 java-api에서 사용을 하도록 해야 한다. 그래서 @SpringBootApplication으로 스캔 패키지를 설정한다. java-core의 모듈들 뿐만 아니라 java-api에서 사용되는 모든 모듈들이 스프링 빈으로 등록이 되어야 하기 때문에 패키지 가장 상위를 명시했다. 스프링 빈으로 등록해두기 위해 스캔 범위를 지정. @EntityScan("com.multi.core") // core 모듈을 포함하여 스프링 빈으로 등록시키 위해서 패키지 탐색범위를 지정한다. @SpringBootApplication(scanBasePackages = {"com.multi"}) public class .. 2022. 6. 23.
멀티 모듈에서 JPA DDL 로그가 안나온다. 멀티모듈이라는 단어가 나온지는 꽤 됐으나 최근에 멀티모듈이라는 것에 대해 들었다. 대략적으로 이해한 부분은 아래와 같다. 하나의 프로젝트가 방대해질수록 프로젝트가 가지는 의존성이 어마어마해진다. 프로젝트의 의존성들을 각 모듈에 따라 분리시킴으로써 모듈들이 자신의 역할을 수행하게하고 필요한 의존성들을 가지고 있게 한다. 새로운 구조가 생길 때마다 필요한 모듈을 미리 구현한 각각의 모듈을 사용함으로써 굳이 선언해서 사용하지 않음으로써 의존성을 분리시키고 관리를 좀 더 수월하게 하기 위함이다. 멀티 모듈로 프로젝트를 만들어가다보니 부딪히는 부분이 많았다. 첫 번째는 타 모듈에서 서버를 실행할 경우 Entity 를 가지고 있는 모듈의 의존성을 받아써도 JPA 관련 DDL 로그가 나타나지 않았다. 현재 만들고 있.. 2022. 6. 22.
JPA 연관관계 양방향 매핑 Entity 조회시 문제&해결 사실 제목은 마음에 들지 않는다. N+1 문제라고 예상할 수 있겠지만, N+1 쿼리에 의한 문제에 대한 포스팅은 아니다. 새 프로젝트를 해보면서 여러가지 Query를 실행해보면서 경험을 쌓기위해서 하고 있었다. 문제 상황 및 예상결과 1. 한개의 Todo Entity에 6개의 Comment Entity가 달려있다. 2. QueryDSL을 통해서 조회를 한다 3. Log에는 1개의 Todo Entity와 그 객체안에 Comment Entity가 List 타입으로 저장되어 출력된다. Todo Class @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "TODO_ID") private Long id; @Column(nullable .. 2022. 4. 28.
Spring Security + JWT (2) 자세한 예외 처리 로직이나 DTO는 생략했습니다. Spring Security 기반으로 JWT토큰을 구현할 경우 기존의 Security의 세션&쿠키 방식의 통신에서 설정을 변경해줘야 한다. Config 설정 @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/h2-console/**") .permitAll() .antMatchers("/v1/**") .permitAll() .and() .headers() .frameOptions().sameOrigin() // H2 Page XFrame Error .and() // form 로그인 비활성화 .formLogi.. 2022. 4. 18.