공부 7

[Spring] 순환참조문제

필자도 백엔드 첫 프로젝트하면서 순환참조 문제를 겼었었다 ……. 그 당시에는 첫 프로젝트인데 기간은 촉박하고 다른 기술들도 처음 써보는 게 많다보니.. 공부해야할 것도 너무너무 많았고 ..결국 급한대로 @Lazy 애노테이션을 사용해서 임의로 해결 했지만, 나중에 근본적인 순환참조 고리를 끊어내기 위해 리팩토링으로 해결했었다. 설계 자체에 시간을 많이 투자해야된다는 건 알았지만 조급한 마음에 중요성을 간과하고 시작해서 그런 거 같다. 진짜 설계랑 흐름 정리가 제일 중요 !!!!늦었지만 어떤 현상인지 정리해보려고한다.순환 참조 문제란?A 클래스가 B 클래스의 Bean을 주입받고, B 클래스가 A 클래스의 Bean을 주입받는 상황처럼 서로 순환되어 참조할 경우 발생하는 문제.왜 발생하는걸까?먼저, 특정 클래스..

공부 2025.04.04

[Spring] spring의 의존성 주입 방법 4가지

(기본적인 내용이지만, 복습겸 정리 -!)우선, 스프링에서 의존성 주입(Dependency Injection, DI)은 크게 4가지 방법으로 구분된다.생성자 주입생성자를 통해서 의존 관계를 주입하는 방법생성자 주입은 생성자 호출시점에 딱 1번만 호출되는 것이 보장된다.따라서 불변성을 가지는 의존성 주입에 적합하며, 반드시 필요한 의존관계에 사용된다.이때, 크게 private final + 생성자 방식과 @Autowired 기반 생성자방식으로 나눌 수 있다.private final@Servicepublic class MyService { private final MyRepository myRepository; public MyService(MyRepository myRepository) { ..

공부 2025.04.04

[Spring] POJO란? Hibernate와 Spring이 왜 POJO 친화적인가

POJO (Plain Old Java Object)”오래된 방식의 간단한 자바 객체”Getter, Setter와 같은 기본 기능만을 갖는 기본 객체를 의미.특정 기술에 종속되어 있는 상태로 개발하지 않는 개념을 위해 등장한 언어.종속성으로 인해 시스템 업그레이드, 모듈 교체와 같은 상황에서 많은 불편함이 있었기에 POJO라는 개념이 등장함.(여기서 특정 기술이라함은 framework를 의미)Spring은 POJO 개념을 잘 지킨 프레임워크이다.IoC, DI, AOP와 같은 개념들이 모두 결합력을 느슨하게 하여 의존성을 낮춤으로써 종속성이 낮아지는 현상이 발생.POJO에 가까운 개발이 가능하다!!특정 기술들이 종속성을 가지게 되면, 객체지향적인 설계가 힘들거나 불가능한 경우가 발생. 그렇다보니 코드의 유지..

공부 2025.04.03

[DDD] Aggregate란?

문득 DDD에 대해 제대로 알고있는 게 맞는가? 라는 의구심이 들어 공부를 하던 중 aggregate 개념도 함께 정리하고 싶어 정리를 해봤습니다.Aggregate(에그리거트)란?소프트웨어 개발에서 관련된 객체들의 집합을 의미보통 하나의 대상에 대해 여러 객체를 생성하여 각 객체들이 서로 상호작용하도록 구성할 때, 이를 하나의 애그리거트로 묶어서 처리하는 것이 일반적이다.보통 특정 비즈니스 로직을 수행하는데 필요한 객체들을 모아서 관리하게 된다.Aggregate 구현 방법구현하는 방법은 특정되어있지 않고 다양하다.일반적으로는 ‘객체 지향 프로그래밍에서 제공하는 클래스나 인터페이스를 이용하여 구현한다.’에그리거트를 구성하는 객체들은 해당 클래스나 인터페이스를 구현하도록 만들어지며, 이를 하나의 애그리거트..

공부 2025.04.01

[JPA] JPA의 N + 1 문제 정리

N + 1 문제연관 관계에서 발생하는 이슈연관 관계가 설정된 엔티티를 조회할 경우에 조회된 데이터 갯수(n)만큼 연관관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어오는 현상.현상 재현FetchType 정리예시로, 선생님과 학생의 관계를 표현해보려한다.하나의 선생님은 여러 명의 학생을 담당한다.한 명의 학생은 한 명의 선생님에게 소속된다.@Entity@Data@NoArgsConstructorpublic class Teacher { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String name; @OneToMany(mappedBy = "teac..

공부 2025.03.27

[JPA] FetchType 정리

FetchTypeJPA에서 엔티티를 조회할 때 연관된 ‘엔티티 조회 방법을 결정하는 전략’A와 B라는 엔티티가 존재한다고 했을때, 테이블 간의 관계에서 A엔티티를 조회하였을 경우 B엔티티를 함께 조회할 것인지 아니면 필요에 따라 조회할 것인지 결정하는 데 사용됨.지연 로딩의 관계에서는 A엔티티를 조회할 때 B엔티티는 조회하지 않고 B엔티티 데이터가 실제로 사용될 때 해당 데이터를 조회함.FetchType.EAGER (즉시로딩)엔티티를 조회하는 방법을 정의하는 전략 중 하나.테이블 간의 관계에서 A라는 엔티티를 조회할 때 연관된 B라는 엔티티도 함께 조회하는 방식한번의 쿼리로 필요한 모든 데이터를 가져올 수 있으나 필요하지 않은 데이터까지 조회되어 성능 이슈 발생 가능.연관된 엔티티를 실제로 사용할 때 조..

공부 2025.03.27

JDBC, JPQL, QueryDSL etc

JDBCJava Database Connectivity데이터베이스와의 연결과 쿼리 수행을 제공하는 Java의 API대표기능 3가지db와 같은 데이터 소스와 연결db에 쿼리 전송요청에 따른 db쿼리 결과 처리주로 쓰이는 JDBC API 클래스와 인터페이스java.sql.ConnectionConnection객체: Java 프로그램이 외부 데이터베이스 시스템과 연결될 때 사용됨.db와의 연결을 설정하고 유지하며, SQL 쿼리를 실행하거나 트랜잭션을 관리db연결 생성 및 종료, 커밋/롤백 등 트랜잭션 관리, Statement/PreparedStatement 등 객체 생성 기능 제공setAutoCommit(true) → default롤백처리가 필요하다면 false로 설정하고, 명시적으로 rollback() 또는 ..

공부 2025.03.27