EazyRandom 으로 테스트 객체 랜덤으로 생성하기 Easy Random 이란 자바 객체를 랜덤으로 만들어주는 라이브러리 이다. You can think of it as an ObjectMoter for the JVM이라고 설명한다. 여기서 ObjectMother 은 한마디로 테스트 할때 예시 객체를 만들게 도와주는 객체의 하나라고 말할 수 있다. EazyRandom 깃허브 공식 사이트에 가면 더 많은 정보를 제공한다 URL : 깃허브 Seed EazyRandom 은 Seed라는 값을 통해서 랜덤 값을 생성한다. 즉 시드값은 랜덤 값 생성의 기준이 된다. 동일한 시드값을 가지고 있으면 항상 동일한 결과가 나오게 된다. 위를 보면 Default Seed 값이 잡혀있다. 자 그러면 이제 EazyRando..
비동기 프로그래밍 과 CompletableFuture 동기,비동기 프로그래밍을 설명해야한다면 항상 같이 따라오는게 논블로킹과 블로킹일 것이라고 생각한다. 이에대해 내가 알고있는 부분에 대해 기술하고 JAVA 1.8 부터 지원하는 CompletableFuture을 사용해 비동기, 논블로킹에 대해 기록할 예정이다. 블로킹, 논 블로킹 블로킹 이란 누군가의 행위로 인해 다른 누군가가 제한되거나 대기해야 하는 상태 논 블로킹 이란 누군가의 행위로 인해 다른 누군가가 제한되지 않거나 대기하지 않는 상태 동기 - 하나의 함수가 정해진 코드를 실행하는 과정에서, 다른 함수를 호출함으로써 제한되거나 대기하는 상태 비동기 - 하나의 함수가 정해진 코드를 실행하는 과정에서, 다른 함수를 호출하고도 제한되거나 대기하지 않는..
이번 글은 필자가 회사에서 가장 많이 쓰는 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..
JPA를 사용하면서 영속성 컨텍스트에 대해 이해하지 못하면 항상 예기치 못한 사이드 이펙트를 만나곤 한다. 그래서 영속성 컨텍스트에 대해 공부하면서 간단히 정리해본 글이다. 클래스 수준 아키텍처 아래의 이미지는 JPA의 클래스 레벨 아키텍처 입니다. 여러가지 코어적인 JPA의 클래스와 인터페이스를 볼 수 있습니다. EntityManagerFactory - EntityManager 클래스의 팩토리 클래스입니다. 이 클래스로 EntityManager 클래스의 인스턴스를 생성하고 관리 EntityManager - 인터페이스 입니다. 객체에 대한 영속성 관리작업을 합니다. Query 인스턴스를 생성하는 팩토리 처럼 작동합니다. Entity - 영속 객체입니다. 이 객체의 스펙에 의해서 데이터베이스에 기록될 객체..
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 전략으로 데이터를..
Optional 1. Null 의 늪 null 개념은 1965년 Tony Hoare라는 영국의 컴퓨터 과학자에 의해서 처음 고안되었다. 존재하지 않는 값 을 표현할 수 있는 가장 편리한 방법이 null 참조라고 생각했다고 한다. 하지만 나중에 그는 그당시 자신의 생각이 "10억불 짜리 큰 실수" 였고, null 참조를 만든 것을 후회한다고 함. 2. NPE(NullPointerException) null 참조로 인해 자바 개발자들이 가장 골치아프게 겪는 문제는 널 포인터 예외(NPE) 이다. NPE는 코드베이스 곳곳에 깔려있는 지뢰같은 녀석이다. 컴파일 타임에서는 조용히 잠복했다가 런타임 때 터지기 때문이다. /* 주문을 한 회원이 살고 있는 도시를 반환한다 */ public String getCityO..
필자는 Java가 가장 처음 배운 프로그래밍 언어였으며 메모리 구조에 대해 당연히 알아야 한다고 생각해서 이 글을 정리할려고 한다. 요즘은 Java -> Kotlin 회사 프로젝트를 많이 포팅하고 있기는 하지만 Kotlin 또한 Java 로 컴파일 되어 JVM 위에서 돌아가기 때문에 무조건 알아야 할 영역이다. JAVA 의 메모리 구조 Class Path 자바 가상머신(JVM)이 프로그램을 실행 할 떄, 클래스 파일을 찾는 데 기준이 되는 파일 경로, 즉 JVM이 클래스 파일을 찾는 경로. bin 은 자바소스(.java 파일)가 컴파일 되어 새롭게 생성되는 .class 파일이 모여 있는 곳 이다. 그것들이 모여 있는 위치가 'bin' 폴더 메모리 구조 JVM(자바 가상머신)이 실행되면 OS..
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..
이전 글에서 Java Excel Export 기능의 코드를 구현해보았다. 필자는 이러한 코드를 모든 프로젝트에 중복으로 구현하기 번거로워 라이브러리로 Export 하여 쓸려고 하여 JitPack에 Github Repo를 등록하여 사용 할려고 한다. 프로젝트에 라이브러리 추가하기 Gradle allprojects { repositories { ... maven { url 'https://jitpack.io' } } } dependencies { implementation 'com.github.russell-seo:ExcelExport:master-SNAPSHOT' } Maven jitpack.io https://jitpack.io com.github.russell-seo ExcelExport master..
- Total
- Today
- Yesterday
- mysql
- jenkins
- 논블로킹
- jpa
- 스프링
- 영속성 컨텍스트
- 비동기
- TCP
- DispatcherServlet
- 데이터베이스
- database
- 네트워크
- 인덱스
- oauth2
- spring
- github
- Excel
- spring mvc
- spring boot
- GIS
- thread
- 공간쿼리
- Spring Security
- R-Tree
- Index
- java
- lock
- 쓰레드
- db
- 다운로드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |