반응형

에디 135

jpa, querydsl 적용 시 로깅 비교. querydsl로 작성한 쿼리 DBMS에서 쉽게 돌리는 방법. 2탄!

이전 글 ( jpa, querydsl 적용 시 로깅 비교. querydsl로 작성한 쿼리 DBMS에서 쉽게 돌리는 방법. 1탄! ) 에서 jpa, querydsl을 사용했을 때 불편한 점과 해결 방법(로깅) 및 로깅의 종류에 간략하게 알아보았습니다. 이번 글에서는 최종적으로 선택된 로깅 방법인 p6spy에 대해서 정리하겠습니다. 작성된 글의 소스 코드는 github에 올려두었습니다. JPA, Querydsl 설정 방법은 아래 링크를 참조해주시면 됩니다! JPA에 대해서 궁금하시면? JPA란? JPA 시작 그리고 예제 JPA 테스트 코드로 알아보자! Querydsl에 대해서 궁금하시면? Querydsl란? Querydsl 사용해보자. ( 설정편 ) Querydsl plugin 실행방법 Querydsl 사용..

Develop/spring-data 2020.11.12

[intellij] module not specified

한참 잘하고 있던 프로젝트의 명과 workspace 폴더명을 바꾸고 나서부터 실행이 안되는 현상입니다. 에러는 Module not specified 이었습니다. 여기서 아래의 그림을 보시면 Module을 찾을 수 없다는 문구를 볼 수 있습니다. no module로 표기된 셀렉트 박스를 클릭하여 선택하면 정상적으로 실행됩니다. workspace 폴더명을 바꾸면서 module 경로를 잃어버려서 생긴 문제였습니다!

TroubleShooting 2020.11.10

jpa, querydsl 적용 시 로깅 비교. querydsl로 작성한 쿼리 DBMS에서 쉽게 돌리는 방법. 1탄!

jpa, querydsl가 type-safe로 장점이 뚜렸하였지만 단점도 존재하였습니다. 이 글에선 다양한 쿼리 로그 방법에 대해서 알아보겠습니다. 각 로그방식의 설명과 불편한 점을 다루도록 하겠습니다. 작성된 글의 소스 코드는 github에 올려두었습니다. JPA, Querydsl 설정 방법은 아래 링크를 참조해주시면 됩니다! JPA에 대해서 궁금하시면? JPA란? JPA 시작 그리고 예제 JPA 테스트 코드로 알아보자! Querydsl에 대해서 궁금하시면? Querydsl란? Querydsl 사용해보자. ( 설정편 ) Querydsl plugin 실행방법 Querydsl 사용해보자. ( Entity 관계 매핑 편, 테스트 코드 포함 ) Querydsl 사용해보자. ( Entity 관계 매핑 X편, 테..

Develop/spring-data 2020.11.10

java jar 배포 시 파일을 찾을 수 없습니다. [해결방법]

Spring boot는 내장 톰캣이 있기 때문에 jar배포를 하면 내부적으로 톰캣을 띄울 수 있습니다. 그런데 배포하자마자 resource에서 excel file 읽어올 때 에러가 났습니다. fileNotfound!!! 문제되는 소스는 아래와 같습니다. File file = ResourceUtils.getFile("classpath:" + filePath); Local에서는 정상작동하는데 왜 안되는가 하고 여러가지 시도를 했습니다. URL은 잘 가져오나? URL url = ResourceUtils.getURL("classpath:"+filePath); 결과는 url=jar:file:/home/yongtae/server/test-project-0.0.1-SNAPSHOT.jar!/BOOT-INF/classe..

TroubleShooting 2020.11.09

Spring batch에 Spring Data JPA 기반 Querydsl을 적용해보자! (QuerydlsPagingItemReader)

이번 글에서는 Spring batch에 QuerydslPagingItemReader를 생성하여 적용시켜 테스트까지 해보는 과정을 정리하겠습니다. 우아한 형제들의 이동욱님의 세미나와 티스토리를 엄청나게 참조해서 만들었습니다. 모든 소스는 github에 있습니다. SpringBatch에 대해서 궁금하시면? Spring Batch 란? Spring batch 스케줄 생성! [Jenkins] Spring Batch Jenkins Schedule 사용 시 서비스 관리 방법 JPA에 대해서 궁금하시면? JPA란? JPA 시작 그리고 예제 JPA 테스트 코드로 알아보자! Querydsl에 대해서 궁금하시면? Querydsl란? Querydsl 사용해보자. ( 설정편 ) Querydsl plugin 실행방법 Query..

Spring Data JPA 기반 Querydsl 사용해보자. ( Entity 관계 매핑 X편, 테스트 코드 포함 )

이전글 Querydsl 사용해보자. ( 설정편 )에서 설정하는 방법을 알아보았습니다. Entity 관계 매핑되있는 경우는Querydsl 사용해보자. ( Entity 관계 매핑 편, 테스트 코드 포함 )참조해주세요. 이번 글에서는 Querydsl의 버전업으로 Entity 관계 매핑되어있지 않아도 사용가능해졌기 때문에 Querydsl 사용편에 대해서 알아봅시다. 모든 소스는 github에 올려두었습니다. Entity package com.example.querydsl.staff.entity; import lombok.AccessLevel; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import javax.pers..

Develop/spring-data 2020.11.08

Spring Data JPA 기반 Querydsl 사용해보자. ( Entity 관계 매핑 편, 테스트 코드 포함 )

이전 글에서 Querydsl 설정하는 방법에 대해서 알아보았습니다. 이 글은 Entity 관계 매핑이 되어 있는 경우 Querydsl 사용법에 대해서 알아보겠습니다. 모든 소스는 github에 올려두었습니다.  Entity package com.example.queyrdsl.entity; import lombok.AccessLevel; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import javax.persistence.*; import java.util.ArrayList; import java.util.List; @Getter @Entity @NoArgsConstructor(access = AccessL..

Develop/spring-data 2020.11.08

Spring Data JPA 기반 Querydsl 사용해보자. ( 설정편 )

지난글 JPA 프로젝트에 이어서 Querydsl까지 진행해보자! 이 글에서 작성된 모든 소스는 github에 올려두었습니다. Querydsl 세팅은 허들이 있다고 생각한다. 최대한 자세히 정리해보도록 노력할 것입니다. Gradle ( version 6.6 ) querydsl은 gradle 버전에 따라서 세팅하는 값이 다릅니다. 이 글에서는 version 5.0 이상일 기준으로 작성하겠습니다. plugins { id 'org.springframework.boot' version '2.3.5.RELEASE' id 'io.spring.dependency-management' version '1.0.10.RELEASE' id 'java' id 'com.ewerk.gradle.plugins.querydsl' ve..

Develop/spring-data 2020.11.07

Multiple representations of the same entity [com.example.queyrdsl.entity.Staff#2] are being merged

JPA 정리 도중 에러 발생! Repository를 이용하여 save할 시 발생했던 에러다. 원인은 간단하다. @OneToMany 관계에서 Many에 해당하는 Entity를 save할때 문제가 발생했다. Entity는 고유하다! 하지만 난 2개의 Entity @Id 컬럼에 같은 값을 넣고 save하는 중이었다. JPA가 같은 Entity가 들어왔으니 위와 같은 에러를 보여준 것이다. 해결은 @Id 컬럼의 값을 수정했다.

TroubleShooting 2020.11.06

Spring Data JPA 기반 Querydsl란?

이제서야 적용해본다 Querydsl!! 기존 프로젝트에서는 mybatis를 사용했다. mybatis는 Mapper.java, mapper.xml 파일을 만들어 namespace로 연결하여 사용하는 방식이었다. 개발자1로써 크게 불편함을 느끼지 않고 쓰고 있었다. 그런데 Querydsl이 나오고 신세계를 경험했다. Querydsl 장점 대표적으로 type-safe이다. 자세한 내용은 밑에서 다루겠습니다. 잘못된 쿼리를 xml에 작성 후 build해도 에러는 발생하지 않는다. 실제 쿼리를 호출해야 그제서야 에러가 발생한다. 이런 문제를 사전에 방지 할 수 있다. SELECT * FROM store -- xml에서는 에러 발생하지 않는다. java의 enum, constant를 이용해 type이 의미하는 바를..

Develop/spring-data 2020.11.06

JPA 테스트 코드로 알아보자!

JPA 설정 및 테스트 코드 작성은 이전글에 작성하였습니다. 이번글에서 다루는 소스코드는 github에 있습니다. JPA 저장 후 조회 @Test void entity저장후조회() { //given final Long id = 1L; final String storeName = "스토어1"; final String storeAddress = "주소1"; Store store = Store.builder() .id(id) .name(storeName) .address(storeAddress) .build(); storeRepository.save(store); //when Store resultStore = storeRepository.findByName(storeName); //then Assertion..

Develop/spring-data 2020.11.05

Spring Data JPA 시작 그리고 예제

작성된 모든 소스는 github에 있습니다. 이번글에서는 JPA 설정부터 테스트코드(Junit5) 까지 작성하였습니다. 다음글에서 JPA 테스트 코드 기준으로 작동 원리에 대해서 정리하겠습니다. 프로젝트 생성 gradle dependencies를 제외한 설정은 default값 그대로입니다. application.yaml spring: profiles: active: local --- #local spring: profiles: local datasource: url: jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC&characterEncoding=utf8 username: root password: vnfmsqka0727! drive..

Develop/spring-data 2020.11.05

Spring Data JPA란?

JPA란 무엇일까? Java Persistence API 인터페이스(Repository) 모음 자바 ORM 기술 표준 ORM이란? Object-relational mapping으로 객체 관계 매핑이다. 객체는 객체대로, 관계형 데이터베이스는 데이터베이스대로 설계하고 ORM이 중간에서 매핑한다. 작동 원리 어플리케이션에서 JPA를 사용하면 JPA 내부에서 JDBC API를 통해 SQL을 호출하고 DB와 통신한다. 장점 xml에 작성하는 query보다 간편하다. 테이블 DDL 수정 이력을 관리할 필요없다. Database의 table은 JPA의 Entity이다. table을 수정한다면 Entity를 수정하여 배포하기 때문에 history에 남게 된다. 유지보수에 용이하다. 테이블에 직접 접근하지 않고 Ent..

Develop/spring-data 2020.11.05

Spring batch 스케줄 생성! [Jenkins]

이전글에서는 Spring Batch를 만들었습니다. 이번 글에서는 생성된 Spring Batch를 Jenkins로 스케줄 설정하여 실행시켜 보겠습니다. 이 글은 작성하기에 앞서 우아한 형제들 이동욱님의 티스토리를 참조하여 작성하였습니다. 다양한 방법 스케줄에도 다양한 방법이 있습니다. Linux Cron Quartz Cloud Serverless Spring Batch Admin CI Tool Choice 위처럼 다양한 방법이 있지만 CI Tool Jenkins를 사용하였습니다. Linux Cron : 정상적으로 배포했는지 어떻게 알지?? 로그 다 열어봐야하나.. Quartz : 스케쥴링 시간 변경할때마다 소스 수정하고 재배포하고 또 테스트 하고 싶으면 다시 수정하고 배포하고 또 수정하려면 배포하고 수정..

Spring Batch 란? (예제 소스 포함)

작성한 내용은 우아한 형제들의 이동욱님 블로그, 세미나를 참조해서 작성하였습니다. 테스트 및 적용 내용은 Github에 올려두었습니다. 사내에서 배치 프로젝트를 맡아 Spring Batch를 적용하기로 결정하였습니다. Spring Batch 사용 이전 Spring Batch 이전 스케쥴링 작업은 Scheduler, Quartz 등으로 Spring에서 Annotation으로 선언하여 지정된 시간에 스케줄링을 돌려 구현해놓은 클래스를 호출하여 로직을 실행한다. 기존 스케쥴링 방식으로는 대용량 데이터를 처리하는 도중 에러가 발생하면 처리했던 모든 데이터를 롤백시키고 다시 처음부터 처리해야하고, 몇 번째 데이터에서 에러가 발생했는지, 해당 배치 로직이 성공했는지 실패했는지 로그처리를 하여 확인해야하는 불편함이 ..

728x90
반응형