20만 건의 데이터를 읽어와 데이터베이스에 저장하는 로직을 구현하면서, JPA의 saveAll() 방식과 JDBC를 활용한 Bulk Insert 방식을 비교하며 겪었던 차이를 중심으로 작성한 글이다. 대량 데이터 저장 기능은 시스템 성능에 직접적인 영향을 미치기 때문에, 효율적인 쿼리 실행 방식이 필수적이다. 성능 최적화를 목표로 두 가지 방식의 장단점을 분석하고, 그 차이를 정리했다. JPA vs JDBC 스프링 데이터 JDBC 특징JDBC 위에 얇은 추상화 계층을 제공, SQL 직접 제어가 가능.설정이 간단하며 성능 최적화가 중요한 애플리케이션에 적합.개발자가 SQL을 직접 작성하여 데이터베이스 작업을 세밀하게 제어 가능.JDBC는 Java에서 데이터베이스와 상호작용하기 위한 표준 API입니다. 이..
1주차 과제는 과제의 요구 사항를 충족하면서 기존의 코드를 객체지향적인 코드로 변경하는 과제였다. 과제를 수행하면서 고민해볼 주요 사항들은 다음과 같았다. 상수 관리코드 중복의 없애는 것가독성이 좋은 코드읽기 쉬운 변수명, 메서드명 구현 로직 추상 클래스 각 Item 별로 남은 판매 일수, Quality 등을 업데이트하는 기능이 일부 공통적으로 수행되기 때문에 중복된 코드를 없애기 위하여 추상 클래스로 공통된 부분은 일반 메소드를 통해 구현하고, 각 item 별로 맥락에 따라 구현되어야 하는 부분은 추상 메소드로 정의하였다. 대표적인 예로 update() 를 추상 메소드로 두고 각 아이템 별로 해당 메소드를 오버라이딩 하는 방식으로 중복 코드를 없애주었다. public abstract class Gild..
1. default_batch_fetch_size란? Hibernate의 default_batch_fetch_size는 한 번에 로드되는 엔티티나 컬렉션의 크기를 지정 이 설정은 지연 로딩(LAZY) 상태의 엔티티나 컬렉션을 가져올 때 최소한의 SELECT 쿼리를 사용하도록 도움 작동 원리:예를 들어, 100개의 Post가 있고, 각 Post가 여러 개의 Image와 연관되어 있다고 가정기본적으로 LAZY 로딩에서는 각 Post에 대해 개별적인 SELECT 쿼리가 실행(N+1 문제 발생).하지만 default_batch_fetch_size를 100으로 설정하면, Hibernate는 최대 100개의 Post의 Image를 한 번의 SELECT 쿼리로 가져옴 2. 설정 방법application.yml 또는 ..
@Transient는 Java Persistence API (JPA)에서 사용되는 애노테이션으로, 엔티티 클래스의 특정 필드가 데이터베이스 테이블에 매핑되지 않도록 지정 즉, 해당 필드는 데이터베이스와 상호작용하지 않으며, 영속성 콘텍스트(persistence context)에 포함되지 않음 1. 주요 특징@Transient로 선언된 필드는 데이터베이스에 저장되지 않으며, 쿼리 결과로 조회되지 않음해당 필드는 JPA 관리에서 제외되며, 오직 애플리케이션 내부에서 사용@Transient는 JPA 표준 애노테이션데이터베이스와 연관이 없는 비즈니스 로직이나 캐싱용 필드 등에 사용 2. 사용 예 @Entitypublic class Product { @Id @GeneratedValue(strategy ..
1. 커스텀 어노테이션이 필요한 이유 1.1 사용자 식별 정보 추출 커스텀 어노테이션을 사용하는 이유 JWT 토큰 인증 후 토큰에 있는 정보를 가지고 member의 정보(id, email 등)을 추출하는 로직이 필요한데, 컨트롤러에서 항상 파라미터로 인증 정보를 전달받아서 식별 정보를 추출하는 코드를 계속 작성하는 것은 중복된 코드를 계속 작성하는 불필요한 작업이기 때문에 깔끔하게 어노테이션 하나로 선언적으로 표현하기 위해서 커스텀 어노테이션 사용 2. @AuthMember 어노테이션 선언 @Retention(RetentionPolicy.RUNTIME)@Target(ElementType.PARAMETER)@Parameter(hidden = true)public @interface AuthMember {}..
1. 카카오페이 단건결제 API 1.1 KakaoPay Developer 애플리케이션 등록 카카오페이 단건결제 API를 사용하기에 앞서 KakaoPay Developers에서 애플리케이션 등록이 필요 테스트용으로서 Secret key(dev) 사용 1.2 단건 결제 API 출처 : https://developers.kakaopay.com/docs/payment/online/single-payment 실제 사업자 등록이 필요한 실제 결제가 아니기 때문에 테스트 결제를 이용 단건 결제의 구현 순서는 1. 결제 준비하기, 2. 결제 요청 - 사용자 결제 수단 선택, 3. 결제 승인하기 순으로 이루어짐 결제 준비하기 결제 요청 - 사용자 결제 수단 선택 결제 승인 2. 단건 결제 구현하기 2.1 기본값 설정..