조회수 필드에 대한 문제 확인하기 // 단일 게시글 조회@Transactionalpublic PostDTO getPostById(final long id) { // 게시글이 존재하지 않을 경우 예외 처리 Post post = postRepository.findById(id).orElseThrow(() -> PostException.from(POST_NOT_FOUND)); // 조회수 증가 post.increaseViews(); // DTO로 변환하여 반환 return PostDTO.toPostDTO(post);}// 조회수 증가public void increaseViews() { this.views++;} 위 메서드에 대하여 같은 게시글에 대하여 요청이 들어올 경우, 해당 조회수에 대한 증가는 순차적으로..
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 {}..
내 블로그 - 관리자 홈 전환 |
Q
Q
|
---|---|
새 글 쓰기 |
W
W
|
글 수정 (권한 있는 경우) |
E
E
|
---|---|
댓글 영역으로 이동 |
C
C
|
이 페이지의 URL 복사 |
S
S
|
---|---|
맨 위로 이동 |
T
T
|
티스토리 홈 이동 |
H
H
|
단축키 안내 |
Shift + /
⇧ + /
|
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.