# connection pool

31개의 포스트
post-thumbnail

Spring - DataBase [IT 국비지원/구디 아카데미/김지훈 강사님]

DB Data Base > DataBase는 데이터를 영구적으로 저장 할 수 있는 저장소 Data Base를 이용하면 서로 다른 시스템 간에 데이터를 공휴 할 수 있다 DBMS(Data Base Management System) Data Base를 관리하는 시스템을 DBMS라고 한다 많은 종류의 DBMS들이 존재 ↓ <img src="https://velog.velcdn.com/images/lee93dhun/post/2421

2023년 9월 14일
·
0개의 댓글
·
post-thumbnail

JDBC와 Connection Pool 개념

📌 JDBC 자바에서 데이터베이스 접속할 수 있도록 하는 자바 API이다. JDBC를 사용함으로써 데이터베이스에서 자료를 쿼리(Query-DB에 정보를 요청)하거나 업데이트 할 수 있다. JDBC의 표준 3가지 인터페이스 Connection : 연결 Statement : SQL 전달 ResultSet : 결과 응답 ⚠️ Datasource 순수 jdbc로 데이터베이스에 접근을 하면, 데이터베이스에 접근할 때마다 connection을 맺고 끊는 작업을 한다. 이 connection을 맺고 끊는 작업을 줄이기 위해 미리connection을 생성해 두고, 데이터베이스에 접근하고자 하는 사용자에게 미리 생성된 connection을 제공하고 돌려받는다. 이 connection들을 모아두는 장소를 connection pool이라 하며 > Datasource는 java 에서 connection pool을 지원하기 위한 인터

2023년 8월 23일
·
2개의 댓글
·
post-thumbnail

[JAVA] Apache HttpClient Connection 관리하기 (TIME_WAIT & CLOSE_WAIT 문제)

예전에 겪었던 문제인데, 해결 방법은 심플하지만 문제를 탐구하는 과정에서 HTTP 네트워크 관련 여러 지식들을 배웠기 때문에 늦었지만 지금이라도 다시 정리해두고자 한다. 이해 됐을 때 바로 정리했어야 했는데..ㅠㅠ TL;DR 문제상황 서버 부하테스트를 중 응답없음상태(Hang-Up)가 되는 현상을 겪었다. 서버는 이 상태로부터 자동으로 복구되지(Fail-Over) 못했고, 매번 직접 서버를 재시작 해야만 응답없음상태를 해결하고 다시 테스트를 수행할 수 있었다. 테스트 환경에서 100% 재현이 가능한 상황은 부하가 계속 걸리는 상황이 아니고, 서버의 부하를 일정시간 가하고(연결을 맺고) -> 잠시 부하를 (커넥션을 서버측에서 끊도록 충분한 시간동안)멈추고 -> 다시 부하를 발생시키면(다시 연결을 맺기) 서버는 스스로 회복할 수 없는 응답없음 상태에 빠지게 된다. 이와 같은 복잡한 조건(?)으로 계속해서 부하를 처리하고 있는 운영 환경에서는 문제로 식

2023년 6월 27일
·
0개의 댓글
·
post-thumbnail

connection pool

백엔드 서버와 DB 서버는 각각 다른 컴퓨터에서 동작하기 때문에 백엔드 서버에서 쿼리를 요청하고 쿼리 응답을 받는 과정은 네트워크 통신을 하는 것입니다. 백엔드 서버와 DB 서버는 TCP 기반으로 네트워크 통신을 하게 됩니다. TCP 기반으로 동작하기 때문에 높은 신뢰성을 가지고 데이터 송수신이 가능하게 됩니다. TCP는 연결 지향적 특징을 가지고 있습니다. 때문에 본격적으로 데이터 송수신을 하기에 앞서 꼭 둘 사이에 connection을 맺는 과정이 필요하며, 데이터 송수신을 마친 이후에 connection을 끊어주는 작업 또한 필요합니다. 그런데 이러한 connection을 맺고 끊는 과정이 생각보다 간단하지 않으며 꽤나 시간이 드는 작업입니다. TCP 통신에서 connection을 맺기 위해 3-way-handshake를 진행하고, connection을 종료하기 위해 4-way-handshake를 진행해야 합니다. 그런데 이런 handshake 또한 데이터를 주고

2023년 6월 10일
·
0개의 댓글
·
post-thumbnail

[PostgreSQL] Connection Pool 이 꽉 찼을 때 대처법

오늘 일하는 곳에서 갑자기 DB Connection 이 안 잡히는 현상이 발생했습니다. 에러 로그를 보니 아래와 같은 로그가 남아있더군요. >org.postgresql.util.PSQLException: FATAL: sorry, too many clients already. 로그에 쓰인 말 그대로, PostgreSQL DBMS 의 최대 Connection 의 수에 도달했는데, 또 다시 Connection 이 요청되서 에러가 난 겁니다. 대체적으로 이런 상황을 해결하는 방법은 크게 2가지입니다. Max Connection 의 수의 늘린다. 연결된 Connection/Session 을 강제로 끊어버린다. 자, 여러분들은 어떤 방법을 선택하시겠습니까? 아마 바로 판단하기 힘들겁니다. 최종적인 판단을 위해서는 일단 현재 Connection Pool 이 꽉 찬 이유가 뭔지, 즉 현재 상황에 대한 파악이 먼접니다.

2023년 5월 18일
·
0개의 댓글
·
post-thumbnail

DBCP 간단히 정리하기

DBCP를 안쓸 때 문제점 매번 connection을 열고 닫는 시간적인 비용 발생 서비스 성능에 좋지 않다. 커넥션을 새로 만드는 것은 과정도 복잡하고 시간도 많이 소모되는 일이다. DB는 물론이고 애플리케이션 서버에서도 TCP/IP 커넥션을 새로 생성하기 위한 리소스를 매번 사용해야 한다. 이는 SQL을 실행하는 시간에 더해 커넥션을 새로 만드는 시간까지 추가되기 때문에 애플리케이션의 응답 속도에 영향을 준다. DBCP (database connection pool) 미리 DB Connection을 맺어둔다. 연결된 커넥션들을 마치 풀처럼 두고 connection을 재사용한다. ![](https://velog.velcdn.com/images/songs4805/post/db832f

2023년 3월 26일
·
0개의 댓글
·
post-thumbnail

커넥션 풀, 데이터 소스

Connection Pool JDBC에서 기본적으로 지원하는 DriverManager는 각 연결마다 새로운 커넥션을 만든다. 그런데, 매 사용자의 요청마다 새로운 커넥션을 만들어서 데이터를 가공한다면 매우 불편할 것이다. 게다가 이 커넥션의 비용은 요청의 크기에 비례하지 않고 고정적으로 발생하며, 요청이 작으면 작을 수록 비용이 부담스러워 진다. 심지어 어떤 DB는 한번 생성하는데 수십 밀리초가 걸리기도 한다. 또한, 만약 관리를 잘못해서 커넥션이 해제되지 않는다면 쓸모없는 커넥션이 쌓여 큰 장애가 발생할 가능성도 있다. 이 때문에 고민하던 어느 개발자는 어느날 정말 획기적인 아이디어를 하나 제공한다. 그것은 바로 커넥션을 미리 만들어두고 그것만 쓰자는 것이었다. 이는 앞서 이야기 했던 두 가지

2023년 2월 25일
·
0개의 댓글
·

서버 최적화 & 데이터 마이그레이션 작업 - 3 : DB 최적화

안녕하세요 오늘은 DB 최적화 작업을 진행하면서 배운 내용들에 대해 포스팅해보려고 합니다ㅎㅎ 저번에 DB 마이그레이션 작업과 API 서버 최적화 작업 이후 여전히 쿼리 실행 속도가 안정적이지 않고 10시에 많은 동접자들이 접속함에 따라 쿼리 로딩이 심한 현상이 발생하셨습니다. 문제에 대한 원인을 찾던 중 PHP의 connection pool 부재로 인해 성능이 저하될 수 있다는 사실을 알게 되었습니다. Connection Pool이란 DB와 연결된 커넥션을 만들어 저장하고, 커넥션이 필요할 때마다 저장된 커넥션을 꺼내 사용하면서 DB에 연결하기 위한 커넥션 비용을 감소시켜 성능을 향상시킬 수 있는 기법입니다. 대표적으로 Spring의 JDBC의 경우 Connection Pool을 지원하지만 PHP나 Ruby 등의 언어에서는 Connection Pool을 지원하지 않아 사용자들이 몰릴 경우 웹 서버가 죽지 않았음에도 DB에 과부하가 와서 성능 저하 이슈가 발생할 수 있습니다. 이

2023년 1월 3일
·
0개의 댓글
·
post-thumbnail

Connection Pool(HikariCP)

최근 HikariCP를 공부하면서 이해한 내용을 정리한다. > HikariCP란? Connection Pool을 관리해주는 프레임워크로 성능이 매우 우수하다고 한다. 순서는 위와 같다. Connection이 유효한 경우 Connection 요청 이전에 사용했던 Connection 정보 존재 확인 Connection이 유효함을 확인 Connection 반환 Connection이 유효하지 않은 경우 Connection 요청 이전에 사용했던 Connection 정보 존재 확인 Connection이 유효하지 않음을 확인 Close Connection Remove Pool Pool 을 다시 채움 hikari connecti

2022년 12월 23일
·
0개의 댓글
·

HikariCP 설정하기

이전에 적절한 톰캣 쓰레드 개수를 설정하는데 실패하여 Default 설정을 그대로 따르도록 하였었다. 당시에 병목이 DB 쪽에서 발생하는 것 아닐까? 그래서 제대로된 톰캣 쓰레드 개수 설정이 불가능했던 것 아닐까? 하는 의문이 들었고, 따라서 HikariCP 설정을 통해서 DB 쪽 최적화를 먼저 진행한 이후에 톰캣 쓰레드를 다시 한 번 설정해보았고, 그 과정에서 톰캣 쓰레드와 커넥션 풀 간의 관계에 대해서 고민해보았다. HikariCP 설정 값 정리 HikariCp는 밀리세컨트를 모든 time value에 사용한다. connectionTimeout(connection-timeout) 이 속성은 클라이언트(사용자)가 풀에서 연결을 대기하는 최대 시간(밀리초)을 제어한다. connection을 사용할 수 없는 상태에서 이 시간을 초과하면 SQL 예외가 발생한다. 허용 가능한 최소 연결 시간 초과는 250ms이다. (기본값: 30000, 30초)

2022년 11월 5일
·
1개의 댓글
·

Data Base Connection Pool(DBCP)

✨DBCP사용이유✨ JDBC를 통하여 DB에 연결하기 위해서는 매번 드라이버를 로드하고 커넥션 객체를 생성하여 연결하고 종료하기 때문에 비효율적임 ✨DBCP사용✨ DB와 연결된 커넥션 객체를 미리 풀(pool)에 생성해놓고 필요할 때 가져다 쓰고 반환 1.server.xml - source탭 - 연결을 원하는 프로젝트의 태그안에 코드 입력하여 커넥션풀 세팅 2.DAO클래스에서 커넥션 풀을 이용하여 DB에 접근

2022년 10월 30일
·
0개의 댓글
·
post-thumbnail

Connection Pool이란

Connection Pool이란 JDBC로 인해 개발자들은 DB와 연결을 편하게 할 수 있게 되었다. 다시 한번 복습을 하자면, 애플리케이션 서버 -> DB 연결을 할 때, TCP/IP연결을 진행하고 sql전달과 db로 부터 응답값을 받는 과정이 일어난다. 여기서, TCP/IP 연결을 할 때, DB의 ID와 PASSWORD를 전달하고 db에서 커넥션 객체를 생성을 하고 반환해 준다. 이렇게 db와 커넥션을 할 때마다 과정도 복잡하고 시간도 많이 소모가 된다. 이런 문제를 해결하기 위해, 커넥션을 미리 생성하고, 미리 생성된 커넥션을 사용하는 connection pool이라는 방법이 있다. pool는 영어로 수영장이라는 의미로 말 그대로 connection들이 수영장에 들어가 있다고 생각하면 된다. 그렇기 때문에 커넥션이 필요할 때 사용하고, 다 사용한 후에는 connection pool에 반환하면 된다. 대표적인 connection pool로는 hika

2022년 10월 7일
·
0개의 댓글
·
post-thumbnail

[SERVLET] 🗃️ CP(Connection Pool)를 사용하여 Connection 객체 얻어오기

&nbsp;저번 포스팅에서 JDBC Driver를 사용하여 PostgreSQL과 Eclipse를 연결해 보았습니다. &nbsp;이번에는 Connection Pool을 사용해 Connection객체를 얻어오는 방법을 포스팅해 보도록 하겠습니다. 1. 🛀 Connection Pool의 개요 &nbsp;저번 포스팅에서는 JDBC와의 연동을 다루어보았습니다. JDBC를 연동하기 위해서는 드라이버를 로드하고 JDBC URL로 접속하여 Connection 객체를 얻어오는 단계를 거쳐야합니다. &nbsp;여기서 알아볼 커넥션 풀은 데이터베이스와 연결된 Connection 객체를 미리 생성하여 풀(Pool) 속에 저장해두고 필요할 때마다 이 풀에 접근하여 Connection 객체를 사용하고, 작업이 끝나면 다시 반환하는 것을 말합니다. &nbsp;사용자가 웹사이트에 요청을 하는데 이 때마다 매번 Connection 객체를 생성하여 연결한다면 매우 비효

2022년 9월 30일
·
0개의 댓글
·
post-thumbnail

Hikari Connection Pool

Overview WAS와 DB 사이의 연결을 할 때 가장 비용이 많이 드는 작업은 DB와의 Connection입니다. 하지만 요청이 들어올 때마다 DB와의 커넥션을 그때 그때 맺어준다면 이에 대한 부하는 꽤나 복잡해질 수 있습니다. 이를 보완할 수 있는 방법이 Connection Pool입니다. IBM’s article https://www.ibm.com/developerworks/data/library/techarticle/dm-1105fivemethods/index.html 데이터베이스와 연결된 커넥션을 미리 만들어놓고 이를 pool로 관리하는 것입니다. 필요할 때마다 커넥션 풀의 커넥션을 이용하고 반환하는 기법입니다. 미리 만들어놓고 커넥션을 이요하면 Connection의 비용을 줄이고 DB에

2022년 9월 18일
·
0개의 댓글
·
post-thumbnail

[jsp] Connection pool

커넥션 풀? 커넥션 풀이란 데이터베이스랑 연결하기 위한 커넥션을 풀(pool)속에 저장해 두고 있다가 필요한 때에 풀에서 가져다 쓰고 다시 반환하는 기법을 의미한다. > 커넥션 풀의 특징은 다음과 같다 풀 속에 미리 커넥션이 생성되어 있기에 커넥션을 생성하는데 드는 연결시간을 줄일 수 있다. 커넥션을 계속해서 재사용하기 때문에 생성되는 커넥션 수가 일정하게 유지 된다. 커넥션 풀 사용법 1. DBCP 관련 파일과 JDBC 드라이버 파일 설치하기 예전에는 jar 파일을 library에 저장하여 사용했는데 IDE를 주로 사용 하는 사람들은 maven이나 gradle을 이용해 dependency를 추가하고 설치하는 방식으로 많이 하는 듯하다. Maven로 설치해보기 inte

2022년 8월 14일
·
0개의 댓글
·
post-thumbnail

Connection Pool, Hikari

브라우저가 웹 어플리케이션에게 HTTP프로토콜을 보내고, 웹 어플리케이션은 SQL문을 통해서 DBMS와 데이터를 주고 받는다. 만약 많은 브라우저가 WAS에게 요청을 한다면, WAS는 Thread를 이용해서 관리해야 한다. 즉 WAS가 요청을 받아서 Thread로 Servlet을 실행한다. DB에 접속하는 것은 Connection을 이용하는데, 하나의 DBMS는 처리량에 대해 한계가 있고, Connection의 수도 한계가 있다. 즉 Connection을 무수히 많이 생성하는게 아니라 Connection을 어떻게 관리해아 하는가에 대한 생각을 하게 된다. Connection Pool의 등장 미리 Connection을 연결해 놓는다. 즉 요청이 들어올 때, WAS가 DBM

2022년 7월 29일
·
0개의 댓글
·
post-thumbnail

Connection Pool , HikariCP

🌚 Connection Pool 현재 Connection Pool, HikariCP 에 대해 아무것도 모르는 상태이다 첫 인상: Connection pool - 연결 풀? HiKariCP 이름 부터가 어렵게 느껴진다. 검색해보자. 🎁 Connection Pool Connection Pool 정의 위키백과에 검색을 해보았다. 연결 툴 또는 커넥션 풀은 데이터베이스로 추가 요청이 필요할 때 연결을 재사용할 수 있도록 관리하는 데이터베이스 연결의 캐시이다. 여기서 모르는 단어인 캐시가 나왔다. 검색해보자.

2022년 7월 28일
·
0개의 댓글
·
post-thumbnail

[22-06-(30~04)] Spring JDBC DB Access

0. 시작하게 된 계기 및 다짐 😮 이번 코드스테이츠의 백엔드 엔지니어링 개발자 부트캠프에 참여하게 되면서 현직개발자 분들의 빠른 성장을 위한 조언 중 자신만의 블로그를 이용하여 배운 것 들을 정리하는게 많은 도움이 된다 하여 시작하게 되었다. 그 날 배웠던 것을 길지 않아도 좋으니 정리하며 복습하는 습관 기르기 주말에 다음주에 배울 내용들을 예습 코딩 문제와 java코드들은 꾸준히 학습 자료구조를 이용한 알고리즘 문제 해결 학습 > 1. 학습 목표 😮 | 목표 | 결과 |---|--- |JDBC가 무엇인지 이해 |O |Java에서 JDBC가 어떤 역할을 하는지 이해할 수 있다. |O |Spring Data JDBC가 무엇인지 이해 |O |Spring Data JDBC를 이용해서 데이터의 저장, 수정, 조회, 삭제 작업 |O |Spring Data JDBC 기반의 엔티티 연관 관계를 매핑

2022년 7월 23일
·
0개의 댓글
·
post-thumbnail

Connection Pool

개발자로서 데이터베이스 연결을 대수롭지 않게 여겼을 수 있다. 단일 데이터베이스 connection은 비용이 많이 들지 않지만, 규모가 확장됨에 따라 문제가 발생할 수 있다. connection pooling을 이해하며 규모에 맞게 효율적인 애플리케이션 구축에 대해 알아보자. 데이터베이스 connection pooling은 다른 사용자가 데이터베이스 연결을 열린 상태로 유지하는 데 사용되는 방법이다. pooling을 이야기하기 전에 데이터베이스 작업을 수행하기 위해 애플리케이션이 데이터베이스를 연결할 때 어떤 일이 일어나는지 잠깐 살펴보자. > 1. connection을 생성하기 위해 애플리케이션이 데이터베이스 드라이버를 사용한다. > 2. 애플리케이션과 데이터베이스를 연결하기 위해 TCP socket을 연다. > 3. 3-way handshake를 통해 사용자를 인가하고 TCP socket 너머로 데이터를 읽고 쓴다. > 4. 작업이 완료되고 connection을 닫는다.

2022년 6월 22일
·
0개의 댓글
·
post-thumbnail

bracket과 resource-pool

지난 금요일은 미루고 있던 mongoDB 패키지에서 연결 관리를 어떻게 하는지 살펴보기로 했다. 일단은 잘 동작하고 기능 개발도 바쁘기 때문에 나중에 살펴보려고 했지만 개발 중에도 가끔 데이터베이스에 연결이 끊겨 불편함이 있었기 때문에 살펴봤다. mongoDB 패키지는 연결을 하면 Pipe라고 하는 값을 준다. 문서에 따르면 여러 스레드에서 동시성 문제없이 응답을 기다리지 않고 연결 하나에 여러 요청을 보낼 수 있다. 그리고 응답은 보낸 순서대로 받을 수 있다고 한다. 내부적으로 퓨처와 프로미스로 구현되어 있다고 한다. 보통 과거에 사용하던 데이터베이스 관련 라이브러리들은 사용하는 라이브러리에 마다 커넥션 풀 기능을 지원하고 있었기 때문에 mongoDB 패키지도 커넥션 풀을 지원할 것이라고 생각했다. 일단 다소 모호한 설명을 보고 Pipe가 동시에 여러 데이터베이스 쿼리를 지원하는지 궁금해

2022년 6월 18일
·
0개의 댓글
·