[Spring Boot] 쇼핑몰 프로젝트 (3)

YulHee Kim·2021년 11월 24일
0
post-thumbnail

✏️ Spring DATA JPA Querydsl

Querydsl은 JPQL을 코드로 작성할 수 있도록 도와주는 빌더 API입니다. Querydsl은 소스코드로 SQL문을 문자열이 아닌 코드로 작성하기 때문에 컴파일러의 도움을 받을 수 있습니다.

💡 Querydsl의 장점

  • 고정된 SQL문이 아닌 조건에 맞게 동적으로 쿼리를 생성할 수 있습니다.
  • 비슷한 쿼리를 재사용할 수 있으며 제약 조건 조립 및 가독성을 향상시킬 수 있습니다.
  • 문자열이 아닌 자바 소스코드로 작성하기 때문에 컴파일 시점에 오류를 발견할 수 있습니다.
  • IDE 도움으로 생산성 향상

Querydsl을 사용해보겠습니다

의존성 추가

		<dependency>
			<groupId>com.querydsl</groupId>
			<artifactId>querydsl-jpa</artifactId>
			<version>4.3.1</version>
		</dependency>
		<dependency>
			<groupId>com.querydsl</groupId>
			<artifactId>querydsl-apt</artifactId>
			<version>4.3.1</version>
            	</dependency>

플러그인 추가

pom.xml에 Qdomain이라는 자바 코드를 생성하는 플러그인을 추가해줍니다.
엔티티를 기반으로 접두사에 'Q'가 붙는 클래스들을 자동으로 생성해주는 플러그인입니다.
ex) Item 테이블 -> QItem.java 클래스 자동 생성
Querydsl을 통해서 쿼리를 생성할 떄 Qdomain 객체를 사용합니다.

<plugin>
	<groupId>com.mysema.maven</groupId>
	<artifactId>apt-maven-plugin</artifactId>
	<version>1.1.3</version>
	<executions>
		<execution>
			<goals>
				<goal>process</goal>
			</goals>
			<configuration>
				<outputDirectory>target/generated-sources/java
				</outputDirectory>
				<processor>com.querydsl.apt.jpa.JPAAnnotationProcessor
				</processor>
			</configuration>
		</execution>
	</executions>
 </plugin>

✏️ JPAQueryFactory를 이용한 상품 조회 예제

    @Test
    @DisplayName("Querydsl 조회 테스트1")
    public void queryDslTest(){
        this.createItemList();
        JPAQueryFactory queryFactory = new JPAQueryFactory(em);
        QItem qItem = QItem.item;
        JPAQuery<Item> query = queryFactory.selectFrom(qItem)
                .where(qItem.itemSellStatus.eq(ItemSellStatus.SELL))
                .where(qItem.itemDetail.like("%" + "테스트 상품 상세 설명" + "%"))
                .orderBy(qItem.price.desc());
        
        List<Item> itemList = query.fetch();
        
        for(Item item : itemList) {
            System.out.println(item.toString());
        }
    }

JPAQuery 데이터 반환 메소드

메소드기능
List< T > fetch()조회 결과 리스트 반환
T fetchOne조회 대상이 1건인 경우 제네릭으로 지정한 타입 반환
T fetchFirst()조회 대상 중 1건만 반환
Long fetchCount()조회 대상 개수 반환
QueryResult< T > fetchResults()조회한 리스트와 전체 개수를 포함한 QueryResults 반환

✏️ Spring Boot Devtools

Spring Boot Devtools에서 제공하는 대표적인 기능

  • Automatic Restart: classpath에 있는 파일이 변경될 때마다 애플리케이션을 자동으로 재시작해 줍니다.
  • Live Reload: 정적 자원(html, css, js) 수정 시 새로 고침 없이 바로 적용할 수 있습니다.
  • Property Defaults: Thymeleaf는 기본적으로 성능을 향상시키기 위해서 캐싱 기능을 사용합니다. 하지만 개발하는 과정에서 캐싱 기능을 사용한다면 수정한 소스가 제대로 반영되지 않을 수 있기 때문에 cache의 기본값을 false로 설정할 수 있습니다.

의존성 추가하기

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-devtools</artifactId>
</dependency>

Live Reload 적용하기

application.properties Live Reload 적용 설정 추가

spring.devtools.livereload.enabled=true

구글 크롬 웹 스토어에서 LiveReload 프로그램 설치

모든 사이트에서 적용이 가능하도록 옵션을 선택

Property Defaults 적용하기

Thymeleaf의 캐싱 기능을 false로 설정하겠습니다.

spring.thymeleaf.cache = false

profile
백엔드 개발자

0개의 댓글