티스토리 뷰
(용어정리) 쿼리, DBMS, Connection Pool, Connection Leak, 스키마
junojuno 2021. 11. 25. 19:321. 쿼리란?
쿼리 대충 무슨 뜻인지 감은 오지만 명확하게 설명할 수 없는 이 느낌을 해소하고자 찾아보았다.
쿼리란 데이터베이스에 정보를 요청하는 것.
데이터베이스에 정보를 요청하기 위해서 몇가지 방법이 있지만, 그 중 한가지 방법이 쿼리 언어를 사용하는 것이다.
그래서 SQL(Structured Query Language)을 알아야 하는 것이다.
2. DBMS란?
DBMS(DataBase Management System)은 데이터베이스를 조작하는 별도의 소프트웨어로 DBMS를 통해 데이터 베이스를 관리하여 응용프로그램들이 데이터 베이스를 공유하고, 사용할 수 있는 환경을 제공한다.
구축하는 틀을 제공하고, 효율적으로 데이터를 검색하고 저장하는 기능을 제공한다.
또한 응용프로그램들이 데이터베이스에 접근할 수 있는 인터페이스를 제공하고, 장애에 대한 복구 기능, 사용자 권한에 따른 보안성 유지 등의 기능을 제공한다.
-> 한마디로 이름 그대로 데이터베이스를 관리할 수 있는 별도의 소프트 웨어이다.
MySQL, Oracle과 같은 것이 엄밀히 말하면 데이터베이스를 관리하는 소프트웨어 즉 DBMS이다.
3. Connection Pool이란?
커넥션 풀은 매번 새로운 접속을 통해서 쿼리를 통해 DB에서 정보를 가지고 온다. 이에 컴퓨터에게 큰 무리를 주기 때문에 해당 서버의 CPU점유율을 높이는 직접적인 원인이 될 수 있다. 그래서 DB를 제어하기 전에 사용자 지정 갯수 만큼 커넥션을 만들어 놓고 pool에 넣어 놓았다가 필요할 때마다 가져다 쓰고 다쓰면 다시 pool에 넣어놓고 사용하는 방식으로 시스템을 효율적으로 운영한다. 풀에 저장된 커넥션이 부족하면 WAS(톰캣과 같은 서버)는 커넥션을 더 만든다.
DB connection pool이란
보통의 사람들이 DB에 연결하고 결과를 가져온 뒤에 연결을 끊어버린다.
DB에 연결하는 과정은 시간이 많이 소요되며 값이 비싼 연산 중 하나이다.
퍼포먼스를 개선하고, 이러한 문제점을 해결하기 위해서 DB connection pool이라는 것을 사용하게 되는데,
DB connection pool이란 DB connection pool manager가 일상의 커넥션을 연결하고 있다가, 요청이 들어오면 커넥션을 할당 해주고 없으면 기다리게 한다. 요청한 클라이언트는 커넥션을 다 쓰면 다시 반납하는 구조로 이루어져 있다.
따라서 속도면이나 퍼포먼스 부분에서 조금은 향상을 바랄 수 있다.
(connection 비싸니깐 매번 만드는 것이 아닌 pool을 만들어서 고정된 수의 connection을 caching 해서 재사용하는것)
JDBC의 경우, 일정량의 데이터베이스 연결 객체인 Connection 객체를 미리 만들어서 pool에 저장해 둔다.
프로그램에서 요청이 오면 Connection 객체를 빌려주고, 해당 객체의 임무가 완료 되었으면 다시 반납 받아서 pool에 저장하는 프로그래밍 기법이다.
예를들어, 게사판 웹 어플리케이션 경우, 유저가 글을 작성하는 과정은 다음과 같다.
1. 클라이언트 서버로 게시글 데이터 전달.
2. 비즈니스 로직 처리
3. DB와 커넥션 맺은 후 DB에 게시글 데이터 저장.
4. DB와 커넥션 끊고 비즈니스 로직 처리
5. 클라이 언트에 응답.
장점 : 위 서비스가 커져 유저가 한명이 아니라 100명의 유저가 동시 접속을 한다고 가정 할 때,
매번 DB와 커넥션을 맺고 끊는 과정이 필요 한데 커넥션 풀을 사용하게 되면, 미리 연결을 맺고 있는 커넥션 객체들이 있기 때문에 커넥션을 하나하나 맺고 끊는 과정이 불필요하다. 따라서 성능 향상을 기대할 수 있는 것이다.
단점 : 그러면 유저가 많아지면 커넥션이 모자랄 경우, 원활한 서비스가 이루어 지지 않는데, 커넥션이 반납될 때 까지 기다려야 하는 문제를 해결 하는 방법이 무작정 커넥션을 막 늘려 유저수에 따라 커넥션을 조절해야 하느냐?
유저수에 따라 커넥션을 조절해야 하는것은 맞지만 무작정 많이 늘리면 커넥션 객체가 많은 메모리를 차지 하게 되어 성능이 저하 될 수 있다.
좀더 많이 알고 싶을 경우, 아래 사이트 참고
https://stackoverflow.com/questions/4041114/what-is-database-pooling
4. 그럼 Connection Leak이란 무엇일까?
데이터베이스 접근을 위해서 Connection Pool 자원을 사용하는데, 이를 반납하지 않아, 사용가능한 Connection Pool이 지속적으로 줄어드는 현상을 말한다.
-> 위 그림에서 커넥션 객체를 반납을 하지 않아 발생하는 것!
5. 스키마란?
스키마는 데이터베이스에서 데이터의 구조, 표현방법, 관계를 형식 언어(SQL)로 정의한 구조이다.
스키마는 데이터베이스를 구성하는 데이터 개체(Entity), 속성, 관계 및 데이터 조작 시 데이터 값들이 갖는 제약 조건 등에 관해 전반적으로 정의한다.
-> 한마디로 그냥 데이터베이스 전체 구조를 말한다.
Reference :
https://blueyikim.tistory.com/421?category=117897
https://coding-factory.tistory.com/216
https://victorydntmd.tistory.com/42
https://wa-yeong.tistory.com/12
'Programming > Database' 카테고리의 다른 글
원티드 프리온보딩 백엔드 챌린지 - 데이터베이스 1일차 (0) | 2023.02.09 |
---|---|
Database 인덱스 (0) | 2022.05.26 |
Data Normalization & Relationships: Splitting & Joining data (0) | 2022.05.14 |
Entity(개체), 속성, 도메인 이란? (2) | 2021.11.24 |
Transaction(트렌잭션) 이란? (0) | 2021.11.15 |
- Total
- Today
- Yesterday