Dev 226

[QueryDSL] Expression( 표현 )

[QueryDSL] QueryDSL 동작원리(3) - fetch QueryDSL은 JPQL 생성 및 실행 권한을 자신에게 위임하여, 개발자가 JPQL을 직접 작성했을 때 발생하는 타입 안정성 체크의 어려움이나 동적 쿼리생성 문제를 해결할 수 있다. 개발자는 그저 JPQL 생성 lordofkangs.tistory.com QueryDSL은 JPQL 생성 및 실행 권한을 자신에게 위임하여, 개발자가 JPQL을 직접 작성했을 때 발생하는 타입 안정성 문제나 동적쿼리생성 문제를 해결할 수 있다. 개발자는 그저 JPQL 생성을 위한 메타데이터만 설정하면 된다. QueryDSL은 유연한 데이터 설정을 지원하기 위해 빌더패턴 구조로 이루어져 있다. 여기까지가 지난 포스팅에서 다루었던 내용이다. 개발자(클라이언트)가 Q..

Dev/JPA 2023.08.04

[SpringMVC] 요청(Request)의 종류 ( GET, POST, JSON )

[SpringMVC] 웹서비스에서 Request(요청)가 처리되는 원리 ( + Servlet ) JAVA Runtime Enviroment(JRE)는 하나의 프로세스, 다수의 스레드 환경이다. JVM은 하나의 프로세스로 동작하고 다수의 스레드로 병렬처리를 지원한다. 이런 환경은 Web Service에 매우 적합하다. 프로세스A lordofkangs.tistory.com 지난 포스팅에서 웹서비스에서 요청(Request)이 처리되는 원리에 대해서 다루어 보았다. 이번 포스팅에서는 요청은 어떤 형태로 들어오는지를 알아보겠다. 웹서비스에 요청은 여러 형태로 들어오지만 4가지를 기본으로 알고 있으면 된다. 1) GET 방식 2) POST 방식 3) JSON 방식 4) Message Body방식 HTTP는 대략 H..

Dev/SPRING 2023.08.02

[QueryDSL] QueryDSL 동작원리(3) - fetch

QueryDSL은 JPQL 생성 및 실행 권한을 자신에게 위임하여, 개발자가 JPQL을 직접 작성했을 때 발생하는 타입 안정성 체크의 어려움이나 동적 쿼리생성 문제를 해결할 수 있다. 개발자는 그저 JPQL 생성을 위한 메타데이터만 설정하면 되고 QueryDSL은 유연한 데이터 설정을 위해 빌더패턴 구조로 이루어져 있다. 여기까지 지난 포스팅에서 알아본 내용이다. [QueryDSL] QueryDSL 동작원리(1) - 빌더패턴 JPA에서 개발자가 원하는 엔티티를 얻으려면, JPQL을 작성하고 이를 EntityManager로 실행해야 한다. 이때 한 가지가 문제가 있는데, JPQL이 문자열이라는 점이다. JPQL이 문자열이기에 타입안정성 체크 lordofkangs.tistory.com [QueryDSL] Q..

Dev/JPA 2023.08.02

[SpringMVC] 웹서비스에서 요청(Request)이 처리되는 원리 ( + Servlet )

JAVA Runtime Enviroment(JRE)는 하나의 프로세스, 다수의 스레드 환경이다. JVM은 하나의 프로세스로 동작하고 다수의 스레드로 병렬처리를 지원한다. 이런 환경은 Web Service에 매우 적합하다. 프로세스A가 CPU를 점유하고 있다. CPU가 프로세스A를 프로세스B로 바꾸려고 한다. 이를 컨텍스트 스위칭(Context Switching)이라 부른다. 컨텍스트 스위칭은 오버헤드를 발생시킨다. 컨텍스트 스위칭 작업을 담당하는 디스패처 프로그램이 동작해야 하고 이는 커널수준의 작업이기에 그렇다. 또한 메모리도 서로 독립적이기에, 프로세스가 늘어날수록 메모리 낭비도 심해진다. 초기 동적인 웹페이지 구현 시, Request를 하나의 프로세스에 할당했다. 대표적으로 CGI(Common Ga..

Dev/SPRING 2023.08.01

[QueryDSL] QueryDSL 동작원리(2) - 메타데이터 설정하기

[QueryDSL] QueryDSL 동작원리(1) - 빌더패턴 JPA에서 개발자가 원하는 엔티티를 얻으려면, JPQL을 작성하고 이를 EntityManager로 실행해야 한다. 이때 한 가지가 문제가 있는데, JPQL이 문자열이라는 점이다. JPQL이 문자열이기에 타입안정성 체크 lordofkangs.tistory.com 지난 포스팅에서 QueryDSL이 빌더패턴 구조로 이루어진 이유에 대해서 다루어 보았다 . 이번 포스팅에서는 빌더패턴이 어떤 방식으로 구현되어 있는지 알아보겠다. 개발자가 문자열로 JPQL을 작성하면 타입 안정성 체크가 어렵고 동적 쿼리 생성이 직관적이지 못하다. 이를 위해, QueryDSL은 JPQL 생성및실행 권한을 자신에게 위임하고 개발자는 JPQL 생성에 필요한 데이터 설정만 하..

Dev/JPA 2023.08.01

[QueryDSL] QueryDSL 동작원리(1) - 빌더패턴

JPA에서 개발자가 원하는 엔티티를 얻으려면, JPQL을 작성하고 EntityManager에 전달하여 실행하면 된다. 여기서 한 가지가 문제가 있는데, JPQL이 문자열이라는 점이다. JPQL이 문자열이기에 타입안정성 체크도 어렵고 동적쿼리 작성도 직관적이지 못하다. 이런 문제를 해결하기 위해, QueryDSL 프레임워크를 사용한다. 개발자가 직접 JPQL을 작성하지 않고 QueryDSL에게 요청하는 방식이다. 개발자는 QueryDSL이 제공하는 스펙에 따라 JPQL 데이터를 세팅하면 된다. QueryDSL의 프로세스는 개발자가 세팅한 데이터를 토대로 JPQL을 생성하고 EntityManager로 쿼리를 실행하여 결과를 반환한다. 이로써 개발자는 데이터 세팅에만 관여하고, JPQL 생성은 QueryDSL..

Dev/JPA 2023.07.28

[OOP] 빌더 패턴 ( Builder Pattern )

디자인 패턴이란? 객체지향설계 과정에서 발생하는 문제들을 해결하기 위한 패턴(Pattern) 문제 상황 필드변수가 많은 객체는 상황에 따라 세팅이 필요한 변수도 있고 필요하지 않은 변수도 있다. 그러므로 필드변수가 많은 객체는 여러 상황을 지원할 수 있도록 유연한 데이터 세팅이 필요하다. 예를 들어, 문장 객체를 생각해보자. 문장 하나가 만들어지는 데에는 많은 요소가 필요하다. 1. 주어 ( 명사 ) 2. 서술어 ( 동사 ) 3. 목적어 ( 명사 ) 4. 수식어 ( 부사, 형용사 ) 등등 문장은 다양한 형태가 있기에 각 요소가 필요할 수도, 필요 없을 수도 있다. 그러므로 문장 객체는 최대한 유연하게 데이터를 세팅해야 한다. 그러나 기존의 생성자, 수정자 방식의 데이터 세팅은 유연함과는 거리가 멀다. 생..

Dev/OOP 2023.07.27

[QueryDSL] QueryDSL 설정하기 ( SpringBoot 2.6이상, SpringBoot 3.x )

QueryDSL 설정은 쉽지않다. 인프런 김영한 강사님의 QueryDSL 강의를 수강하고 있는 학생이라면 QueryDSL 설정에 어려움을 겪고 있을 것이라 예상된다. 아무래도 강사님이 사용하는 버전이 SpringBoot 2.2.2 버전과 QueryDSL 4.4.0 버전을 사용하고 있기에 그렇다. 현재 https://start.spring.io/ 에서 제공하는 SpringBoot 버전은 2.6 이상이거나 3.x 버전이다. - 스프링 부트 3.x 버전 - 스프링 부트 2.6 이상 버전 SpringBoot 2.6 이상, 3.x 버전 모두 QueryDSL 5.0.0 버전에 의존한다. 게다가 3.x 버전의 경우, 지원하는 패키지명이 javax에서 jakarta로 변경되었다. 이런 저런 이유로 현재 인터넷상에는 Q..

Dev/JPA 2023.07.26

[QueryDSL] QueryDSL이란?

QueryDSL이란? DSL는 Domain Specific Language의 약자로, 특정 영역에 특화된 언어를 의미한다. 그런 의미에서 QueryDSL은 쿼리생성에 특화된 프레임워크를 의미한다. 그럼 QueryDSL이 필요한 이유는 무엇일까? JPA는 객체지향어플리케이션과 관계형DB 사이의 패러다임 불일치를 해결하는 프레임워크이다. 개발자는 객체지향 관점으로 개발하고 JPA프레임워크는 자동으로 SQL쿼리문을 생성한다. SQL문이 자동으로 생성되니 개발자는 SQL 관점 프로그래밍을 하지 않아도 된다. 그러나 완전한 분리는 불가능하다. 복잡한 쿼리 생성을 위해, JPA는 JPQL을 지원한다. [JPA] JPQL이란? JPA는 객체지향Application과 관계형DB 사이의 패러다임 불일치 문제를 해결한다...

Dev/JPA 2023.07.21

[SpringDataJPA] Auditing

등록날짜, 등록자, 수정날짜, 수정자 데이터는 유지보수에 중요한 요소이다. 그러므로 엔티티는 위 요소를 담고 있어야 한다. 그러나 모든 엔티티에 이를 동일하게 생성한다면 엄천난 중복코드를 만들어 내게 된다. 그래서 JPA는 @MappedSuperclass를 제공하여 문제를 해결한다. @MappedSuperclass가 선언된 클래스에 공통속성을 생성하고 엔티티가 이를 상속하면 DB에 레코드가 생성될 때, 공통속성의 컬럼이 생성된다. JPA가 제공하는 Auditing @MappedSuperclass @Getter public class JpaBaseEntity { @Column(updatable = false) //수정 불가 private LocalDateTime createdDate; private Loc..

Dev/JPA 2023.07.20