인프런/스프링 DB 2편13 12) 스프링 트랜잭션 전파 기본 (1) [미완] 스프링 트랜잭션 전파1 - 커밋, 롤백 트랜잭션이 둘 이상 있을 때 어떻게 동작하는지 자세히 알아보고, 스프링이 제공하는 트랜잭션 전파(propagation)라는 개념도 알아보자. 트랜잭션 전파를 이해하는 과정을 통해서 스프링 트랜잭션의 동작 원리도 더 깊이있게 이해할 수 있을 것이다. 먼저 간단한 스프링 트랜잭션 코드를 통해 기본 원리를 학습하고, 이후에 실제 예제를 통해 어떻게 활용하는지 알아보겠다. 간단한 예제 코드로 스프링 트랜잭션을 실행해보자. BasicTxTest @Slf4j @SpringBootTest public class BasicTxTest { @Autowired PlatformTransactionManager txManager; @TestConfiguration static class.. 인프런/스프링 DB 2편 2024. 3. 29. 11) 스프링 트랜잭션 이해 (3) 예외와 트랜잭션 커밋, 롤백 - 기본 예외가 발생했는데, 내부에서 예외를 처리하지 못하고, 트랜잭션 범위( @Transactional가 적용된 AOP ) 밖으로 예외를 던지면 어떻게 될까? 예외 발생시 스프링 트랜잭션 AOP는 예외의 종류에 따라 트랜잭션을 커밋하거나 롤백한다. 언체크 예외인 RuntimeException , Error 와 그 하위 예외가 발생하면 트랜잭션을 롤백한다. 체크 예외인 Exception 과 그 하위 예외가 발생하면 트랜잭션을 커밋한다. 물론 정상 응답(리턴)하면 트랜잭션을 커밋한다 RollbackTest @SpringBootTest public class RollbackTest { @Autowired RollbackService service; @Test void runtim.. 인프런/스프링 DB 2편 2024. 3. 21. 11) 스프링 트랜잭션 이해 (2) 트랜잭션 AOP 주의 사항 - 프록시 내부 호출1 참고 여기서 설명하는 내용은 스프링 핵심원리 고급편 [13. 실무 주의사항 - 프록시와 내부 호출 문제]에서 다루는 내용과 같은 문제를 다룬다. 이렇게 한번 더 언급하는 이유는 그 만큼 실무에서 많이 만나는 주제이고, 많은 개발자들이 이 문제를 이해하지 못해서 고통받기 때문이다. 여기서는 트랜잭션 AOP에 관점에서 설명한다 @Transactional 을 사용하면 스프링의 트랜잭션 AOP가 적용된다. 트랜잭션 AOP는 기본적으로 프록시 방식의 AOP를 사용한다. 앞서 배운 것 처럼 @Transactional 을 적용하면 프록시 객체가 요청을 먼저 받아서 트랜잭션을 처리하고, 실제 객체를 호출해준다. 따라서 트랜잭션을 적용하려면 항상 프록시를 통해서 대상 객.. 인프런/스프링 DB 2편 2024. 2. 16. 10) 스프링 트랜잭션 이해 스프링 트랜잭션 소개 우리는 앞서 DB1편 스프링과 문제 해결 - 트랜잭션을 통해 스프링이 제공하는 트랜잭션 기능이 왜 필요하고, 어떻게 동작하는지 내부 원리를 알아보았다. 이번 시간에는 스프링 트랜잭션을 더 깊이있게 학습하고, 또 스프링 트랜잭션이 제공하는 다양한 기능들을 자세히 알아보자. 먼저 본격적인 기능 설명에 앞서 지금까지 학습한 스프링 트랜잭션을 간략히 복습하면서 정리해보자. 스프링 트랜잭션 추상화 각각의 데이터 접근 기술들은 트랜잭션을 처리하는 방식에 차이가 있다. 예를 들어 JDBC 기술과 JPA 기술은 트랜잭션을 사용하는 코드 자체가 다르다. JDBC 트랜잭션 코드 예시 public void accountTransfer(String fromId, String toId, int money).. 인프런/스프링 DB 2편 2024. 2. 15. 9) 데이터 접근 기술 - 활용 방안 스프링 데이터 JPA 예제와 트레이드 오프 중간에서 JpaItemRepositoryV2 가 어댑터 역할을 해준 덕분에 ItemService 가 사용하는 ItemRepository 인터페이스를 그대로 유지할 수 있고 클라이언트인 ItemService 의 코드를 변경하지 않아도 되는 장점이 있다. 고민 구조를 맞추기 위해서, 중간에 어댑터가 들어가면서 전체 구조가 너무 복잡해지고 사용하는 클래스도 많아지는 단점이 생겼다. 실제 이 코드를 구현해야하는 개발자 입장에서 보면 중간에 어댑터도 만들고, 실제 코드까지 만들어야 하는 불편함이 생긴다. 유지보수 관점에서 ItemService 를 변경하지 않고, ItemRepository 의 구현체를 변경할 수 있는 장점이 있다. 그러니까 DI, OCP 원칙을 지킬 수 .. 인프런/스프링 DB 2편 2024. 2. 15. 7) 데이터 접근 기술 - 스프링 데이터 JPA 스프링 데이터는 기본적인 crud 등 공통적인 부분을 만들어줘서 쉽게 데이터를 처리할 수 있는 걸 도와준다. 스프링 데이터 jpa, 스프링 데이터 redis같이 특정 기술에 대해서 더 특화된 기능을 가지는 것도 있다. https://spring.io/projects/spring-data 스프링 데이터 JPA 주요 기능 스프링 데이터 JPA는 JPA를 편리하게 사용할 수 있도록 도와주는 라이브러리이다. 수많은 편리한 기능을 제공하지만 가장 대표적인 기능은 다음과 같다. [여기서는 간단하게 알아보고, 따로 데이터 jpa 강의에서는 자세하게] - 공통 인터페이스 기능 - 쿼리 메서드 기능 공통 인터페이스 기능 JpaRepository 인터페이스를 통해서 기본적인 CRUD 기능 제공한다. 공통화 가능한 기능이 .. 인프런/스프링 DB 2편 2024. 2. 15. 8) 데이터 접근 기술 - Querydsl Querydsl 설정 build.gradle dependencies 부분에 아래 코드 추가 //Querydsl 추가 implementation 'com.querydsl:querydsl-jpa' annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" dependencies 스코프 밖에 아래 코드 추가 //Querydsl 추가, 자.. 인프런/스프링 DB 2편 2024. 2. 15. 6) 데이터 접근기술 - JPA JPA 시작 스프링과 JPA는 자바 엔터프라이즈(기업) 시장의 주력 기술이다. 스프링이 DI 컨테이너를 포함한 애플리케이션 전반의 다양한 기능을 제공한다면, JPA는 ORM 데이터 접근 기술을 제공한다 JPA는 스프링 만큼이나 방대하고, 학습해야할 분량도 많다. 하지만 한번 배워두면 데이터 접근 기술에서 매우 큰 생산성 향상을 얻을 수 있다. 대표적으로 JdbcTemplate이나 MyBatis 같은 SQL 매퍼 기술은 SQL을 개발자가 직접 작성해야 하지만, JPA를 사용하면 SQL도 JPA가 대신 작성하고 처리해준다 실무에서는 JPA를 더욱 편리하게 사용하기 위해 스프링 데이터 JPA와 Querydsl이라는 기술을 함께 사용한다. 중요한 것은 JPA이다. 스프링 데이터 JPA, Querydsl은 JPA.. 인프런/스프링 DB 2편 2024. 2. 8. 5)데이터 접근 기술 - MyBatis MyBatis 소개 MyBatis는 앞서 설명한 JdbcTemplate보다 더 많은 기능을 제공하는 SQL Mapper 이다. 기본적으로 JdbcTemplate이 제공하는 대부분의 기능을 제공한다. JdbcTemplate과 비교해서 MyBatis의 가장 매력적인 점은 SQL을 XML에 편리하게 작성할 수 있고 또 동적 쿼리를 매우 편리하게 작성할 수 있다는 점이다. 먼저 SQL이 여러줄에 걸쳐 있을 때 둘을 비교해보자. jdbcTemplate sql 여러줄 String sql = "update item " + "set item_name=:itemName,price=:price,quantity=:quantity " + "where id =:id"; MyBatis sql 여러줄 update item set .. 인프런/스프링 DB 2편 2023. 3. 8. 4) 데이터 접근 기술 - 테스트 테스트 - 데이터베이스 연동 데이터 접근 기술에 대해서 더 알아보기 전에 데이터베이스에 연동하는 테스트에 대해서 알아보자. 데이터 접근 기술은 실제 데이터베이스에 접근해서 데이터를 잘 저장하고 조회할 수 있는지 확인하는 것이 필요하다 지금부터 테스트를 실행할 때 실제 데이터베이스를 연동해서 진행해보자. 앞서 개발한 ItemRepositoryTest 를 통해서 테스트를 진행할 것이다. 테스트 케이스는 src/test 에 있기 때문에, 실행하면 src/test 에 있는 application.properties 파일이 우선순위를 가지고 실행된다. 그런데 문제는 테스트용 설정에는 spring.datasource.url 과 같은 데이터베이스 연결 설정이 없다는 점이다테스트 케이스에서도 데이터베이스에 접속할 .. 인프런/스프링 DB 2편 2023. 3. 7. 3) 데이터 접근 기술 - 스프링 JdbcTemplate (2) JdbcTemplate - 이름 지정 파라미터 (1) 순서대로 바인딩 JdbcTemplate을 기본으로 사용하면 파라미터를 순서대로 바인딩 한다. 예를 들어서 다음 코드를 보자. @Override public void update(Long itemId, ItemUpdateDto updateParam) { String sql = "update item set item_name=?,price=?,quantity=? where id =?"; template.update(sql, updateParam.getItemName(), updateParam.getPrice(), updateParam.getQuantity(), itemId); } 여기서는 itemName , price , quantity 가 SQL에 있는.. 인프런/스프링 DB 2편 2023. 3. 7. 2) 데이터 접근 기술 - 스프링 JdbcTemplate (1) JdbcTemplate 소개와 설정 SQL을 직접 사용하는 경우에 스프링이 제공하는 JdbcTemplate은 아주 좋은 선택지다. JdbcTemplate 은 JDBC를 매우 편리하게 사용할 수 있게 도와준다 (이전에 DB1 마지막편에서 리포지토리의 반복되는코드를 스프링의 템플릿을 도입해서 해결했다) 장점 설정의 편리함 JdbcTemplate은 spring-jdbc 라이브러리에 포함되어 있는데, 이 라이브러리는 스프링으로 JDBC를 사용할 때 기본으로 사용되는 라이브러리이다. 그리고 별도의 복잡한 설정 없이 바로 사용할 수 있다. 반복 문제 해결 JdbcTemplate은 템플릿 콜백 패턴을 사용해서, JDBC를 직접 사용할 때 발생하는 대부분의 반복 작업을 대신 처리해준다. 개발자는 SQL을 작성하고, 전.. 인프런/스프링 DB 2편 2023. 3. 6. 이전 1 2 다음