본문 바로가기

Develop

(317)
[JPA] QueryDsl 사용하기 사용을 위한 기본구성 1. JpaFactory package com.practice.demo.config; import com.querydsl.jpa.impl.JPAQueryFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.persistence.EntityManager; @Configuration public class JpaFactory { @Autowired EntityManager em; @Bean ..
[QueryDSL] QueryDSL 세팅 1. Build.gradle에 추가 // QueryDSL로 주석 처리한 부분만 신경쓰면된다. // QueryDSL buildscript { ext { queryDslVersion = "5.0.0" } } plugins { id 'java' id 'org.springframework.boot' version '2.7.12-SNAPSHOT' id 'io.spring.dependency-management' version '1.0.15.RELEASE' // QueryDSL id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" } group = 'com.study' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' co..
[Test Code] Spock Framework + TestContainers 우선 프로젝트에서는 간단하게 JPA로 insert, delete,select하는 게 있다고 가정하자. 구조만 보이면, 어느정도 동작에 대해서는 알것이라고 기억이 날 것이라고 생각이 된다. 이제 테스트 코드를 작성해보자 우선 Spock를 위해서는 2가지 gradle상 추가를 해야한다. 1) 의존성 추가 + 플러그인 추가 2) 기본 Spock 사용 총 6단계로 나뉜다. 각 feature 메소드라고 부른다. setup,when,then,expect,cleanup,where 1) given,when,then 3가지 기본 사용법 2) Spring Boot Test 2-1) 컨텍스트에 빈 존재유무 테스트 뭔가 구리고 더럽다, 간단하게 바꾸자 2-2) 해당 서비스의 값이 올바른지 확인 사실 2-1을 했으면 거저 먹기..
[Spring] httpClient 사용시 설정 HttpClient로 3rd파티로 많이 보낸다. 이때 커넥션 타임아웃이나, 리스폰스 타임아웃에 대한 설정을 추가로 해줘야 시스템이 안정적이다. 설정하는 법은 아래와 같다. 1. RequestConfig를 사용하는 방법 RequestConfig 를 생성하고, custom 하위에 여러개의 설정값들이 있다. connection timeout requestconnection timeout socket timeout 크게 이렇게 3가지를 저장하는데 의미는 이렇다. connection.timeout -> 원격 호스트와 연결을 설정하는 시간 socket timeout-> 원격 호스트한테 데이터를 받는 시간 connection timeout -> 연결 관리자 , 풀에서 대기하는 시간 위에서 두개는 원격호스트에 연결 및..
[Spring] GC log 완전히 분석하고, 튜닝하기! 오늘은 GC log를 보는 법, 그리고 분석 및 모니터링하는 방법에 대해서 공부를 해볼까 한다. 기존 구조는 스프링이고, 해당 스프링 프로젝트에서 GC가 어떻게 동작되는지, 로그를 어떻게 남기는지에 대한 모니터링 및 분석을 진행해볼까한다. 1) 스프링 샘플 프로젝트를 생성한다. 걍 뭐 간단한, 일을 하는 이런 컨트롤러가 달린 녀석을 샘플 프로젝트로 만들어 보자 @RestController public class MyController { @GetMapping(value = "/test") public String test1() { MyDto d1 = new MyDto(); MyDto d2 = new MyDto(); return "test1"; } } 2) GC log 설정 -vmargs -Dosgi.re..
JPA orphanRemoval 이란? onetoone 관계의 두 객체가있었다. 둘은 조인을 하고있었고 연결된 다른 객체를 삭제하려고 delete 쿼리를 날렸지만 되지않았다. 당연히 안된다. 이건 JPA를 떠나서 DB 제약조건 때문에 안되는것이다. 바로, 연결된 다른 객체에서 값을 잃어버리기 때문이다. 그래서 찾아본 결과 JPA orphanRemoveal을 제공해준다. 이게 무엇이냐? @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER) @JoinColumn(name="post_comment_id") private PostComment postComment; 이런식으로 고아 객체 트루로 주게되면 post에서 하위값을 null로 set하고 저장하면 ..
[Jpa] delete 관련 잘 안됨 JPA에서 QueryDSL 하기 귀찮아서 그냥 JPQL로 사용하던 중 문제가 발생 delete 쿼리에서 자꾸 DML을 지원안한다는둥 이상한 버그가 많이 떠서 안된다.... 해결 방법 (Modifying) @Modifying @Query("delete from PostComment m where m.post.postId = :postId") void deletePostComment(Long postId); 추가로 서비스 단에 트랜잭션 묶어주기 수정, 삭제는 트랜잭션을 메소드 별로 묶어주는게 좋다. 이유는.. 트랜잭션의 기본을 안다면.. 다알듯... 무튼 JPA는 자동 트랜잭션 처리를 지원해주지만. 혹시나 몰라서 명시를 하긴했다. 사실 해결은 Modifying이 크다. 앞으로는 그냥 QueryDsl로 설계해..
[JPA] 생성시간, 수정시간 자동화 하기 1. TimeEntity를 하나 생성한다. @MappedSuperClass JPA Entity 클래스들이 해당 어노테이션이 붙은 클래스를 상속한 경우 해당 클래스의 필드를 컬럼으로 인식하게 한다. @EntityListeners(AuditingEntityListener.class) 해당 어노테이션이 붙은 클래스에 Auditing 기능을 포함시킨다. @CreatedDate Entity가 생성되어 저장될 때 시간이 자동 저장된다. @LastModifiedDate 조회한 Entity의 값을 변경할 때 시간이 자동 저장된다. 2. 사용하여 추적을 사용할 엔티티를 상속 받게 한다. 3. 메인 클래스에서 추적기능을 킨다. 이러면 끄읏, 정상적으로 되나 보자 된다!