Backend

    의존관계 주입(DI)과 객체 지향 설계

    의존관계 주입(Dependency Injection)이란 의존관계 주입(DI)이란 구체적인 의존 오브젝트와 그것을 사용할 주체 오브젝트를 런타임 시에 연결해주는 작업을 말한다. 조금 더 구체적으로는 다음과 같은 세 가지 조건을 충족하는 작업을 말한다. 클래스 모델이나 코드에는 런타임 시점의 의존관계가 드러나지 않는다. 그러기 위해서는 인터페이스에만 의존하고 있어야 한다. 런타임 시점의 의존관계는 컨테이너나 팩토리 같은 제 3의 존재가 결정한다. 의존관계는 사용할 오브젝트에 대한 레퍼런스를 외부에서 주입해줌으로써 만들어진다. 이러한 의존관계 주입은 유연성, 재사용성, 테스트 용이성 등 여러 가지 장점을 가져다주는데, 여기서는 객체 지향 설계 원칙인 단일 책임 원칙(SRP)과 개방-폐쇠 원칙(OCP)을 지킬..

    JPA 데이터 뻥튀기 문제 알아보기

    들어가며 프로젝트를 진행하던 도중 의도와는 다른 개수의 엔티티가 조회되는 흔히 "데이터 뻥튀기"라고 불리는 문제가 발생하였다. 해당 문제가 무엇이고, 왜 발생하는지, 그리고 어떻게 해결할 수 있는지에 대해 알아보도록 하자. 일단 문제가 발생한 엔티티 간의 연관관계를 간단히 나타내보면 다음과 같다. 모든 연관관계가 1 : N 이라는 것을 알 수 있다. 여기서 하나의 Task가 여러 개의 Comment를 가질 수 있다는 점을 주목하고 넘어가도록 하자. 그러면 이제 문제의 상황을 만들어보도록 하겠다. 엔티티 구현 먼저 데이터 뻥튀기 문제에서 사용할 엔티티는 다음과 같다. // User.java @Getter @NoArgsConstructor @Entity public class User { @Id @Gener..