jdbc 9

체크 예외 활용

체크 예외 vs 언체크 예외 언제 사용하면 좋을까? 기본 원칙은 다음 2가지이다. 기본적으로 언체크(런타임) 예외를 사용 체크 예외는 비즈니스 로직상 의도적으로 던지는 예외에만 사용 체크 예외 예) => 계좌 이체 실패 예외 / 결제시 포인트 부족 예외 / 로그인 ID, PW 불일치 예외 100% 체크 예외로 만들어야 하는 것은 아니다. 다만 계좌 이체 실패처럼 매우 심각한 문제는 개발자가 실수로 예외를 놓치면 안된다고 판단할 수 있다. 이 경우 체크 예외로 만들어 두면 컴파일러를 통해 놓친 예외를 인지할 수 있다. 체크 예외 문제점 체크 예외는 컴파일러가 예외 누락을 체크해주기 때문에 개발자가 실수로 예외를 놓치는 것을 막아준다. 그래서 항상 명시적으로 예외를 잡아서 처리하거나, 처리할 수 없을 때는 ..

Spring/SpringDB 2022.06.22

트랜잭션 적용

서비스를 하나 만들어보자. 계좌이체 - 내 돈을 빼서 다른곳에 넣는 로직을 작성해본다. service 패키지 안에서 MembmerServiceV1 클래스를 만들고 작성해준다. package hello.jdbc.service; import hello.jdbc.domain.Member; import hello.jdbc.repository.MemberRepositoryV1; import lombok.RequiredArgsConstructor; import java.sql.SQLException; @RequiredArgsConstructor public class MemberServiceV1 { private final MemberRepositoryV1 memberRepository; public void ac..

Spring/SpringDB 2022.06.15

트랜잭션 - DB 예제 - 계좌이체

계좌이체 예제를 통해서 트랜잭션이 어떻게 사용되는지 살펴보자. 계좌이체 정상 계좌이체 문자 상황 - 커밋 계좌이체 문제 상황 - 롤백 기본 데이터 입력 set autocommit true; delete from member; insert into member(member_id, money) values ('memberA',10000); insert into member(member_id, money) values ('memberB',10000); 기본 데이터 준비 memberA 10000원 memberB 10000원 계좌이체 실행 memberA 의 돈을 memberB 에게 2000원 계좌이체하는 트랜잭션을 실행해보자. 다음과 같은 2번의 update 쿼리가 수행되어야 한다. set autocommit..

Spring/SpringDB 2022.06.15

트랜잭션 - DB 예제 - 트랜잭션 실습

h2 DB console 창 2개 띄워놓는다. 기본 데이터는 아래와 같고 데이터 초기화 SQL을 처음 h2 DB에 실행해준다. //데이터 초기화 set autocommit true; delete from member; insert into member(member_id, money) values ('oldId',10000); 데이터를 초기화하고, 세션1, 세션2에서 아래 쿼리를 실행해서 결과를 확인해보자. select * from member; 신규 데이터 추가 - 커밋 전 세션 1에서 신규 데이터를 추가해보자 - 커밋은 하지 않는다. 신규 데이터 추가 SQL //트랜잭션 시작 set autocommit false; //수동 커밋 모드 insert into member(member_id, money) v..

Spring/SpringDB 2022.06.15

트랜잭션 - DB 예제 2 - 자동 커밋 / 수동 커밋

자동 커밋 트랜잭션을 사용하려면 먼저 자동 커밋과 수동 커밋을 이해해야 한다. 커밋으로 설정하면 쿼리 실행 직후에 자동으로 커밋을 호출 / 커밋이나 롤백을 직접 호출하지 않아도 되는 편리함이 있다. 쿼리를 하나하나 실행할 때 마다 자동으로 커밋이 되어서 원하는 트랜잭션 기능을 제대로 사용할 수 없다. set autocommit true; //자동 커밋 모드 설정 insert into member(member_id, money) values ('data1',10000); //자동 커밋 insert into member(member_id, money) values ('data2',10000); //자동 커밋 => commit, rollback을 직접 호출하면서 트랜잭션 기능을 제대로 수행하려면 자동 커밋..

Spring/SpringDB 2022.06.15

DataSource 이해

커넥션을 얻는 방법은 앞서 학습한 JDBC DriverManager 를 직접 사용하거나, 커넥션 풀을 사용하는 등 다양한 방법이 존재한다. 커넥션을 획득하는 다양한 방법 DriverManager를 통해 커넥션 획득 우리가 앞서 JDBC로 개발한 애플리케이션 처럼 DriverManager 를 통해서 커넥션을 획득하다가, 커넥션 풀을 사용하는 방법으로 변경하려면 어떻게 해야할까? DriverManager를 통해 커넥션 획득하다가 커넥션 풀로 변경시 문제 예를 들어서 애플리케이션 로직에서 DriverManager 를 사용해서 커넥션을 획득하다가 HikariCP 같은커넥션 풀을 사용하도록 변경하면 커넥션을 획득하는 애플리케이션 코드도 함께 변경해야 한다. 의존관계가 DriverManager 에서 HikariCP..

Spring/SpringDB 2022.06.14

JDBC 개발 - 등록

JDBC를 사용해서 회원 Member 데이터를 데이터베이스에 관리하는 기능을 개발해보자 H2 데이터베이스 설정 마지막에 있는 테이블과 샘플 데이터 만들기를 통해 member 테이블을 미리 만들어 둔다. schema.sql drop table member if exists cascade; create table member ( member_id varchar(10), money integer not null default 0, primary key (member_id) ); domain 패키지를 만들고 Member class를 만들어준다. package hello.jdbc.domain; import lombok.Data; @Data public class Member { private String memb..

Spring/SpringDB 2022.06.14

스프링 데이터 JPA 구현체 분석

스프링 데이터 JPA가 제공해는 공통 인터페이스의 구현체가 존재한다. 아래의 경로로 들어가보자 아래의 SimpleJpaRepository가 JPA의 구현체이다. 그리고 SimpleJpaRepository는 Repository가 이미 걸려있는데 두가지 의미가 있다. Spring Bean의 컴포넌트 스캔 대상이 되는 것 => 스프링이 읽어들여서 컨테이너에 올리게 되는 것이고 두번째는 JPA나 JDBC 둘 다 exception이 틀리기 때문에 이게 터지면 영속성 계층에 있는 것들을 Spring에서 쓸 수 있는 예외들로 다 바꿔준다. 서비스 계층이나 컨트롤러 계층에 있는 것들을 넘길 때 JPA exception이나 JDBC exception이 올라가는 것이 아니고 Spring Framework이 제공하는 exc..