목록개발 공부/Database & JPA (3)
내 맴
✅ 핵심 정리DB 연결(Connection)을 미리 만들어 풀(Pool)에 보관해두고 재사용함으로써 연결/해제 비용을 줄이는 방식 ✅상세 정리1. 개념DB Connection은 생성과 해제에 비용이 큰 자원요청마다 새로 연결하면 지연과 리소스 낭비 발생Connection Pool은 미리 일정 수의 커넥션을 생성해 풀에 저장요청이 오면 풀에서 꺼내 쓰고, 작업이 끝나면 닫지 않고 다시 반납하여 재사용2. 내부 동작초기 애플리케이션 시작 시 설정된 수만큼 커넥션 생성커넥션 요청 시 유휴 연결이 있다면 바로 반환유휴 커넥션이 없고 최대 커넥션 수 미만이면 새로 생성최대 커넥션 수 도달 시:→ 요청은 대기하거나 예외 발생3. 장점커넥션 생성/해제 비용 절감연결 수 제한을 통한 DB 과부하 방지안정적인 트래픽 처..
✅ 정리 N+1 문제는 하나의 쿼리(N) 실행 후 연관된 데이터를 위해 추가로 N개의 쿼리가 발생하는 현상연관 관계가 있는 엔티티 조회 시, 지연 로딩(fetch = LAZY)으로 인해 반복적으로 추가 쿼리 발생 → 성능 저하 유발 ✅ 상세 정리1. 개념N+1 문제:특정 엔티티 리스트를 조회(N)한 후, 각 엔티티의 연관 객체를 지연 로딩하면서 추가 쿼리(N) 발생 → 총 N+1개의 쿼리 실행됨. 2. 내부 동작JPA에서 연관 관계는 기본적으로 LAZY로 설정됨.루트 엔티티 조회 시에는 1개의 쿼리만 실행됨.연관된 엔티티 접근 시점에 각각 쿼리가 발생하며, 루프를 돌며 연속 접근 시 N개의 추가 쿼리 실행됨. 3. 발생 예시 List teams = teamRepository.findAll(); // 1개..
✅ 정리@OneToMany: 하나의 엔티티가 여러 개를 참조함@ManyToOne: 여러 개의 엔티티가 하나를 참조하며 연관관계 주인으로 동작 ✅ 상세 정리1. 관계 방향성과 주인 개념JPA에서 양방향 관계 설정 시 외래 키를 관리하는 연관관계 주인이 필요@ManyToOne은 외래 키 컬럼을 가지므로 연관관계의 주인 역할 수행@OneToMany는 외래 키를 가지지 않고, mappedBy를 통해 상대방 필드 지정// 연관관계 주인: Member@Entitypublic class Member { @Id @GeneratedValue private Long id; @ManyToOne @JoinColumn(name = "team_id") // 외래 키 private Team team;}..