BackEnd/Spring DB
-
데이터 접근 기술- 스프링 JdbcTemplateBackEnd/Spring DB 2023. 2. 1. 06:56
JdbcTemplate 장단점 장점 spring-jdbc 라이브러리(스프링으로 jdbc를 사용할 때 기본으로 사용되는 라이브러리)에 포함되어 있어 별도의 복잡한 설정 없이 사용할 수 있는 설정의 편리함을 제공합니다. 템플릿 콜백 패턴을 사용해서 JDBC를 직접 사용할 때 발생하는 대부분의 반복 작업(커넥션 획득, statement를 준비하고 실행, 결과를 반복하도록 루프 실행, 트랜잭션 다루기 위한 커넥션 동기화, 예외 발생 시 스프링 예외 변환기 실행)을 대신 처리해줍니다. 단점 동적 SQL을 다루기가 어렵습니다. JdbcTemplate 주요 기능 JdbcTemplate: 순서 기반 파라미터 바인딩을 지원합니다. NamedParameterJdbcTemplate: 이름 기반 파라미터 바인딩을 지원합니다...
-
데이터 접근 기술- MemoryBackEnd/Spring DB 2023. 1. 31. 21:00
Overview 이번 포스팅부터는 실무에서 주로 사용하는 다양한 데이터 접근 기술들에 대해 알아보겠습니다. 단순히 메모리에 상품 데이터를 저장하는 프로젝트를 기준으로 실제 데이터 접근 기술들을 하나씩 적용해보고, 각각의 데이터 접근 기술들에 대한 사용법 및 장단점에 대해 알아보겠습니다. 적용 데이터 접근 기술 JdbcTemplate MyBatis JPA, Hibernate 스프링 데이터 JPA Querydsl 프로젝트 설명 전체 소스코드는 github repository를 참고하시면 됩니다. 도메인은 Item을 사용하며 이름, 가격, 수량을 속성으로 가지고 있습니다. 메모리 구현체에서 향후 다양한 데이터 접근 기술 구현체로 손쉽게 변경하기 위해 리포지토리에 인터페이스를 도입했습니다. Memory 다음 코..
-
JdbcTemplateBackEnd/Spring DB 2023. 1. 28. 10:00
지금까지 서비스 계층의 순수함을 유지하는 방법에 대해 알아보았습니다. 이번 포스팅에서는 리포지토리에서 JDBC를 사용하기 때문에 발생하는 반복문제를 해결합니다. JDBC 반복 문제 커넥션 조회, 커넥션 동기화 PreparedStatement 생성 및 파라미터 바인딩 쿼리 실행 결과 바인딩 예외 발생 시 스프링 예외 변환기 실행 리소스 종료 리포지토리의 각각의 메서드를 살펴보면 상당히 많은 부분이 반복됩니다. 이런 반복을 효과적으로 처리하는 방법이 템플릿 콜백 패턴입니다. 스프링은 JDBC의 반복 문제를 해결하기 위해 JdbcTemplate이라는 템플릿을 제공합니다. JdbcTemplate은 JDBC로 개발할 때 발생하는 반복을 대부분 해결해줍니다. 그 뿐만 아니라 지금까지 학습했던 트랜잭션을 위한 커넥션..
-
예외(Exception) (2)BackEnd/Spring DB 2023. 1. 28. 09:00
서비스 계층은 가급적 특정 구현 기술에 의존하지 않고, 순수하게 유지하는 것이 좋습니다. 트랜잭션 부분에서 대부분 해결하였지만 예외에 대한 의존 문제가 남았습니다. java.sql.SQLException이라는 JDBC 기술에 의존한다는 점입니다. 이 문제를 해결하기 위해서는 리포지토리가 던지는 SQLException 체크 예외를 런타임 예외로 전환해서 서비스 계층에 던지면 됩니다. 런타임 예외는 서비스 계층이 무시할 수 있기 때문입니다. 인터페이스 도입 인터페이스를 도입하면 MemberService는 MemberRepository 인터페이스에만 의존하면 됩니다. 구현 기술 변경 시 DI를 사용해 MemberService 코드의 변경 없이 구현 기술을 변경할 수 있습니다. package hello.jdbc..
-
예외(Exception) (1)BackEnd/Spring DB 2023. 1. 28. 07:00
예외 계층 Throwable: 최상위 예외이다. 하위에 Exception과 Error가 있다. Error(언체크 예외): 메모리 부족이나 심각한 시스템 오류와 같이 애플리케이션에서 복구 불가능한 시스템 예외이다. 개발자는 이 예외를 잡으려고 해서는 안된다. 상위 예외를 catch로 잡으면 그 하위 예외까지 잡기 때문에 Throwable 예외도 잡으면 안된다. Exception(체크 예외): Exception과 그 하위 예외는 모두 컴파일러가 체크하는 체크 예외이다. (단, RuntimeException은 예외) RuntimeException(언체크 예외, 런타임 예외): RuntimeException과 그 하위 예외는 모두 컴파일러가 체크하지 않는 언체크 예외이다. 예외 기본 규칙 예외는 잡아서 처리하거..
-
트랜잭션(Transaction)BackEnd/Spring DB 2023. 1. 27. 07:00
트랜잭션 ACID 원자성(Atomicity): 트랜잭션 내에서 실행한 작업들은 마치 하나의 작업인 것처럼 모두 성공하거나 실패해야 한다. 일관성(Consistency): 모든 트랜잭션은 일관성 있는 데이터베이스 상태를 유지해야 한다. 격리성(Isolation): 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리한다. 격리성은 동시성과 관련된 성능 이슈로 인해 트랜잭션 격리 수준(Isolation level)을 선택할 수 있다. 지속성(Durability): 트랜잭션을 성공적으로 끝내면 그 결과가 항상 기록되어야 한다. 트랜잭션 격리 수준(Isolation level) READ UNCOMMITED(커밋되지 않은 읽기) READ COMMITTED(커밋된 읽기) REPEATABLE READ(반복..
-
커넥션 풀(Connection Pool) & 데이터 소스(DataSource)BackEnd/Spring DB 2023. 1. 26. 05:00
데이터베이스 커넥션 획득 과정 애플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회한다. DB 드라이버는 DB와 TCP/IP 커넥션을 연결한다. 이 과정에서 3 way handshake 같은 TCP/IP 연결을 위한 네트워크 동작이 발생한다. DB 드라이버는 TCP/IP 커넥션이 연결되면 ID, PW와 기타 부가정보를 DB에 전달한다. DB는 ID, PW를 통해 내부 인증을 완료하고, 내부에 DB 세션을 생성한다. DB는 커넥션 생성이 완료되었다는 응답을 보낸다. DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환한다. Connection Pool 커넥션을 새로 만드는 것은 과정도 복잡하고 시간도 많이 소모되는 일입니다. 이런 문제를 해결하기 위해 커넥션 풀(커넥션을 관리하는 풀)을 사용합니다. ..
-
JDBCBackEnd/Spring DB 2023. 1. 25. 22:00
Overview 해당 카테고리에 있는 내용은 인프런-스프링 DB 1편, 스프링 DB 2편 강의를 듣고 정리한 글입니다. JDBC 등장 이유 클라이언트는 애플리케이션 서버를 통해 데이터베이스에 접근하며, 커넥션을 연결하고 SQL을 전달하여 결과를 응답받습니다. 문제는 MySQL, PostgreSQL, MariaDB, Microsoft SQL Server, Oracle Database 등 각각의 데이터베이스마다 커넥션을 연결하는 방법, SQL을 전달하는 방법, 그리고 결과를 응답 받는 방법이 모두 다르다는 점입니다. 데이터베이스 변경 시 개발자는 각각의 데이터베이스마다 커넥션 연결, SQL 전달, 그리고 결과를 응답 받는 방법을 새로 학습해야 하며, 애플리케이션 서버에 개발된 데이터베이스 사용 코드도 함께 ..