김영한님의 스프링 DB 1편 을 공부하여 정리한 글입니다. JDBC 이해 클라이언트가 애플리케이션 서버를 통해 데이터를 저장하거나 조회하면, 애플리케이션 서버는 다음 과정을 통해서 데이터베이스를 사용한다. DB 변경시 각각의 데이터베이스마다 커넥션을 연결하는 방법, SQL을 전달하는 방법, 그리고 결과를 응답 받는 방법이 모두 다르다.
김영한님의 스프링 DB 1편 을 공부하여 정리한 글입니다. 커넥션 풀 이해 데이터베이스 커넥션을 매번 획득 커넥션을 새로 만드는 것은 과정도 복잡하고 시간도 많이 많이 소모되는 일이다. 고객이 애플리케이션을 사용할 때, SQL을 실행하는 시간 뿐만 아니라 커넥션을 새로 만드는 시간이 추가되기 때문에 결과적으로 응답 속도에 영향을 준다. 이것은 사용자에게...
김영한님의 스프링 DB 1편 을 공부하여 정리한 글입니다. 트랜잭션 - 개념 이해 데이터를 저장할 때 데이터베이스에 저장하는 이유는 무엇일까? 가장 대표적인 이유는 바로 데이터베이스는 트랜잭션이라는 개념을 지원하기 때문이다. 예를 들어서 A의 5000원을 B에게 계좌이체한다고 생각해보자. A의 잔고를 5000원 감소하고, B의 잔고를 5000원 증가해야...
김영한님의 스프링 DB 1편 을 공부하여 정리한 글입니다. 지금까지의 문제점들 애플리케이션 구조 프레젠테이션 계층 UI와 관련된 처리 담당 웹 요청과 응답 사용자 요청을 검증 주 사용 기술: 서블릿과 HTTP 같은 웹 기술, 스프링 MVC 서비스 계층 비즈니스 로직을 담당 주 사용 기술: 가급적 특정 기술에 의존하지 않고, 순수 자바 코드로 작성 데이...
김영한님의 스프링 DB 1편 을 공부하여 정리한 글입니다. 예외 계층 Throwable : 최상위 예외이다. 하위에 Exception 과 Error 가 있다. Error : 메모리 부족이나 심각한 시스템 오류와 같이 애플리케이션에서 복구 불가능한 시스템 예외이다. Exception : 체크 예외 애플리케이션 로직에서 사용할 수 있는 실질적인 최상위 예외...
김영한님의 스프링 DB 1편 을 공부하여 정리한 글입니다. 런타임 예외 적용 Interface Exception Repositoty Service 데이터 접근 예외 직접 만들기 데이터베이스 오류 코드 서비스 계층에서는 예외 복구를 위해 키 중복 오류를 확인할 수 있어야 한다. MyDuplicateKeyException Test Reposi...
김영한님의 스프링 DB 2편 을 공부하여 정리한 글입니다. 데이터 접근 기술 소개 SQLMapper JdbcTemplate MyBatis SQL Mapper 주요기능 개발자는 SQL만 작성하면 해당 SQL의 결과를 객체로 편리하게 매핑해준다. JDBC를 직접 사용할 때 발생하는 여러가지 중복을 제거해주고, 기타 개발자에게 여러가지 편리한 기능을 제공한...
김영한님의 스프링 DB 2편 을 공부하여 정리한 글입니다. JdbcTemplate 소개와 설정 장점 JdbcTemplate은 spring-jdbc 라이브러리에 포함되어 있는데, 이 라이브러리는 스프링으로 JDBC를 사용할 때 기본으로 사용되는 라이브러리이다. 그리고 별도의 복잡한 설정 없이 바로 사용할 수 있다. JdbcTemplate은 템플릿 콜백 패턴...
김영한님의 스프링 DB 2편 을 공부하여 정리한 글입니다. 테스트 - 데이터베이스 연동 테스트 케이스는 src/test 에 있기 때문에, 실행하면 src/test 에 있는 application.properties 파일이 우선순위를 가지고 실행된다. 테스트 케이스에서도 데이터베이스에 접속할 수 있게 test의 application.properties 의 ...
김영한님의 스프링 DB 2편 을 공부하여 정리한 글입니다. MyBatis 소개 MyBatis는 더 많은 기능을 제공하는 SQL Mapper 이다. MyBatis의 가장 매력적인 점은 SQL을 XML에 편리하게 작성할 수 있고 또 동적 쿼리를 매우 편리하게 작성할 수 있다는 점이다. 비교 SQL 여러줄 동적 쿼리 MyBatis 설정 build.grad...
김영한님의 스프링 DB 2편 을 공부하여 정리한 글입니다. JPA 설정 properties org.hibernate.SQL=DEBUG : 하이버네이트가 생성하고 실행하는 SQL을 확인할 수 있다. org.hibernate.type.descriptor.sql.BasicBinder=TRACE : SQL에 바인딩 되는 파라미터를 확인할 수 있다. JPA 적...
김영한님의 스프링 DB 2편 을 공부하여 정리한 글입니다. 스프링 데이터 JPA 주요 기능 스프링 데이터 JPA는 JPA를 편리하게 사용할 수 있도록 도와주는 라이브러리이다. 공통 인터페이스 기능 JpaRepository 인터페이스를 통해서 기본적인 CRUD 기능 제공한다. 공통화 가능한 기능이 거의 모두 포함되어 있다. JpaRepository 인...
김영한님의 스프링 DB 2편 을 공부하여 정리한 글입니다. Querydsl 적용 Repository Querydsl을 사용하려면 JPAQueryFactory 가 필요하다. JPAQueryFactory 는 JPA 쿼리인 JPQL을 만들기 때문에 EntityManager 가 필요하다. findAllOld() Querydsl을 사용해서 동적 쿼리 문제를 해...
김영한님의 스프링 DB 2편 을 공부하여 정리한 글입니다. 스프링 데이터 JPA 예제와 트레이드 오프 클래스 의존 관계 런타임 객체 의존 관계 중간에서 JpaItemRepositoryV2 가 어댑터 역할을 해준 덕분에 ItemService 가 사용하는 ItemRepository 인터페이스를 그대로 유지할 수 있고 클라이언트인 ItemService 의 ...
김영한님의 스프링 DB 2편 을 공부하여 정리한 글입니다. 스프링 트랜잭션 소개 스프링 트랜잭션 추상화 각각의 데이터 접근 기술들은 트랜잭션을 처리하는 방식에 차이가 있다. 예를 들어 JDBC 기술과 JPA 기술은 트랜잭션을 사용하는 코드 자체가 다르다. 따라서 JDBC 기술을 사용하다가 JPA 기술로 변경하게 되면 트랜잭션을 사용하는 코드도 모두 함께...
김영한님의 스프링 DB 2편 을 공부하여 정리한 글입니다. 스프링 트랜잭션 전파1 - 커밋, 롤백 Test commit() rollback() 스프링 트랜잭션 전파2 - 트랜잭션 두 번 사용 Test double_commit() 트랜잭션1을 시작하고, 커넥션 풀에서 conn0 커넥션을 획득했다.
김영한님의 스프링 DB 2편 을 공부하여 정리한 글입니다. 트랜잭션 전파 활용1 - 예제 프로젝트 시작 상황 서비스 계층에 트랜잭션이 없다. 회원, 로그 리포지토리가 각각 트랜잭션을 가지고 있다. 회원, 로그 리포지토리 둘다 커밋에 성공한다. Test 트랜잭션 전파 활용2 - 커밋, 롤백 상황 서비스 계층에 트랜잭션이 없다. 회원, 로그 리포지토리...