이 글은 인프런 김영한님의 강의를 복습하며 작성한 글입니다. DB 연동 데이터 접근 기술은 DB에 접근해서 데이터를 잘 저장하고 조회할 수 있는지 확인하는 것이 필요하다. ItemRepositoryTest를 통해서 테스트를 진행한다. 어플리케이션용 application.properties와 테스트용 application.properties에는 각각 Profile에 대한 값이 설정되어있다. 각각의 Profile에 따라 다르게 동작할 수 있다. 그리고 DB 설정 정보를 어떻게 하느냐에 따라 다르게 동작할 수 있다. @SpringBootTest @SpringBootTest어노테이션이 존재하는 클래스는 테스트를 실행하면 @SpringBootApplication 어노테이션을 검색한다. @SpringBootAppl..
이 글은 인프런 김영한님의 강의를 복습하며 작성한 글입니다 JdbcTemplate 소개와 설정 SQL을 직접 사용하는 경우, 스프링이 제공하는 JdbcTemplate을 사용하는 것은 좋은 방법이다. JdbcTemplate은 JDBC를 매우 편리하게 사용할 수 있도록 도와준다. JDBC 장점 설정이 간편함 별도의 복잡한 설정 없이 바로 사용할 수 있다. (아래 설정 참고) 반복문제 해결 JdbcTemplate은 템플릿 콜백 패턴을 사용해서, JDBC를 직접 사용할 때 발생하는 대부분의 반복 작업을 처리해준다. 개발자는 SQL을 작성하고, 전달할 파라미터 정의 + 응답 값 매핑만 하면 됨. 아래 반복 작업을 대신해줌. 커넥션 획득 statement를 준비하고 실행 결과를 반복하도록 루프를 실행 Conneti..
이 글은 자바 ORM 표준 JPA 프로그래밍을 학습하며 필요한 내용을 작성한 글입니다. @Id 해당 어노테이션을 특정 필드 위에 사용하면 이 필드는 앞으로 DB에서 PK로 사용하겠다는 것을 의미한다. DB 또한 그렇게 인식을 한다. 이 때, @Id만 입력이 된다면 필드에는 개발자가 값을 직접 채번해야한다. @GeneratedValue @Id + @GenerateValue를 사용할 경우, PK를 개발자가 채번하는 것이 아니라 자동으로 DB에서 채번해주는 것을 의미한다. 따라서 채번의 부담성을 줄이기 위해 @GeneratedValue를 사용하는 것이 권장된다. @GeneratedValue 전략 public enum GenerationType { AUTO IDENTITY, SEQUENCE, TABLE, } G..
이 글은 인프런 김영한님의 강의를 복습하며 작성한 글입니다. JDBC 기술은 반복을 부른다. 앞서 여러 추상화 과정들을 통해 코드를 개선해나가는 작업을 해왔다. 그렇지만 아직까지 개선의 여지가 있는 부분이 남아있다. 아래 코드를 한번 살펴보자. @Override public Member findById(String memberId){ String sql = "select * from member where member_id = ?"; PreparedStatement pstmt = null; ResultSet rs = null; try { Connection conn = getConnection(); pstmt = conn.prepareStatement(sql); pstmt.setString(1, memb..
이 글은 인프런 김영한님의 강의를 복습하며 작성한 글입니다. 직접 만든 데이터 계층 예외의 문제점 앞선 포스팅에서 DB에서 발생하는 예외들 중 원하는 예외만 서비스 계층에서 잡아서 처리할 수 있도록 사용자 정의 예외를 만들었다. 그렇지만 이 때 한 가지 문제점이 발생한다. 처리하고 싶은 DB 예외를 만들기 위해서는 각 DB에서 발생하는 예외들을 예외 변환 처리를 해줘야한다. 데이터 접근 계층이 수백개가 되면 이것은 아주 큰 문제로 다가온다. 따라서 이 부분의 해결이 필요해진다. 스프링 데이터 접근 예외 계층 스프링은 이미 데이터 접근 예외 계층을 추상화해서 제공해준다. 따라서 개발자는 해당 예외 계층을 사용하기만 하면 된다. 스프링은 데이터 접근 계층에 대한 수많은 예외를 정리해서 일관된 예외 계층을 제..