[Lombok] @Builder를 클래스가 아닌 메서드에 적용하는 이유
·
Spring
📌 @Builder의 작동 과정 및 수행 방식 Lombok의 @Builder는 빌더 패턴을 자동으로 생성하여 객체를 보다 유연하게 생성할 수 있도록 해준다.@Builder는 클래스에 붙일 수도 있고, 메서드에 붙일 수도 있으며, 각각의 수행 방식과 장단점이 다르다. 1. 클래스에 @Builder를 붙였을 때 수행 방식 및 연관 엔티티 초기화  작동 과정 1. Lombok이 정적 내부 클래스로 빌더 클래스를 생성한다. 2. 빌더 클래스는 해당 객체의 모든 필드를 포함한 Builder 메서드를 제공한다. 3. 객체를 생성할 때, build() 메서드를 호출하여 최종적으로 객체를 반환한다. 코드 예시@Builder@Getter@AllArgsConstructorpublic class Product { p..
Kafka vs RabbitMQ vs Redis (Pub/Sub) 비교 및 작동 방식 분석
·
카테고리 없음
Kafka vs RabbitMQ vs Redis (Pub/Sub) 비교 및 작동 방식 분석 Kafka, RabbitMQ, Redis는 메시지 큐(Message Queue, MQ) 또는 Pub/Sub(발행-구독) 시스템을 제공하는 대표적인 기술이다.각 기술의 작동 방식, 사용하는 알고리즘, 장단점을 비교하여 어떤 상황에서 적절한지 분석하고 앞으로 사용할 프로젝트에서 어떻게 적용할지 고려해보려고 한다.1. Kafka (Apache Kafka)Kafka는 분산 로그 기반의 메시지 스트리밍 플랫폼이다.대규모 데이터를 실시간으로 수집, 저장 및 처리하는 데 최적화되어 있으며, 높은 처리량과 내구성을 제공한다. Kafka 작동 방식 • Publish-Subscribe 모델(Pub/Sub) 기반. • Producer..
[JPA] JPA vs MySQL vs JDBC vs JPQL vs QueryDSL
·
Spring/JPA
JPA vs MyBatis vs JDBC vs QueryDSL vs JPQL 비교 및 분석 Spring 환경에서 데이터베이스를 다룰 때 사용되는 대표적인 기술로 JPA, MyBatis, JDBC, QueryDSL, JPQL 등이 있다.각 기술은 특징, 장점, 단점, 사용 방식이 다르며 프로젝트 요구 사항에 따라 적절한 기술을 선택해야 한다. 1. JDBC (Java Database Connectivity) 특징 • Java의 표준 데이터베이스 API. • SQL을 직접 작성하여 데이터베이스와 통신. • Connection, Statement, ResultSet 등을 사용하여 데이터 처리. 장점 직접적인 SQL 사용 → 데이터베이스의 모든 기능 활용 가능.가장 빠른 성능 → 별도의 프레임워크 없이 최소한의..
[Spring AOP] JDK Dynaic Proxy에서 내부호출이 안되는 이유
·
Spring
JDK Dynamic Proxy에서 내부 메서드 호출이 안 되는 이유 Spring의 @Transactional이 같은 클래스 내에서 메서드를 호출할 때 동작하지 않는 이유는 JDK Dynamic Proxy가 메서드 호출을 가로채지 못하기 때문이다.  JDK Dynamic Proxy의 특징 JDK Dynamic Proxy는 인터페이스 기반의 프록시를 생성한다.즉, 프록시는 인터페이스를 구현하는 객체로 생성되며, 원본 객체의 메서드 실행을 가로채 트랜잭션을 관리한다. 하지만!JDK Dynamic Proxy는 인터페이스를 통해 접근할 때만 프록시를 거치며, 같은 클래스 내부에서 메서드를 호출하면 프록시를 거치지 않음.  왜 내부 호출이 트랜잭션을 적용하지 못하는가?  외부에서 호출할 때는 프록시가 적용됨pub..
[Spring AOP] @Transactional의 Proxy 작동 방식
·
Spring
@Transactional의 Proxy 작동 방식 (Spring AOP 기반) Spring에서 @Transactional은 AOP(Aspect-Oriented Programming)와 프록시 패턴(Proxy Pattern)을 사용하여 트랜잭션을 관리한다.이 과정에서 Spring의 프록시 기반 동작 방식을 이해하는 것이 중요하다. 프록시 객체(Proxy)가 원본 객체(Target)를 감싸고 있음이란? Spring에서 @Transactional이 적용된 메서드를 실행할 때 프록시 객체가 원본 객체를 감싼다는 말은 프록시 객체가 원본 객체(Target)의 실행을 대신 관리한다는 의미다. 즉, 프록시 객체가 원본 객체를 대리(Proxy)하여 트랜잭션을 제어하는 역할을 수행한다. 쉽게 이해하는 프록시 개념 프록시..
[Lombok] @Builder, DTO 접근제한자 적절한 설정 방법
·
Spring
@AllArgsConstructor 및 @NoArgsConstructor의 접근 제한 설정 방법 MSA(Microservices Architecture) 환경에서는 각 서비스가 독립적으로 동작하며, 데이터 및 객체의 무분별한 생성 및 변경을 방지하는 것이 중요하다. 따라서 @AllArgsConstructor 및 @NoArgsConstructor의 접근 제한자를 적절히 설정하여 객체의 생성 및 변경을 제어해야 한다. 1. @AllArgsConstructor (모든 필드를 포함하는 생성자)@AllArgsConstructor(access = AccessLevel.PROTECTED)설정 이유 1. 엔티티 객체의 직접적인 변경 방지 • 엔티티는 무분별하게 생성되거나 수정되어서는 안 되므로 **protected**..