[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**..
[Lombok] @Builder를 클래스가 아닌 메서드에 적용하는 이유
·
Spring
@Builder의 작동 과정 및 수행 방식 Lombok의 @Builder는 빌더 패턴을 자동으로 생성하여 객체를 보다 유연하게 생성할 수 있도록 해준다.@Builder는 클래스에 붙일 수도 있고, 메서드에 붙일 수도 있으며, 각각의 수행 방식과 장단점이 다르다. 1. 클래스에 @Builder를 붙였을 때 수행 방식 및 연관 엔티티 초기화  작동 과정 1. Lombok이 정적 내부 클래스로 빌더 클래스를 생성한다. 2. 빌더 클래스는 해당 객체의 모든 필드를 포함한 Builder 메서드를 제공한다. 3. 객체를 생성할 때, build() 메서드를 호출하여 최종적으로 객체를 반환한다. 코드 예시@Builder@Getter@AllArgsConstructorpublic class Product { priv..
[DDD] Kakao ConferenceDDD와 적용 사례 공유 정리
·
카테고리 없음
if(kakao) 2022 컨퍼런스 내용을 듣고 정리한 내용이다. DDD에 대한 간단한 개념 정리를 먼저 읽고 아래 내용을 참고하길 바란다. DDD란Domain-Driven Design으로 도메인 주도 설계라고 부른다.특징1. 일반적으로 많이 사용하는 데이터 중심의 접근법을 탈피해서 순수한 도메인 모델과 로직에 집중하는 것을 말한다.2. 보편적인 언어의 사용이다. 도메인 전문가와 소프트웨어 개발자간의 커뮤니케이션 문제를 없애고 상호가 이해할 수 있고 모든 문서와 코드에 이르기까지 동일한 표현과 단어로 구성된 단일화된 언어체계를 구축해나가는 과정을 말한다. 이로서 분석 작업과 설계 그리고 구현에 이르기까지 통일된 방식으로 커뮤니케이션이 가능해진다.3. 소프트웨어 엔티티와 도메인 컨셉을 가능한 가장 가까이 ..