spring(21)
-
스프링 DB 테스트
2.1 여러 함수를 테스트하다보면 중복이 발생해서 오류가 뜨는 경우가 많다. BeforeEach AfterEach 로 데이터베이스에서 일일이 초기화시키며 사용할 수도 있지만 불편하다. 그래서 트랜잭션을 이용해야 한다. @Transactional 은 테스트에서 사용하면 성공적으로 메서드가 수행되도 커밋하지 않고 롤백한다. 커밋을 하고 싶으면 @Commit 을 별도로 붙여주면 된다. 임베디드 데이터베이스 (H2) 아무런 설정도 하지 않으면 자바에서 메모리 모드로 동작하는 내장 데이터베이스를 제공해준다. 내용 끝
2023.02.01 -
스프링 db2 - JdbcTemplate 사용 정보
1/31 기본 JdbcTemplate private JdbcTemplate template; //데이터 소스 주입 public JdbcTemplateItemRepositoryV1(DataSource dataSource) { this.template = new JdbcTemplate(dataSource); } * save / SQL query 문장 (PK : id , 데이터베이스에서 자동 생성) public Item save(Item item) { String sql = "insert into item(item_name, price, quantity) values (?,?,?)"; - 순서대로 파마티러를 전달 받는다. KeyHolder keyHolder = new GeneratedKeyHolder(); /..
2023.01.31 -
스프링 db1 - JdbcTemplate
1/30 * 트랜잭션 처리 코드 문제 (반복, DI/OCP 원칙 X , 복잡) - 트랜잭션을 처리하기 위한 코드를 작성하다 보니 비지니스 로직보다 트랜잭션 처리 코드가 더 길어졌다. - 커넥션을 트랜잭션 동기화 매니저 -> 쓰레드 로컬에 보관 후 로직 수행시 트랜잭션이 시작된 커넥션을 반환받아 사용하는 방법으로 변경 - 하지만 트랜잭션 처리 코드가 반복되어 TransactionTemplate이 등장. 최소화되었지만 서비스 계층에서 트랜잭션을 처리하는 기술 로직이 들어가있는 것은 동일했다. - 스프링 AOP @Transactional 등장. 해당 로직에 트랜잭션을 설정하면 트랜잭션 기능을 처리해준다. (데이터소스와 트랜잭션 매니저는 설정해주면 스프링 컨테이너가 알아서 해준다. * 예외 처리 (반복, 특정 ..
2023.01.30 -
스프링 db - 예외 처리 반복 해결
1/30 기존 코드는 모두 체크 예외(SQLException)에 종속되어 있다. -> 향후 새로운 기술로 변경할 때 코드를 전부 변경해줘야 한다. 문제 해결 방향 - 예외 누수 해결 - 반복 예외 던지기 제거 * 런타임 예외 이용하기 - RuntimeException을 상속 받은 우리만의 런타임예외 만들기 //RuntimeException 상속 public class MyDbException extends RuntimeException { public MyDbException() { } public MyDbException(String message) { super(message); } public MyDbException(String message, Throwable cause) { super(mess..
2023.01.30 -
스프링 DB1 - 스프링 트랜잭션
1/27 * 기본 애플리케이션 구조 - 프레젠테이션 계층 (UI 관련, 웹 요청과 응답) - 서비스 계층(비즈니스 로직) - 데이터 접근 계층 * 서비스 계층은 순수 자바코드로 작성되어야 한다. -> 컨트롤러나 레포지토리가 변경되도 서비스는 상관없어야한다. (유지보수) - 기존 JDBC 문제점 이와 같은 패턴을 트랜잭션 사용 로직의 개수에 따라서 반복해야 한다. throws SQLException 은 JDBC 전용 예외이다. 따라서 JPA 등으로 변경시 예외 코드도 모두 변경해줘야 한다. * 스프링의 해결 * 레포지토리 부분 수정 JdbcUtils.closeConnection(con); DataSourceUtils.releaseConnection(con, dataSource); - 트랜잭션 사용시 Dat..
2023.01.27 -
스프링 DB1 - JDBC 구조(DataSource, 커넥션풀, 트랜잭션 등)
1/25 * jdbc - jdbc 표준 인터페이스만 알면 모든 데이터베이스에 동일하게 적용이 가능하다. - 하지만 sql은 각각 데이터베이스에 맞게 바꾸어야 한다. * SQL Mapper ( Jdbc Template, MyBatis ) - sql응답 결과를 객체로 편리하게 변환해준다. - jdbc 반복 코드를 제거해준다. * JPA( 하이버네이트 ,이클립스링크 ) ====================================================================================== 1/26 1. 애플리케이션 로직은 DB드라이버를 통해 커넥션을 조회한다. 2. DB드라이버는 DB와 *TCP/IP* 커넥션을 연결한다. 이 과정에서 3 way handshake와 같은 TCP..
2023.01.26