커넥션이라 함은 데이터베이스의 연결을 얻어오는 작업이라고 하는건
다 아시겠지요..
책에 보면 대부분 커넥션은 현재 메서드에서 얻어오는 방식을 취하고 있습니다
태오님의 책중에서 후반부에서는 약간 난이도를 높여서 상속을 받고 난 후에
커넥션을 가져오는 방법을 취하고 있기도 합니다.
제가 자바를 했던 시절을 생각해서 한 두가지 정도 얘기해 보려 합니다.
먼저 커넥션 풀을 이용하지 않고서 그냥 현재 클래스에서 커넥션을 얻어오는
방법인데요.. 커넥션을 얻어오기 위해선 메소드에서 계속 SqlConnection 이 클래스를
부르고 뭐하구 하는 작업을 해야하니 좀 귀찮은 작업이 아닐수 없습니다.
객체지향 프로그래밍에선 메소드가 특정한 클래스의 인스턴스.. 즉 바로 사용할 수
있는 상태의 클래스를 리턴할 수 있는 구조가 있다는 거 다 알고 있을겁니다.
그렇다면 커넥션을 전문으로 리턴해 주는 메서드를 만드는게 더 효율적 이라는 것을
알수 있습니다..
namespace WebApplication1
{
/// <summary>
/// WebForm1에 대한 요약 설명입니다.
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
}
}
위와 같이 하면 메서드에서 단지 현재 클래스의 GetConnection 메서드만
호출함으로써 커넥션을 얻어 올 수 있는 겁니다..
객체 지향이라는게 재사용성이 용이 하다는 것은 다 아실건데.
위의 메서드 자체를 자신의 유틸리티 클래스에 포함 시켜서
유틸리티 클래스를 사용하겠다고 선언하고 항상 사용한다면
더 편하게 될듯 싶습니다..
물론 커넥션 스트링을 어디에 위치 시키는 것은 자신이 편한 곳에 하시면 됩니다.
웹이란 자체가 보안성이 약하기 때문에 C드라이브 바로 밑에 위치 시켜서
파일로 불러 오셔도 될거 같구요.. 뭐 책에서 나오는 방식을 쓰셔두 무방할 듯 보입니다.
단 개발자가 고치기 편한곳에 그런 설정 파일들을 놓는 것은 기본이겠지요.
그럼 더 한가지 위 메서드도 상당한 문제점을 가지고 있습니다.
메서드를 실행하게 된다면 커넥션을 얻어 오는 시점에서 상당한 부하가 걸리게
됩니다.. 약간의 시간이 낭비가 되지요.
※커넥션 풀이라 함은 데이터베이스의 커넥션을 미리 얻어와서 모아둔 웅덩이 같은 겁니다.. 거기서 필요한 커넥션을 가지고 와서 반납하게 되면 실제적인 커넥션은 얻지 않아도 되고 이미 연결된 커넥션을 받아서 잠시 사용하고 다시 돌려주게 되므로
커넥션을 얻게될 때의 시간을 아낄 수 잇습니다.
그럼 커넥션 풀링 기법을 써야하겠는데 커넥션 풀은 제가 고수가 아닌 관계로
제작은 못하겠습니다.. 어딘가에 사용할 수 있는 커넥션 풀이 있을겁니다.
자바에서는 PoolMan이라는 공짜 클래스가 있는데 그것을 사용하여
위의 방식으로 리턴 시켜줘서 받아서 사용하면 그만 이었습니다.
^^;; 좀 주저리주저리군요.. 암튼 커넥션은 웹페이지에서 가장 시간을 단축 시킬 수
있는 한가지 요소라 생각합니다..
제가 위에서 적은 방식으로는 속도의 향상보다는 개발자가 적은 코딩양으로
커넥션을 얻는 방법이지 빠른것과는 무관하군요..
좀더 고차원적이 된다면 자신만의 유틸리티 클래스를 만들어서
거기서 커넥션 풀을 만들어주는 클래스를 만들고 그 클래스를 사용해서
커넥션 얻어오는 시간을 단축시켜주는게 상당히 유용하리라 생각합니다.
제가 좀 허접해서리 ^^;;
여기서 conn 을 static 으로 정해주어야 하지 않나요? 그렇지 않다면 어차피 Getconnection 을 포함하는 클래스를 new 해야하는데. 이 클래스 오브젝트던 아님 conn 이 static 으로 설정되어야 할 듯 하네여,. 근데 에이에스피 닷넷에서 글로벌 멤버는 어떻게 만듭니까?? -_- 그리고 open 시에 비용이 더 마니 드는게 아닌
첫댓글 이곳에 가면 위에 말씀하신것 처럼 많은 정보와 코드를 얻을수 있읍니다. (영어) http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/ddag.asp
엇.. 두빠님... 말씀하신 URL에서 404 오류가..ㅠ_ㅠ 근데 .NET은 기본적으로 커넥션 풀링을 사용하도록 되어 있습니다... 자바는 개발자가 직접 구현해야 하지만... 성능은... 딱히 .NET이 좋다고 말씀드리기가 좀 거시기하군여..ㅡ,.ㅡ
maro 님 좋은 글 감사해요. ㅎㅎ
저도 커넥션 풀링을 기본적으로 사용한다는 것은 들었습니다.. ㅎㅎ. 근데도 왠지 다른 풀링 클래스를 사용한다면 더 좋을거 같다는 생각에..^^;;
개인적으로는 COM+의 JITA와 객체 풀링을 함께 사용하는 것이 가장 좋은 것 같습니다. 지금 프로젝트에 적용중인데 상당히 괜찮아보이네요...^^
도통 뭔소린지 모르겠으나 이해가 될때까지 또 읽어봐야겠당 @.@ 다른세상이야기같다 -ㅁ-
여기서 conn 을 static 으로 정해주어야 하지 않나요? 그렇지 않다면 어차피 Getconnection 을 포함하는 클래스를 new 해야하는데. 이 클래스 오브젝트던 아님 conn 이 static 으로 설정되어야 할 듯 하네여,. 근데 에이에스피 닷넷에서 글로벌 멤버는 어떻게 만듭니까?? -_- 그리고 open 시에 비용이 더 마니 드는게 아닌
Web.config파일에 <appSetting>을 통해서도 connect설정을 하던데요...그리구 글로버멤버가 전역변수개념인가요? 그렇다면 Global.asax 파일에서 해주시는걸로 아는데요...^^a
매드퍼피님... 웹에서의 Static이라.......... 거참 이해가..것도 특히 Connection객체가 static이란건 더 도무지..