본문 바로가기

전체 글

(93)
[JPA] ApplicationContextAware 간단하게 ApplicationContextAware는 스프링 프레임워크에서 제공하는 인터페이스로, 스프링 컨텍스트에 접근할 수 있도록 해주는 기능을 제공합니다. 이 인터페이스를 구현하면 스프링 컨테이너가 관리하는 ApplicationContext 객체를 직접 사용할 수 있게 됩니다. 이를 통해 애플리케이션 전반에서 스프링 컨텍스트의 구성 요소에 접근하거나 필요한 빈을 동적으로 가져오는 등의 작업이 가능해집니다.주요 특징ApplicationContextAware 인터페이스를 구현한 클래스는 setApplicationContext(ApplicationContext applicationContext) 메서드를 오버라이딩해야 합니다.이 메서드는 스프링이 해당 클래스를 컨테이너에 등록할 때 자동으로 호출되며, 스프링 컨텍..
[JPA] ENUM 타입 JPA에서 enum 타입은 데이터베이스 컬럼에 매핑할 때 @Enumerated 어노테이션을 사용하여 처리할 수 있습니다. enum은 코드의 가독성을 높이고, 특정 값 집합을 제한하는 데 유용하기 때문에 JPA에서도 널리 사용됩니다. @Enumerated 어노테이션은 enum 필드를 데이터베이스에 저장할 때 어떤 방식으로 저장할지 결정합니다. 두 가지 주요 전략이 있습니다:1. EnumType.ORDINALenum의 순서(인덱스 값)를 저장합니다. 즉, enum의 정의된 순서에 따라 0, 1, 2와 같은 정수 값으로 저장됩니다.장점: 저장 공간이 작으며, 데이터베이스에 인덱스 값을 저장하므로 효율적일 수 있습니다.단점: enum 순서가 바뀌거나 새로운 값이 추가되면 기존 데이터가 잘못 매핑될 위험이 있습니..
[JPA] 엔티티 클래스에서 많이 사용되는 어노테이션 1. @Entity 이 어노테이션은 클래스가 JPA 엔티티임을 나타냅니다.필수 사용: 엔티티로 작동하기 위해서는 반드시 필요하며, 이를 통해 JPA가 해당 클래스를 데이터베이스의 테이블과 매핑할 수 있습니다.2. @Table데이터베이스의 특정 테이블과 매핑하기 위해 사용됩니다.옵션 속성: name (테이블 이름), schema (스키마 이름), uniqueConstraints (고유 제약 조건) 등이 있습니다.예시: @Table(name = "members")3. @Id해당 필드를 엔티티의 **기본 키(primary key)**로 지정합니다.필수 사용: 엔티티 클래스에는 반드시 하나의 @Id가 필요합니다.4. @GeneratedValue기본 키 값의 생성을 자동으로 처리하는 전략을 지정합니다.옵션 속성:..
[JPA] Paging JPA에서 **페이징(Paging)**은 대량의 데이터가 있을 때 효율적으로 데이터를 조회하고 관리하기 위해 자주 사용됩니다. 데이터베이스에서 데이터를 조회할 때 모든 결과를 한 번에 가져오는 것은 성능 상의 부담이 크기 때문에, 특정 페이지 단위로 데이터를 나눠 가져오거나, 필요한 만큼의 데이터만 가져오는 방식으로 최적화를 할 수 있습니다.Spring Data JPA는 페이징 기능을 제공하기 위해 Pageable과 Page 인터페이스를 활용합니다. 다음은 주요 개념과 사용 방법에 대한 설명입니다.주요 개념Pageable 인터페이스:페이징을 위한 정보를 담고 있는 인터페이스로, 페이지 번호, 페이지 크기(한 번에 가져올 항목 수), 정렬 기준 등을 설정할 수 있습니다.PageRequest.of(int p..
[JPA] IsEmpty와 IsNotNulLL 의 차이점 IsEmpty와 IsNotNull은 JPA에서 사용되는 조건 검사 메서드들로, 컬렉션 또는 특정 필드의 상태를 확인할 때 주로 사용됩니다. 두 메서드는 개념적으로 다음과 같은 차이점이 있습니다:IsEmpty의미: IsEmpty는 주로 컬렉션(List, Set 등)이 비어 있는지 확인할 때 사용됩니다.용도: 주로 데이터베이스에서 컬렉션이 비어 있는 경우(즉, 자식 엔터티가 없는 경우)를 찾고자 할 때 사용됩니다.예시: // 예시: orders가 비어 있는 User 엔터티를 찾는 경우List users = userRepository.findByOrdersIsEmpty();  비교 대상: IsEmpty는 컬렉션에 대해 사용되며, 단순히 값이 없는 컬렉션이나 필드(빈 상태)를 확인합니다. 2.IsNotNull의..
[JPA] Specification JPA의 Specification 기능은 Spring Data JPA에서 제공하는 강력한 동적 쿼리 생성 기능입니다. Specification은 주로 복잡한 검색 조건을 작성할 때 유용합니다. 특히 동적으로 조건을 추가하거나 변경할 수 있는 유연성을 제공하며, 여러 조건을 결합하여 동적인 검색 쿼리를 만들 수 있습니다.1. Specification의 개념Specification은 Spring Data JPA에서 제공하는 인터페이스로, JPA Criteria API를 기반으로 동적 쿼리를 생성할 수 있게 해줍니다. 주로 Specification을 사용하여 조건을 정의하고, 이를 JpaRepository에 적용하여 검색을 수행할 수 있습니다.2. Specification을 사용하는 이유동적 쿼리 작성: 여러..
Query by Example(QBE) Query by Example(QBE)은 Spring Data JPA에서 제공하는 기능으로, 엔티티의 샘플 인스턴스를 사용해 데이터베이스에서 일치하는 데이터를 조회할 때 사용됩니다. 이를 통해 복잡한 쿼리를 작성하지 않고도 동적으로 데이터를 검색할 수 있습니다.주요 특징동적 쿼리 지원: 특정 필드 값만 설정한 엔티티 객체(Example)를 통해 검색할 수 있습니다. 설정된 필드 값이 조건으로 사용되며, null이거나 설정되지 않은 필드는 무시됩니다.유연한 매칭: 기본적으로 값이 정확히 일치하는 경우에만 결과를 반환하지만, Matcher를 설정하여 부분 일치, 대소문자 무시, 시작 또는 끝 일치 등의 다양한 조건을 지정할 수 있습니다.타입 안정성: QBE는 일반적으로 리포지토리 메서드와 함께 사용되어, 예..
Hibernate 간단하게 Hibernate는 Java에서 JPA의 가장 널리 사용되는 구현체로, 관계형 데이터베이스와 객체지향 프로그래밍 간의 매핑을 지원하는 ORM(Object Relational Mapping) 프레임워크입니다. JPA는 인터페이스이기 때문에 실제 구현체가 필요하며, Hibernate는 JPA가 요구하는 기능을 포함하여 추가적인 기능을 제공하는 강력한 ORM 프레임워크입니다. Hibernate의 주요 개념과 기능 ORM(Object Relational Mapping)Hibernate는 객체지향 프로그래밍의 클래스와 데이터베이스의 테이블을 매핑해주는 기능을 제공합니다. 객체와 테이블을 매핑하면 개발자는 SQL 쿼리를 작성하지 않아도, 자바 코드로 데이터베이스 작업을 수행할 수 있습니다.예를 들어, 자바 객체의 ..