본문 바로가기

분류 전체보기

(268)
Garbage Collection이란 GC(Garbage Collection)  Java 의 메모리 관리기법중 하나로 Heap 영역(동적으로 할당한 메모리 객체)에서 사용하지 않는 객체를 주기적으로 제거하는 기능입니다. (내부적으로 finalize() 메서드를 호출하여 객체를 메모리에서 해제시킨다고 합니다) 하지만 GC에도 명확한 단점이 존재하는데 이는 아래에서 다루겠습니다.    그렇다면 어떻게 사용하는 객체와 사용하지 않는 객체로 구분하나요?  Java GC는 객체가 쓰이는지 판별하기 위해서 reachability라는 개념을 사용합니다.참조가 있으면 'reachable' 없으면 'unreachable'로 구별하고, 여기서 'unreachable' 상태를 가비지로 간주해 GC를 수행합니다. Heap영역에 있는 객체들에 대한 참조는 다음 4..
queryDsl) subquery limit 1 시작하기 전 아쉽게도 (querydsl) 서브쿼리에서 limit 옵션은 동작하지 않는다 정확한 이유는 잘 모르겠지만 쿼리가 실행될때 JPQLSerializer를 사용하여 싱글쿼리 문자열이 빌드된다. 이 과정에서 sub query limit가 적용되지 않는 것 같다 (jpql는 limit 옵션을 지원하지 않는다) 그렇다면 서브쿼리에서 limit처럼 동작하게 하는법은 무엇이 있을까? 아래와 같은 예제가 있다. (App 과 Version 은 일대 다 관계이다) // 부모 @Entity public class App { @Id @Column(name = "APP_NUM", nullable = false) private Long Id; @Column(name = "APP_NM") private String app..
querydsl 에서 case문 사용하기 query에서 case when문을 사용하는 것보다 어플리케이션에서 비즈니스 로직으로 처리되는 것이 권장되는 방법이다. query dsl 에서 case문은 select절, where절에서 사용이 가능하다. 아래는 간단한 사용법이다 case builder query dsl 에서 제공하는 case문으로 주로 when절에 복잡한 조건이 들어올때 사용된다. > 간단한 case문 (when(조건).then(값)) 으로 처리가 힘들 때 new caseBuilder().when(조건) .then(값).otherwise(값) 조건이 참일때 then 값이 거짓일때 otherwise 값이 적용된다. @Override public List findColorCat(String 원하는색) { return jpaQueryFact..
Apache JMeter (성능 / 부하테스트) Apache JMeter Application은 기능적 동작을 테스트하고 성능을 측정하도록 설계된 Java 오픈소스 소프트웨어 이다.여기서 성능 테스트란, 서비스의 성능을 확인하기 위해 실제 운영환경과 비슷한 환경에서 테스트를 진행하는 것을 의미한다. 이 테스트를 통해서 응답 시간(Response Time), 처리량(Throughput), 병목구간 등을 확인할 수 있다.  준비물1. JDK 다운로드 및 환경변수 설정 (기본적으로 다 되어있다고 생각된다) 2. JMeter 다운로드 (https://jmeter.apache.org/download_jmeter.cgi) Apache JMeter - Download Apache JMeterDownload Apache JMeter We recommend you u..
QueryDsl) BooleanExpression BooleanBuilder와 BooleanExpression 모두 Querydsl 라이브러리에서 제공하는 기능으로, 쿼리를 동적으로 생성하기 위해 사용한다. // booleanBuilder QMember member = new QMember("member"); public List findAllMember(Integer class, String name) { BooleanBuilder builder = new BooleanBuilder(); if (!StringUtils.isEmpty(name)) { builder.and(member.name.eq(name)); } if (class != null) { builder.and(member.class.id.eq(class)); } return jpaQuery..
queryDsl 정리 및 예제 spring boot jpa를 사용하다보면 jpa에서 지원하는 기본적인 메서드 만으로 원하는 데이터를 못 들고 오는 경우가 빈번하게 있었을 것이다. (복잡한 쿼리문) 따라서 jpql을 필연적으로 사용할 수 밖에 없는데 jpql 특성상 복잡도가 올라가면 오타 및 오탈자가 발생하기 쉽다. 문제는 동적 쿼리의 경우 이를 어플리케이션 로딩 시점에서 잡아내지 못하고 런타임 도중 에러가 발생한다. // jpql 예시 @Query("select p from Post p join fetch p.user u " + "where u in " + "(select t from Follow f inner join f.target t on f.source = :user) " + "or u = :user " + "order by ..
이것저것 정리 목록 query 관련 https://weicomes.tistory.com/279 Real MySQL [7-11] 쿼리 작성 및 최적화 - JOIN 본 게시물의 내용과 이미지는 도서 Real MySQL의 내용을 재구성하여 작성되었습니다. 저자, 출판사에 의해 저작권 문제 발생시 게시물이 비공개 될 수 있음을 알립니다. 이번 포스팅에서는 JOIN이 weicomes.tistory.com https://velog.io/@leesomyoung/SQL-Join-%EC%84%B1%EB%8A%A5-%EA%B0%9C%EC%84%A0%ED%95%98%EA%B8%B0 [SQL] Join 성능 개선하기 SQL 쿼리문을 짤 때 join을 통하여 여러 테이블에서 정보를 가져온다.이때, n개의 테이블을 join한다고 하면, n개의 테이..
JPA) JPA Auditing으로 자동화 JPA Auditing 이란 Spring boot JPA 에서 지원하는 기능 중 하나인 Auditing은 뜻 그대로 엔티티가 생성되고 수정되는 시점을 감시하여 생성일, 생성자, 수정일, 수정자 를 자동으로 기록할 수 있다. 생성일 ~ 수정자는 모든 엔티티들이 공통적으로 가지고 있는 컬럼이므로 중복되는 코드를 줄이기 위해 BaseEntity 로 분리하여 여러 방법으로 Auditing을 구현해보자. BaseEntity @Getter @MappedSuperclass @EntityListeners(AuditingEntityListener.class) public abstract class BaseEntity implements Serializable { @CreatedDate @Column(updatable =..