Spring-Boot/스프링 DB 2편 - 데이터 접근 기술
-
스프링 DB 데이터접근 기술 - 스프링 트랜잭션 전파 기본Spring-Boot/스프링 DB 2편 - 데이터 접근 기술 2022. 9. 27. 18:31
* 트랜잭션 2개가 실행 시 주의! * - 트랜잭션1과 트랜잭션2가 같은 `conn0` 커넥션을 사용중이다. 이것은 중간에 커넥션 풀 때문에 그런 것이다. - 트랜잭션1은 `conn0` 커넥션을 모두 사용하고 커넥션 풀에 반납까지 완료 - 이후에 트랜잭션2가 `conn0`를 커넥션 풀에서 획득함 - 따라서 둘은 완전히 다른 커넥션으로 인지하는 것이 맞다 - 히카리 커넥션 풀에서 커넥션을 다루는 프록시 객체의 주소가 트랜잭션1과 트랜잭션2는 서로 다르다. - 결과적으로 `conn0`을 통해 커넥션이 재사용 된 것이고 각각의 커넥션 풀에서 커넥션을 조회한 것을 확인 - 트랜잭션이 각각 수행되면서 사용되는 DB 커넥션도 각각 다르다 - 이 경우 트랜잭션을 각자 관리하기 때문에 전체 트랜잭션을 묶을 수 없다. ..
-
스프링 DB 데이터접근 기술 - 스프링 트랜잭션 이해Spring-Boot/스프링 DB 2편 - 데이터 접근 기술 2022. 9. 23. 17:47
* 선언적 트랜잭션 관리 vs 프로그래밍 방식 트랜잭션 관리 * 선언적 트랜잭션 관리 ( Declarative Transaction Management ) - @Transactional 애노테이션 하나만 선언해서 매우 편리하게 트랜잭션을 적용하는 것을 선언적 트랜잭션 관리라 한다. - 선언적 트랜잭션 관리는 과거 XML에 설정하기도 했다 - 이름 그대로 해당 로직에 트랜잭션을 적용하겠다 라고 어딘가에 선언하기만 하면 트랜잭션이 적용되는 방식이다 프로그래밍 방식의 트랜잭션 관리( programmatic transaction management ) - 트랜잭션 매니저 또는 트랜잭션 템플릿 등을 사용해서 트랜잭션 관련 코드를 직접 작성하는 것을 프로그래밍 방식의 트랜잭션 관리라 한다. - 프로그래밍 방식의 트..
-
스프링 DB 데이터접근 기술 - 활용 방안Spring-Boot/스프링 DB 2편 - 데이터 접근 기술 2022. 9. 23. 13:59
* 트레이드 오프 * - DI, OCP를 지키기 위해 어댑터를 도입하고, 더 많은 코드를 유지한다 - 어댑터를 제거하고 구조를 단순하게 가져가지만, DI, OCP를 포기하고 서비스 코드를 직접 변경한다. - 결국 여기서 발생하는 트레이드 오프는 구조의 안전성 vs 단순한 구조와 개발의 편리성 사이의 선택 - 개발을 할 때는 항상 자원이 무한한 것이 아니다. 그리고 어설픈 추상화는 오히려 독이 되는 경우도 많다. 무엇보다 *추상화도 비용이 든다.* 인터페이스도 비용이 든다. 여기서 말하는 비용은 유지보수 관점에서 비용을 뜻한다. 이 추상화 비용을 넘어설 만큼 효과가 있을 때 추상화를 도입하는 것이 실용적이다 * 실용적인 구조 * - 기본 CRUD와 단순 조회는 스프링 데이터 JPA가 담당하고, 복잡한 조회..
-
스프링 DB 데이터접근 기술 - QuerydslSpring-Boot/스프링 DB 2편 - 데이터 접근 기술 2022. 9. 23. 11:03
QUERY의 문제점 - QUERY는 문자, Type-check 불가능 - 실행하기 전까지 작동여부 확인 불가 에러는 크게 2가지 - 컴파일 에러 ( 좋은 에러 ) - 런타임 에러 ( 나쁜 에러 ) * QueryDSL * - 쿼리를 Java로 type-safe하게 개발할 수 있게 지원하는 프레임워크 - 주로 JPA 쿼리(JPQL)에 사용 * JPA에서 QUERY 방법은 크게 3가지 * 1. JPQL(HQL) ㆍ장점 : SQL QUERY와 비슷해서 금방 익숙해짐 ㆍ단점 : type-safe 아님, 동적쿼리 생성이 어려움 2. Criteria API ㆍ장점 : 동적쿼리 생성이 쉬움? ㆍ단점 ㆍ1. type-safe 아님 ㆍ2. 너무 너무 너무 복잡함 ㆍ3. 알아야 할게 너무 많음 3. MetaModel Cri..
-
스프링 DB 데이터접근 기술 - 스프링데이터 JPASpring-Boot/스프링 DB 2편 - 데이터 접근 기술 2022. 9. 22. 18:19
스프링 데이터 JPA 주용기능 - 스프링 데이터 JPA는 JPA를 편리하게 사용할 수 있도록 도와주는 라이브러리이다. 공통 인터페이스 기능 - `JpaRepository` 인터페이스를 통해서 기본적인 CRUD 기능 제공한다 - 공통화 가능한 기능이 거의 모두 포함되어 있다 - `CrudRepository`에서 `findOne()` → `findById()`로 변경 * JpaRepository 사용법 * public interface ItemRepository extends JpaRepository { } - `JpaRepository` 인터페이스를 인터페이스 상속 받고, 제네릭에 관리할 ``를 주면된다 - 그러면 `JpaRepository`가 제공하는 기본 CRUD 기능을 모두 사용가능 * 스프링 데이터..
-
스프링 DB 데이터접근 기술 - JPASpring-Boot/스프링 DB 2편 - 데이터 접근 기술 2022. 9. 22. 16:54
- 대표적으로 JdbcTemplate이나 MyBatis 같은 SQL 매퍼 기술은 SQL을 개발자가 직접 작성해야 하지만, JPA를 사용하면 SQL도 JPA가 대신 작성하고 처리해준다. - 실무에서는 JPA를 더욱 편리하게 사용하기 위해 스프링 데이터 JPA와 Querydsl이라는 기술을 함께 사용한다 ORM 개념1 - SQL 중심적인 개발 문제점 - SQL에 의존적인 개발을 피하기 어렵다. - 객체와 관계형 데이터베이스의 차이 ㆍ1. 상속 ㆍ2. 연관관계 ㆍ3. 데이터타입 ㆍ4. 데이터 식별 방법 - 처음 실행하는 SQL에 따라 탐색 범위 결정 ㆍ계층형 아키텍처 - 진정한 의미의 계층 분할이 어렵다. - 객체답게 모델링 할수록 매핑 작업만 늘어난다. - 객체를 자바 컬렉션에 저장 하듯이 DB에 저장할 수..
-
스프링 DB 데이터접근 기술 - MyBatisSpring-Boot/스프링 DB 2편 - 데이터 접근 기술 2022. 9. 17. 17:21
- JdbcTemplate과 비교해서 MyBatis의 가장 매력적인 점은 SQL을 XML에 편리하게 작성할 수 있고 또 동적 쿼리를 매우 편리하게 작성할 수 있다. - MyBatis는 XML에 작성하기 떄문에 라인이 길어져도 문자 더하기에 대한 불편함이 없다. - JdbcTemplate은 자바 코드로 직접 동적쿼리를 작성해야한다. 반면에 MyBatis는 동적 쿼리를 매우 편리하게 작성할 수 있는 다양한 기능들을 제공해준다. * 설정의 장단점 * JdbcTemplate은 스프링에 내장된 기능이고, 별도의 설정없이 사용할 수 있다는 장점있다. 반면에 MyBatis는 약간의 설정이 필요하다 * 정리 * - 프로젝트에서 동적 쿼리는 복잡한 쿼리가 많다면 MyBatis를 사용하고, 단순한 쿼리들이 많으면 Jdbc..
-
스프링 DB 데이터접근 기술 - 테스트Spring-Boot/스프링 DB 2편 - 데이터 접근 기술 2022. 9. 14. 18:41
* @SpringBootTest * - @SpringBootTest는 @SpringBootApplication 를 찾아서 설정으로 사용한다. 테스트의 원칙 - * 테스트는 다른 테스트와 격리해야 한다. * - * 테스트는 반복해서 실행할 수 있어야 한다. * * 트랜잭션과 롤백 전략 * - 테스트가 끝나고 나서 트랜잭션을 강제로 롤백해버리면 데이터가 깔끔하게 제거된다. @Autowired PlatformTransactionManager transactionManager; TransactionStatus status; @BeforeEach void beforeEach(){ // 트랜잭션 시작 status = transactionManager.getTransaction(new DefaultTransactio..