게시판 본문 ASP, ASP.NET, IIS & Script - Read Only
re: 안녕하세요~ 오늘은 ADO 객체에 대해 질문인데요~ ^^ |
---|
작성자: 송원석
작성일시: 2004-07-16 09:39,
조회수: 3,493
|
안녕하세요? 요사이 비가 많이 내려서 좀 꾸물꾸물하네요. ^_^
결론부터 말씀드리자면 저도 오마르님과 같은 방식을 사용하는 편입니다. 물론 병목현상에 대한 지적이 아주 근거가 없는 것은 아닙니다만, 동시 사용자가 그렇게 많지 않은 경우나 특히 웹 환경에서는 그다지 치명적인 영향을 주지 못한달까요? 예를 들어서 병목 현상이 극대화 되는 경우로는 이런 경우가 있겠네요. 비주얼 베이직으로 작성한 윈도우즈 프로그램에서 프로그램이 시작될 때 연결을 합니다. 그리고 프로그램이 종료될 때 연결을 닫구요. 이런 경우라면 연결이 그야말로 무지무지하게 병목되겠죠. ^_^ 이번엔 약간 수위를 낮추어보도록 하겠습니다. 동일하게 비주얼 베이직으로 작성한 윈도우즈 프로그램에서 함수를 호출하면 함수를 시작할 때 연결을 하고 함수가 끝나기 직전에 연결을 닫습니다. 이 경우에는 병목을 최소화했다고 말할 수 있겠죠. 그렇다면 이번에 이러한 함수들 여러 개가 여러번 연달아서 불려지는 상황을 생각해보도록 하겠습니다. 함수가 다섯 번 불려지면 다섯 번 연결을 했다가 끊어야 합니다. 엄청난 손해인것 처럼 느껴질 수도 있지만 꼭 그렇지만은 않은 것이 데이터베이스 커넥션 풀링이라는 기능이 있어서 연결을 관리해주기 때문에 속도의 저하는 그다지 일어나지가 않지요. 이번에는 이 연달아 불리워지는 함수들이 하나의 트렌젝션에 속한다고 생각해 보겠습니다. 이 경우에는 어짜피 연결을 하나 밖에 사용할 수 없죠. 트렌젝션을 걸 수 있는 방법은 Connection 개체에서 지원해주는 기능을 사용하거나 스토어드 프로시저에서 지원해주는 기능을 사용하는 방법밖에는 없습니다. 그러나 여기에 COM+ 의 자동 트렌젝션 기능과 적시 활성화 기능이 도입되면 또 말이 틀려지게 됩니다. 메소드별로 연결을 따로 사용해도 각각의 메소드 호출을 하나의 트렌젝션에 묶을 수 있을 뿐만 아니라 개체를 자기가 알아서 비활성화 시켰다가 다시 활성화 시켰다가 하는 작업을 처리해줍니다. 이처럼 여러가지 상황과 조건들이 있으므로 일괄적으로 뭐라 단언할 수는 없겠죠. ^_^ 그러나 확실한 전제 조건은 하나 있습니다. '데이터베이스의 연결은 최대한 늦게 열어서 빨리 닫는다.' 이것은 일종의 절대적인 교리와도 같은 것입니다. 그렇다면 왜 저는 웹 프로그램에서 병목이 별로 일어나지 않는다고 생각하는 것일까요? 그것은 웹 프로그램 자체가 비연결성을 가지고 있기 때문입니다. 말씀하신 병목이라는 것은 이런 것일겁니다. 한 ASP 프로그램내에서 두 번의 인서트 작업이 일어난다고 가정해 보겠습니다. 전체 300 라인의 프로그램에서 첫 번째 인서트는 30 번째 라인에서 발생하고 두 번째 인서트는 250 라인에서 발생합니다. 이 경우 하나의 연결을 사용하면 250 - 30 = 230 라인동안 사용하지도 않는 연결 개체를 끌어안고 있는 셈이 되는 거고 바로 이 부분이 병목이라는 단어를 사용하게 되는 요인이 되는 거죠. 그렇다면 연결을 한 번 끊었다가 다시 229 라인에서 다시 열어야 할까요? ASP 프로그램이 230 라인을 처리하는 비용이 더 많을까요? 아니면 연결을 끊고 다시 연결하는 작업의 비용이 더 많을까요? 제 생각으로는 이런 고민을 하느니 차라리 데이터베이스 인덱스 튜닝을 한 번 더 시도해보는 것이 바람직하다고 생각하는거죠. ^_^;;; 게다가 대부분의 웹 프로그램들은 작업을 조각조각 나누어 놓는 편입니다. 즉 게시판의 경우 입력은 입력을 처리하는 ASP 파일이 따로 있고 수정은 수정을 처리하는 ASP 파일이 따로 있고 이런 식이죠. 아마 하나의 파일이 윈도우즈 프로그램의 함수 하나에 대응되는 경우도 많을 겁니다. 게다가 하나의 ASP 파일에서 복잡한 회계 프로그램처럼 몇 번씩 데이터베이스를 왕복하거나 하는 경우는 매우 드물다고 말할 수 있을 것입니다. 물론 사이트에 동시 접속자가 엄청나게 많은 경우에는 약간의 문제가 생길 수도 있습니다. 그런 경우에는 COM+ 컴포넌트를 사용해서 가용성을 증가시키는 등의 방법을 고려해 보아야겠죠. 그러나 동시 접속자의 수가 데이터베이스 연결 수는 아니라는 점을 감안하시구요. 제가 드리고 싶은 말씀은 동시 접속자가 만 단위 이하이면서 하나의 ASP 프로그램 파일에서 처리하는 데이타베이스 작업이 10 스텝 이하라면 말씀하신 병목 현상을 고민하는 것은 프로그래머들의 유희에 불과하지 않나라고 생각한다는 점입니다. ^_^ 저와 의견이 다른 분들도 계실 수 있겠습니다만 이는 어디까지나 저의 주관적인 생각이므로 그저 참고만 하시기 바랍니다. 감사합니다. |
IP 주소: 152.99.132.14
|
전체 3 건의 댓글이 존재합니다.
오마르 |
아~ 많은 도움이 됐습니다~ 감사합니다~~^^
|
2004-07-16 09:56 |
송원석 |
음, 그런데 제가 글을 다시 한 번 읽어보니 동시 접속자 만명은 조금 과하다는 느낌입니다. 서버의 사양에 따라서 많은 영향을 받겠지만 아마도 이 숫자는 훨씬 아래로 내려와야 하지 않을까 싶네요. 동시 접속자 수 백명 정도로 말을 정정하도록 하겠습니다. 흠흠... ^_^;;;
|
2004-07-16 13:31 |
오마르 |
하하~ 알겠습니다 ^^
|
2004-07-16 14:16 |
전체 2,095 건의 게시물,
84 페이지로 구성된
ASP, ASP.NET, IIS & Script 게시판의
67 페이지입니다.
게시물 | ||||
---|---|---|---|---|
465 | 2004-07-19 | 5,381 | ||
464 |
초보맨 |
2004-07-20 | 1,276 | |
463 | 2004-07-20 | 3,821 | ||
462 |
초보맨 |
2004-07-20 | 881 | |
461 | 2004-07-20 | 3,406 | ||
460 | 2004-07-17 | 3,158 | ||
459 | 2004-07-18 | 3,033 | ||
458 | 2004-07-18 | 3,013 | ||
457 | 2004-07-19 | 2,987 | ||
456 |
오마르 |
2004-07-16 | 1,262 | |
455 | 2004-07-16 | 3,138 | ||
454 |
궁금이 |
2004-07-16 | 1,085 | |
453 |
오마르 |
2004-07-15 | 845 | |
2004-07-16 | 3,493 | |||
451 |
오마르 |
2004-07-09 | 1,092 | |
450 | 2004-07-09 | 3,194 | ||
449 |
오마르 |
2004-07-08 | 1,034 | |
448 | 2004-07-08 | 3,470 | ||
447 |
오마르 |
2004-07-06 | 984 | |
446 |
오마르 |
2004-07-02 | 1,169 | |
445 |
오마르 |
2004-07-01 | 949 | |
444 | 2004-07-01 | 3,242 | ||
443 | 2004-06-30 | 3,228 | ||
442 | 2004-07-01 | 3,095 | ||
441 | 2004-07-01 | 3,146 |