본문 바로가기

JAVA

(4)
JPA N+1 문제: 실무에서 어떻게 다룰까? JPA N+1 이란? 요청이 1개의 쿼리로 처리되길 기대했는데, N개의 추가 쿼리가 발생하는 현상 지연로딩(Lazy) 로딩되는 시점에 Lazy 로딩 설정이 되어있는 연관된 엔티티(그림 기준 team)는 프록시 객체로 가져오는 방법이다. 물론, 즉시로딩을 지연로딩으로 변경해도 N+1에서 자유로울 수는 없다. 즉시로딩이 아니기에 조회와 동시에 해당 건 수만큼 연관된 정보를 조회해오지는 않겠지만, 해당 테이블에서 연관 정보를 사용하는 시점에서는 동일하게 불러오게 된다. 참고로 @OneToMany와 @ManyToMany는 기본이 지연 로딩(LAZY)이다. 보통 이런 경우에서는 Lazy로딩을 사용한다면, SELECT쿼리가 2번 나간다. (DB를 두 번 찌름) 이 때는 용도가 명확하기에 즉시 로딩 (EAGER) 전..
상속과 조합: 상속은 아는데, 조합은 뭐지..? JAVA를 하는 사람들이라면 당연히 알고 있을 '상속'의 개념과 함께 워딩 자체는 생소한'조합'의 개념도 살펴보자! (사실 우린 둘 다 쓰고있다! 쫄지말자!) 상속 기존에 정의되어 있는 클래스의 필드와 메소드를 물려받아 새로운 클래스를 생성하는 기법 상속의 특징: 2가지 중복코드 제거와 기능 확장을 쉽게 할 수 있다. 클래스들의 계층적인 구조를 만들 수 있다. 상속의 대표적인 문제점: 2가지 (캡슐화) 하위 클래스가 상위 클래스의 구현에 의존하기 때문에 변경에 취약하다 상위 클래스의 모든 퍼블릭 메서드가 하위 클래스에도 반드시 노출된다. 취약한 기반 클래스 문제 // 1.로또 번호를 가지는 역할인 Lotto 클래스가 있다. public class Lotto { protected List lottoNumb..
Java의 싱글톤과 정적클래스: Spring 마렵다... 현업에 있는 사람이라면 익숙하게 듣는 싱글턴패턴에 대해서, 그리고 추가적으로 정적클래스와 함께 이야기를 해보고자 한다. (이 기회를 통해서 다시금 스프링 프레임워크에 대한 고마움이 생긴다..!) 싱글톤 패턴 클래스 인스턴스 하나만 생성하고, 어디서든 그 인스턴스를 참조할 수 있도록하는 패턴 생성자가 여러 번 호출되더라도 실제로 생성되는 객체는 하나 왜 쓸까? 1. 고정된 메모리 영역을 가지고 하나의 인스턴스만 사용하기 때문에 메모리낭비 2. 싱글턴 클래스의 인스턴스는 전역이기 때문에 다른 클래스의 인스턴스들이 데이터를 공유하기 쉬움 3. DBCP(DataBase Connection Pool)처럼 공통된 객체를 여러 개 생성해야 하는 상황에 많이 사용 구현하는 방법: 6가지 1.Eager initializ..
DTO vs VO: 우린 왜 자꾸 나눌까? 그 간 일하면서 모호했던 부분을 잡아보고자 시작하는 포스팅..! 첫 번째 포스팅으로 [DTO vs VO]를 가져오게 되었다. 사실 일하다보면 이 부분은 특히 "그게 그거 아닌가? 그리고 왜 자꾸 나누지?" 하며 그냥 넘어가곤한다. 생각만 해서는 아무것도 이룰 수 없기에, 오늘부터 공부한 내용을 기록으로 남기고자 한다! DTO (Data Transfer Object) 데이터 전송 용도의 객체 (여기서 전송은 계층 간의 전송을 이야기한다.) 별도의 로직을 가지고 있는 않은 순수한 데이터 객체. DTO는 getter/setter 메서드만을 가지고 있다. VO (Value Object) 순수 값 그 자체를 나타내는 객체 서로 다른 이름을 가진 VO의 인스턴스가 모든 속성 값이 같다면 같은 객체로 인정한다. 객체..