본문 바로가기

Everyday Study62

2024.09.24(화) { 오프셋 기반 페이징의 문제점 } 오프셋 기반 페이징의 문제점오프셋 기반 페이징은 주로 다음과 같은 방식으로 이루어집니다:SELECT * FROM table_nameORDER BY column_nameLIMIT 20 OFFSET 100;이 방식은 조회할 데이터의 시작점을 OFFSET으로 지정하고, 한 페이지에 가져올 데이터 개수를 LIMIT으로 설정합니다. 하지만 오프셋 기반 페이징은 데이터 양이 많아질수록 비효율적입니다. 그 이유는 다음과 같습니다:많은 양의 데이터 스캔:오프셋 값이 클수록 데이터베이스는 불필요하게 많은 데이터를 읽어야 합니다. 예를 들어, OFFSET 1000인 경우, 데이터베이스는 처음 1000개의 데이터를 건너뛰기 위해 그만큼의 데이터를 읽고 버린 후에, 필요한 20개의 데이터를 가져옵니다. 이는 쿼리 성능에 부담.. 2024. 9. 24.
2024.09.23(월) { 페이징, @EntityGraph } 페이징(Paging)은 대량의 데이터를 한 번에 모두 가져오지 않고, 일정한 단위(페이지)로 나누어 나누어 처리하는 기법입니다. 이를 통해 성능을 개선하고, 메모리 사용을 최적화하며, 사용자에게 보다 나은 경험을 제공합니다. 예를 들어, 데이터베이스에 1000개의 데이터가 있다면, 이를 한 번에 모두 가져오지 않고, 한 페이지에 10개씩 나누어 보여주는 것이 페이징입니다.페이징의 주요 개념페이지 번호 (Page Number):데이터를 나누었을 때, 각 묶음을 식별하는 번호입니다. 보통 1페이지, 2페이지, 3페이지 등으로 표현되며, 사용자가 원하는 페이지를 선택할 수 있습니다.페이지 크기 (Page Size):한 페이지에 표시할 데이터의 개수입니다. 예를 들어, 페이지 크기가 10이라면, 한 페이지에 1.. 2024. 9. 23.
2024.09.20 (금) { WHERE 절, HAVING 절, GROUP BY, ORDER BY } WHERE 절, HAVING 절, GROUP BY, ORDER BY1. WHERE 절용도: WHERE 절은 행 단위로 데이터를 필터링합니다. 즉, 데이터베이스에서 가져온 원시 데이터를 조건에 맞게 필터링하여 필요한 데이터만 남깁니다.특징: WHERE 절은 그룹화되기 전에 조건을 적용합니다. 즉, 데이터가 그룹화되기 전에 필터링이 먼저 일어납니다.예시:SELECT * FROM Employees WHERE salary > 5000;이 쿼리는 Employees 테이블에서 급여가 5000보다 큰 행만 가져옵니다.2. HAVING 절용도: HAVING 절은 그룹화된 데이터에 조건을 적용합니다. 즉, GROUP BY로 그룹화된 결과에 조건을 걸어서 필터링합니다.특징: WHERE 절과 달리, HAVING 절은 집계 .. 2024. 9. 23.
2024.09.19(목) { 컬렉션 값 타입, CROSS JOIN } 컬렉션 값 타입은 JPA(Java Persistence API)에서 값 타입(Value Type)을 컬렉션으로 사용하는 개념을 의미합니다. 즉, 값 타입이 여러 개 모여서 하나의 엔티티에서 관리될 때, 이를 컬렉션 값 타입이라고 합니다. 주로 Embeddable로 정의된 값 타입을 여러 개 관리할 수 있도록 컬렉션 형태로 사용합니다.컬렉션 값 타입의 특징값 타입(Value Type):값 타입은 엔티티가 아닌, 데이터 그 자체를 의미하는 타입입니다. 기본 값 타입(예: String, Integer)이나, 임베디드 타입(@Embeddable로 정의된 클래스)이 있습니다.값 타입은 엔티티와는 다르게 식별자(ID)가 없으며, 동일한 값을 가지면 동일한 것으로 간주됩니다.컬렉션으로 관리:여러 값 타입 객체를 한 .. 2024. 9. 19.
2024.09.12(목) { 복합키 클래스( @IdClass, @EmbeddedId ) } 복합키 클래스( @IdClass )@IdClass를 사용한다는 것은 엔티티에 복합키(두 개 이상의 필드로 이루어진 기본 키)를 사용하겠다는 뜻입니다. 이를 위해서는 몇 가지 규칙을 따라야 합니다.Serializable 인터페이스 구현:복합키 클래스를 JPA에서 식별자로 사용하려면, 이 클래스가 직렬화될 수 있어야 합니다. 그래서 복합키 클래스를 Serializable 인터페이스로 구현해야 합니다. 이렇게 하면 JPA가 이 복합키를 데이터베이스에 저장하고 복원하는 과정에서 직렬화/역직렬화를 할 수 있게 됩니다.hashCode()와 equals() 메서드 구현:복합키 클래스에서는 hashCode()와 equals() 메서드를 반드시 구현해야 합니다. JPA는 엔티티를 관리할 때 엔티티의 식별자를 비교하고, .. 2024. 9. 12.
2024.09.11(수) { 지연 로딩&즉시 로딩, n+1 문제, 다이나믹 업데이트, 알아야할 것들 } 지연 로딩(Lazy Loading)과 즉시 로딩(Eager Loading) 지연 로딩 (Lazy Loading)설명: 필요할 때만 데이터를 불러오는 방식입니다. 즉, 처음에 데이터를 조회할 때 관련된 데이터를 바로 가져오지 않고, 나중에 그 데이터가 정말 필요할 때 데이터베이스에 쿼리를 보내서 불러옵니다.예시 상황:User와 Order라는 두 개의 테이블이 있다고 가정해볼게요. 한 명의 사용자가 여러 주문을 했다고 할 때, 우리는 User 정보만 필요할 수도 있고, 주문 정보는 나중에 필요할 수 있습니다.이 경우, 지연 로딩을 사용하면 User를 조회할 때는 주문 정보(Order)를 불러오지 않고, 사용자가 Order에 접근할 때 그때서야 주문 정보를 가져오게 됩니다.코드 예시:@Entitypublic .. 2024. 9. 11.