TIL 230922

geon·2023년 9월 22일
0

스프링 DB 1편

커넥션 풀

데이터베이스 커넥션을 얻기 위한 과정

  1. 애플리케이션 로직이 DB 드라이버를 통해 커넥션 조회
  2. DB 드라이버가 DB와 TCP/IP 커넥션 연결
  3. DB 드라이버가 DB에 ID, PW, 기타 부가정보 전달
  4. DB 내부에서 인증 및 세션 생성
  5. DB가 커넥션 생성 완료 응답 보냄
  6. DB 드라이버가 커넥션 객체 생성 후 클라이언트에 반환

매번 커넥션을 생성하면 시간과 비용이 많이 들기 때문에 커넥션을 미리 생성해 두고 재사용할 목적으로 커넥션 풀을 사용

커넥션 풀 사용 과정

애플리케이션 시작 시점에 커넥션 풀은 필요한 만큼 커넥션을 확보해서 보관함
클라이언트는 미리 생성되어 있는 커넥션을 객체 참조로 가져다 쓰고 반납함 (이때 커넥션을 종료하지 않은 상태로 반납)
커넥션 풀에 가용한 커넥션이 없으면 해당 스레드는 블록당함

DataSource

커넥션을 획득하는 방법을 추상화하는 인터페이스
애플리케이션 로직은 DataSource에만 의존하도록 작성하고, 커넥션 획득 구현체를 변경하고 싶으면 해당 구현체를 DI하면 됨 (OCP 만족)
스프링은 DriverManagerDataSource를 통해 사용할 수 있도록 DataSource를 구현한 DriverManagerDataSource라는 클래스를 제공함
DataSource를 사용하면 데이터베이스 관련해서 설정하는 부분과 커넥션을 획득하는 부분을 분리할 수 있으므로 유지보수가 용이해짐

HikariCP

스프링 부트 기본 커넥션 풀 오픈소스
애플리케이션을 빠르게 실행시키기 위해 애플리케이션 실행 시점에 별도의 스레드를 사용해서 커넥션 풀에 커넥션을 채움
타겟 커넥션을 HikariProxyConnection 객체로 래핑하고, close() 메서드를 호출했을 때 커넥션을 종료하지 않고 풀에 반납함 (해당 객체는 javax.sql.Connection 인터페이스 구현)

JdbcUtils

커넥션을 편리하게 닫을 수 있는 유틸 메서드를 제공하는 클래스
closeConnection(...), closeStatement(...), closeResultSet(...) 제공

CSAPP (p.616 ~ 632)

6.1 Storage Technologies

RAM

SRAMbistable 메모리 셀에 bit를 저장하고 각 셀은 6개의 트랜지스터를 사용한 회로로 구현
빠르고, disturbanceinsensitive하고, 밀집도가 떨어지고, 비싸고, 전력을 많이 소모하는 특성이 있음
DRAM의 메모리 셀은 콘덴서와 하나의 트랜지스터로 구성됨
전하를 10~100ms 내에 잃어버리는 특성을 가지고 있어서 주기적으로 리프레시(읽어서 다시 쓰기)가 필요함

Nonvolatile Memory

전원이 꺼져도 정보를 유지하는 메모리로, 통틀어서 ROM이라고 부름
ROM에 저장된 프로그램은 종종 펌웨어라고 칭함 (대표적으로 BIOS(Basic Input/Output System))

버스

데이터는 프로세서와 DRAM 메인 메모리 사이에서 버스를 통해 전송됨
CPU 칩은 시스템 버스를 통해 I/O 브리지와 연결, I/O 브리지메모리 버스를 통해 메인 메모리와 연결

Disk Storage

gap : 디스크 섹터는 갭(gap)에 의해 나눠지고, 갭에는 섹터를 식별하는 포매팅 비트가 저장됨
multiple zone recording : 전체 실린더 집합을 recording zone이라 불리는 서로소 부분집합으로 파티셔닝함, 이때 각 zone은 연속된 실린더로 구성됨, 같은 zone에 속한 실린더 내의 트랙은 같은 수의 섹터를 가짐, 이 섹터 수는 innermost track에 들어갈 수 있는 섹터 수로 결정됨

디스크는 섹터 크기의 블록 단위로 읽고 씀
섹터에 대한 접근 시간(access time)seek time, rotational latency, transfer time으로 구성됨
이때 transfer time은 나머지 두 항목에 비해 미미함

Logical Disk Blocks

디스크는 구조가 복잡하기 때문에 좀 더 간단한 인터페이스로서 운영체제에 섹터 크기의 논리적 블록을 제공함 (연속적인 숫자로 표현)
논리적 블록과 실제 물리적 디스크 섹터 사이의 매핑은 hardware/firmware device디스크 컨트롤러가 유지함
운영체제로부터 특정 논리적 블록의 읽기 요청이 오면 컨트롤러의 펌웨어가 테이블을 찾아보고 논리적 블록 번호를 (surface, track, sector) triple로 변환함, 다음으로 컨트롤러의 하드웨어가 이 triple을 해석해서 물리적 읽기 동작을 수행함

profile
뭐라도 적기

0개의 댓글