티스토리 뷰
DBCP(DataBase Connection Pool)
데이터 베이스 커넥션 풀
풀이라는것은 풀장을 떠올리면 뭔지 이해하기 쉽다. 수영장 같은 것이다.
수영장인데 그 안에 커넥션이라는것이 들어가는 수영장이다.
우리가 JSP&Servlet 방식 웹개발이나 스프링 웹 개발을 하게 될때 데이터베이스에 접근해야 하는 일이 자주 발생한다.
이럴때 보통 JDBC를 이용하게 된다. 근데 JDBC를 이용할때, 먼저 DriverManger로 부터 커넥션 객체를 생성하고,
그 커넥션 객체로 부터 Statement를 생성하며 그 Statement를 실행 한 결과로 ResultSet을 반환 받아서 커서로 ResultSet의 내용을 하나하나 사용하게 된다.
그리고 나서 ResultSet,Statement,Connection 객체를 순서대로 닫아주게 된다.
디비 접근이 필요할때마다 위의 과정을 반복해야 하는데 문제는 이 데이터베이스와의 커넥션 과정은 매우 무거운 작업이다. 그렇기 때문에 많은 사용자가 웹 서버에 접속해서 디비에 수많은 접근이 필요하다고 할때 위의 방법처럼 매번 커넥션을 생성한뒤, 디비에접근해서 어떤 일을 처리하고, 커넥션을 다시 닫아주고 이렇게 하게 될 경우 데이터베이스에 큰 부하를 줄 수 있다.
그렇기 때문에 요즘은 이런방식을 사용하지 않고 DBCP라는것을 사용한다.
이것은 위에서 말했듯이 커넥션 객체가 들어갈 수 있는 어떤 수영장이라고 생각하면 이해하기 쉽다.
데이터베이스와의 커넥션 작업이 매우 무거운 작업이라고 했다. 그렇기 때문에 사용자가 어떤 디비 작업이 필요한 어떤 요청을 해오기 전에 미리 커넥션 객체를 생성해놓고(웹서버와 디비서버를 연결하는) 필요할때마다 그 커넥션 객체를 풀에서 꺼내서 사용한다음 사용이 끝나면 다시 그 풀에 반환하는 구조이다.
예를 들어 50개의 커넥션 객체를 커넥션 풀에 넣어놓는 경우 최대 50명의 클라이언트까지는 서버에 어떤 요청을 보냈을때 큰 딜레이 없이 바로바로 응답을 받을 수 있을 것이다. 하지만 50명의 클라이언트에 의한 요청을 서버가 아직 처리하지 못했는데 51번째 클라이언트가 요청을 보낸경우, 그 클라이언트는 어떤 작업이 끝나기를 기다려야 한다. (커넥션 객체가 총 50개이므로 하나의 커넥션 객체가 풀로 돌아올때 까지 기다려야 한다.)
'컴퓨터 공학과 졸업 > 기본 개념' 카테고리의 다른 글
HTTP (0) | 2018.06.28 |
---|---|
URI = URL + URN (0) | 2018.06.26 |
JNDI (0) | 2018.02.14 |
GET방식과 POST방식 (1) | 2018.01.26 |
POJO,DTO,DAO,VO (2) | 2018.01.23 |
- Total
- Today
- Yesterday
- javascript
- hydrate
- rendering scope
- server side rendering
- typescript
- await
- atomic design
- state
- mobx
- Babel
- react
- useRef
- useEffect
- reflow
- promise
- async
- reducer
- props
- reactdom
- Next.js
- es6
- react hooks
- webpack
- Action
- return type
- computed
- storybook
- design system
- Polyfill
- type alias
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |