728x90
트랜잭션 옵션value, transactionManager기본으로 등록된 트랜잭션 매니저를 사용할 때는 생략하면 되지만,사용하는 트랜잭션 매니저가 둘 이상이라면 트랜잭션 매니저의 이름을 지정하여 구분해야 한다.public class TxService { @Transactional(value = "memberTxManager") public void member() {...} @Transactional("orderTxManager") public void order() {...}} rollbackFor / noRollbackFor체크 예외가 발생하면 커밋되지만, 추가로 예외를 지정하면 해당 예외를 롤백할 수 있다.@Transactional(rollbackFor = Exception.class)E..
Querydsl 소개- 동적 쿼리 문제를 완벽하게 해결한다.- 쿼리 문장에 오타가 있어도 컴파일 시점에 오류를 막을 수 있다.- 메서드 추출을 통해 코드를 재사용할 수 있다. 초기 설정build.gradle 파일에 다음 설정을 추가해 준다.implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'annotationProcessor "com.querydsl:querydsl-apt:$ {dependencyManagement.importedProperties['querydsl.version']}:jakarta"annotationProcessor "jakarta.annotation:jakarta.annotation-api"annotationProcessor "jakar..
스프링 데이터 JPA 소개- JPA 를 편리하게 사용하도록 도와주는 프레임워크이다.- 리파지토리의 구현 클래스 없이 인터페이스만으로 개발이 가능하다.- 기본 CRUD 기능과 페이지 기능도 자동 제공된다.- 쿼리 메서드 기능을 제공한다.- 동적 SQL 을 해결하기 어렵다. 초기 설정build.gradle 파일에 다음 설정을 추가해 준다.implementation 'org.springframework.boot:spring-boot-starter-data-jpa'(JPA 라이브러리에 JDBC 라이브러리도 함께 포함되어 있기 때문에, JDBC 의존관계를 제거해도 된다.) `main` 과 `test` 의 application.properties 에 다음 설정을 추가해 준다.logging.level.org.hibe..
JPA 소개- SQL, 데이터 중심의 설계에서 객체 중심의 설계로 전환할 수 있다.- 기존의 반복 코드, 기본적인 SQL 문도 JPA 가 직접 만들어 실행한다.- PK 기반이 아닌 SQL 문은 직접 작성해야 한다.- 동적 SQL 을 해결하기 어렵다.- EntityManger 을 주입받아 동작한다.- JPA 를 통한 모든 데이터 변경은 트랜잭션 안에서 실행해야 한다. > 참고 - 스프링 부트가 JPA 설정에 따라 EntityMangerFactory 를 생성하고, 이를 통해 EntityManager 를 스프링에 주입할 수 있도록 해준다. 초기 설정build.gradle 파일에 다음 설정을 추가해 준다.implementation 'org.springframework.boot:spring-boot-starter..
MyBatis 소개- JdbcTemplate 보다 많은 기능을 제공하는 SQL Mapper 중 하나이다.- SQL 을 XML 로 편리하게 작성할 수 있다.- 동적 쿼리를 편리하게 작성할 수 있다. // JdbcTemplate 동적 쿼리String sql = "select id, item_name, price, quantity from item";if (StringUtils.hasText(itemName) || maxPrice != null) { sql += " where";}boolean andFlag = false;if (StringUtils.hasText(itemName)) { sql += " item_name like concat('%',:itemName,'%')"; andFlag = true..
스프링 통합 테스트 애노테이션`@SpringBootTest` : 스프링 컨테이너와 테스트를 함께 실행한다. : @SpringBootApplication 을 찾아 설정으로 사용한다.`@Transactional` : 테스트를 완료한 뒤 항상 rollback 하여 DB에 반영되지 않도록 한다.`@Commit` : @Transactional 이라도 commit 하여 DB에 저장된다. : @Rollback(false) 와 같은 기능이다.데이터베이스 연동하여 테스트하기테스트의 중요한 원칙- `테스트는 다른 테스트와 격리해야 한다.`- `테스트는 반복해서 실행할 수 있어야 한다.` 1. 테스트 데이터베이스 별도 운영하기로컬의 서버 데이터베이스에서 테스트를 실행하면, 테스트의 실행 결과가 서버 데이터베이스에 반..
스프링 JdbcTemplate- 순수 Jdbc 설정과 같다.- SQL Mapper 중 하나이다- Jdbc API에서 본 반복 코드 대부분을 제거한다.- 커넥션 획득/종료, 커넥션 동기화, 스프링 예외 변환기 실행 등 반복 작업을 대신 처리해 준다.- DataSource 를 주입받아 JdbcTemplate를 생성하여 사용한다.- SQL 문을 직접 작성해야 한다. - 동적 SQL 을 해결하기 어렵다. > 참고- Insert 문은 데이터 추가라는 단순한 작업이므로, 테이블 이름과 칼럼-값 정보로 SQL을 생성하기 쉽다.따라서 Spring 이 자동화하기 위해 SimpleJdbcInsert 같은 유틸리티를 제공한다. 그렇지만 Select 는 조건, 그룹화, 정렬, 조인 등 형태가 다양하므로 자동화하기 어려워서 직..
에러 코드로 예외 처리예외 처리발생하는 예외를 서비스 계층에서 복구하고 싶을 수도 있다. 예외의 오류 코드를 확인하여 체크 예외를 언체크 예외로 변환하여 서비스 계층으로 예외를 던지면,서비스 계층에서 특정 기술에 의존하지 않고, 문제를 복구할 수 있다. 예시 코드class Repository { private final DataSource dataSource; public Member save(Member member) { String sql = "insert into member(member_id, money) values(?, ?)"; Connection con = null; PreparedStatement pstmt = null; try { con..