전략 패턴을 활용한 다형성 결제 시스템 설계
비즈니스 요구사항 이커머스 시스템에서 주문(Order)은 다양한 결제 수단을 지원해야 한다 각 결제 수단마다 필요한 데이터가 다르고, 별도의 테이블로 관리된다 설계 목표 조회를 하나의 API로, 저장/수정도 하나의 API로 통합하되, 내부 구현은 결제 타입별로 분리 Domain Model & Enum JPA가 아닌 jOOQ를…
framework애 대한 내용입니다
비즈니스 요구사항 이커머스 시스템에서 주문(Order)은 다양한 결제 수단을 지원해야 한다 각 결제 수단마다 필요한 데이터가 다르고, 별도의 테이블로 관리된다 설계 목표 조회를 하나의 API로, 저장/수정도 하나의 API로 통합하되, 내부 구현은 결제 타입별로 분리 Domain Model & Enum JPA가 아닌 jOOQ를…
사소해 보이는 필드명 하나가 어떻게 수 십분의 디버깅을 요구했는지, 그리고 그 과정에서 배운 것들 문제 상황 프로젝트에서 데이터 매핑 오류를 경험했다. 분명 JSON으로 값을 보냈는데, Controller에서 @Valid 검증에 걸려 400 에러가 발생했다 증상: studentName은 정상 매핑되는데, sId만 계속 null이었다 삽질…
jOOQ를 사용하다 보면 매번 JOIN할 때마다 ON 절을 명시해야 하는 번거로움이 있다. JPA – QueryDSL에서는 Entity의 연관관계 덕분에 ON 절 없이도 간단하게 JOIN을 작성할 수 있는데, jOOQ에서도 외래키(Foreign Key) 정보를 기반으로 테이블 간 연관관계 Path를 자동 생성해서 활용하면 ON 절…
jOOQ의 ExecuteListener를 활용하면 애플리케이션 레벨에서 슬로우 쿼리를 실시간 슬로우 쿼리 감지할 수 있다 ExecuteListener ExecuteListener는 jOOQ가 제공하는 라이프사이클 훅으로, SQL 실행의 각 단계에서 커스텀 로직을 실행할 수 있게 해준다 PerformanceListener 구현 jOOQ Configuration 등록 Spring Boot 3.x에서는 DefaultConfigurationCustomizer를 통해 jOOQ…
JPA Entity 기반 DSL 생성 방식은 좋지만 멀티모듈 강제, 일부 DB 객체 지원 불가 등의 제약이 있었다. 이번에는 Testcontainers와 Flyway를 결합하여 DDL 파일로 jOOQ DSL을 생성하는 방식을 살펴보자 DDL Database 방식의 한계 순수 DSL 파일만으로 DSL을 생성하는 방식(DDL Database)를 살펴보자…
코드만 봐도 어떤 쿼리가 실행될지 예측하기 쉽다는 것이 jOOQ의 큰 장점이다. 여기서는 jOOQ의 핵심이라 할 수 있는 코드 제너레이션(Code Generation)방식과 무엇을 기준으로 DSL을 만들어야 하는지 알아본다 Code Generation jOOQ의 코드 제너레이션은 다양한 데이터 소스 중 하나를 참고하여 jOOQ DSL을 생성하는…
ActiveRecord 패턴은 Java 개발자에게 생소할 수 있다. jOOQ는 이 패턴을 지원하여 객체가 직접 데이터베이스 작업을 수행할 수 있게 한다. ActiveRecord 패턴 핵심 개념: 데이터베이스 테이블의 행(Row)를 감싼 객체가 데이터와 함께 CRUD 작업을 직접 수행하는 메서드를 포함 UML 다이어그램 비교 일반적인…
데이터 수정과 삭제는 신중해야 하는 작업이다. jOOQ는 동적 필드 업데이트부터 WHERE 절 없는 위험한 쿼리를 방지하는 안전장치까지 제공해준다 UPDATE 3가지 방식 DAO를 통한 전체 필드 업데이트 JPA의 save()처럼 POJO 전체를 업데이트 – 변경 여부와 관계없이 모든 컬럼이 SET 절에 포함된다…
데이터 삽입은 모든 애플리케이션의 기본이다. jOOQ는 JPA처럼 편리한 DAO 방식부터 벌크 INSERT까지 다양한 INSERT 패턴을 제공한다 jOOQ INSERT의 5가지 방식 자동 생성 DAO를 통한 INSERT JPA의 save() 메서드처럼 사용할 수 있는 가장 간편한 방식 Repository 구현 핵심 특징 생성된 SQL…
복잡한 SQL의 핵심은 서브쿼리이다. jOOQ는 세 가지 타입의 서브쿼리(SELECT절, FROM절, WHERE절)를 타입 안전하게 작성할 수 있다 서브쿼리의 3가지 유형 스칼라 서브쿼리 (SELECT절) SELECT절에서 서브쿼리를 사용하여 계산된 값을 조회한다 요구사항 영화별 대여료를 기준으로 가격 등급을 분류하고, 각 영화의 총 재고 수를…