분류 전체보기 135

[JPA(Jakarta Persistence API)] 프록시와 연관관계 관리

프록시(Proxy) em.find() 는 DB를 통해 실제 엔티티 객체를 조회하지만, em.getReference() 는 DB 조회를 미룰 수 있도록 프록시 엔티티 객체를 조회합니다. (getReference 메서드를 호출하는 시점에는 DB 쿼리를 하지 않고 프록시 객체를 반환한 뒤, 사용되는 시점에 쿼리를 합니다) 프록시 객체는 실제 클래스를 상속받아서 생성되기에 실제 엔티티와 동일한 틀을 가졌습니다. 실제 객체의 참조(target)를 보관하고, 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드를 호출합니다. 프록시 객체는 처음 사용할 때 한 번만 초기화되며, 초기화 시 프록시 객체가 실제 엔티티로 변경되는 것이 아닙니다. (프록시 객체를 통해 실제 엔티티에 접근합니다) 프록시 객체는 원본 엔티..

Java 2024.03.13

[JPA(Jakarta Persistence API)] 상속관계 매핑, @MappedSuperclass

상속관계 매핑 관계형 데이터베이스는 객체의 상속관계를 지원하지 않지만, 슈퍼타입 서브타입 관계가 그나마 유사하기 때문에 이를 상속관계 매핑에 사용합니다. (객체의 상속 구조와 DB의 슈퍼타입 서브타입 관계를 매핑하는 것으로 상속관계 매핑을 사용합니다) 조인 전략을 사용하여 각각 테이블로 변환할 수 있습니다. @Entity @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn public class Item { @Id @GeneratedValue private Long id; private String name; private int price; } @Entity @DiscriminatorValue("MOVIE") public class..

Java 2024.03.12

[JPA(Jakarta Persistence API)] 연관관계 매핑

연관관계 JPA(Jakarta Persistence API)에서 연관관계란 엔티티 간의 관계를 말하며, 외래 키를 통한 참조 관계를 클래스 간의 참조로 다룰 수 있게 해줍니다. 연관관계 매핑 JPA(Jakarta Persistence API)는 객체의 참조와 테이블의 외래 키를, 연관관계 매핑으로 처리합니다. 연관관계에는 방향(Direction), 다중성(Multiplicity), 연관관계 주인(Owner)이 있습니다. 연관관계의 방향에는 단방향과 양방향이 있고, 연관관계의 다중성에는 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M)가 있습니다. 그리고 객체 양방향 연관관계를 관리하는 주인(Owner)이 있습니다. 아래 예시를 통해 단방향 연관관계와 양방향 연관관계를 살펴보겠습니다. ..

Java 2024.03.12

[JPA(Jakarta Persistence API)] 엔티티 매핑

엔티티 매핑은 JPA(Jakarta Persistence API)를 이해하기 위해 알아야하는 개념중 하나입니다. JPA(Jakarta Persistence API)에서 객체와 관계형 데이터베이스를 매핑하여 사용합니다. 엔티티 매핑 @Entity @Table // 객체와 테이블 매핑 @Column // 필드와 컬럼 매핑 @Id // 기본 키 매핑 @ManyToOne @JoinColumn // 연관관계 매핑 @Entity JPA가 관리할 클래스에 사용하는 어노테이션으로 테이블과 매핑할 클래스에 사용합니다. 접근 제한자를 public이나 protect로 가진 기본 생성자가 필요합니다. 필드에 final을 사용하면 안됩니다. final, enum, interface, inner 클래스를 사용하면 안됩니다. (데..

Java 2024.03.12

[JPA(Jakarta Persistence API)] 영속성 관리

영속성, Persistence 영속성(Persistence)은 JPA(Jakarta Persistence API)를 이해하기 위해 알아야하는 개념중 하나입니다. 영속성 컨텍스트(Persistence Context)는 JPA(Jakarta Persistence API)가 내부에서 동작하는 방식과 관련된 개념입니다. JPA(Jakarta Persistence API)를 통해 데이터베이스의 데이터를 자바 컬렉션 객체를 다룰 수 있게 해줍니다. 영속성 컨텍스트(Persistence Context)는 엔티티(Entity)를 영구적으로 저장하는 환경을 의미합니다. 엔티티 팩토리로 생성한 엔티티 매니저를 통해 영속성 컨텍스트에 접근합니다. 엔티티 생명주기 엔티티(Entity)는 생명주기가 있으며, 영속성 컨텍스트(P..

Java 2024.03.12

[JPA(Jakarta Persistence API)] 개요

JPA란? JPA는 Java의 ORM(Object Releational Mapping) 표준으로, 자바 객체와 관계형 데이터베이스 테이블 간의 매핑을 쉽게 해주는 프레임워크입니다. (데이터 액세스 계층의 구현을 간소화합니다) JPA를 사용하면 복잡한 SQL 쿼리를 작성하지 않고도 데이터 관리&접근이 가능하기에, 개발 생산성과 유지보수에 유리합니다. 1. JPA인터페이스를 통해 CRUD작업을 간단한 코드를 작성할 수 있습니다. 2. DB에 독립적입니다. 따라서 DB를 변경하더라도 JPA 코드를 재사용할 수 있습니다. 3. 애플리케이션의 비즈니스 로직과 DB 구조 사이의 결합도가 낮습니다.(변경 사항 적용이 간편합니다) JPA 주요개념 엔티티(Entity)는 데이터베이스의 테이블에 해당합니다. 자바 클래스에..

Java 2024.03.08

[Spring Boot Actuator] metrics monitoring(Prometheus 와 Grafana를 활용한)

metrics monitoring(Prometheus 와 Grafana를 활용한)PrometheusPrometheus는 SoundCloud에서 구축한 오픈 소스 모니터링 시스템입니다.구성된 간격에 따라 주기적으로 HTTP를 통해 메트릭 데이터를 가져오는 데이터 스크레퍼입니다.모든 측정항목 데이터를 저장하는 시계열 데이터베이스입니다.모든 측정항목을 시각화, 쿼리, 모니터링할 수 있는 간단한 사용자 인터페이스입니다.GrafanaGrafana는 Elasticsearch, Prometheus, Graphite, InfluxDB 등과 같은 다양한 데이터 소스로부터 데이터를 가져오고,그래프로 시각화할 수 있습니다.메트릭 데이터를 기반으로 경고 규칙을 설정할 수도 있습니다.경고 상태가 되면 이메일, Slack 또는 ..

Java 2024.03.01

[Spring Boot Actuator] 기초, 엔드포인트 설정

Spring Boot Actuator는 Spring 모듈 중 하나입니다.상태 점검, 메트릭 수집, HTTP 추적 등과 같은 프로덕션에 사용 가능한 기능을 제공하여,Spring Boot 애플리케이션을 모니터링하고 관리하는 데 도움을 줍니다.JMX 또는 HTTP 엔드포인트를 통해 액세스할 수 있고,외부 애플리케이션 모니터링 시스템과 통합할 수도 있습니다. 프로젝트 생성먼저 Spring Web, Spring Boot Actuator 의존성을 추가한 프로젝트를 생성합니다.https://start.spring.io/엔드포인트이후 프로젝트를 가동시키면,http://localhost:8080/actuator에서 아래와 같은 데이터를 확인할 수 있습니다.http://localhost:8080/actuator/healt..

Java 2024.03.01

[Troubleshooting] Spring Batch 최적화

csv파일을 읽고 JPARepository를 활용하여 Batch Job을 진행하던 중, 적게는 5초, 길게는 40초 동안 pc가 멈추는 상황이 발생했고, Batch최적화의 필요성을 느꼈습니다. 사용하고 있던 설정은, chunk size 1000, jpaRepository 였습니다. 당장 비동기 처리를 적용하여 속도를 향상 시킬 수도 있겠지만, 더 세세한 최적화가 필요해보였습니다. 1. Spring Data JPA Batch Insert DB에 데이터를 삽입하는 등의 요청을 실시하는 것은 많은 비용이 듭니다. 하나의 요청에 한 번의 round-trip이 발생하고, 1000개의 요청에 1000번의 round-trip이 발생합니다. (db와 server간의 왕복을 round-trip이라고 합니다) 따라서 이를..

Troubleshooting 2024.02.27

[Redis Cache] Cache miss 전략

OilNow 프로젝트에선,데이터가 존재하지 않으면 db에 있는 데이터를 조회,redis에 데이터를 저장하는 cache miss 전략을 사용했습니다.Batch Job이 실행중일 때, DB로 직접 조회하게 될 경우 부하가 커질 수 있으며,데이터 처리 속도가 낮아질 수도 있기 때문에,데이터를 cache storage에 저장하여 조회 성능을 향상시켰습니다.package com.pj.oil.cache;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import..

Java 2024.02.27
728x90
반응형