• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

한 번에 많은 양의 커넥션이 필요할 경우

23.06.25 01:06 작성 조회수 303

0

안녕하세요. 영한님!

 

커넥션 풀을 이용해서 애플리케이션 실행 시점에 DB와 커넥션을 미리 생성하고, 커넥션이 다 사용되고 나면 커넥션 풀로 반환하는 것으로 이해했습니다.

 

그런데 만약에 커넥션 풀 보다 많은 요청이 들어오면 어떻게 해야하는 걸까요?
(테스트한 결과 커넥션 풀에 커넥션이 없으면 새로 커넥션을 만들지는 않는 것 같더라구요.)

제가 고민한 결과 2가지 방법이 있을것 같은데요.

  1. 커넥션 풀 사이즈를 늘린다.

    1. 리소스가 많이 소모된다.

  2. 커넥션이 커넥션 풀로 반환할 때 까지 기다리는 대기시간을 늘린다.

    1. 애플리케이션 속도에 영향을 준다.

 

제가 생각하는 것 외 더 좋은 방법이 있을까요?

감사합니다.

답변 1

답변을 작성해보세요.

1

David님의 프로필

David

2023.06.26

안녕하세요. 개발하는쿼카님, 공식 서포터즈 David입니다.

말씀하신 것들을 포함해서 4가지 방법이 있습니다.

해당 애플리케이션의 특성에 따라 적절한 방법을 선택하시면 됩니다.

비동기의 경우 R2DBC 같은 것도 참고해 보시면 좋을 것 같습니다.

  1. 블로킹(Blocking): 새로운 커넥션 요청이 들어왔을 때, 풀에 사용 가능한 커넥션이 나타날 때까지 요청을 대기 상태로 만들 수 있습니다. 이 방식은 사용 가능한 커넥션이 나올 때까지 클라이언트가 대기하게 만드므로, 클라이언트가 과도한 대기 시간을 갖게 할 수 있습니다.

  2. 타임아웃(Timeout): 클라이언트가 일정 시간 동안 대기한 후에도 여전히 사용 가능한 커넥션이 없으면, 커넥션 요청을 실패로 처리하도록 설정할 수 있습니다. 이 방식은 클라이언트의 대기 시간을 제한하지만, 너무 많은 요청이 있을 경우 요청 실패율이 증가할 수 있습니다.

  3. 커넥션 풀의 크기 조정: 예상되는 요청 수를 고려하여 커넥션 풀의 크기를 늘리는 방법도 있습니다. 이렇게 하면 한번에 처리할 수 있는 요청 수가 증가하지만, 커넥션을 많이 생성하면 메모리 사용량이 증가하고, 데이터베이스에 과도한 부하를 주게 될 수 있습니다.

  4. 비동기 처리: 동시에 처리해야 할 작업이 많을 경우, 비동기 방식으로 작업을 처리할 수 있습니다. 이 방식은 요청을 대기 상태로 만들지 않고, 처리 가능한 작업들을 먼저 실행하여 효율을 높입니다.

감사합니다.