GitHub

https://github.com/Choidongjun0830

Spring 78

[Spring DB2] 데이터 접근 기술 - 테스트

데이터 접근 기술을 테스트할 때 어떤 식으로 할 것인지를 배우는 챕터 테스트에서 중요한 원칙 테스트는 다른 테스트와 격리해야 한다. 테스트는 반복해서 실행할 수 있어야 한다. 테스트 - 데이터베이스 연동 먼저 데이터베이스 연동을 위해 test#application.properties에 아래 코드를 작성한다. spring.profiles.active=test spring.datasource.url=jdbc:h2:tcp://localhost/~/test2 spring.datasource.username=sa spring.datasource.password= #jdbcTemplate sql log logging.level.org.springframework.jdbc=debug @SpringBootTest cl..

Spring 2024.03.17

[Spring DB2] 데이터 접근 기술 - 스프링 JdbcTemplate-2

JdbcTemplate - 이름 지정 파라미터 String sql = "update item set item_name=?,price=?, quantity=? where id=? 원래 이런 sql 코드였는데 String sql = "update item set item_name=?,quantity=?,price=? where id=? 이렇게 바뀌면 quantity와 price의 데이터 바인딩 순서가 바뀐다. 그러면 바인딩 코드도 바꿔야 하는 문제가 발생한다. 그래서 파라미터를 순서대로 바인딩하는 것이 아니라 이름을 지정해서 파라미터를 바인딩하는 'NamedParameterJdbcTemplate'라는 기능을 제공한다. /** * NamedParameterJdbcTemplate * SqlParameterSou..

Spring 2024.03.14

[Spring DB2] 데이터 접근 기술 - 스프링 JdbcTemplate-1

SQL을 직접 사용하는 경우에 스프링이 제공하는 JdbcTemplate는 JDBC를 매우 편리하게 사용할 수 있도록 도와주어 좋은 선택지다. 장점 설정의 편리함 JdbcTemplate는 'spring-jdbc' 라이브러리에 포함되어 있는데 이 라이브러리는 스프링으로 JDBC를 사용할 때 기본적으로 사용되는 라이브러리라서 별도의 설정이 필요없다. 반복 문제 해결 JdbcTemplate는 템플릿 콜백 패턴을 사용해서, JDBC를 직접 사용할 때 발생하는 반복되는 작업을 대신 처리해준다. 대신해주는 반복되는 작업들 커넥션 획득 statement를 준비하고 실행 결과를 반복하도록 루프 실행 커넥션, statement, resultset 종료 트랜잭션을 위한 커넥션 동기화 예외 발생시 스프링 예외 변환기 실 개발..

Spring 2024.03.14

[Spring DB2] 데이터 접근 기술 - 시작

제대로 강의를 듣기 전에 데이터 접근 기술을 배우기 위한 기본 소스 코드를 살펴본다. public interface ItemRepository { Item save(Item item); void update(Long itemId, ItemUpdateDto updateParam); Optional findById(Long id); List findAll(ItemSearchCond cond); //검색 조건 } DTO(data transfer object) 데이터 전송 객체 DTO는 기능은 없고 데이터를 전달만 하는 용도로 사용되는 객체를 의미 DTO에 기능이 없어야만 하는 것은 아님. 객체의 주 목적이 데이터를 전송하는 것이라면 DTO라고 할 수 있다. 객체 이름에 DTO를 꼭 붙여야 하는 것은 아니지만,..

Spring 2024.03.11

[Spring DB 1편 듣고 복습, 토이 프로젝트 수정] 6. 스프링과 문제 해결 - 예외 처리, 반복

체크 예외와 인터페이스 서비스 계층은 가급적 다른 구현 기술에 의존하지 않고 순수한 비즈니스 코드만 존재하는 것이 좋으므로, 예외에 대한 의존도 해결해야 한다. SQLException 같은 체크 예외를 런타임 예외로 전환해서 서비스 계층으로 던지면, 서비스 계층이 이 예외를 무시할 수 있어서 특정 구현 기술에 의존하는 부분을 제거하고 서비스 계층을 순수하게 유지할 수 있다. MemberRepository라는 인터페이스를 도입해서 구현 기술을 쉽게 변경할 수 있게 해야한다. MemberRepository 인터페이스를 도입하여 JdbcMemberRepository나 JpaMemberRepository라는 구현 클래스를 만들어서 사용하고, MemberService에서는 MemberRepository 인터페이스..

Spring 2024.03.09

[Spring DB 1편 듣고 복습, 토이 프로젝트 수정] 5. 자바 예외 이해

Object: 예외도 객체이므로, 예외의 최상위 부모도 Object Throwable: 최상위 예외 Error: 메모리 부족이나 시스템 오류같이 애플리케이션에서 복구 불가능한 시스템 예외. Throwable을 catch로 잡으려 하면 Error도 잡혀서 Throwable은 잡으려 하면 안됨. Exception부터 잡아야 하는 오류로 생각해야함. Exceptions 체크 예외: 애플리케이션 로직에서 사용할 수 있는 실질적인 최상위 예외. RuntimeException을 제외하고 Exceptions의 하위 예외는 모두 체크 예외임. 체크 예외는 잡아서 처리하거나, 밖으로 던지도록 선언해야함. 개발자가 실수로 예외를 누락하지 않도록 컴파일러를 통해 문제를 잡아주는 장점이 있지만, 모든 체크 예외를 처리해주어야..

Spring 2024.03.02

[Spring DB 1편 듣고 복습, 토이 프로젝트 수정] 4. 스프링과 문제 해결 - 트랜잭션 - 2

MemberRepository의 코드 수정 (V3) 파라미터로 커넥션을 넘기는 부분을 모두 지우고 private void close(Connection con, Statement stmt, ResultSet rs) { JdbcUtils.closeResultSet(rs); JdbcUtils.closeStatement(stmt); //트랜잭션 동기화를 사용하려면 DataSourceUtils를 사용해야함. DataSourceUtils.releaseConnection(con, dataSource); } private Connection getConnection() throws SQLException { Connection con = DataSourceUtils.getConnection(dataSource); l..

Spring 2024.02.29

[Spring DB 1편 듣고 복습, 토이 프로젝트 수정] 4. 스프링과 문제 해결 - 트랜잭션 - 1

문제점 애플리케이션 구조는 UI를 처리하는 @Controller의 '프레젠테이션 계층', 비즈니스 로직을 처리하는 @Service의 '서비스 계층', DB 접근을 처리하는 @Repository의 '데이터 접근 계층'의 3가지 계층으로 나뉜다. 프레젠테이션 계층 UI와 관련된 처리 담당 웹 요청과 응답 사용자 요청 검증 서비스 계층 비즈니스 로직을 담당 가급적 다른 특정 기술에 의존하지 않고, 순수 자바 코드로 작성 데이터 접근 계층 실제 데이터베이스에 접근하는 코드 JDBC, JPA, ... 이 3가지 계층 중에서 서비스 계층이 가장 중요하다. 시간이 흘려서 웹, 데이터 저장 기술이 변해도, 비즈니스 로직은 최대한 변경없이 유지되어야 한다. 이렇게 하려면 서비스 계층은 다른 기술에 종속적이지 않고 최대한..

Spring 2024.02.29

[Spring DB 1편 듣고 복습, 토이 프로젝트 수정] 3. 트랜잭션 이해

트랜잭션 개념 데이터를 데이터베이스에 저장하는 이유는 트랜잭션 때문이다. 트랜잭션은 하나의 거래를 안전하게 처리하도록 보장해준다. 계좌 이체에서 A가 B에게 2000원을 보낸다고 했을 때, 두가지 일이 수행되어야 한다. 하나는 A의 잔고가 2000원 줄어드는 것. 또 하나는 B의 잔고가 2000원이 증가하는 것이다. 하지만, 만약 A의 잔고가 2000원 줄어들고, 오류가 나서 B의 잔고가 증가하지 않는다면 심각한 문제가 발생한다. 그래서 이때는 모든 일이 성공적으로 수행되면 커밋, 하나라도 실패하면 롤백되도록 해야한다. 트랜잭션 ACID Atomicity: 원자성. 트랜잭션 내에서 실행한 작업들은 하나의 작업인 것처럼 모두 성공하거나 모두 실패해야 한다. Consistency: 일관성. 모든 트랜잭션은 ..

Spring 2024.02.27

[Spring DB 1편 듣고 복습, 토이 프로젝트 수정] 2. 커넥션 풀과 데이터소스 이해

커넥션 풀 이해 데이터베이스 커넥션을 획득할 때 애플리케이션 로직은 DB 드라이버를 통해 커넥션 조회 DB 드라이버는 DB와 TCP/IP 커넥션을 연결. 이 과정에서 TCP/IP 연결을 위한 네트워크 동작이 발생 DB 드라이버는 TCP/IP 커넥션이 연결되면 ID와 PW와 기타 부가 정보를 DB에 전달 DB는 ID와 PW를 통해 내부 인증하고, 내부에 DB 세션을 생성 DB는 커넥션 생성이 완료되었다는 응답을 전송 DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환 이렇게 하면 DB와 애플리케이션 서버는 커넥션을 생성하기 위한 리소스를 매번 사용해야하고, 복잡하고, 시간이 많이 든다. 그래서 커넥션을 미리 생성해두고, 사용하는 커넥션 풀이라는 방법을 사용한다. 애플리케이션을 시작하는 시점에 필요한 ..

Spring 2024.02.23
728x90