DB커넥션은 꽤 비싼 자원인데요, 연결할 때 초기화 시간이 오래걸려서 최초 연결 시간이 길고, 또, 총 연결 수를 적정수로 가져가기 위해 애플리케이션 수준에서 커넥션 풀링을 하고는 합니다. 풀
DB커넥션은 꽤 비싼 자원인데요, 연결할 때 초기화 시간이 오래걸려서 최초 연결 시간이 길고, 또, 총 연결 수를 적정수로 가져가기 위해 애플리케이션 수준에서 커넥션 풀링을 하고는 합니다. 풀 수준에서 5개의 리밋을 걸었다고 했을 때, 여러 곳(스레드)에서 커넥션을 가져가서 쓰고, 사용이 끝나면 반납을 해야 하겠지요. 기본적으로는 limit에 다다르면 오래된 커넥션을 끊는 게 아니라, 누군가 반납할 때까지 기다리게 됩니다. 그럼 나중에 연결하고자 했던 시도는 꽤 오래 기다려야 할 테고, 반납하는 녀석이 없다면 타임아웃시까지 영영 기다리게 됩니다. 풀마다, 가져가서 너무 오랫동안 쓰이지 않는 커넥션을 강제로 반환하는 경우가 있을 수도 있으나, 어쨌건 기본은 사용이 끝났으면 정리를 해야 하겠죠. DB 연결, 네트워크 연결, 파일 여닫기 등 한정된 자원을 활용할 때는 뒷정리 작업이 필요합니다. 오래전에야 메모리조차 다쓰고 나면 해제를 개발자가 했었지만, 요새야 GC덕분에 그런 일까지야 하지 않습니다만, 다른 자원들은 여전히 사용후 반납이나 정리작업을 해야 합니다. 내가 호텔을 운영하는 매니저고, 객실이 10개 있을 때, 숙박객이 10명이 찼다고 해서, 가장 오래된 숙박객을 그냥 내쫓고 새로 객실을 줄 수야 없는 노릇이죠. 정해진 체크아웃시간까지 고객이 나갈 때까지는 기다려야 하는 꼴입니다. 만약 고객이 체크아웃을 빨리 해주면, 호텔 입장에서는 객실을 더 알차게(?)활용 할 수 있습니다. 호텔과 고객을 모두 주체적으로 운영하는 개발자 입장에서는, 고객 볼 일(?) 끝났으면 빨랑빨랑 즉시즉시 빼먹지 말고 체크아웃을 해주면, 객실 활용율이 알차게 올라갈 터입니다. 그런 전체 주체적 입장이 백엔드 개발자의 입장입니다.