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를 돌린 부분이 들어 가 있었어요 ㅎㅎ
문우영

... 181  182  183  [184]  185  186  187  188  189  190  191  192  193  194  195  ...
NoWriterDateCnt.TitleFile(s)
390정성태11/6/200626850    답변글 .NET Framework: 74.9. WCF에 SSL 적용 (2) - 서비스 제작파일 다운로드1
356정성태10/7/200622402COM 개체 관련: 19. COM의 Apartment를 이해해 보자. [8]
386light10/30/200617373    답변글 COM 개체 관련: 19.1. [답변]: COM 객체를 글로벌마샬으로 만든후, 사용한다.
355정성태10/9/200625140개발 환경 구성: 19. Internet_Zone 하위에 새로운 코드 그룹을 추가하는 예제 [4]파일 다운로드2
353정성태12/31/200633431개발 환경 구성: 18. 윈도우즈 인증서 서비스 이야기 [3]
354정성태10/23/200635962    답변글 개발 환경 구성: 18.1. 윈도우즈 인증서 서비스 설치
372정성태12/31/200637853    답변글 개발 환경 구성: 18.2. 웹 사이트에 SSL을 적용 [3]
373정성태10/24/200629253    답변글 개발 환경 구성: 18.3. 사용자 입장에서의 HTTPS 접근 (1)
374정성태10/25/200626512    답변글 개발 환경 구성: 18.4. 사용자 입장에서의 HTTPS 접근 (2)
391정성태11/7/200630640    답변글 개발 환경 구성: 18.5. 사용자 인증서 발급
392정성태11/11/200643835    답변글 개발 환경 구성: 18.6. 인증서 관리 (1) - 내보내기/가져오기
394정성태11/9/200628340    답변글 개발 환경 구성: 18.7. 인증서 관리 (2) - 개인키를 내보낼 수 있는 유형의 인증서 발급 [1]
395정성태11/9/200640454    답변글 개발 환경 구성: 18.8. 인증서 관리 (3) - 인증서 MMC 관리자 사용
414정성태12/23/200632159    답변글 개발 환경 구성: 18.9. CRL(Certificate Revocation List) 관리
428정성태12/31/200645028    답변글 개발 환경 구성: 18.10. IIS 7 - SSL 사이트 설정하는 방법 [4]
429정성태12/31/200631048    답변글 개발 환경 구성: 18.11. 서비스를 위한 인증서 설치
352정성태10/2/200620766개발 환경 구성: 17. VPC에 Linux 설치하는 방법 [1]
351정성태10/8/200623318개발 환경 구성: 16. 성태의 무식한(!) 리눅스 탐방기. [4]
349정성태9/26/200621997디버깅 기술: 10. C++/CLI에서 제공되는 명시적인 파괴자의 비밀
347정성태10/6/200625750디버깅 기술: 9. .NET IDisposable 처리 정리 [1]
346정성태9/23/200619260개발 환경 구성: 15. 툴박스에 컨트롤이 자동으로 나타나도록 해주는 옵션 설정
345정성태9/20/200618468오류 유형: 12. WCF 오류 메시지 - Error while trying to reflect on attribute 'MessageContractAttribute'
343정성태10/18/200630327개발 환경 구성: 14. SandCastle 사용법 (NDoc을 대체하는 문서화 도구) [1]파일 다운로드1
344정성태9/20/200620542    답변글 개발 환경 구성: 14.1. 오류 유형 - GAC 에 등록된 DLL 에 대한 문서화 시 오류
340정성태9/15/200619799개발 환경 구성: 13. ISO 파일을 가상 CD-ROM으로 매핑해주는 프로그램
339정성태9/14/200619278오류 유형: 11. ProtocolsSection?
... 181  182  183  [184]  185  186  187  188  189  190  191  192  193  194  195  ...