백엔드 데브코스 TIL 17-19일차

Inchang Choi·2022년 4월 16일
0

백엔드 데브코스 TIL

목록 보기
13/30
post-thumbnail

학습목표

강의를 들으며 내가 알고 있는 내용을 점검하고,

새로 배운 내용을 정리하며,

궁금한 내용을 알아가며 학습해나가는 것을 목표로 합니다.


JDBC

JDBC란?

JDBC는 자바 어플리케이션과 관계형 데이터베이스를 연결해주는 커넥터입니다.

JDBC Architecture Model

(https://www.infoworld.com/article/3388036/what-is-jdbc-introduction-to-java-database-connectivity.html)

JDBC Driver Model

Drive Manger가 각각의 데이터베이스에 맞는 드라이버를 호출하여 데이터베이스와 통신을 수행합니다.

JDBC Flow

  • DriverManager 를 통해서 커넥션 객체를 받아옵니다.
  • Connection을 통해서 Statement를 가져옵니다.
  • Statement를 통해서 쿼리를 실행해서 ResultSet을 가져오거나 update를 실행합니다.
  • 데이터베이스 커넥션을 종료합니다.

SQL Injection

' OR '1'='1

createStatement()가 아닌 prepareStatement()를 사용하여 SQL Injection을 예방할 수 있습니다.

Spring JDBC DataSource

DataBase Connection Pool (DBCP)

매번 커넥션을 생성하고 닫으면 굉장히 많은 리소스가 소비됩니다.

커넥션을 미리 만들어두어 풀에 저장해놓고 필요할 때마다 가져와서 사용하고 반환합니다.

이 과정에서 데이터 소스가 커넥션 풀을 관리하며,
풀에서 커넥션을 가져올 때도 데이터 소스를 통해서 가져옵니다.

즉, 아래와 같은 순서로 커넥션을 관리 합니다.

  1. 풀에서 커넥션을 가져옵니다.
  2. 커넥션을 사용한다.
  3. 커넥션을 풀에 반환한다.

HikariCP

드라이버 매니저 중 하나인 HikariCP는 JDBC 커넥션 풀 중 하나입니다.

JdbcTemplate

스프링은 반복되는 부분과 변경이 되는 부분을 TemplateCallBack Pattern을 만들어 JdbcTemplate을 제공합니다.

DB 연동 통합테스트 코드

통합 테스트를 진행하려면 데이터베이스가 필요합니다.

그러나 외부 환경의 문제로 인해 데이터베이스 서버와 연결이 불가능 해도 테스트가 필요한 경우가 있습니다.

스프링에서는 Embedded Database를 제공하여 이 문제를 해결하게 해줍니다.

https://github.com/wix/wix-embedded-mysql

NamedParameterJdbcTemplate

이름 기반의 파라미터를 설정하게 해주는 JDBC Template입니다.

DataAccessException

JdbcTemplate은 SqlException을 런타임 예외인 DataAccessException으로 랩핑해줍니다.

이를 통하여 SQLException에 대해 애플리케이션 레벨에서 신경을 쓰지 않도록 해주고,

SQLException에 담긴 다루기 힘든 상세한 예외 정보를 의미 있는 예외로 변환 시켜 줍니다.

트랜잭션 처리

트랜잭션이란?

트랜잭션은 DBMS 또는 유사한 시스템에서 상호작용의 단위 입니다.

예를들어 은행의 이체 시스템을 생각해보면,

계좌를 검색하고 계좌에서 돈을 인출하고 이체할 계좌에 돈을 입금하는 프로세스가 있습니다.

그러나 인출은 성공했으나 입금에 실패한다면 계좌에서 돈은 빠져나갔으나 이체할 계좌에는 입금이 안되는 문제가 발생할 수도 있습니다.

이러한 문제를 차단하기 위하여 논리적으로 하나의 작업을 수행하는 쿼리 들을 묶어 트랜잭션으로 관리합니다.

트랜잭션을 통하여 DBMS는 각각의 트랜잭션에 대해 ACID를 보장합니다.

profile
always positive

0개의 댓글