기존 @Transactional 애노테이션을 이용한 코드에서도 서비스 계층임에도 리포지토리에서 던지는 체크 예외인 SQLException을 처리하지 못해 throws를 사용해 던져주었다. 이는 서비스가 SQLException에 의존하고 있는 것이다. 이러한 문제를 어떻게 해결할까? 이전 포스트에서 예외에 대해 알아보았다. 체크 예외를 언체크 예외로...
스프링 예외 처리 (서비스 코드 예외 포함 문제 해결)
예외 이해하기
스프링이 제공하는 예외 추상화를 이해하기 위해 예외에 대해 실무에서의 활용 등과 연관지어 정리해본다. 예외 계층 Object: 예외도 하나의 객체이기 때문에 Object가 최상위 부모이다. Throwable: 최상위 예외이다. 하위에 Exception과 Error가 있다. Error: 메모리 부족이나 심각한 시스템 오류와 같이 애플...
자바 예외
자바의 예외에 대해 정리해보려 한다. 예외(Exception)의 종류 예외는 크게 에러와 예외로 나눌 수 있다. 에러(Error) 예외(Exception) 체크 예외(Check Exception) 언체크 예외(UnCheck Exception) 에러(Error) java.lang.Err...
스프링과 트랜잭션, @Transactional
이전 포스트에서 기존 스프링없이 트랜잭션을 사용하는 코드에 3가지 문제가 있다는 것을 보았다. 트랜잭션 문제 예외 누수 문제 JDBC 반복 문제 스프링 이전 트랜잭션 사용의 문제점들 위 3가지 문제들을 자세히 알아보자. 트랜잭션 문제 JDBC 구현 기술이 서비스 계층에 누수되는 문제 트랜잭션을 적용하기 ...
equals, hashCode, @Data
equals and hashcode를 클래스에 정의해두면 테스트 코드를 작성할 때 객체의 값이 같으면 isEqualTo를 적용시킬 수 있었다. @Data 애노테이션에 포함된다. 어떻게 동작하는지 무슨 원리인지 잘 모르고 사용했기 때문에 정리해보려고 한다. equals, hashcode? equals와 hashcode는 모두 Java 객체의 부모 ...
IntelliJ 단축키 정리
인텔리제이 단축키 변경 방법 우선 내가 몇몇 단축키를 바꾼 것이 있기 때문에 단축키를 바꾸는 법을 알아본다. file -> settings -> KeyMap -> 우측 상단 검색창에 원하는 명령의 단축키를 검색해 찾아 변경하면 된다. 인텔리제이 단축키 정리 코드 Edit Main 메서드 생성 및 실행 메인 메...
트랜잭션 (애플리케이션 적용)
트랜잭션 자바 코드 적용 기존 jdbc 학습 프로젝트에 코드를 추가해 계좌이체 비즈니스 로직을 구현해본다. 우선 트랜잭션 없이 단순하게 계좌이체 비즈니스 로직을 구현해본다. 트랜잭션 X MemberService @RequiredArgsConstructor public class MemberServiceV1 { privat...
트랜잭션과 락 (개념)
데이터를 저장할 때 단순하게 파일에 저장해도 될 것이다. 하지만 우리는 데이터베이스에 저장한다. 왜 일까? 여러 이유가 있지만 가장 대표적인 이유로 데이터베이스는 트랜잭션이라는 개념을 지원하기 때문이다. 트랜잭션 개념 트랜잭션 포스트 데이터베이스에 트랜잭션은 하나의 작업을 안전하게 처리하도록 보장하는 것을 뜻한다. 하지만 안전하게 처리하려면 고...
커넥션 풀과 DataSource
데이터베이스 커넥션을 획득할 때 복잡한 과정을 거친다. 애플리케이션 로직이 DB 드라이버를 통해 커넥션을 조회한다. DB 드라이버는 DB와 TCP/IP 커넥션을 연결한다. 이 과정에서 3 way handshake 같은 TCP/IP 연결을 위한 네트워크 동작이 발생한다. DB 드라이버는 TCP/IP 연결을 완료하면 ID, PW, 기타 ...
JDBC 이해 (+ 코드)
이제 코드로 JDBC를 어떻게 사용하는지 알아본다. H2 DB와 연결 public abstract class ConnectionConst { public static final String URL = "jdbc:h2:tcp://localhost/~/test2"; public static final String USERNAME = "sa"...