개발/Spring

jOOQ를 JPA와 같이 써보자

jOOQ에 대해 좀 더 알아보자 라는 글을 쓴 지 벌써 8개월 가까이 지났습니다.현재 재직 중인 회사에서는 아직 jOOQ를 사용하지 않고 있는데요. 그래도 언젠가는 쓰일 수 있다는 생각에 기술검증을 하기 위해 이것저것 시도했었습니다. 삽질을 많이 하다 보니 혼자 알고 있기에는 아까운 점들이 있어 정리합니다.여러 고난이 있었고 jOOQ의 창시자의 도움을 받아 진행한 점도 있었습니다. 프로젝트에 jOOQ 또는 jOOQ + JPA 조합을 도입하길 원하시는 분들은이 글을 읽고 고민하시는 것도 좋을 듯합니다. - 본 포스트는 아래를 목표로 지정하고 작성하였습니다. 1. Gradle 환경에서 JPA 엔티티를 사용하여 jOOQ DSL 만들기2. 하나의 프로젝트에서 jOOQ와 JPA를 같이 사용하기 - 본 포스트는 독..

2022.09.10 게시됨

개발/Spring

스프링에서 편리하게 Master / Slave 분기 처리하기

도입 실제 서비스를 운영하다 보면 데이터베이스가 여러 개의 노드로 분산되어 Master / Slave (또는 Multi Master) 구조로 이루어져 있는 경우가 많습니다. 이때 어플리케이션 레벨에서 어떻게 DataSource를 분기처리 할 지 고민이 많았습니다. 이 경우에 크게 두가지 방법으로 나뉘는데요 1. RW / RO 별로 데이터소스를 만들어 개발자가 이를 인지하며 개발을 하거나 2. 단일 데이터 소스에서 트랜잭션의 분기처리를 Lazy 하게 처리하는 방법 으로 두가지가 있습니다. 저는 스프링의 [ AbstractRoutingDataSource ] 를 사용하여 2번 방법으로 진행하였으며, 코드는 [깃허브]에 있습니다. 먼저 결과를 알려드리자면, 2번 방식으로 진행했을 경우 아래와 같이 동작하게됩니다..

2021.08.27 게시됨

개발/Spring

[입문] jOOQ에 대해 알아보자

필자는 JPA로 개발할때 QueryDSL-jpa를 활용한 Type-Safe 한 SQL 작성을 굉장히 선호합니다.사람이 실수 할 수 있는 여지를 미연에 방지할 수 있기 때문입니다. 하지만 회사에서 JPA가 아닌 프로젝트를 맡게 되었고 이로인해 native sql 에서도이런 type-safe한 쿼리를 작성할 수 없을까? 라는 물음으로 찾아보게 되었습니다. (아 mybatis 쓰기 싫어요 ㅜㅜ) 물론 사실 QueryDSL 도 querydsl-sql이라는 형태로native SQL을 지원하지만 주변에서 jOOQ의 평이 좋아 직접 한번 입문 해보기로 하였습니다. 자세한 코드는 [여기] 서 확인할 수 있습니다.DB 스키마는 공식문서에서 제공하는 스키마를 살짝 각색하여 진행하였습니다.(링크의 src/main/resou..

2021.03.04 게시됨

개발/Spring

JPA로 Type-Safe한 CTE 작성하기

RDBMS에서 계층형 쿼리를 작성할때 Common Table Expression을 사용하여쿼리를 작성 할 수 있습니다. 일반적인 SQL에서는 WITH [ Recursive ] 라는 구문으로 작성가능합니다.해당 구문은 [ANSI 표준] 이기 때문에 MySQL이나, MariaDB, Oracle 등대부분의 RDBMS에서 사용할 수 있습니다. 이번에는 해당 구문을 JPA에서 Native SQL을 사용하지 않고 추상화 레벨을 유지하며,QueryDSL과 함께 사용할 수 있도록 하면서 겪은 삽질을 기록하였습니다. 스포일러) "공식적"으로 JPA는 CTE를 지원하지 않습니다 본 글은 MariaDB 기준으로 작성하였습니다. 해당 코드는 [여기] 서 확인할 수 있습니다. CTE 란? Common Table Expressi..

2021.02.21 게시됨

개발/Spring

[Spring] Field Injection은 왜 나쁜가?

1. 도입 대부분 Intellij에서 다음과 같은 경고 때문에 이 글을 보고 있을 확률이 높습니다. 왜 이럴까요? 또한, 자세히 보면 인텔리제이는 다음과 같이 설명합니다. 2. 의존성 주입의 종류 스프링 공식 레퍼런스에서는 Constructor Injection과 Setter Injection 두 가지 만을 소개하고 있지만, 실제로 의존성 주입은 생성자 기반 : Constructor-based dependency injection 세터 기반 : Setter-based dependency injection 필드 기반 : Field-based dependency injection 와 같이 3가지로 구분되며, 보통 마지막 Field Injection을 제일 많이 사용합니다. 2-1. Constructor In..

2020.08.16 게시됨