본문 바로가기

전체 글170

2024.09.12(목) { 복합키 클래스( @IdClass, @EmbeddedId ) } 복합키 클래스( @IdClass )@IdClass를 사용한다는 것은 엔티티에 복합키(두 개 이상의 필드로 이루어진 기본 키)를 사용하겠다는 뜻입니다. 이를 위해서는 몇 가지 규칙을 따라야 합니다.Serializable 인터페이스 구현:복합키 클래스를 JPA에서 식별자로 사용하려면, 이 클래스가 직렬화될 수 있어야 합니다. 그래서 복합키 클래스를 Serializable 인터페이스로 구현해야 합니다. 이렇게 하면 JPA가 이 복합키를 데이터베이스에 저장하고 복원하는 과정에서 직렬화/역직렬화를 할 수 있게 됩니다.hashCode()와 equals() 메서드 구현:복합키 클래스에서는 hashCode()와 equals() 메서드를 반드시 구현해야 합니다. JPA는 엔티티를 관리할 때 엔티티의 식별자를 비교하고, .. 2024. 9. 12.
JPA 자동생성전략 3가지방법 ( IDENTITY, SEQUENCE, TABLE ) JPA에서는 기본 키를 자동으로 생성하는 다양한 전략을 제공합니다. 그중 대표적인 세 가지 자동 생성 전략은 IDENTITY, SEQUENCE, TABLE입니다. 각 전략은 데이터베이스의 동작 방식에 따라 다르게 동작하며, 적절한 자동 생성 전략을 선택하는 것이 중요합니다. 1. IDENTITY 전략IDENTITY 전략은 데이터베이스에 의존하여 기본 키를 자동으로 생성합니다.주로 MySQL이나 SQL Server와 같은 데이터베이스에서 사용되며, 데이터베이스의 AUTO_INCREMENT 기능을 통해 기본 키가 생성됩니다.즉, 엔티티를 영속성 컨텍스트에 추가할 때 바로 쿼리가 실행되고, 자동 증가된 값이 기본 키로 설정됩니다.예시:@Entitypublic class User { @Id @Gene.. 2024. 9. 11.
fsync() 와 O_SYNC() fsync()와 O_SYNC는 파일 시스템에서 데이터를 안전하게 디스크에 기록하기 위한 동기화 메커니즘입니다. 두 가지 모두 데이터를 안정적으로 저장하기 위한 중요한 역할을 하지만, 사용하는 방식과 동작 방식에 차이가 있습니다.  1. fsync()fsync()는 파일 시스템에서 파일의 데이터를 디스크에 강제로 기록(플러시)하는 시스템 호출입니다. 이는 데이터를 디스크에 안전하게 저장하기 위한 함수로, 운영 체제의 캐시 또는 버퍼에 저장된 데이터를 디스크로 내보내고, 해당 데이터가 실제 디스크에 완전히 기록될 때까지 기다립니다.사용 이유:일반적인 파일 쓰기 작업에서는 데이터가 먼저 메모리나 캐시에 저장되며, 디스크에 기록되는 작업은 운영체제에 의해 지연될 수 있습니다.시스템이 갑자기 종료되거나 충돌할 경.. 2024. 9. 11.
2024.09.11(수) { 지연 로딩&즉시 로딩, n+1 문제, 다이나믹 업데이트, 알아야할 것들 } 지연 로딩(Lazy Loading)과 즉시 로딩(Eager Loading) 지연 로딩 (Lazy Loading)설명: 필요할 때만 데이터를 불러오는 방식입니다. 즉, 처음에 데이터를 조회할 때 관련된 데이터를 바로 가져오지 않고, 나중에 그 데이터가 정말 필요할 때 데이터베이스에 쿼리를 보내서 불러옵니다.예시 상황:User와 Order라는 두 개의 테이블이 있다고 가정해볼게요. 한 명의 사용자가 여러 주문을 했다고 할 때, 우리는 User 정보만 필요할 수도 있고, 주문 정보는 나중에 필요할 수 있습니다.이 경우, 지연 로딩을 사용하면 User를 조회할 때는 주문 정보(Order)를 불러오지 않고, 사용자가 Order에 접근할 때 그때서야 주문 정보를 가져오게 됩니다.코드 예시:@Entitypublic .. 2024. 9. 11.
JPA가 제공하는 주요 CRUD 기능 JPA(Java Persistence API)는 객체와 관계형 데이터베이스 간의 매핑을 처리하고, SQL 작성을 대신하여 데이터를 저장, 조회, 수정, 삭제하는 기능을 제공합니다. 이로써 개발자는 SQL을 직접 작성하지 않고도 객체와 데이터베이스 간의 작업을 쉽게 수행할 수 있습니다. 아래에서 JPA가 제공하는 주요 CRUD 기능을 간략히 정리합니다.1. 저장 기능jpa.persist(member);persist() 메서드는 객체를 데이터베이스에 저장하는 기능을 제공합니다.개발자가 직접 SQL을 작성하지 않아도 JPA가 객체와 매핑된 정보를 기반으로 자동으로 INSERT SQL을 생성하고 실행합니다.2. 조회 기능Member member = jpa.find(Member.class, memberId);fi.. 2024. 9. 10.
2024.09.10(화) { flush(), dirty, 스냅샷, 데이터베이스 정규화 } JPA에서 flush() JPA에서 flush()는 영속성 컨텍스트(Persistence Context)에 있는 엔티티 상태 변화를 데이터베이스에 즉시 반영하는 메서드입니다. 이를 통해 메모리 상에서 관리되던 엔티티의 변경 사항을 데이터베이스에 동기화합니다. 영속성 컨텍스트와 플러쉬JPA는 영속성 컨텍스트라는 메커니즘을 통해 엔티티 객체의 상태 변화를 관리합니다. 엔티티 객체가 변경되면, JPA는 즉시 데이터베이스에 반영하지 않고 영속성 컨텍스트에서 이를 관리하다가 적절한 시점에 한꺼번에 데이터베이스에 반영합니다. 이 시점을 제어하는 메서드가 바로 flush()입니다.flush()의 작동 방식영속성 컨텍스트에 있는 변경된 엔티티들이 데이터베이스로 즉시 반영됩니다.insert, update, delete .. 2024. 9. 10.