TIL/Spring

TIL 2024-12-10 ( 2-3주차 - 데이터베이스 다루기 )

myoma 2024. 12. 10. 21:57

1 ) 오늘 학습한 내용

  • DB(H2) 사용 방식
  • 트랜잭션
  • DB Driver 역할 및 종류
  • DB Driver 동작 방식
  • JDBC
  • MyBatis
  • ORM

 


  • DB(H2) 사용방식
    • Server Mode : 현업에서 사용하는 모드, 컴퓨터에 DB 엔진을 설치하고 엔진을 구동하는 방식
    • In - memory Mode : 애플리케이션에 DB 엔진이 내장되어 에플리케이션과 함께 실행되고 종료되는 방식
    • Embedded Mode : 인메모리와 같은 방식이지만 데이터를 로컬에 저장하기 때문에 휘발에서 자유로운 방식

 

  • 트랜잭션
    • DB의 상태를 변화시키기 위해서 수행하는 작업의 단위
    • 데이터 처리 중에 문제 발생시 그 전에 했던 변경을 아무일도 없는 것 처럼 모두 되돌림.
    • 3가지 특징
      • 원자성 (All or Nothing) : 모두 반영되던가 전혀 반영되지 않아야한다.
      • 일관성 (Keeps Data Correct) : 트랜잭션이 진행되는 동안에 DB가 변경되어도 업데이트된 DB로 트랜잭션이 진행되는 것이 아니라 처음에 트랜잭션을 진행하기위해 참조된 DB로 진행된다.
      • 독립성 (Independent) : 둘 이상의 트랜잭션이 동시에 실행되고 있을 경우 어떤 하나의 트랜잭션이라도, 다른 트랜잭션의 연산에 끼어들 수 없다.
    • 관리와 보안 (DCL)
      • BEGIN : START TRANSACTION과 동일하며 새로운 트랜잭션을 생성 및 시작하는 연산이다.
      • COMMIT : 하나의 트랜잭션이 성공적으로 끝나고, DB가 일관성있는 상태 일 때, 하나의 트랜잭션이 끝났다는 것을 알려주기 위해 사용되는 연산.
      • ROLLBACK : 하나의 트랜잭션 처리가 비정상적으로 종료되어 트랜잭션의 원자성이 깨진 경우, 처음부터 다시 시작하거나 부분적으로만 연산된 결과를 다시 취소하시킨다.

 

  • DB Driver 역할 및 종류
    • 역할 : 애플리케이션과 DB 간의 통신을 중개하는 역할
    • 종류 : 다양한 DB 시스템마다 호환되는 드라이버가 있다. 각각 제품에 맞는 특정 드라이버가 필요.

 

  • DB Driver 동작 방식
    • 연결 초기화
      • 요청수신 : 애플리케이션은 DB 작업을 시작하기 위해 드라이버에 연결 요청
      • 연결 설정: 드라이버는 DB 서버에 로그인하고 필요한 설정을 수행하여 연결을 완료.
    • SQL 전송 및 실행
      • SQL 명령 변환 : 애플리케이션에서 발송된 SQL 명령을 DB가 이해할 수 있는 형태로 변환.
      • 명령 처리 : DB 서버로 전송되어 실행, DB는 쿼리를 처리하고, 요구된 데이터를 검색하거나 변화를 준다.
    • 결과 처리
      • 결과 수신 : DB에서 작업의 결과를 보내면, 드라이버는 이 결과를 받아 애플리케이션에서 해석할 수 있는 형태로 변환.
      • 결과 전달 : 최종적으로 결과를 애플리케이션에 전달.
    • 연결 종료 
      •  연결 해제 : 작업이 완료되면, 드라이버는 DB 서버와의 연결을 종료.

 

 

  • JDBC
    • JDBC Template (RowMapper)
      • RowMapper.mapRow : RowMapper를 상속받아 mapRow() 메서드를 구현하면 JDBCTemplate에서 row 응답을 mapRow() 메서드에 rs 파라미터로 넘겨주어 객체 매핑하기 쉽도록 도와준다.

 

 

  • MyBatis
    • jdbc로 처리하는 코드의 설정 부분을 줄이고 실제 sql문에 연결함으로서 빠른 개발이 가능하게 한다.
    • 다른 방식에 비해 객체자체보다 쿼리에 집중할 수 있다.
    • 한계점
      • 결국 SQL을 직접 작성해야한다.
      • 테이블마다 비슷한 CRUD 반복, DB타입 및 테이블에 종속적이다.

 

 

  • ORM
    • QueryMapper의 DB의존성 및 중복 쿼리 문제로 ORM 탄생.
    • 문제점
      • 상속 문제
      • 관계 문제
      • 탐색 문제
      • 밀도 문제
      • 식별성 문제
    • 해결점
      • 영속성 컨텍스트(1차 캐시)를 활용한 쓰기지연
        • 영속성이락? 데이터를 생성한 프로그램이 종료되어도 사라지지 않는 데이터 특성을 말한다.
        • 영속성을 갖지 않으면 데이터는 메모리에만 존재하게 되고 프로그램이 종료되면 해당 데이터는 모두 사라진다.
      • 쓰기지연 효과
        • 여러개의 객체를 생성할 경우 모아서 한번에 쿼리를 전송한다.
        • 여러가지 동작이 많이 발생하더라고 쿼리는 트랜잭션당 최적화 되어 최소 쿼리만 날라가게 된다.