728x90
반응형
데이터베이스 커넥션
- 일반적으로 데이터베이스 사용 시 커넥션을 매번 획득
- 데이터베이스 커넥션 획득 과정
- 애플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회
- DB 드라이버는 DB와 TCP/IP 커넥션을 연결 -> 3 way handshake 같은 TCP/IP 연결을 위한 네트워크 동작 발생
- 커넥션이 연결되면 ID, PW와 기타 부가정보를 DB에 전달
- DB는 ID, PW를 통해 내부 인증을 완료하고, 내부에 DB 세션을 생성
- DB는 커넥션 생성이 완료되었다는 응답을 보냄
- DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환
- 커넥션을 만드는 과정은 복잡하고 시간을 많이 소모
- 애플리케이션에서도 TCP/IP 연결을 위한 리소스 소모
- 많은 시간 소모 -> 좋지 않은 사용자 경험
커넥션 풀
- 복잡하고 시간을 많이 소모하는 커넥션을 미리 생성해 두고 사용
- 과정
- 애플리케이션 시작 시 필요한 만큼 커넥션을 미리 확보하여 풀에 보관
- 커넥션 풀에 들어있는 커넥션은 TCP/IP로 연결되어 있는 상태
- 커넥션 사용 시 풀에 이미 생성되어있는 커넥션을 객체 참조로 사용
- 커넥션을 사용한 후 종료시키지 않고 커넥션 풀에 다시 반납
- 서버당 커넥션 풀의 개수를 제한하여 관리 -> 데이터베이스 서버 부하 감소
- 최소 및 최대 풀 크기 지정 가능
- 일정 시간 동안 사용되지 않은 커넥션 유효성 주기적 검사
- 커넥션 생성 및 종료 오버헤드 감소로 응답 시간 개선
- 보안
- 사용자 인증 정보 암호화 저장
- 커넥션 사용 후 즉시 반납하여 불필요한 데이터베이스 접근 방지
DataSource
- 커넥션 획득하는 방법을 추상화한 인터페이스
- DriverManager를 통해 커넥션을 획득하다 커넥션 풀로 변경 시 코드 변경이 필요
- 사용자는 각 커넥션의 직접적인 코드에 의존하는 것이 아닌 DataSource 인터페이스에만 의존하여 커넥션을 획득
- 커넥션 풀의 구현 기술을 변경하고 싶다면 구현체만 변경하여 사용
- 설정과 사용을 분리
- 설정: URL, USERNAME과 같이 필요한 속성들을 사용해 DataSource를 만드는 과정
- 사용: 만들어진 DataSource의 getConnection()만 호출하여 사용 -> 설정이 어떤지 알 필요 없음
- DataSource 보안
- 애플리케이션 서버 레벨에서의 보안 설정 적용
- 최소 권한 원칙에 따른 데이터베이스 접근 권한 설정
스프링 DB 1편 - 데이터 접근 핵심 원리 강의 | 김영한 - 인프런 (inflearn.com) 강의 내용 참고
728x90
'백엔드 > Spring' 카테고리의 다른 글
[Spring] 예외 처리 (1) | 2024.08.30 |
---|---|
[Spring] 트랜잭션 Transaction (4) | 2024.08.28 |
[Spring] JDBC (0) | 2024.08.26 |
[Spring] 파일 업로드 (0) | 2024.08.25 |
[Spring] 스프링 타입 컨버터 Spring TypeConverter (0) | 2024.08.24 |