분류 전체보기 137

[JPA(Jakarta Persistence API)] JPQL 문법(SELECT, PAGING, JOIN, 서브쿼리, 조건식, 함수)

JPQL, Java Persistence Query Language JPQL은 객체지향 쿼리 언어이기 때문에, 테이블을 대상으로 쿼리하는 것이 아니라 엔티티 객체를 대상으로 쿼리합니다. JPQL은 SQL을 추상화해서 DB에 독립적입니다. select m from Member as m where m.age > 30 엔티티와 속성은 대소문자를 구분합니다(Member, age). JPQL 키워드는 대소문자를 구분하지 않습니다(SELECT, FROM, where). 테이블 이름이 아니라 엔티티 이름을 사용해야합니다. 별칭(as)을 사용해야 합니다(m). (SQL과 동일하게 as는 생략할 수 있습니다) TypeQuery, Query TypeQuery는 반환타입이 명확할 때 사용합니다. TypeQuery query..

Java 2024.03.14

[JPA(Jakarta Persistence API)] 다양한 쿼리 방법과 예시

DB에 요청하기 위해 SQL문을 사용합니다. JPA(Jakarta Persistence API)는 JPQL, JPA Criteria, QueryDSL, 네이티브SQL, JDBC API 등 다양한 쿼리 방법을 지원합니다 JPQL JPA 사용에 있어 토대가 되기 때문에 중요합니다. String jpql = "select m from Member m where m.age > 30"; List result = em.createQuery(jpql, Member.class).getResultList(); 객체 지향 쿼리 언어로, SQL 문법과 유사하며, SQL을 추상화하여 DB에 독립적입니다. SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN을 지원합니다. 가장 단순한 조회 방법입니다...

Java 2024.03.14

[JPA(Jakarta Persistence API)] 값 타입

JPA(Jakarta Persistence API)의 데이터 타입은 크게 두 가지로 분류됩니다. 엔티티 타입과 값 타입, 엔티티 타입은 @Entity로 정의하는 클래스 객체립니다. 식별자가 있기 때문에 데이터가 변해도 식별자를 통해 추적할 수 있습니다. 값타입은 int, Integer, String 등 으로 사용하는 자바 기본 자료형이나 객체(실제 사용되는 값, 내용물)를 말합니다. 식별자가 없고 값만 있으므로 변경 사항을 추적할 수 없습니다. 생명 주기를 주인 엔티티에 의존합니다. 사이드 이펙트을 예방하기 위해 불변 객체로 만드는 것을 권장합니다. 값 타입 값타입은 복잡한 객체를 단순화하기 위해 만든 개념입니다. 값 타입이라고 판단될 때만 사용해야 합니다. 값 타입에는 기본 값 타입, 임베디드 타입(복..

Java 2024.03.13

[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
728x90
반응형