JPA Multiple DataSource

업무를 하다보면 마이크로 서비스도 구축하게 되고, 다중 데이터베이스도 처리해야하는 경우가 생긴다.

일반적으로 하나의 서비스에서 다중 데이터베이스에 접속하는 일이 없겠지만, 가끔 불가피하게 이런일이 생기게 된다.

그래서 시작된 삽질과 도출된 결과를 공유하고자 한다.

AWS RDS Aurora MySQL 호환은 MySQL이 아니다

AWS RDS에는 Aurora라는 서비스가 있다. 엔진을 MySQL 혹은 PostgresSQL로으로 지정해서 사용할 수 있고, 해당 RDB와 호환된다고 나와있다. 그리고 웹페이지에서 RDB 클러스트를 구성할 수 있는 편리한 부가 기능을 제공한다.

Vert.x 프레임워크 이벤트 핸들러 처리(2)

이전 글에서 Vert.x 이벤트 핸들러를 처리를 위해서 제공하는 인터페이스에 사용 예를 간단히 알아보았다. 하지만 해당 인터페이스의 도움이 있다고 해도 순차적으로 처리되어야 하는 비동기 작업은 어쩔 수 없이 “Callback Hell”은 벗어 날 수 없다.
이번 글에서는 “Callback Hell”의 예를 살펴보고 Vert.x 프레임워크에서 제시하는 해결책을 알아보고자 한다.

  • Vert.x Reactive Programming을 제외한 글이다.

JPA SPECIFICATION

jpa CrudRepository 사용 시 조건 검색으로 인해 난감한 상황이 생겼다.
예를 들어 사용자 이름, 사용자 이름과 주소, 사용자 이름과 주소와 이메일과 같은 조건으로 검색이 필요 시 조건에 따라 method를 생성해 주어야 한다는 것이었다.

Vert.x 프레임워크 이벤트 핸들러 처리(1)

Vert.x는 Java 진영에 고성능 서버 프레임워크 중 하나이다. 그리고 Vert.x 프레임워크는 Event Driven 프로그래밍 모델을 사용하고 non blocking인 것을 강조한다. 이는 개발자가 특정 이벤트가 발생했을때 호출될 이벤트 핸들러를 수 없의 정의하고 이것들이 블럭킹 없이 비동기로 동작한다는 예상할 수 있다. 이렇게 Vert.x는 Event Driven/Non blocking 아키텍처 위에서 고성능 비동기 서버 프로그래밍을 할 수 있다.
Vert.x는 비동기 프로그래밍을 Call-Back 패턴으로 구현한다. Vert.x에서 이 Call-Back 패턴을 어떤 식으로 구현해서 사용하는지 알아보자.(Vert.x는 Reactive Programming도 지원함)

JPA CRITERIA QUERY

jpa 사용 시 join 및 동적 쿼리에 따른 문제에 대한 해결 내용을 공유하고자 한다.
시작은 hibernate namig 전략을 이용해 entity와 repository를 맵핑하여 쿼리를 생성하는 방식을 사용하였다.
이는 적응하면 굉장히 편한 쿼리 방식이다. 다만 많은 join과 세밀한 조회가 필요 시 원하는 결과를 도출하기 어려울 수 있다.
일반적으로 알려진 문게가 n+1 쿼리 동작이다.
Lazy Loding으로 인해 join 테이블의 쿼리가 n번 요청되는 문제이다.
위 문제의 경우 검색해 보면 많은 해결 방식이 나와있다.

ORM. 깊이 없이 알아보기.

초기 JAVA JDBC에서 DB CRUD 작업이나 기타 DB CRUD 작업을 해본 개발자라는 그 번 거로 웁과 지루한 작업에 대한 경험이 한 번씩은 있을 것이다. 쿼리에 대입할 값을 한 칸씩 밀어 써서 전혀 다른 값이 들어갔다던가, 쿼리 결과를 객체에 잘못 넣어 다른 결과가 출력된다던지 등등 단순 실수로 디버깅 시간이 길어지는 경우가 많았다. 이런 번거로움과 실수를 해결을 위해서 나온 것이 ORM이다. ORM에 대해서 간단히 알아보자.

Java App 배포용 Docker Base Image 만들기

Docker로 Java App를 배포를 할 때마다 매번 JDK 설정과 파일을 복사하는 것이 낭비인 것 같아서 별도로 이미지로 만들기로 했다.
기본 JDK와 설정만 되어 있는 이미지를 만들어 놓으면, 차후 배포용 앱 이미지를 만들때 반복 작업을 하지 않아도 된다. 추가로 이미지 생성에서 발생할 수 있는 실수도 줄어 들것이다.

Underscore. Scala의 마법.

Scala에서 Underscore(_)의 자주 사용하게 된다. _ (Placeholder)라는 표현을 쓰는 것 같은데 맞는지 모르겠다. 이하는 내용에서는 Underscore(_)이라고 일반화해서 이야기하겠다. 용도는 “그때그때 달라요!”다. 쓰이는 곳에 따라 완전히 다른 의미를 가진다.

다양한 쓰임새 중에 본인이 알고 있는 수준에서 정리해보았다.