2026/05 14

OSIV · 낙관적 락 · 비관적 락

1. OSIV (Open Session In View)OSIV란?기본적으로 영속성 컨텍스트는 @Transactional 메서드 단위로 살아있다. OSIV가 켜지면 이 생명주기가 HTTP 요청 단위로 확장된다. Filter/Interceptor 레벨에서 영속성 컨텍스트를 열고, HTTP 응답이 클라이언트에게 보내질 때까지 유지한다.Spring Boot는 OSIV를 기본적으로 켜놓는다 (spring.jpa.open-in-view=true).OSIV가 켜져 있을 때HTTP Request 도착 → OpenEntityManagerInViewInterceptor.preHandle() → EntityManager 생성 (영속성 컨텍스트 시작) → Controller → Service (@Transaction..

N+1문제와 Fetch 전략 - LAZY, Fetch Join, @BatchSize

1. Fetch 전략 — EAGER vs LAZY전략 동작 JPA 기본값EAGER엔티티 로드 시 연관 엔티티도 즉시 JOIN으로 함께 로드@ManyToOne, @OneToOneLAZY연관 엔티티의 프록시만 만들어두고, 실제 접근 시 추가 쿼리@OneToMany, @ManyToMany @ManyToOne과 @OneToOne의 기본값이 EAGER라는 점이 함정이다. 명시하지 않으면 조회할 때마다 연관 엔티티를 함께 JOIN해온다. 모든 연관관계는 LAZY로 두는 것이 권장된다.@ManyToOne(fetch ..

Java & Spring/JPA 2026.05.09

영속성 컨텍스트 메커니즘 - 1차 캐시 · Dirty Checking · 쓰기 지연

1. JPA와 HibernateJPA(Jakarta Persistence API) 는 자바 객체를 관계형 DB에 매핑하는 명세이다. 인터페이스와 어노테이션의 집합일 뿐, 실제 동작 코드는 없다.Hibernate 는 이 명세의 구현체다. JPA보다 먼저 존재했고, 오히려 JPA 명세가 Hibernate의 영향을 받아 만들어졌다. 구분 JPA Hibernate위치명세구현체패키지jakarta.persistence.*org.hibernate.*역할인터페이스/어노테이션 정의실제 동작 코드sprin..

Java & Spring/JPA 2026.05.09

[Monew] 개인 개발 리포트

1. 프로젝트 개요Monew는 사용자가 관심사 키워드를 등록하면 Naver API와 RSS를 통해 관련 뉴스를 자동 수집·요약해서 제공하는 뉴스 큐레이션 플랫폼입니다. 댓글, 좋아요 등 소셜 기능도 함께 제공해 사용자들이 뉴스에 대한 의견을 나눌 수 있도록 설계했습니다.Spring Boot 기반 REST API 서버로, PostgreSQL과 MongoDB를 함께 사용하고 AWS 인프라 위에서 운영합니다.2. 담당한 작업댓글 도메인 개발 (Comment / CommentLike)프로젝트에서 댓글 도메인 전체를 담당했습니다.댓글 등록 / 수정 / 논리 삭제 / 물리 삭제 API 구현댓글 좋아요 / 좋아요 취소 API 구현QueryDSL 기반 커서 페이지네이션 구현 (createdAt / likeCount 정..

Project/Monew 2026.05.06