2025/04 53

[자바 ORM 표준 JPA 프로그래밍] 13. 웹 애플리케이션과 영속성 관리

김영한 님의 "자바 ORM 표준 JPA 프로그래밍" 책을 정리한 포스팅 입니다.1. 트랜잭션 범위의 영속성 컨텍스트기본 전략구분내용생명 주기트랜잭션과 영속성 컨텍스트는 같은 생존 범위를 가짐- 트랜잭션이 시작될 때 영속성 컨텍스트 생성 (초기화 상태)- 트랜잭션이 종료될 때 영속성 컨텍스트 종료공유- 같은 트랜잭션 간 같은 영속성 컨텍스트를 공유함- 다른 트랜잭션 간 다른 영속성 컨텍스트를 가짐 예시) 공유더보기같은 트랜잭션@Test@Transactionalvoid same_transaction() { User user1 = entityManager.find(User.class, 1); user1.setName("test"); searchName();}private void search..

[자바 ORM 표준 JPA 프로그래밍] 12. 스프링 데이터 JPA

김영한 님의 "자바 ORM 표준 JPA 프로그래밍" 책을 정리한 포스팅 입니다. 0. Spring Data 프로젝트모든 종류의 데이터 저장소에 대해 추상화 계층을 제공하는 Spring 프로젝트 모음 (RDB, NoSQL, 검색엔진 등)일관된 방식의 데이터 접근을 제공하여 코드 구조를 일관되게 유지할 수 있도록 도와줌인터페이스만 작성해도 DAO 구현체를 자동 생성 및 등록함 공통 구조Repository 인터페이스 정의Spring Data가 자동으로 구현체(프록시) 생성복잡한 쿼리는 @Query 또는 명시적 정의로 구현 1. Spring Data JPA 프로젝트JPA를 기반으로 RDBMS에 접근하는 기능을 제공하는 Spring Data의 하위 프로젝트Hibernate와 같은 JPA 구현체 위에 얹어서 사용함..

[자바 ORM 표준 JPA 프로그래밍] 10-5. 객체지향 쿼리 언어: 객체지향 쿼리 심화

김영한 님의 "자바 ORM 표준 JPA 프로그래밍" 책을 정리한 포스팅 입니다. 1. 벌크 연산수백개의 엔티티 수정을 하기 위해 각각 상태를 변경할 경우 너무 오래걸림이를 위해 여러 건을 한번에 처리하는 벌크 연산을 지원함 예제)더보기@Test@Transactionalvoid bulk_operation() { String selectJpql = "select u from User as u"; List result = entityManager.createQuery(selectJpql, User.class).getResultList(); long start1 = System.currentTimeMillis(); for (User user : result) user.setName("upd..

[자바 ORM 표준 JPA 프로그래밍] 10-4. 객체지향 쿼리 언어: Native SQL

김영한 님의 "자바 ORM 표준 JPA 프로그래밍" 책을 정리한 포스팅 입니다. 1. Native SQLJPA는 JPQL이 아닌 DB 고유의 SQL 문법을 직접 사용하는 방법을 지원합니다.결과 매핑 어노테이션을 사용하여 응답을 정의할 수 있습니다. 사용 상황상황이유복잡한 조인 / 서브쿼리JPQL로 표현하기 어려운 경우DB 특화 기능 사용예: 윈도우 함수, 특정 DB 함수 등성능 최적화JPQL보다 효율적인 쿼리 필요 시기존 SQL 자산 재사용DB에 이미 작성된 쿼리를 그대로 쓰고 싶을 때 예제) Native SQL더보기@Test@Transactionalvoid native_query_entity() { String sql = "SELECT ID, NAME, NICKNAME, AGE, TEAM_ID ..

[자바 ORM 표준 JPA 프로그래밍] 10-2. 객체지향 쿼리 언어: Criteria

김영한 님의 "자바 ORM 표준 JPA 프로그래밍" 책을 정리한 포스팅 입니다. 1. CriteriaJPQL을 편하게 작성하도록 도와주는 빌더 클래스 모음컴파일 시점에 오류를 발견할 수 있음동적 쿼리를 작성하기 편함 2. 기초항목설명CriteriaBuilderCriteria 쿼리 생성을 위한 시작점CriteriaQuery쿼리 전체 구조를 담는 객체Root조회의 시작점 (FROM 절)PredicateWHERE 조건 표현OrderORDER BY 정렬 표현 예제더보기CriteriaBuilder cb = entityManager.getCriteriaBuilder();CriteriaQuery query = cb.createQuery(User.class);Root u = query.from(User.class);q..

[자바 ORM 표준 JPA 프로그래밍] 10-1. 객체지향 쿼리 언어: JPQL

김영한 님의 "자바 ORM 표준 JPA 프로그래밍" 책을 정리한 포스팅 입니다. 1. JPQL객체 지향 쿼리SQL 추상화실행 시점에 SQL 문을 생성하여 요청함 예제) JPQL ➡️ SQL더보기// 쿼리 생성String jpql = "select m from Member as m where m.username = 'kim'";List resultList = em.createQuery(jpql, Member.class).getResultList(); 특징구분설명기본 문법SQL과 유사한 문법 사용 (SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY 등)- 엔티티명과 필드 사용, 별칭 필수쿼리 객체 API- TypedQuery: 반환 타입 명확할 때- Query: 반환 타입..

[Spring][Test] 3. Testing Annotations

1. 주요 애너테이션애노테이션목적@BootstrapWith테스트 컨텍스트 부트스트래퍼를 커스터마이징할 때 사용@ContextConfiguration테스트 컨텍스트를 구성할 설정을 지정(XML, 자바 설정 클래스 등)@WebAppConfigurationWebApplicationContext 로딩을 명시하여 웹 환경에서 테스트MockServletContext 기반 설정@ContextHierarchy부모-자식 컨텍스트 계층 구조를 정의@TestPropertySource테스트용 프로퍼티 파일 또는 인라인 프로퍼티 지정@TestBean (Spring 6.1+)기존 빈을 오버라이드하거나 테스트 전용 빈 정의@MockitoBean기존 빈을 Mock 객체로 대체@MockitoSpyBean기존 빈을 Spy 객체로 래핑@..

Spring/Spring Test 2025.04.21

[Spring Boot][Test] 6. Test

1. Test Scope Dependenciesspring-boot-starter-test에 포함된 주요 라이브러리라이브러리설명JUnit 5Java 애플리케이션 단위 테스트의 표준 프레임워크Spring Test & Spring Boot TestSpring Boot 애플리케이션을 위한 테스트 유틸리티 및 통합 테스트 지원AssertJ직관적이고 유창한 API를 제공하는 assertion 라이브러리Hamcrestmatcher 객체(제약조건 또는 조건자)를 제공하는 라이브러리MockitoJava용 목(mock) 객체 생성 프레임워크JSONassertJSON 형식 데이터를 위한 assertion 라이브러리JsonPathJSON 데이터를 위한 XPath 유사 쿼리 언어Awaitility비동기 시스템을 테스트하기 위..

Spring/Spring Boot 2025.04.21

[Spring][Test] 2. Integration Testing

1. spring-test 모듈외부 시스템과 연결하지 않고도 통합테스트를 하도록 지원함다양한 테스트 프레임워크와 연동됨 (JUnit, TestNG 등) 2. 테스트 클래스에 의존성 주입TestContext테스트 실행 중의 상태와 메타데이터를 캡슐화한 객체입니다.전체 테스트 컨텍스트의 흐름을 관리기능설명🔁 ApplicationContext 관리테스트 시 사용할 스프링 컨텍스트(ApplicationContext)를 생성하고, 재사용을 위해 캐싱함💉 의존성 주입 지원@Autowired, @Value, @MockBean 등을 통해 테스트 클래스에도 빈 주입 가능🔄 트랜잭션 관리@Transactional을 테스트에 적용해 자동 롤백 같은 트랜잭션 기능 제공🔧 테스트 라이프사이클 관리@BeforeEach, ..

Spring/Spring Test 2025.04.21

[Spring][Test] 1. Unit Testing

1. 단위 테스트 테스트 시에는 코드를 독립적으로 테스트할 수 있어야 해요. (Spring 없이도 테스트가 가능해야 함)Spring의 Dependency Injection 덕분에, J2EE 전통 방식보다 컨테이너에 덜 의존적인 코드 작성이 가능POJO(Plain Old Java Object) 중심의 구조를 만들 수 있음순수한 자바 코드로 작성된 객체로 설계 가능 (특별한 인터페이스나 어노테이션 등에 의존 ❌)객체를 직접 생성하여 테스트할 수 있음을 의미함 장점항목설명Spring IoC와의 연관성⚡ 빠른 실행 속도DB나 서버 등 외부 시스템 없이 실행 가능IoC로 객체를 외부에서 주입하므로, 테스트 시 Mock/Stubs로 대체 가능🛠️ 테스트 주도 개발(TDD)에 유리빠르고 반복적인 테스트 작성 가능P..

Spring/Spring Test 2025.04.19