[JAVA] assert 잘 사용하기 (with Spring Assert)
·
Java & Spring
개요코드를 작성하다 보면 기본적으로 가정하고 있는 조건들이 있다.그런 조건들은 알고리즘을 파악하거나 주석을 읽으면서 확인할 수 있지만,Assertion을 사용하여 보다 명시적으로 나타낼 수 있다. Java에서 기본적으로 제공하는 assert 문법을 알아보고,이를 Spring에서는 어떻게 사용해야 하는지,또한 Spring의 Assert 클래스와는 어떻게 다른지 알아보자. Java의 assertjava의 assert 문법은 기본적으로 아래와 같이 사용한다.// assert [조건식];assert 1 == 2;// assert [조건식] : [실패 메시지];assert 1 == 2 : "유효성 검사에 실패했습니다.";조건식 결과가 true이면 정상적인 흐름, false이면 잘못된 경우임을 나타낸다. 하지만, ..
[Spring] eventListener, transactionalEventListener 예외 및 트랜잭션 전파 총정리
·
Java & Spring
개요 Spring Boot에서 eventListener를 사용하는 경우가 종종 있는데, eventListener와 transactionalEventListener의 차이, transactionalEventListener의 phase 속성에 따라 동작 방식이 다 다르다. 따라서 이번 기회에 eventListener의 동작 방식과 트랜잭션과 엮이면 어떻게 동작하는지에 대해 정리해 보려고 한다. 문제 이번 포스팅에서는 위에서 기술한 각각의 방식에 따라 아래의 문제를 테스트한다. eventListener에서 예외가 발생하면 예외가 service로 전파될까? service의 @Transactional이 eventListener로 전파되고 커밋될까? 기본적으로 알아야 할 내용 아래는 eventListener와 @T..
덴티아이 서식 일괄 다운로드 변천사
·
Work
들어가기 전에 아래는 Spring Boot + Vue.js 환경에서 이루어진 내용입니다. 개요 필자는 2021년부터 덴티아이라는 서비스를 3년간 운영해오고 있다. 덴티아이는 나라에서 지원하는 학생들의 치과주치의 사업을 전산화하는 시스템이다. 사업은 연 단위로 진행되고, 각 기관에서는 작성된 서식들을 특정한 기간(?) 동안 보관해야 한다고 한다. 따라서 덴티아이에는 작성된 서식들을 PDF로 변환한 후 기관별로 연말에 일괄적으로 다운로드할 수 있는 기능이 있다. 이러한 일괄 다운로드 기능의 구현 방식에 대해 변화한 과정을 소개한다. 서식 다운로드 및 인쇄 덴티아이에는 학생의 서식을 실시간으로 다운로드하거나 인쇄할 수 있는 기능이 있다. 이 기능은 작성된 서식을 보는 페이지에서 해당 화면 자체를 프론트에서 직..
[Spring] QueryDsl transform 및 SqmCaseSearched 오류 해결방법 with Hibernate 6.x
·
Java & Spring
들어가기 전에 해당 포스팅은 아래 환경 기준으로 작성되었습니다. JDK 17 Spring Boot 3.1.0 JPA + QueryDsl 5.0.0 Hibernate 6.2.2 개요 QueryDsl로 쿼리를 작성하던 중 transform을 사용하던 곳에서 아래와 같은 오류가 발생했다. 쿼리를 작성하는 부분은 아무리 봐도 문제가 없고 이전 버전에서 잘 동작하던 쿼리이기도 했다. 코드를 들어가 보니 hibernate 6.x 버전으로 넘어오면서 ScrollableResults에서 get(int) 메소드가 사라져서 발생한 문제였다. 해당 이슈를 구글링해 보니 아래와 같은 해결책이 존재했다. @Bean public JPAQueryFactory jpaQueryFactory() { return new JPAQueryF..
[Spring] JPA 다중 서버 환경 DB 동시성 문제 해결하기
·
Java & Spring
개요 서비스를 운영하다 보면 동시성 문제에 의해 DB에 잘못된 업데이트가 발생하거나 중복 insert 등의 경우를 종종 마주칠 수 있다. 단일 서버라면 Java에서 제공하는 synchronized 블록을 이용해서 대응을 할 수 있겠지만, synchronized 블록은 하나의 Application 내에서만 동작하기 때문에 로드 밸런서를 통해 여러 대의 서버를 구성하였다면 완전한 동기화를 적용할 수 없다. 따라서 다중 서버 환경과 비슷하게 테스트해 보고 DB 동시성 문제를 해결해 보자. 만약 단일 서버라면 아래와 같은 방식으로 해결할 수도 있다. (synchronized + JPA) https://hojun-dev.tistory.com/entry/JAVA-JPA-중복-Insert-방지하기 [JAVA] JPA..
JMeter 설치하기
·
Setting
개요 JMeter는 기능을 테스트하고 성능을 측정하는 대표적인 소프트웨어이다. 프로젝트의 성능 향상을 위해서는 성능 테스트가 필수적인데, 보통 기능 개발하기에도 바빠 뒷전으로 미루게 된다. 나 또한 그랬지만 프로젝트 중 여러 개가 사업 상 시험성적서를 받아야 하는 경우가 존재했고 해당 지표 측정을 JMeter로 한다고 하여 이 참에 성능 테스트도 할 겸 미뤄두었던 JMeter 관련 내용을 정리한다. 설치 Java 설치 컴퓨터에 Java가 설치되어있지 않거나 버전이 낮은 경우 먼저 Java를 설치해야 한다. 터미널(Windows에서는 cmd)을 열어 아래 명령어를 통해 Java의 버전을 확인해 보자. java -version JMeter의 현재 가장 최신 버전인 5.6.x의 java 최소 버전은 8이므로 ..
[JAVA] 내부 resource 파일 활용하기
·
Java & Spring
개요 Java Spring Boot에서 프로젝트를 만들다 보면 엑셀 혹은 내부 json 파일을 읽고 return 하거나, static 파일들을 사용자가 직접 제공받을 수 있도록 web으로 열어두고 싶은 경우가 생긴다. 위 경우의 해결 방법과 주의할 점을 알아보자. 앱 내 활용 앱에서 resource로 사용할 파일들을 읽어서 return 하거나 재활용하기 위해서는 resource 폴더에 파일을 두고, ClassPathResource 클래스를 통해 가져다가 사용할 수 있다. 예시로 파일을 하나 만들어 필요한 내용을 기입하고 해당 파일의 내용을 읽어 반환할 수 있도록 구현해 보자. 먼저 test.json 파일을 만들어 아래 내용으로 작성한다. { "version": "v1", "template": [ {"ke..
[JAVA] LocalDate로 한국식 월 주차 구하기
·
Java & Spring
들어가기 전에 만약 Calendar 클래스를 사용하고 계신다면 아래 포스팅을 참고해 주세요 :) https://hojun-dev.tistory.com/entry/JAVA-Calendar-한국식-월-주차-구하기 [JAVA] Calendar로 한국식 월 주차 구하기 들어가기 전에 만약 LocalDate 클래스를 사용하고 계신다면 아래 포스팅을 참고해 주세요 :) https://hojun-dev.tistory.com/entry/JAVA-LocalDate-한국식-월-주차-구하기 [JAVA] LocalDate로 한국식 월 주차 구하기 들 hojun-dev.tistory.com 개요 매주 보고서 데이터를 엑셀로 출력하여 전달해야 하는 시스템을 만드는 등 특정 날짜가 몇 월의 몇 주차인지 계산해야 하는 경우가 있다...