-
2019.05.18 짧은 깨달음(DB connection에 대하여)개발 일기장/개발 일상 2019. 5. 18. 21:11
DB 커넥션을 자주 맺는 것에 대한 고민을 크게 하지 않았었다. 쿼리를 복잡하게 만들어서 커넥션을 한 번 맺는 것보다 쿼리를 나눠서 2번 맺는게 낫다고 생각해서 쿼리든 코드든 최대한 다른 사람이 알아볼 수 있게 만들려고 했다.
근데 꼭 이 방법이 맞는게 아니라는걸 이번 엑셀 업로드를 할 때 체크하는 기능을 만들면서 깨달았다. 요구 기능이 기존의 엑셀 데이터에 대해 DB에 존재하는지 중복체크를 하는 것이었다. 엑셀 1천개의 row들을 하나하나 중복체크를 하려고 DB 커넥션을 맺다보니(1천개의 rows라면 1천번의 DB 커넥션) 끝날 생각을 하지 않았다.
누군가는 당연히 안되지 바보야!
라고 할 수 있는데, 배치를 돌릴 때빼고는 일일이 들어오는 데이터 하나하나(한번에 1000건 이상)를 DB 안의 데이터와 비교해야하는 걸 딱히 해본적이 없어 DB 커넥션을 자주 맺는게 이게 그렇게 큰 부담일 줄 몰랐다.(아마 속도는 물론이고 DB connetion pool이 꽉 차겠지?)
결국 DB에서 Left join을 걸어서 1 row에 비교하려는 데이터를 몽땅 불러와서 application 단 안에서 처리했다. 기존 기능인 엑셀 데이터의 포맷형식만 체크할 때와 속도가 별반 다르지 않았다.(성공!)
깨달은 점
대량의 데이터를 비교해야한다면 잦은 DB 커넥션은 절대 금물. 데이터를 몽땅 가져와서 application 안에서 for문으로 처리하는게 훨씬 낫다!
'개발 일기장 > 개발 일상' 카테고리의 다른 글
카카오 최종합격! (18) 2019.06.30 2019.05.19 노력에 대한 격언 (0) 2019.05.19 티스토리 에디터 변했네. 마크다운도 지원?! (0) 2019.03.31 개발 시 비즈니스 로직을 Service Layer에만 두기보다 도메인 중심으로 개발하자. (0) 2019.01.06 181018 (0) 2018.10.08