영속성(Persistence) & JPA(Java Persistence API)

Kkd·2024년 12월 22일
0

매일메일 개념정리

목록 보기
40/93

영속성(Persistence)데이터를 영구적으로 저장할 수 있는 특성을 의미하며, 데이터가 휘발성 메모리가 아닌 비휘발성 저장소(예: 데이터베이스, 파일 시스템)에 저장되어 프로그램이 종료되거나 시스템이 재부팅되더라도 유지되는 것을 말합니다.


1. 영속성의 필요성

  • 데이터 보존
    애플리케이션이 종료되더라도 데이터를 다시 사용할 수 있어야 합니다.
  • 복구 가능성
    시스템 장애 발생 시 데이터를 복구할 수 있습니다.
  • 공유 가능성
    여러 사용자 또는 프로세스가 데이터를 함께 사용할 수 있습니다.

2. 영속성을 구현하는 방법

  1. 파일 시스템
    데이터를 파일로 저장하고 읽어오는 방식.

    • 간단하고 빠르게 구현 가능.
    • 구조화된 데이터 관리가 어려움.
    import java.io.*;
    public class FilePersistenceExample {
        public static void main(String[] args) throws IOException {
            String data = "Persistent data example.";
            try (FileWriter writer = new FileWriter("data.txt")) {
                writer.write(data);
            }
        }
    }
  2. 데이터베이스
    관계형 데이터베이스(RDB), NoSQL 데이터베이스 등에 데이터를 저장.

    • 구조화된 데이터 관리 가능.
    • SQL과 같은 쿼리 언어를 통해 데이터 조작.
    • 대규모 데이터 관리에 적합.
    import java.sql.*;
    public class DatabasePersistenceExample {
        public static void main(String[] args) throws Exception {
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "user", "password");
            String sql = "INSERT INTO data_table (content) VALUES (?)";
            try (PreparedStatement stmt = conn.prepareStatement(sql)) {
                stmt.setString(1, "Persistent data example");
                stmt.executeUpdate();
            }
        }
    }
  3. Object-Relational Mapping(ORM)
    데이터베이스 테이블과 객체를 매핑하여 객체 지향 방식으로 데이터 관리.

    • 대표적 프레임워크: JPA(Java Persistence API), Hibernate.
    import jakarta.persistence.*;
    
    @Entity
    public class DataEntity {
        
        @Id @GeneratedValue
        private Long id;
        
        private String content;
    
        public DataEntity(String content) {
            this.content = content;
        }
    }
    
    public class JpaPersistenceExample {
        public static void main(String[] args) {
            EntityManagerFactory emf = Persistence.createEntityManagerFactory("example-unit");
            EntityManager em = emf.createEntityManager();
            em.getTransaction().begin();
    
            em.persist(new DataEntity("Persistent data example"));
            em.getTransaction().commit();
    
            em.close();
            emf.close();
        }
    }

3. 영속성 컨텍스트(Persistence Context)

  • 영속성 컨텍스트는 JPA에서 사용되는 개념으로, 엔티티 객체를 관리하는 메모리상 공간입니다.
  • 엔티티 객체는 이 컨텍스트를 통해 데이터베이스와 동기화되며, 영속 상태를 유지합니다.
상태설명
비영속(new)영속성 컨텍스트와 관계없는 상태로, 데이터베이스와 연결되지 않음.
영속(managed)영속성 컨텍스트에 의해 관리되는 상태. 변경 시 자동으로 데이터베이스에 반영.
준영속(detached)영속성 컨텍스트에서 분리된 상태. 데이터베이스와 동기화되지 않음.
삭제(removed)삭제 상태로, 데이터베이스에서 삭제될 예정.

4. 영속성의 주요 이점

  1. 데이터 무결성
    데이터가 손실되지 않고 지속적으로 보존됨.
  2. 상태 관리
    애플리케이션의 상태를 저장하고, 재시작 시 복원 가능.
  3. 복잡한 데이터 구조 처리
    관계형 데이터베이스 등을 통해 복잡한 데이터 구조를 효율적으로 처리 가능.

5. 실제 활용 사례

  • 웹 애플리케이션
    사용자 정보, 세션 데이터, 로그 등을 데이터베이스에 저장.
  • IoT
    센서 데이터나 상태 정보를 영구적으로 저장.
  • 게임 개발
    유저 프로필, 게임 진행 상황 등을 저장.
  • 전사적 애플리케이션
    ERP, CRM 등 비즈니스 데이터 관리.

6. 정리

영속성은 데이터의 보존과 관리를 위한 필수 개념으로, 파일, 데이터베이스, ORM 등 다양한 방식으로 구현할 수 있습니다.
JPA와 같은 프레임워크는 영속성을 쉽게 관리할 수 있도록 도와주며, 특히 대규모 애플리케이션에서 데이터 관리의 효율성을 극대화합니다.

추가 학습 자료

profile
🌱

0개의 댓글