Jinsu's Technical Blog
  • 홈
  • 태그
  • 방명록
  • 메뉴 닫기
  • 글작성
  • 방명록
  • 환경설정
    • 분류 전체보기 (250)
      • Java (18)
      • Spring Framework (33)
        • Toby's Spring 3.1 (6)
        • Spring IoC (6)
        • TDD (6)
        • Reflection (6)
        • AOP (6)
      • Spring Boot (11)
      • Spring Security (22)
      • Database (17)
        • Mysql (2)
        • JDBC (2)
        • JPA (13)
      • Build and Development Tools (3)
        • Maven (1)
        • Gradle (1)
        • Lombok (1)
      • Network (12)
      • Apache Tomcat (11)
      • Microservices Architecture (33)
      • Linux (9)
      • React (10)
      • Docker (22)
      • OAuth (10)
      • DevOps (2)
      • Git (2)
      • HTML (1)
      • CSS (1)
      • JavaScript (1)
      • Problem and Solution Guide (8)
        • Java (1)
        • Spring Framework (4)
        • Reflection (1)
        • Dynamic Proxy (1)
        • JPA (1)
      • Note-Taking (23)
  • 홈
  • 태그
  • 방명록
Database/JDBC

Spring의 JdbcTemplate에서 콜백 메서드

Spring의 JdbcTemplate에서 콜백 메서드로 사용되는 주요 인터페이스와 메서드는 SQL 쿼리를 수행할 때 각 단계의 동작을 커스터마이징하기 위해 제공됩니다. 대표적인 콜백 메서드로는 RowMapper, ResultSetExtractor, PreparedStatementCreator, PreparedStatementSetter 등이 있습니다. 아래는 JdbcTemplate에서 자주 사용하는 콜백 인터페이스와 메서드 목록입니다. 1. RowMapper  • 설명: 각 행을 객체로 매핑하여 반환합니다. 쿼리 결과를 객체로 변환하는 데 사용되며, 일반적으로 query() 메서드에서 사용됩니다. • 사용 메서드: RowMapper mapRow(ResultSet rs, int rowNum) 사용 예시jd..

2024. 10. 29. 23:50
Database/JPA

JPA 페이징 API: JPQL, QueryDSL, Spring Data JPA

페이징 API는 큰 데이터를 여러 번에 나누어 조회하는 방식이야. 데이터베이스에서 많은 양의 데이터를 한 번에 불러오면 성능이 저하되고 메모리 사용량이 급격히 증가할 수 있어서, **페이징(Paging)**을 통해 필요한 만큼만 데이터를 불러오는 방식이야. 예를 들어, 한 페이지에 10개씩 데이터를 나누어 보여주는 기능을 구현하는 것처럼 말이야. 1. 페이징의 기본 개념  • 페이지 번호(Page Number): 현재 몇 번째 페이지를 보여줄 것인지 지정하는 값. • 페이지 크기(Page Size): 한 페이지에서 보여줄 데이터의 개수. • 총 데이터 수(Total Elements): 데이터베이스에 저장된 전체 데이터의 수. • 총 페이지 수(Total Pages): 총 데이터 수를 페이지 크기로 나눈 ..

2024. 9. 24. 15:47
Database/JPA

N+1 문제를 해결하는 JPA 사용법

N+1 문제는 ORM(Object-Relational Mapping)에서 발생하는 대표적인 성능 문제 중 하나입니다. 이 문제는 하나의 쿼리를 통해 데이터를 조회한 후, 해당 데이터와 관련된 연관 데이터를 각각 추가로 조회할 때 발생합니다. 즉, 하나의 쿼리(N)로 데이터를 조회하고, 그 데이터와 연관된 데이터를 추가로 조회하기 위해 N번의 쿼리가 추가로 실행되는 상황입니다. 이 문제는 주로 JPA나 Hibernate 같은 ORM을 사용할 때 발생하며, 데이터베이스에 불필요하게 많은 쿼리를 발생시켜 성능 저하를 초래합니다. 예를 들어, **팀(Team)**과 **멤버(Member)**의 관계가 있는 상황에서, 각 팀에 대한 멤버 목록을 조회할 때 다음과 같은 상황이 발생할 수 있습니다.// N+1 문제 ..

2024. 9. 24. 14:16
Database/JPA

JPA Q&A 모음집

JPA 연관관계 매핑 및 헷갈리기 쉬운 개념 Q&A 모음 Q1. @GeneratedValue 어노테이션을 사용할 때, 기본적으로 어떤 전략이 사용되나요? A:@GeneratedValue를 사용할 때 전략을 명시하지 않으면, 기본적으로 **GenerationType.AUTO**가 적용됩니다. 이 전략은 JPA가 사용하는 데이터베이스 방언에 따라 적절한 키 생성 전략을 자동으로 선택합니다. 예를 들어, MySQL에서는 IDENTITY 전략을, Oracle에서는 SEQUENCE 전략을 사용할 수 있습니다. Q2. ManyToOne, OneToMany는 클래스 참조 필드에서만 사용할 수 있나요? A:맞습니다! @ManyToOne, @OneToMany와 같은 어노테이션은 엔티티 클래스 간의 연관관계를 정의하는 데..

2024. 9. 23. 09:49
Database/JPA

JPA 값 타입으로 객체 모델링을 유연하게 설계하는 방법

JPA에서의 값 타입은 데이터베이스의 단일 값이나 복합 값을 표현하는 타입으로, 엔티티와는 다른 특성을 가지고 있어. 값 타입은 주로 엔티티의 속성(필드)을 정의할 때 사용되며, 객체의 생명 주기를 엔티티에 종속시킨다는 특징이 있어. JPA에서 값 타입은 크게 기본값 타입과 임베디드(복합) 값 타입으로 나눌 수 있어. 1. 기본값 타입 기본값 타입은 자바의 기본 데이터 타입(int, double, String 등)과 JPA가 제공하는 타입을 말해. 이 값들은 데이터베이스 테이블에서 하나의 컬럼에 대응하고, 보통 복사(by value) 방식으로 처리돼. 기본 타입은 엔티티와 달리 생명 주기를 따로 관리하지 않고, 엔티티에 종속돼 있어. 예시:@Entitypublic class User { @Id ..

2024. 9. 19. 12:43
Database/JPA

JPA 고급 상속 매핑 전략: 단일 테이블, 조인 테이블, 테이블당 클래스 비교와 활용

JPA에서 상속관계 매핑은 객체 지향 프로그래밍의 상속 개념을 데이터베이스 테이블에 매핑하는 방법을 말해. JPA는 상속 관계를 데이터베이스에 매핑할 때 세 가지 전략을 제공해: 단일 테이블 전략(Single Table Strategy), 조인드 테이블 전략(Joined Table Strategy), 그리고 테이블당 클래스 전략(Table per Class Strategy). 이 세 가지 각각에 대해 자세하고 쉽게 설명해줄게. 1. 단일 테이블 전략 (Single Table Strategy) 단일 테이블 전략은 부모 클래스와 자식 클래스의 모든 속성을 하나의 테이블에 저장하는 방식이야. 즉, 상속 구조에 있는 모든 엔티티가 하나의 테이블에 들어가고, 각 행에는 어떤 클래스에서 온 데이터인지 구분하는 컬럼..

2024. 9. 13. 16:06
Database/JPA

JPA 연관관계와 복합 키

JPA에서 Collection 타입의 필드가 별도의 테이블로 생성되는 이유는, RDBMS에서는 컬렉션을 직접 저장할 수 없기 때문이야. 객체 지향 프로그래밍에서는 리스트, 셋 등의 컬렉션 필드를 쉽게 정의하고 사용할 수 있지만, 관계형 데이터베이스에서는 이를 테이블 구조로 풀어서 저장해야 해. JPA는 이를 해결하기 위해 **@ElementCollection**을 사용하여 컬렉션 데이터를 별도의 테이블에 매핑하는 방식을 제공해. 왜 별도 테이블이 필요한가?  1. 1:N 관계 표현: 데이터베이스에서는 1개의 엔티티가 여러 개의 값을 가질 수 있는 컬렉션 필드를 관리할 수 있는 방식이 없어. 이를 해결하기 위해 JPA는 컬렉션 필드를 별도의 테이블로 분리해서 여러 값을 저장해. 2. 값 타입(Value T..

2024. 9. 13. 12:21
Database/JPA

JPA의 단방향, 양방향 연관관계와 Cascade 이해하기

JPA에서의 연관관계: 단방향과 양방향 JPA에서 엔티티 간의 연관관계는 크게 단방향과 양방향으로 나뉘어. 이는 객체 간의 참조를 어떻게 설정하는지에 따라 구분돼. 또한, 연관관계는 일대일(1:1), 일대다(1:N), 다대일(N:1), **다대다(N:M)**로 나눌 수 있어. 각각의 경우를 단방향과 양방향으로 나누어 설명해줄게. 1. 단방향 연관관계 단방향 연관관계에서는 한쪽 엔티티만 다른 엔티티를 참조해. 즉, 객체 간의 관계가 한쪽으로만 연결돼 있는 경우야. 예시: 다대일(N:1) 단방향  • 상황: 여러 명의 학생이 한 명의 선생님에게 속해 있는 경우 (학생:선생님 = N:1). • 설명: 학생(Student) 엔티티는 선생님(Teacher) 엔티티를 참조하지만, 선생님은 학생을 참조하지 않아.@E..

2024. 9. 13. 10:37
Database/JPA

객체 간 관계를 완벽히 이해하는 JPA 연관관계 매핑

연관관계 매핑(Association Mapping)은 JPA에서 객체 지향 프로그래밍과 데이터베이스의 관계형 모델을 매핑하는 핵심 개념 중 하나야. 객체 간의 관계를 데이터베이스 테이블 간의 외래 키(Foreign Key) 관계로 변환해, 테이블 간의 데이터를 쉽게 조작할 수 있어. 이 개념을 이해하려면, 객체 지향 세계와 데이터베이스 세계가 어떻게 서로 다른지를 알아야 해:  • 객체 지향 프로그래밍에서는 클래스 간의 관계를 직접 참조하고, 객체는 서로 다른 객체와 연결돼. • 데이터베이스에서는 외래 키를 통해 테이블 간의 관계를 정의해. 이 두 세계가 어떻게 연관관계 매핑을 통해 연결되는지 자세히 설명해볼게. 1. 연관관계의 종류 연관관계는 크게 네 가지로 나눌 수 있어:  1. 일대일(One-to-..

2024. 9. 11. 11:07
Database/Mysql

데이터베이스 조인(SQL JOIN) 한눈에 보기: INNER, LEFT, RIGHT OUTER

📚 INNER JOIN 쉽게 이해하기 🔍 INNER JOIN이란? INNER JOIN은 두 테이블에서 공통된 데이터를 가져오는 방식이야. 조인 조건을 만족하는 두 테이블의 데이터만 결과에 포함돼. 조인 조건을 만족하지 않는 데이터는 결과에서 제외되기 때문에, 두 테이블의 교집합처럼 동작한다고 생각하면 돼. 🏫 학생과 도서 대출 기록 예시로 설명 테이블 구조:  • 학생 테이블(student): 학생들의 정보를 담고 있음 (학생 ID, 이름 등). • 도서 대출 기록 테이블(book): 책을 빌린 기록을 담고 있음 (대출한 책의 정보, 대출 날짜, 학생 ID). INNER JOIN을 적용한 경우: 학생이 책을 빌린 경우에만 그 학생의 정보와 대출 기록이 결과에 포함돼. 즉, 학생 정보와 대출 기록이 ..

2024. 9. 11. 10:41
Database/JPA

JPA 기본 키 생성 전략: IDENTITY, SEQUENCE, TABLE과 allocationSize의 이해

hibernate.hbm2ddl.auto는 Hibernate에서 데이터베이스 테이블과의 매핑을 자동으로 처리하는 설정 값이야. 이 속성은 애플리케이션이 실행될 때 Hibernate가 데이터베이스 스키마를 어떻게 처리할지 결정해 줘. 주로 다음과 같은 값들을 사용할 수 있어:  1. none (또는 빈 값): Hibernate가 아무것도 하지 않음. 데이터베이스 스키마에 영향을 미치지 않아. 2. validate: 애플리케이션 실행 시 Hibernate가 엔티티 클래스와 데이터베이스 테이블의 구조가 일치하는지 확인해. 일치하지 않으면 예외를 던져. 스키마를 수정하지 않아. 3. update: 데이터베이스에 존재하는 테이블을 엔티티 클래스에 맞게 업데이트해. 테이블이 없으면 생성하고, 변경된 컬럼이 있으면 ..

2024. 9. 10. 15:55
Database/JPA

QueryDSL로 JPA 쿼리 쉽게 작성하기

QueryDSL는 Java 애플리케이션에서 타입 안전한 동적 쿼리를 작성할 수 있도록 도와주는 프레임워크야. 주로 JPA, SQL, MongoDB, Lucene 등의 데이터 소스와 함께 사용되며, 복잡한 쿼리를 작성할 때 타입 오류를 컴파일 타임에 발견할 수 있도록 해줘. QueryDSL의 주요 특징  1. 타입 안전 쿼리:QueryDSL은 쿼리를 자바 코드로 작성하므로, SQL처럼 문자열로 쿼리를 작성할 때 발생할 수 있는 오타나 오류를 컴파일 타임에 잡아낼 수 있어. 이런 점에서 동적 쿼리를 작성할 때 매우 유용해. 2. 다양한 데이터 소스 지원:QueryDSL은 JPA뿐만 아니라 SQL, MongoDB, Lucene 등 여러 데이터베이스와 검색 엔진에 대해 타입 안전한 쿼리를 지원해. 이로 인해 다..

2024. 9. 10. 12:41
Database/JPA

JPA 엔티티 관리 메서드

JPA에서 엔티티 매니저(EntityManager)를 통해 사용할 수 있는 메서드들은 다양한 상태와 작업을 지원해. 각 메서드는 엔티티를 영속성 컨텍스트와 데이터베이스 사이에서 어떻게 관리하고 처리할지를 정의하는 중요한 기능을 제공해. 주요 메서드들을 설명하자면:  1. persist(Object entity): • 엔티티를 영속성 컨텍스트에 저장하는 메서드. 이 메서드를 호출하면 엔티티가 영속성 컨텍스트에 저장되고, 이후에 데이터베이스에 반영될 준비가 돼. • 그러나 쿼리가 즉시 실행되는 건 아니고, flush() 또는 트랜잭션이 커밋될 때 쿼리가 실행돼. 2. flush(): • 영속성 컨텍스트에 있는 엔티티들의 변경 사항을 즉시 데이터베이스에 반영하는 메서드. 즉, 영속성 컨텍스트에서 관리하는 엔티..

2024. 9. 10. 11:42
Database/JPA

JPA 영속성 컨텍스트 완벽 이해: persist, flush, 그리고 엔티티 관리의 차이점

영속 컨텍스트(Persistence Context)는 JPA에서 매우 중요한 개념이야. 간단히 말해, **엔티티(Entity)**를 데이터베이스에서 가져오거나 저장할 때, 이를 관리하는 일종의 캐시 같은 공간이야. 주요 특징  1. 엔티티 생명주기 관리영속 컨텍스트는 엔티티의 생명 주기를 관리해. 예를 들어, JPA에서 EntityManager를 사용해 데이터를 조회하면 그 엔티티는 영속 컨텍스트에 저장돼. 그 후 같은 트랜잭션 안에서 동일한 엔티티를 조회하면, 데이터베이스를 다시 조회하지 않고 영속 컨텍스트에 저장된 엔티티를 반환해. 2. 변경 감지 (Dirty Checking)엔티티의 상태가 변경되면, 영속 컨텍스트가 이를 감지하고 자동으로 데이터베이스에 반영해. 트랜잭션이 끝날 때 commit을 호..

2024. 9. 10. 11:01
Database/JPA

스프링 프레임워크 심화: JDBC와 JPA의 차이 및 ORM 활용법

JDBC 소개 (Java Database Connectivity) **JDBC(Java Database Connectivity)**는 자바에서 데이터베이스와 상호작용하기 위한 표준 API입니다. JDBC를 통해 자바 애플리케이션은 데이터베이스에 SQL 쿼리를 실행하고, 데이터를 가져오고, 업데이트하는 등의 작업을 할 수 있습니다. 이 API는 데이터베이스의 세부 사항에 대해 걱정할 필요 없이 다양한 DB 시스템과의 연결을 쉽게 처리할 수 있도록 도와줍니다. JDBC의 주요 개념과 구성 요소  1. JDBC 드라이버:JDBC 드라이버는 자바 애플리케이션과 데이터베이스 사이에서 번역기 역할을 합니다. 자바의 API 호출을 데이터베이스가 이해할 수 있는 명령으로 변환합니다. JDBC 드라이버는 네 가지 유형이..

2024. 9. 9. 14:52
  • «
  • 1
  • 2
  • »

공지사항

  • Jinsu's GitHub

전체 카테고리

  • 분류 전체보기 (250)
    • Java (18)
    • Spring Framework (33)
      • Toby's Spring 3.1 (6)
      • Spring IoC (6)
      • TDD (6)
      • Reflection (6)
      • AOP (6)
    • Spring Boot (11)
    • Spring Security (22)
    • Database (17)
      • Mysql (2)
      • JDBC (2)
      • JPA (13)
    • Build and Development Tools (3)
      • Maven (1)
      • Gradle (1)
      • Lombok (1)
    • Network (12)
    • Apache Tomcat (11)
    • Microservices Architecture (33)
    • Linux (9)
    • React (10)
    • Docker (22)
    • OAuth (10)
    • DevOps (2)
    • Git (2)
    • HTML (1)
    • CSS (1)
    • JavaScript (1)
    • Problem and Solution Guide (8)
      • Java (1)
      • Spring Framework (4)
      • Reflection (1)
      • Dynamic Proxy (1)
      • JPA (1)
    • Note-Taking (23)

블로그 인기글

전체 방문자

오늘
어제
전체
Powered by Privatenote Copyright © Jinsu's Technical Blog All rights reserved. TistoryWhaleSkin3.4

티스토리툴바