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

... [196]  197 
NoWriterDateCnt.TitleFile(s)
40정성태7/23/200321905COM 개체 관련: 10. IE BHO 개체를 개발할 때, 인터넷 익스플로러가 아닌 탐색기에서 활성화 되는 문제 해결 [1]
41김성현7/24/200320735    답변글 COM 개체 관련: 10.1. [답변]: IE BHO 개체를 개발할 때, 인터넷 익스플로러가 아닌 탐색기에서 활성화 되는 문제 해결
42정성태7/29/200318683        답변글 COM 개체 관련: 10.2. feedback 을 받기 위해서 답변 기능을 가능하게 해두었습니다.
39정성태7/17/200324451VS.NET IDE: 5. 원격 제어 3가지 방법
38정성태7/17/200320992.NET Framework: 8. IIS 서버 재설치와 ASP.NET 서비스의 문제점
36정성태7/17/200321655.NET Framework: 7. 시행착오 - WebService 참조 추가 오류
35정성태7/17/200322207.NET Framework: 6. Win2000에서의 .NET COM+ 자동 등록 오류 발생 해결
34정성태7/17/200320885VS.NET IDE: 4. VC++ 원격 디버깅파일 다운로드1
33정성태7/17/200321040VS.NET IDE: 3. Win2000 NAT 서비스
32정성태7/17/200322255COM 개체 관련: 9. _bstr_t, CComBSTR, string 클래스 사용 [1]
31정성태7/17/200319291COM 개체 관련: 8. IDL 구문에서 구조체를 pack 하는 방법
30정성태7/17/200336556VC++: 7. [STL] vector 사용법 및 reference 사용예 [1]파일 다운로드1
28정성태7/17/200320957스크립트: 3. Programming Microsoft Internet Explorer 5 - CHM 파일
29정성태7/17/200320449    답변글 스크립트: 3.1. Programming Microsoft Internet Explorer 5 - 소스코드
27정성태7/17/200319416COM 개체 관련: 7. HTML Control에서 DELETE, 화살표 키 등이 안 먹는 문제
26정성태7/17/200320579COM 개체 관련: 6. WebBrowser 콘트롤에서 프레임을 구하는 소스
25정성태7/17/200318177COM 개체 관련: 5. C++ Attributes - Make COM Programming a Breeze with New Feature in Visual Studio .NET [2]파일 다운로드1
24정성태7/17/200321776.NET Framework: 5. (MHT 변환해서 가져온 글) .NET 의 COM+ 서비스 사용파일 다운로드1
23정성태7/17/200325481.NET Framework: 4. webservice.htc - HTML Script에서도 웹서비스 엑세스 [2]파일 다운로드1
22정성태7/17/200320041.NET Framework: 3. .NET Framework SDK 퀵 스타트 자습서
21정성태7/17/200319093.NET Framework: 2. 김현승님의 "ASP.NET & .NET EnterpriseServices & Remoting 코드 템플릿"
20정성태2/15/200526147VS.NET IDE: 2. Platform SDK 설치
19정성태7/17/200322100.NET Framework: 1. JScript.NET 강좌 사이트[영문]
18정성태7/17/200319493COM 개체 관련: 4. Exchanging Data Over the Internet Using XML [1]파일 다운로드1
17정성태7/17/200327430VC++: 6. Win32 API Hook - 소스는 "공개소스"에있습니다. [2]
16정성태7/17/200319754COM 개체 관련: 3. IE 툴밴드의 위치문제파일 다운로드1
... [196]  197