728x90
스프링 데이터 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..
트랜잭션 추상화트랜잭션 매니저 PlatformTransactionManager스프링이 제공하는 트랜잭션 추상화 인터페이스이다.데이터 접근 기술에 따른 트랜잭션 구현체도 대부분 만들어져서, 편리하게 사용하면 된다. - 구현체 종류`DataSourceTransactionManager` : JDBC 트랜잭션 관리`JpaTransactionManager` : JPA 트랜잭션 관리`HibernateTransactionManager` : 하이버네이트 트랜잭션 관리`EtcTransactionManager` : 기타 트랜잭션 관리 > 참고 스프링 5.3부터는 JDBC 트랜잭션을 관리할 때 DataSourceTransactionManager 를 상속받아서 약간의 기능을 확장한 JdbcTransactionManager 를..
JDBC 의 기본 구성Jdbc 표준 인터페이스`java.sql.Connection` - 연결`java.sql.Statement` - SQL 쿼리를 담는 객체`java.sql.ResultSet` - SQL 실행 결과를 담는 객체데이터베이스와 자바 애플리케이션을 연결하기 위한 표준으로, 위의 3가지를 정의하여 제공한다. JDBC 드라이버 JDBC 표준 인터페이스를 각자의 DB 에 맞도록 구현하여 제공하는 라이브러리를 JDBC 드라이버라고 한다.(예를 들어, MySQL DB 라면 MySQL JDBC 드라이버 / Oracle DB 라면 Oracle JDBC 드라이버) DriverManager라이브러리에 등록된 DB 드라이버들의 목록을 관리하고, 커넥션을 획득하는 기능을 제공한다.하지만 매번 새로운 커넥션을 생성..