이번 글은 필자가 회사에서 가장 많이 쓰는 QueryDSL에 대해 기본적인 문법에 대해 코드로 정리하고 소개할려고 한다. Querydsl 의 기본문법 이번 글은 Querydsl의 기본 문법에 대해 글을 적어 볼려고 한다. 먼저 Querydsl과 JPQL을 비교해보겠다. Querydsl vs JPQL JPAQueryFactory qf; @Test public void startJPQL(){ // JPQL을 사용한 member1 찾기 String qlString = "select m from Member m " + "where m.username = :username"; Member findMember = em.createQuery(qlString, Member.class) .setParameter("use..
Spring Data Jpa Entity를 DTO로 변환 Entity에서 DTO 페치조인 JPA에서 DTO 바로 조회 Auditing Pageable API 개발 고급 정리 권장순서 Entity 조회 방식으로 우선 접근 페치조인으로 쿼리수를 최적화 컬렉션 최적화 페이징 필요 hibernate.default_batch_fetch_size, @Batchsize로 최적화 페이징 필요 X -> 페치 조인 사용 Entity 조회 방식으로 해결이 안되면 DTO로 조회 방식 사용 Entity를 DTO로 변환 @GetMapping("/api/v2/simple-orders") public List ordersV2() { List orders = orderRepository.findAll(); List result = o..
N+1 쿼리 문제의 원인? Spring Data JPA 에서 제공하는 Repository의 findAll(), findById()등과 같은 메소드를 사용하면 바로 DB에 SQL 쿼리를 날리는 것이 아닙니다. JPQL 이라는 객체지향 쿼리 언어를 생성, 실행시킨 후 JPA는 이것을 분석해서 SQL을 생성, 실행하는 동작에서 N+1 쿼리 문제가 발생한다. JPQL 입장에서는 LAZY로딩, EAGER 로딩과 같은 글로벌 패치 전략을 신경쓰지 않고 JPQL만 사용해서 SQL을 생성한다. N+1 쿼리 문제는 언제 발생할까? 발생하는 경우는 다음과 같은 2가지 경우가 있다. 두개의 Entity가 1:N 관계를 가지며 JPQL로 객체를 조회할때 EAGER 전략으로 데이터를 가지고 오는 경우 LAZY 전략으로 데이터를..
Servlet Application 에 Spring 적용 의미 Spring이 제공하는 IoC컨테이너를 활용 Spring이 제공하는 서블렛 구현체 DispatcherServlet을 사용하겠다. web.xml 파일 내 Listener 변경(기등록된 리스너를 제거하고, Spring에서 제공하는 ContextLoaderListener 등록) ContextLoaderListener는 Spring IoC Container(즉, Application Context)를 Servlet Applicaiton 생명 주기에 맞춰서 바인딩 해준다. Applicaiton Context를 Web Application에 등록되어있는 Servlet들이 사용할 수 있도록 Application Context를 만들어서 이 Applicat..
DispatcherServlet 이란 보통 FrontController 라고 부른다. 즉 Spring MVC 패턴에서 Controller로 들어오기 전에 모든 요청이 이 바로 FrontController 인 DispatcherServlet을 거치게 된다. 이 DispatcherServlet은 다양한 기능들을 제공하고 있으며 어떻게 동작하는지 아래에서 알아보자. Why? Dispatch의 의미는 파견, 급파하다의 의미로 해석해보면, 받은 요청을 어딘가로 빨리빨리 보내는 서블릿 이라는 뜻이다. Spring이 없는 JAVA 런타임에서는 컨트롤러가 존재하지 않는다. 따라서 우리는 서블릿 객체를 생성하고 그것을 web.xml에 일일히 다 등록해줘야 했다. 아래 코드와 같이 웹 사이트를 이용해 봤다면 우리가 접속하..
Spring Boot 를 쓰다보면 AOP, Filter, Inteceptor를 통해서 어플리케이션의 공통 로직을 처리하는 일을 할때 자주 사용하게 된다. 이 세개의 차이점을 알고 사용한다면 더 클린한 코드를 쓸 수 있지 않을까 한다. 그래서 간략하게 AOP, Filter, Interceptor의 차이에 대해 기술해 보겠다. AOP, Filter, Interceptor 의 차이 Spring 으로 개발을 하다가 보면 공통적으로 처리해야 할 업무가 많다. 로그인, 토큰처리, 로그처리등 많은 업무들이 공통적 모든 프로젝트에 적용 되어야 한다. 하지만 모든 코드에 적용하다보면 코드가 난잡하고 가독성이 떨어지는 코드가 될 가능성이 높다. 그래서 Tomcat, Spring은 공통 업무를 따로 분리하여 처리하는 기능을..
Spring Security Spring Security의 동작에 대해 이해할려고 많은 문서들을 뒤져봤지만 쉽게 이해할 수 없어 직접 코드를 쓰면서 이해해 보기로 했다. 필자는 Spring Security 를 적용하여 간단한 로그인 인증관련 테스트를 진행할 예정이다. 개발 환경 IntelliJ IDEA Spring Boot 2.6.3 Java 8 Gradle H2 Gradle 의존성 추가 dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' implementation 'o..
Spring Security 인증처리 흐름과 구조 사실 필자는 Spring 에서 가장 어렵고 복잡한 부분이 바로 Spring Security라고 생각한다. 그래서 더 이해하기 어렵고 사용하기 어렵다. 스프링 시큐리티는 수 많은 클래스 및 인터페이스들로 이루어져 있다. 이 클래스들은 인증환경을 구성하기 위한 각각의 역할이 있으며, 인증처리 역시 관련 시큐리티 클래스들이 적절하게 호출되어 구현된 것이다. Spring Security 란? 스프링 시큐리티에서는 인증 과 권한을 분리하여 체크할 수 잇도록 구조를 만들었다. Authentication(인증) : A 라고 주장하는 주체(user, subject, principal) 가 A가 맞는지 확인 하는 것. 코드에서 Authenitication : 인증 과정에..
Transaction(트랜잭션) 이란? 트랜잭션이란, 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위를 뜻한다. D의 상태를 변화시킨다는 것은 무얼 의미하는 것 인가? 간단하게 말해서 SQL을 이요하여 DB 에 접근하여 CRUD를 수행하는 것이다. 본격적으로 Spring 에서 제공하는 @Transcation 에 대해 알아보자 Spring Transaction VS Spring Boot Transaction @Transactional은 많은 편리성을 제공해준다. transcation begin, commit을 자동 수행해준다. 예외를 발생시키면, rollback처리를 자동 수행해준다. public class BooksImpl implements Books { @Transactional publi..
Spring Thread Pool 스프링 부트 다중 처리 요청에 대해 너무 잘 정리되어있는 블로그를 보고 나 또한 기록해 놓기로 하였다. 스프링 부트가 다중 처리 요청을 처리하는 것이 아닌, 내장되어있는 Servlet Container(Tomcat)에서 다중요청을 처리한다. 스프링 부트는 내장 서블릿 컨테이너인 Tomcat을 사용한다. Tomcat은 다중 요청을 처리하기 위해서, 부팅할 때 Thread의 컬렉션인 Thread Pool을 생성한다. 유저 요청(HttpServletRequest)가 들어오면 Thread Pool에서 하나씩 Thread를 할당한다. 해당 Thread에서 스프링부트에서 작성한 Dispathcer Servlet을 거쳐 유저 요청 을 처리한다. 작업을 모두 수행하고 나면 Thread..
- Total
- Today
- Yesterday
- thread
- R-Tree
- java
- 데이터베이스
- database
- jpa
- spring
- github
- Index
- 다운로드
- 스프링
- oauth2
- TCP
- lock
- jenkins
- 네트워크
- db
- GIS
- Excel
- spring boot
- 비동기
- mysql
- 공간쿼리
- Spring Security
- 인덱스
- DispatcherServlet
- 영속성 컨텍스트
- 쓰레드
- 논블로킹
- spring mvc
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |