Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 3개 있습니다.)

제니퍼 닷넷 적용 사례 (1) - DB Connection Pooling을 사용하지 않았을 때의 성능 저하를 알려주다.

'제니퍼 닷넷' 제품이 출시된지 이제 1년 반 정도 지나가는 것 같은데요. 가끔씩, 적용 사례를 정리해서 블로그에 올려야 겠다고 생각은 했는데 이상하게 잘 안되더군요. ^^ 나이가 들은 걸까요? 사실, 집에 오면 공부하는 시간마저도 줄어든 것 같아서 회사 제품에 대한 글을 쓰는 여유가 도통 나질 않았습니다. (한마디로, 핑계죠... ^^)

게다가 '사례'를 쓴 다는 것에 어려운 점이 있긴 합니다. 왜냐하면, 보안상 고객사들의 운영중인 화면을 갈무리하는 것을 허가받기가 쉽지 않고, 대개의 경우 설치 시점부터 '제니퍼' 회사의 '채널사'에 속한 기술 엔지니어들이 담당하기 때문에 제가 아예 관여되지 않는 경우도 많기 때문입니다.

그래도 종종 고객사들의 실 서버 운영자들이 느끼는 고충을 이해하기 위해 기술 엔지니어와 함께 동행해서 고객사에 방문한 적도 있고, 기술 엔지니어 수준에서 알 수 없는 어려운 문제가 발생한 경우 제가 나서기도 하기 때문에 - 그나마 쌓인 경험으로 '제니퍼 닷넷 적용 사례'에 대해서 가끔씩 이렇게 써볼까 합니다. ^^

오늘은 그 첫번째로, DB Connection Pooling 옵션과 관련해서 겪었던 사례를 소개해 드리겠습니다.

(참고로, 이 글에 나온 모든 갈무리 화면은 실제 고객사의 화면이 아니고 제가 임의로 그와 비슷하게 구성한 화면입니다.)




A 고객사를 처음 방문했을 때, 여러 팀이 각각 개별 웹 서비스 시스템을 맡아서 개발하고 있었습니다. '제니퍼 닷넷'을 설치해서 모니터링을 시작하자 유독 한 팀의 웹 서비스 성능이 낮다는 것이 눈에 보였습니다.

제니퍼 닷넷의 콘솔 화면에서 제공되는 X-View에서 아래와 같은 식의 응답 시간이 늦은 점들이 보였고,

[그림 1: X-View 화면 - 가로축은 요청 시간, 세로축은 해당 요청을 처리하는 데 걸린 시간을 의미]
jennifer_connection_pooling_demo_1.png

위의 점들에 대응되는 요청을 상세 보기로 확인하니 다음과 같이 SqlConnection 생성 시에 매번 시간이 걸리는 것을 확인할 수 있었습니다.

jennifer_connection_pooling_demo_2.png

위의 데모 이미지에서는 16ms를 보여줬지만 실제 고객사의 서버에서는 약 200ms의 시간이 꾸준히 지연되었고, 한 화면에 10번 이상의 연결 개체를 생성하는 것이 나타났으므로 순수하게 DB 연결 개체 생성에만 2초 이상의 시간이 지연된 것이었습니다.

재미있는 것은, 그 팀에서만 Connection Pooling 을 false로 잡아놓았다는 것.




B 고객사는 해외 업체였습니다. 역시 제니퍼 닷넷을 설치하고 X-View 화면을 띄워놨는데, 전체 X-View의 점들이 공통적으로 2초 이상의 처리 시간을 나타내고 있었습니다. 상세 보기로 확인하니 이번에도 Connection Pooling이 false로 설정되어 있었는데, 더욱 재미있는 것은 Connection Close를 하지 않아서 여기저기서 Connection Leak이 있음을 알 수 있었습니다.

jennifer_connection_pooling_demo_3.png

위의 결과로 재미있는 시나리오가 유추되었는데요. 즉, 개발사는 개발해 둔 웹 애플리케이션이 가끔씩 DB 연결에 문제가 있었음을 알았지만 그 원인을 파악하기 보다는(또는 못했거나) Pooling을 false로 하는 임시 조치를 취했고 그대로 납품이 되어 운영된 것이었습니다. 그로 인해 해당 웹 애플리케이션을 사용하는 모든 사용자들은 요청을 한번 보낼 때마다 2초 이상의 지연시간을 감내해야만 했습니다.




어떠세요? 위의 사례만으로 봐도, APM 도구가 어느 정도의 '품질을 만족하는 기준'으로도 사용될 수 있지 않을까요? ^^

위의 글을 읽고, '아직도 저런 초보적인 오류를 발생시키는 경우가 있을까?'라며 생각하는 분들이 계실텐데요. 제 블로그를 방문하며 공부하시는 분들이라면 대부분 그렇지 않겠지만, 의외로 반대의 개발자들도 많습니다.

그리고, 여기서 웹 응용 프로그램을 개발하는 측의 입장을 이해할 필요도 있습니다. 외주 업체는 자사의 개발자 뿐만 아니라 서로 다른 수준의 프리랜서 개발자들도 영입하는 것이 보통이고, 가끔은 팀 간의 공통적으로 사용하는 '개발 프레임워크' 없이 개발을 시작하거나, 또는 '개발 프레임워크'에 헛점이 있어 초급 개발자가 실수할 수 있는 구멍이 있는 경우 위와 같은 상황은 의외로 쉽게 발생할 수 있습니다.

게다가, 제대로 개발된 웹 사이트가 납품되었다고 해도 때로는 지속적으로 업데이트 해나가는 과정에서 서로 다른 외주 업체를 고용하는 상황일 수 있는데, 그런 경우에도 역시 '관리'가 점점 더 느슨하게 될 수 있습니다.

바로 그런 경우에, 제니퍼 닷넷과 같은 APM 도구가 도움이 될 수 있답니다. ^^




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 7/10/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2011-09-05 06시31분
ㅎㅎ 제니퍼가 유용 할 수 있겠네요.
저도 비슷한 경우가 있었어요~ 프로그램을 납품을 했는데 특정 부분에서 속도 저하가 있다고 해서 코드를 봤는데.
개발당시 테스트 한다고 loop를 돌린 부분이 들어 가 있었어요 ㅎㅎ
문우영

... 151  152  153  154  155  156  [157]  158  159  160  161  162  163  164  165  ...
NoWriterDateCnt.TitleFile(s)
1121정성태9/12/201127579Java: 5. WTP 내에서 서블릿을 실행하는 환경
1120정성태9/11/201127486.NET Framework: 239. IHttpHandler.IsReusable 속성 이야기파일 다운로드1
1119정성태9/11/201126618Java: 4. 이클립스에 WTP SDK가 설치되지 않는다면? [2]
1118정성태9/11/201138265Java: 3. 이클립스에서 서블릿 디버깅하는 방법 [4]
1117정성태9/9/201125559제니퍼 .NET: 17. 제니퍼 닷넷 적용 사례 (2) - 웹 애플리케이션 hang의 원인을 알려주다.
1116정성태9/8/201156640Java: 2. 자바에서 "Microsoft SQL Server JDBC Driver" 사용하는 방법
1115정성태9/4/201130117Java: 1. 닷넷 개발자가 처음 실습해 본 서블릿
1114정성태9/4/201134644Math: 2. "Zhang Suen 알고리즘(세선화, Thinning/Skeletonization)"의 C# 버전 [4]파일 다운로드1
1113정성태9/2/201134206개발 환경 구성: 129. Hyper-V에 CentOS 설치하기
1112정성태9/2/201150941Linux: 1. 리눅스 <-> 윈도우 원격 접속 프로그램 사용 [3]
1111정성태8/29/201125414제니퍼 .NET: 16. 적용 사례 (1) - DB Connection Pooling을 사용하지 않았을 때의 성능 저하를 알려주다. [1]
1110정성태8/26/201126741오류 유형: 136. RDP 접속이 불연속적으로 끊기는 문제
1109정성태8/26/201129615오류 유형: 135. 어느 순간 Active Directory 접속이 안되는 문제
1108정성태8/22/201131171오류 유형: 134. OLE/COM Object Viewer - DllRegisterServer in IVIEWERS.DLL failed. [1]
1107정성태8/21/201128911디버깅 기술: 43. Windows Form의 Load 이벤트에서 발생하는 예외가 Visual Studio에서 잡히지 않는 문제
1106정성태8/20/201127244웹: 26. FailedRequestTracing 설정으로 인한 iisexpress.exe 비정상 종료 문제
1105정성태8/19/201127167.NET Framework: 238. Web Site Model 프로젝트에서 Trace.WriteLine 출력이 dbgview.exe에서 확인이 안 되는 문제파일 다운로드1
1104정성태8/19/201127311웹: 25. WebDev보다 IIS Express가 더 나은 점 - 다중 가상 디렉터리 매핑 [1]
1103정성태8/19/201133198오류 유형: 133. WCF 포트 바인딩 실패 오류 - TCP error(10013) [1]
1102정성태8/19/201130963Math: 1. 방탈출3 - Room 10의 '중복가능한 조합' 문제를 위한 C# 프로그래밍 [2]파일 다운로드1
1101정성태8/19/201129640.NET Framework: 237. WCF AJAX 서비스와 JavaScript 간의 DateTime 연동 [1]파일 다운로드1
1100정성태8/17/201128760.NET Framework: 236. SqlDbType - DateTime, DateTime2, DateTimeOffset의 차이점파일 다운로드1
1099정성태8/15/201128163오류 유형: 132. 어느 순간 갑자기 접속이 안 되는 TFS 서버
1098정성태8/15/201150170웹: 24. 네이버는 어떻게 로그인 처리를 할까요? [2]
1097정성태8/15/201121486.NET Framework: 235. 메서드의 메타 데이터 토큰 값으로 클래스를 찾아내는 방법
1096정성태8/15/201125645디버깅 기술: 42. Watson Bucket 정보를 이용한 CLR 응용 프로그램 예외 분석 - (2)
... 151  152  153  154  155  156  [157]  158  159  160  161  162  163  164  165  ...