728x90
반응형
SMALL
C#, Oracle을 사용한 프로그램을 만들면서 Oracle Connection에 대해 궁금점이 생겼다.
1. 최초 Connection을 한번 맺어놓고, 프로그램 종료 시 Connection을 끊는 경우
2. CRUD를 실행할 때마다 Connection/Disconnection을 하는 경우
두 가지 경우에 대해 장단점과 어떤 것을 요즘 많이 사용하는지도 알아보도록 하자.

 

■ 지속적인 Connection 유지 (Persistent/Open Connection)

1. 프로그램 시작 시 OracleConnection을 열고, 종료 시까지 계속 열어두는 방식이다.

2. 장점

  - 빠른 응답 속도: 매번 Connection을 열고 닫는 오버헤드가 없다.

  - 빈번한 DB 접근에 유리: 수많은 쿼리를 주기적으로 실행하는 경우 성능이 향상된다.

3. 단점

  - 자원 낭비: 사용하지 않는 시간에도 Connection이 유지되므로 DB 서버의 자원을 계속 점유하게 된다.

  - DB Connection Full 고갈 위험: 여러 클라이언트가 동시에 Connection을 유지하면 Connection Full이 부족해질 수 있고,

    그로 인해 접속자체가 안될 경우가 생긴다.

  - 에러 발생 시 복구 어려움: 중간에 네트워크나 DB 문제가 생기면 Connection이 죽고 전체 프로그램이 영향을 받을 수 있다.

  - 동시 작업 대응 시, 직렬 처리만 가능하다.

    즉, 하나의 커넥션은 한 번에 하나의 쿼리만 실행할 수 있으므로, 동시에 여러 쿼리를 해당 Connection에서 병렬로 실행할 수는 없다.

    이 말은 async/await를 사용하는 경우 동시에 병렬로 쿼리를 2개 실행하는 경우, InvalidOperationException에러가 발생할 수 있다.

 

■ 필요시 Connection 열고 작업 후 닫기 (Open on Demand)

1. CURD 할 때마다 Connection, Disconnection 한다.

2. 장점

  - 자원 효율적: Connection을 오래 점유하지 않기 때문에 서버 자원을 절약할 수 있다.

  - 안정성: 네트워크 문제가 있어도 Connection을 짧게 쓰기 때문에 문제가 생겨도 영향이 제한적이다.

  - 스케일 확장 유리: 다수의 사용자에게도 Connection Full이 효율적으로 배분된다.

3. 단점

  - 응답 속도 약간 느릴 수 있다. : 매번 Connection을 여닫기 때문에 약간의 오버헤드가 발생한다.

  - 빈번한 호출 시 성능 저하를 초래할 수 있다. : 짧은 시간에 수백 번 Connection을 열고 닫으면 오히려 비효율적이다.

 

■ 요즘의 트렌드

1. 필요시 Connection 열고 작업 후 닫기 (Open on Demand) + Connection Pooling을 많이 사용한다.

2. .NET의 OracleConnection은 자동으로 Connection Pooling을 사용하므로, Connection을 자주 열고 닫아도 실제 Connection은 재사용되기

    때문에, 지속적인 Connection 유지 (Persistent/Open Connection)와 성능 및 속도 차이는 크게 나지 않는다.

3. 단, 배치 처리나 실시간으로 수천 번 DB를 호출하는 특수 상황에서는 Connection을 열어두는 방식이 더 효율적일 수 있으므로,

    케이스에 따라 판단해야 한다.

728x90
반응형
LIST

+ Recent posts