Java(31)
-
트랜잭션 AOP 주의 사항
@Transactional을 사용하면 스프링의 트랜잭션 AOP가 적용됩니다. 트랜잭션 AOP는 기본적으로 프록시 방식의 AOP를 사용합니다.@Transactional을 적용하면 프록시 객체가 요청을 먼저 받아서 트랜잭션을 처리하고, 실제 객체를 호출합니다. 따라서 트랜잭션을 적용하려면 항상 프록시를 통해서 대상 객체를 호출해야 합니다.이렇게 해야 프록시에서 먼저 트랜잭션을 적용하고, 이후에 대상 객체를 호출하게 됩니다.만약 프록시를 거치지 않고 대상 객체를 직접 호출하게 되면 AOP가 적용되지 않고 트랜잭션도 적용되지 않습니다. package hello.springtx.apply;import lombok.extern.slf4j.Slf4j;import org.junit.jupiter.api.Test;imp..
2025.07.24 -
트랜잭션 적용 확인
트랜잭션 적용 확인@Transactional을 통해 선언적 트랜잭션 방식을 사용하면 단순히 애노테이션 하나로 트랜잭션을 적용할 수 있습니다. 이 기능은 트랜잭션 관련 코드가 눈에 보이지 않고 AOP기반으로 동작하기 때문에 실제로 적용이 되는지 안되는지 눈으로 확인하기 어려움이 있습니다. package hello.springtx.apply;import jakarta.transaction.Transactional;import lombok.extern.slf4j.Slf4j;import org.assertj.core.api.Assertions;import org.junit.jupiter.api.Test;import org.springframework.aop.support.AopUtils;import org.sp..
2025.07.24 -
커넥션 풀
데이터베이스 커넥션을 획득할 때는 다음과 같은 복잡한 과정을 거친다.1.애플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회한다.2.DB드라이버는 DB와 TCP/IP 커넥션을 연결한다. 이 과정에서 3 way handshake 같은 TCP/IP 연결을 위한 네트워크 동작이 발생한다.3.DB 드라이버는 TCP/IP 커넥션이 연결되면 ID, PW와 기타 부가정보를 DB에 전달합니다.4.DB는 ID, PW를 통해 내부 인증을 완료하고, 내부에 DB 세션을 생성합니다.5.DB는 커넥션 생성이 완료되었다는 응답을 보냅니다.6.DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환합니다. ※이렇게 커넥션을 새로 만드는 것은 과정도 복잡하고 시간도 많이 소모가 됩니다.DB는 물론이고 애플리케이션 서버에서도 TCP..
2025.07.14 -
페이징
JPA는 페이징을 다음 두 API로 추상화합니다.setFirstResult(int startPosition) : 조회 시작 위치(0부터 시작)setMaxResults(int maxResult) : 조회할 데이터 수실제로 SQL 쿼리를 작성하는 과정에서 페이징 처리는 굉장히 번거로울 수 있습니다. 하지만 JPA에서는 이러한 기능을 들을 쉽게 처리할 수 있습니다. 페이징 예시)List result = em.createQuery("select m from Member m order by m.age desc", Member.class) .setFirstResult(0) .setMaxResults(10) ..
2025.06.28 -
JPQL
JPQL(Java Persistence Query Language)- JPQL은 객체지향 쿼리 언어 입니다. 따라서 테이블을 대상으로 쿼리하는 것이 아니라 엔티티 객체를 대상으로 쿼리한다.- JPQL은 SQL을 추상화해서 특정데이터베이스 SQL에 의존하지 않는다.- JPQL은 결국 SQL로 변환된다. 객체 모델 VS DB 테이블 모델 JPQL 문법-SQL 문법과 거의 유사-SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY - 이러한 방식으로 가능,-엔티티와 속성은 대소문자 구분함.-JPQL 키워드는 대소문가 구분X(SELECT,select)-엔티티의 이름을 사용, 테이블의 이름 사용(X)-별칭은 필수( AS는 생략가능) -> SELECT m FROM Member M (..
2025.06.27 -
객체지향 쿼리 언어
JPA는 다양한 쿼리 방법으로 지원- JPQL, JPA Criteria, QueryDSL, 네이티브 SQL, JDBC API 직접 사용, MyBatis, SpringJdbc Template 함께 사용. JPQL 소개 -JPA를 사용하면 엔티티 객체를 중심으로 개발.-문제는 검색 쿼리-검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색을 해야함.-모든 DB 데이터를 객체로 변환해서 검색하는 것은 절대 불가능-애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL 필요. JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어 제공SQL 문법과 유사(SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN 지원)JPQL은 엔티티 객체를 대상으로 쿼..
2025.06.24