분류 전체보기 15

[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

[오브젝트 - 코드로 이해하는 객체지향 설계] 2장. 객체지향 프로그래밍

객체지향 프로그래밍을 향해협력, 객체, 클래스진정한 객체지향 패러다임으로의 전환은 클래스가 아닌 객체에 초점을 맞출 때에 얻을 수 있다.어떤 클래스가 필요한지를 고민하기 전에 어떤 객체들이 필요한지 고민하라.클래스는 공통적인 상태와 행동을 공유하는 객체들을 추상화한 것클래스의 윤곽을 잡기 위해서는 어떤 객체들이 어떤 상태와 행동을 가지는지를 먼저 결정해야함.객체를 독립적인 존재가 아니라 기능을 구현하기 위해 협력하는 공동체의 일원으로 봐야 한다.객체를 협력하는 공동체의 일원으로 바라보는 것은 설계를 유연하고 확장 가능하게 만든다.도메인의 구조를 따르는 프로그램 구조도메인: 문제를 해결하기 위해 사용자가 프로그램을 사용하는 분야public class Screening { private Movie mo..

개발서적 2025.03.21

[오브젝트 - 코드로 이해하는 객체지향 설계] 1장. 객체, 설계

소프트웨어 모듈이 가져야 하는 세 가지 기능(모듈: 크기와 상관 없이 클래스나 패키지, 라이브러리와 같이 프로그램을 구성하는 임의의 요소)첫 번째 목적: 실행 중에 제대로 동작하는 것모듈의 존재 이유두 번째 목적: 변경을 위해 존재하는 것대부분의 모듈은 생명주기 동안 변경되기 때문에 간단한 작업만으로도 변경이 가능해야 함.세 번째 목적: 코드를 읽는 사람과 의사소통 하는 것특별한 훈련 없이도 개발자가 쉽게 읽고 이해할 수 있어야 함.즉, 모든 모듈은 제대로 실행돼야 하고, 변경이 용이해야 하며, 이해하기 쉬워야 한다.변경에 취약한 코드의존성(dependency)의존성이 변경과 관련돼 있다.의존성은 변경에 대한 영향을 암시한다.어떤 객체가 변경될 때 그 객체에게 의존하는 다른 객체도 함께 변경될 수 있다는..

개발서적 2025.03.18

[회고] SSAFY 특화 프로젝트 - Stock Of Galaxy

🥇 SSAFY 2학기 두 번째 프로젝트(특화 프로젝트) 최우수상 수상두번째 프로젝트를 마치고 회고하는 글로 경험한 것과 느낀점을 자유롭게 정리하였습니다 :)우리팀 개발 원칙이자 제 개발 철학인 '일단 바보멍청이 방식으로 개발을 끝내자' 를 알고계시면 글 읽는데 도움이 되실 것 같습니다 ..(일단 기능이 굴러가게 개발을 빠르게 완료한 뒤에, 최적화 작업을 위한 고민을 해보고 이를 작업해보자! 입니다 ㅎㅎ) 나도 참 .....ㅋㅋㅋㅋㅋ 프로젝트 끝난지 3달 반이 지나가는데, 수료하고 리팩토링할 수 있는 부분들 생각해보면서 프로젝트 회고를 간단히라도 남겨놔야겠다 생각이 들어서 더 잊혀지기전에 조금이나마 적어보려합니다 ~공통프로젝트때도 여러 기술 많이 사용했고, 얻은 게 많았었는데 특화프로젝트때도 !! 얻은 ..

개발관련 2025.01.28