나를 기록하다
article thumbnail
Published 2023. 3. 15. 20:00
[JPA] JPA 용어 및 개요 Java/JPA
반응형

JPA(Java Persistence API)

JPA는 Java Persistence API의 약자로, Java에서 관계형 데이터베이스와 상호작용할 수 있는 API를 제공합니다. JPA는 Java EE (Enterprise Edition) 및 Java SE (Standard Edition) 환경에서 사용할 수 있습니다.

JPA는 ORM(Object-Relational Mapping) 기술을 사용하여 Java 객체와 관계형 데이터베이스 사이의 매핑을 처리합니다. 이를 통해 Java 개발자는 데이터베이스 테이블과 필드를 직접 다루는 대신 Java 클래스와 객체를 사용하여 데이터를 다룰 수 있습니다. 이러한 방식으로 JPA는 개발자가 데이터베이스와의 상호작용을 더 쉽고 직관적으로 처리할 수 있도록 도와줍니다.

JPA는 Hibernate, EclipseLink, OpenJPA 등의 구현체가 있으며, 이러한 구현체들은 JPA 표준 사양을 따르므로 서로 호환되며 이식성이 높습니다.

 

 

 

CRUD(Create, Read, Update, Delete)

CRUD는 데이터의 생성(Create), 읽기(Read), 수정(Update), 삭제(Delete)를 가리키는 용어로, 소프트웨어에서 가장 기본적인 데이터 처리 기능을 말합니다.

  • Create (생성) : 새로운 데이터를 생성합니다. 데이터베이스에 새로운 레코드를 추가하는 것과 같습니다.
  • Read (읽기) : 데이터를 조회합니다. 데이터베이스에서 특정 레코드나 모든 레코드를 읽어오는 것과 같습니다.
  • Update (수정) : 데이터를 수정합니다. 데이터베이스에서 특정 레코드를 수정하거나 갱신하는 것과 같습니다.
  • Delete (삭제) : 데이터를 삭제합니다. 데이터베이스에서 특정 레코드를 삭제하는 것과 같습니다.

CRUD는 대부분의 소프트웨어에서 사용되며, 특히 데이터베이스와 상호작용하는 애플리케이션에서 많이 사용됩니다. 데이터 처리 기능을 구현할 때 CRUD를 기반으로 설계하고 개발하면 일관성 있고 효율적인 데이터 처리가 가능해집니다.

 

 

 

SQL(Structured Query Language)

SQL은 Structured Query Language의 약자로, 데이터베이스에서 데이터를 관리하기 위한 표준 언어입니다. SQL은 데이터베이스 관리 시스템(DBMS)과 상호작용하여 데이터를 조작, 쿼리하고, 관리하는데 사용됩니다.

SQL은 데이터베이스에서 데이터를 조작하는 다양한 명령문을 제공합니다. 명령문은 크게 다음과 같이 분류됩니다.

  • 데이터 정의어 (Data Definition Language, DDL) : 데이터베이스의 구조를 정의하거나 변경하는 명령문입니다. 예를 들어, CREATE TABLE, ALTER TABLE, DROP TABLE 등이 있습니다.
  • 데이터 조작어 (Data Manipulation Language, DML) : 데이터베이스의 데이터를 조작하는 명령문입니다. 예를 들어, SELECT, INSERT, UPDATE, DELETE 등이 있습니다.
  • 데이터 제어어 (Data Control Language, DCL) : 데이터베이스의 보안과 권한을 관리하는 명령문입니다. 예를 들어, GRANT, REVOKE 등이 있습니다.

SQL은 대부분의 관계형 데이터베이스 시스템에서 지원되므로, 데이터베이스 시스템에서 데이터를 조작하고 관리하는데 필수적인 언어입니다.

 

 

 

RDB(Relational Database)

RDB는 Relational Database의 약어로, 관계형 데이터베이스를 말합니다.

관계형 데이터베이스는 데이터를 테이블 형태로 저장하며, 이 테이블은 관계(relationship)을 통해 서로 연결됩니다. 즉, 여러 테이블 간의 관계를 기반으로 데이터를 구성하고 저장합니다. 이를 통해 데이터의 일관성과 정확성을 유지하고, 데이터의 중복을 최소화할 수 있습니다.

RDB는 SQL(Structured Query Language)을 사용하여 데이터를 조작하고 관리합니다. 이를 통해 데이터를 효율적으로 검색, 삽입, 수정, 삭제할 수 있으며, 대용량의 데이터를 처리하는데 적합합니다. 또한, RDB는 ACID(Atomicity, Consistency, Isolation, Durability)라는 데이터베이스 트랜잭션의 속성을 보장하여 데이터의 일관성과 무결성을 유지합니다.

관계형 데이터베이스는 MySQL, Oracle, Microsoft SQL Server 등 다양한 데이터베이스 관리 시스템에서 지원됩니다. RDB는 현재까지 가장 보편적으로 사용되고 있는 데이터베이스 모델입니다.

 

 

 

NoSQL(Not only SQL)

NoSQL은 Not Only SQL의 약어로, 관계형 데이터베이스 모델 이외의 다른 데이터베이스 모델을 지칭하는 용어입니다.

NoSQL 데이터베이스는 RDB와는 달리 데이터의 구조를 미리 정의하지 않고, 유연한 스키마를 사용합니다. 이를 통해 대용량의 비정형 데이터를 효율적으로 저장하고 처리할 수 있습니다. NoSQL은 분산 컴퓨팅 환경에서의 데이터 처리에 적합하며, 확장성과 가용성이 높은 특징을 가지고 있습니다.

NoSQL 데이터베이스는 다양한 종류가 있으며, 목적에 따라 적합한 데이터베이스를 선택하여 사용해야 합니다. 대표적인 NoSQL 데이터베이스로는 MongoDB, Cassandra, Redis, Couchbase 등이 있습니다.

NoSQL은 최근 빅데이터 분야에서 많이 사용되고 있으며, 다양한 형태의 데이터를 저장하고 처리할 수 있는 유연성과 확장성이 필요한 경우에 많이 사용됩니다.

 

 

 

Java Collection

자바 컬렉션은 자바에서 제공하는 데이터 구조를 담당하는 클래스들의 모음입니다. 컬렉션은 데이터를 저장하고 처리하기 위한 인터페이스와 클래스를 제공합니다.

컬렉션은 배열과 비슷하지만, 데이터를 더 유연하게 다룰 수 있습니다. 자바 컬렉션 프레임워크는 List, Set, Map 등의 인터페이스와 그를 구현한 다양한 클래스를 제공합니다.

  • List : 데이터를 순서대로 저장하는 인터페이스로, 중복을 허용합니다. 대표적으로 ArrayList, LinkedList가 있습니다.
  • Set : 데이터를 중복 없이 저장하는 인터페이스로, 순서를 보장하지 않습니다. 대표적으로 HashSet, TreeSet이 있습니다.
  • Map : 키와 값의 쌍으로 데이터를 저장하는 인터페이스로, 키는 중복될 수 없습니다. 대표적으로 HashMap, TreeMap이 있습니다.

자바 컬렉션은 데이터 구조를 효율적으로 다룰 수 있도록 다양한 기능을 제공합니다. 예를 들어, 검색, 정렬, 추가, 삭제 등의 작업을 쉽게 처리할 수 있습니다. 또한, 다양한 알고리즘에서 사용할 수 있는 자료 구조를 제공하여, 자바에서 데이터 처리를 효율적으로 할 수 있도록 도와줍니다.

 

 

 

객체 모델링(Object Modeling)

객체 모델링(Object Modeling)은 현실 세계의 개념을 객체(Object)로 변환하여 소프트웨어 개발에 적용하는 과정입니다.

객체 모델링은 객체 지향 프로그래밍(Object-Oriented Programming)의 기본 원리 중 하나로, 현실 세계의 문제를 객체로 분해하고, 이 객체들 간의 상호작용을 분석하여 소프트웨어 시스템을 설계하는 과정입니다. 객체 모델링을 통해 설계된 객체 모델은 클래스, 객체, 속성, 연산 등으로 구성됩니다.

객체 모델링의 과정은 다음과 같습니다.

  1. 현실 세계의 문제를 객체로 분해
  2. 객체 간의 관계 파악
  3. 객체 간의 상호작용 정의
  4. 객체의 속성과 연산 정의
  5. 객체를 클래스로 변환

객체 모델링을 통해 설계된 객체 모델은 소프트웨어 시스템을 설계하는 데 중요한 역할을 합니다. 객체 모델링을 기반으로 객체 지향 프로그래밍 언어를 사용하여 소프트웨어를 개발하면, 현실 세계의 문제를 더 쉽게 해결할 수 있으며, 코드의 가독성과 재사용성도 높일 수 있습니다.

 

 

 

엔티티(Entity)

엔티티는 정보나 데이터에서 구체적인 사물, 개념, 사람 또는 장소와 같은 구성 요소를 나타내는 추상적인 개념입니다. 예를 들어, 회사, 제품, 고객, 주소, 날짜, 시간 및 화폐와 같은 것들은 모두 엔티티가 될 수 있습니다.

데이터베이스에서는 엔티티가 테이블의 기본 단위가 되며, 각 열은 특정 엔티티의 속성을 나타냅니다. 예를 들어, "고객" 엔티티의 속성은 이름, 주소, 전화번호 및 이메일과 같은 것입니다.

자연어 처리 분야에서도 엔티티는 중요한 역할을 합니다. 예를 들어, "제이슨은 1988년에 태어났다"라는 문장에서 "제이슨"은 인물 엔티티이며, "1988년"은 날짜 엔티티입니다. 엔티티 인식 기술은 문장에서 이러한 엔티티를 자동으로 식별하는 기술로, 정보 검색, 질문 응답 시스템 및 챗봇과 같은 자연어 처리 응용 프로그램에서 매우 중요합니다.

 

 

 

ORM(객체-관계 매핑, Object-Relational Mapping)

객체는 객체대로 설계, 관계형 데이터베이스는 관계형 데이터베이스대로 설계

 

ORM(객체-관계 매핑, Object-Relational Mapping)은 객체 지향 프로그래밍 언어와 관계형 데이터베이스 간의 데이터 변환을 자동화하는 기술입니다.

ORM은 개발자가 객체 지향 프로그래밍으로 애플리케이션을 개발하면서 데이터베이스에 데이터를 영속적으로 저장하고 검색하는 작업을 단순화합니다. ORM은 객체와 데이터베이스 간의 매핑을 설정하고, 개발자가 SQL 질의를 작성하거나 데이터베이스와의 상호 작용을 수행하는 코드를 작성할 필요 없이, 객체를 데이터베이스에 저장하고 조회할 수 있게 해줍니다.

ORM은 일반적으로 데이터베이스와 연결된 객체를 모델링하는 방식으로 작동합니다. 객체 모델과 데이터베이스 스키마 간의 매핑을 설정하고, ORM 라이브러리는 개발자가 작성한 코드를 사용하여 SQL 쿼리를 자동으로 생성하고 데이터베이스와 상호 작용합니다.

ORM의 이점으로는 개발 생산성 향상, 코드 유지 관리 용이성, 데이터베이스와의 결합도 감소, 프로그래밍 언어의 객체 지향 특성을 활용한 개발 등이 있습니다. 하지만, ORM을 잘못 사용하면 성능 문제가 발생할 수 있으므로, 올바르게 사용해야 합니다.

 

JPA는 표준 명세

  1. JPA는 인터페이스의 모음
  2. JPA 2.1 표준 명세를 구현한 3가지 구현체
  3. 하이버네이트, EclipseLink, DataNucleus

 

 

 

JPA의 동작

1) 위치 - 애플리케이션과 JDBC 사이

 

 

2) 저장

 

 

3) 조회

 

 

 

JPA를 사용해야 하는 이유

  1. SQL 중심적인 개발에서 객체 중심으로 개발
  2. 생산성
  3. 유지보수
  4. 패러다임의 불일치 해결
  5. 성능
  6. 데이터 접근 추상화와 벤더 독립성
  7. 표준

 

2. 생산성 - JPA와 CRUD

  1. 저장 : jpa.persist(member)
  2. 조회 : Member member = jpa.find(meberId)
  3. 수정 : member.setName(”변경할 이름”)
  4. 삭제 : jpa.remove(member)

 

3. 유지보수

기존에는 필드 변경시 모든 SQL 수정

 

JPA : 필드만 추가, SQL은 JPA가 처리

 

 

4. JPA와 패러다임의 불일치 해결

  1. JPA와 상속
  2. JPA와 연관관계
  3. JPA와 객체 그래프 탐색
  4. JPA와 비교하기

 

1) jpa와 상속

 

  • 저장

 

  • 조회

 

2) JPA와 연관관계

 

3) JPA와 객체 그래프 탐색

  • 신뢰할 수 있는 엔티티, 계층

 

4) JPA와 비교하기

 

 

 

5. JPA의 성능 최적화 기능

  1. 1차 캐시와 동일성(identity) 보장
  2. 트랜잭션을 지원하는 쓰기 지연(transactional write-behind)
  3. 지연 로딩(Lazy Loading)

 

1) 1차 캐시와 동일성 보장

  1. 같은 트랜잭션 안에서는 같은 엔티티를 반환 → 약간의 조회 성능 향상
  2. DB Isolation Level이 Read Commit이어도 애플리케이션에서 Repeatable Read 보장

→ 첫번째 find에서는 SQL을 실행하여 캐시에 저장하고 두번째 find에서는 캐시에 저장되어 있는 값을 반환하기에 SQL이 총 1번만 실행됨(같은 데이터베이스 트랜잭션 안에서만 가능)

 

2) 트랜잭션을 지원하는 쓰기 지연

1. INSERT

2. UPDATE

 

3) 지연 로딩과 즉시 로딩

  1. 지연 로딩 : 객체가 실제 사용될 때 로딩
  2. 즉시 로딩 : JOIN SQL로 한번에 연관된 객체까지 미리 조회

→ 앱 개발시 JPA를 지연 로딩으로 설정해뒀다가 필요한 부분을 즉시 로딩 설정으로 변경하여 최적화하곤 함

 

반응형

'Java > JPA' 카테고리의 다른 글

[JPA] Getter and Setter  (0) 2023.04.02
[JPA] 객체와 테이블, 조인 전략  (0) 2023.04.02
[JPA] Flush  (0) 2023.03.19
[JPA] JPQL의 기초  (0) 2023.03.16
[JPA] JPA 기초설정과 H2 DB 연동  (0) 2023.03.16
profile

나를 기록하다

@prao

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...