non-blocking UUID generator

UUID UUID 레코드 레이아웃 이름 길이 (byte) 길이 (hex) 길이 (bits) 내용 time_low 4 8 32 시간의 low 32비트를 부여하는 정수 time_mid 2 4 16 시간의 middle 16비트를 부여하는 정수 time_hi_and_version 2 4 16 최상위 비트에서 4비트 “version”, 그리고 시간의 high 12비트 clock_seq_hi_and_res clock_seq_low 2 4 16 최상위 비트에서 1-3비트는 더보기…

[Spring Batch] Implement of Aggregated Item reader

들어가기에 앞서 SQL 을 이용하다보면 GROUP BY 절을 자주 사용하게됩니다. Batch 의 Item reader 에서도 GROUP BY 절을 사용하여 grouped item 을 가져오면 좋겠으나 집계되어 반환되는 record 의 수가 1이기 때문에 item reader 에 사용하기에는 애로사항이 있었습니다. 이를 Custom row mapper 와 Custom result set extractor 구현으로 해결했던 사례를 공유하고자 더보기…

Spring framework test 실행시 로그 줄이기 (logback-test.xml)

Logback Spring framework 환경에서 테스트 코드 실행시, testbed profile 에 대해 별다른 logback 설정이 없다면 , 아래와 같이 debug 로그부터 info 로그까지 바리바리 올라온다.   하지만 대부분의 로그는 assertion 에 관한 로그가 아닌, springframe context load, configuration 등에 관한 로그이다. 따라서 test 에 집중할 수 있도록 환경을 조성한다.   logback-test.xml 더보기…

[Java] 당신이 SimpleDateFormat 을 쓰지 말아야 할 이유

Why need to not use SimpleDateFormat? 들어가기에 앞서 제목이 좀 자극적이었나요? 전혀 자극적이지 않습니다. 엄밀하게는, production 에 SimpleDateFormat 을 쓰면 안되는 이유입니다. 더 엄밀하게는, multi-thread 환경에서 사용하면 안되는 이유입니다.   SimpleDateFormat 이란? Java7 에서 제공하는 (locale sensitive 한) SimpleDateFormat 클래스는 다음과 같은 역할을 합니다. String 을 파싱하여 Date 객체를 생성합니다. 더보기…

[Spring] Excel Download 구현 – AbstractXlsxView 커스터마이징 하기

들어가기에 앞서 관리자 혹은 유지보수 툴에서는, 화면에 보여지는 데이터를 Excel 파일 형식으로 다운받을 일이 많다. 흔히 Excel Controller (API Gateway의 일종으로 이름은 그냥 관용적인 표현인 듯)에서 요청을 받으면, 주어진 조건에 맞는 데이터를 xlsx 파일로 만들어 응답해주는 형태로 구성된다. 현재 진행하는 프로젝트에서도 관리자 페이지 구현시, 스프레드 시트 형태의 데이터를 다운받도록 하는 더보기…

[MySQL] Transaction Isolation Level

들어가며 JPA로 비즈니스 로직을 작성하던 중, 동시성 문제를 해결하기 위해 Transaction Isolation 에 대해 좀 더 찾아보게 되었습니다. 다양한 DBMS가 있지만 접근하기 쉬운 MySQL의 Transaction Isolation Level 에 대해 정리하고, 이를 JPA 에서 어떻게 활용할 수 있는지 알아보겠습니다.   Transaction Isolation Level 먼저 Transaction Isolation Level 이란, 이름 그대로 여러 더보기…

[VCS] Git Branching Strategy – Git flow

들어가기에 앞서 학생 시절 VCS에 무덤덤했고, 단순히 master 브랜치에서 반복되는 커밋으로 체계적이지 못한 버전관리를 하고 있었습니다. 어느 순간 현업에서 일을하며 자연스럽게 Git-flow를 적용하고 있었고, 오늘은 Git Branching Strategy 중 하나인 Git flow에 대해 나누고자 합니다. 조금 더 정확하게는, 개념과 workflow를 확실하게 기억하고자 기록을 남기는 과정으로 생각합니다.     Git-Flow 여러 더보기…

[JPA] JPQL사용중 LAZY fetch 가 안될 때

발단 복잡한 관계 매핑이나 Native SQL에 가까운 쿼리를 유도해야할때에, JPA Repository 만으로 해결이 힘든 경우가 있다. (보통 가능은 하나, 코드가 지저분해진다) 위와 같은 상황에서 비즈니스 로직을 작성하던 중 있던 일이다.  ORM에서 1:M의 OneToMany 관계를 매핑할때는 보통 지연 가져오기를 Fetch 전략으로 선택한다. (Lazy fetching, FetchType.LAZY) JPA Repository 빈을 가지고 findBy ~~ 더보기…

[JS] jQuery가 없는 페이지에서 jQuery사용하기

jQuery 를 사용하지 않는 페이지가 있다. 문제 될 건 없지만, 해당 페이지에서 편하게 디버깅을 하기 위해 jQuery 를 이용하려고 한다. 그럴 때 다음과 같은 방법을 이용한다.   F12등으로 개발자 도구를 연다. Console창에 다음과 같은 코드를 입력한다. (2번 라인은 얼마든지 필요한 버전의 CDN주소로 대체할 수 있다.) var jq = document.createElement(‘script’); jq.src 더보기…