MySQL 드라이버는 의존성으로 있다.DriverManager로 커넥션을 얻어서 Insert 요청을 처리하면 되겠다.문제점 투성이다.execute() 메서드는 범용 메서드기 때문에 Insert Select 등등 모든 쿼리를 처리한다. 지금은 Insert만 처리할 것이니
음식 주문 정보는 다음과 같은 도메인 클래스를 사용한다.일단 OrderItems가 들어있는 Orders 객체 생성 로직은 완성해놨다.두 가지를 구현하면 된다.Orders 정보 InsertOrderItems 정보 Insert이 Insert 묶음은 트랜잭션이 적용돼야 한다
Orders와 OrderItems를 조인해서 반환해야 한다.JPA를 따라하기 위해서 기본 생성자로 생성하고, 리플렉션으로 값을 밀어넣었다.문제점과 개선점은 다음과 같다.INNER JOIN을 하면 OrderItem이 없으면 결과가 나오지 않는다. LEFT OUTER JO
음식 주문은 사용자와 음식이 필요한 도메인이다.주문은 구현을 대강 해놨다. 중요한 것은 트랜잭션이다.order 저장 + 사용자 잔액 반영 + 음식 재고 감소 반영 로직이 한 번에 성공하거나 한 번에 실패해야 한다.지금까지 Repository의 코드는 변경된다고 생각하고
2가지 문제를 해결해야 한다.JDBC 코드 반복내부 구현 기술 전파딱 2개의 repository 코드를 봐도 흐름의 반복이 느껴진다.인프라 계층에서만 DriverManager, Connection 등등을 다루고 외부로 내부 구현 코드를 전파시키지 않았다.언제든 내부 구
여기서 PreparedStatement와 ps.executeUpdate() 부분의 반복을 없애볼 것이다.커넥션과 SQL을 받아서 params를 그대로 박아 넣는 것이다.이제 업데이트에 PreparedStatement를 직접 안써도 된다. try-catch도 필요없다.순
기존 코드를 내가 만든 JdbcTemplate의 queryForObject와 query로 변경해볼 것이다. 일단 MyRowMapper를 제공하자. queryForObject 생성 NPE 발생 가능성 결과물이 없을 때 return null을 하기 때문에 MyJdbc
여기에 생성 부분을 내가 만든 JdbcTemplate으로 변경해 볼 것이다.JdbcTemplate을 구현하는게 아니기 때문에 KeyHolder는 단순하게 만들고 넘어간다.헷갈리지 말자.repository이기 때문에 내부 구현 기술인 PreparedStatement가 있
단순하다.DriverManager.getConnection 부분을 뽑아낸 것이다.기존 코드에서도 Connection을 직접 생성하는 코드를 DriverManager대신 DataSource를 사용하도록 바꾸면 된다.이렇게 뽑아내면 나중에 커넥션 풀을 도입하기 쉬워진다.커
만들기 전 정리 사용자 - 음식이 사용되는 주문 도메인에서 트랜잭션이 필요해졌다. 트랜잭션을 유지하기 위해서 DB 내부 구현 코드인 Connection이 Repository를 벗어나 Application 코드에 나타났다. 이 코드는 애플리케이션에 관계없는 내부 구현
테스트 코드 먼저 기존 food order 트랜잭션을 적용한 코드에 테스트 코드를 추가해본다. 참 쉽지않다. Spring DI 주입이 없고 Mockito도 사용하지 않는 테스트라 예외를 발생시키는 클래스를 추가하고 주입했다. 그리고 MyDataSource도 프록시로
Repositroy의 커넥션을 파라미터로 넘기는 작업을 제거하다 애매한 부분이 발견됐다.OrderRepository에서 Order를 저장할 때 OrderItem까지 저장하는 부분이다.Order : 언제 주문했고, 총액 얼마인지 ...OrderItem : 어떤 Food를
MyJdbcTemplate에서 Connection을 받도록 만들어놨다.하지만 MyDataSource에서 트랜잭션 감지 기능이 추가된 DataSource가 추가되면서 Connection을 직접 주고 받을 필요없이 MyDataSource에서 커넥션을 뽑아 쓸 수 있게됐다.
오류 이런 오류가 발생했다. 문제의 코드 해당 클래스에서 오류가 발생했는데 내가 만든 MyDataSource에는 2가지 구현체가 있었기 때문이다. 해결방법 사용하고 싶은 빈이 정확하게 들어갈 수 있도록 설정해 주면된다. > #### SpringBoot 3.2.x

요구사항 나만의 @Transactional 만들기 위해선 2가지 문제를 해결해야 한다. 프록시 적용 (실제 객체 대신) 프록시 객체를 IoC 컨테이너에 등록 2가지 문제는 각각 리플렉션과 BeanPostProcessor가 해결한다. 일단 두 기술이 왜 필요한지,

요구사항 3가지 기능이 필요하다. 어노테이션이 붙어있는지 판단 트랜잭션 적용 프록시 로직 Bean 등록 전에 가로채서 프록시 등록 일단 단순하게 시작해서 점차 발전시켜본다. 직접 만들기 1. 어노테이션이 붙어있는지 판단 > Spring에서 제공하는 Annot