DbContext 풀링

냐옹·2024년 4월 9일
0

.NET

목록 보기
13/31

DbContext 풀링

DbContext 풀링은 마치 수영장의 장난감처럼 DbContext라는 중요한 도구를 여러번 만들고 버리는 대신에 사용하지 않을 때는 다시 수영장에 넣어두고 필요할 때 다시 꺼내쓰는 방법이다. 이렇게 하면 매번 새 장난감을 사지 않아도 되므로 시간과 자원을 아낄 수 있다. 이 기능은 특히 웹 어플리케이션과 같이 요청이 많은 환경에서 유용하게 사용될 수 있다.

DbContext 풀링을 활성화하면 EF core는 요청이 들어올 때마다 풀에서 DbContext 인스턴스를 가져와서 사용하고, 요청 처리가 끝나면 인스턴스를 다시 풀로 반환한다. 이 과정에서 DbContext의 상태는 반드시 초기화되어야 한다. EF Core는 인스턴스를 풀로 반환하기 전에 내부 상태를 자동으로 초기화한다.

DbContext 풀링을 사용할 때는 몇가지 고려해야 할 사항이 있다.

  • 풀크기
     최대 128개의 인스턴스를 풀에 저장할 수 있으나, 너무 큰 풀 크기는 메모리 사용량 증가로 이어질 수 있다.
     너무 적게 설정하면 어플리케이션이 필요로 하는 DbContext 인스턴스를 즉시 얻지 못할 것이고, 너무 높으면 사용되지 않는 DbContext 인스턴스로 인해서 메모리 낭비가 초래된다.
  • 상태관리
     DbContext 인스턴스는 요청 간에 상태를 공유하면 안된다. EFcore는 풀에서 인스턴스를 재사용하기 전에 상태를 초기화한다. 그러나 개발자가 추가적으로 상태를 관리할 필요가 없도록 설계해야 한다.
  • 추가
     DbContext 풀링은 성능 최적화의 한 방법이나, 모든 경우에 적합한 것은 아니다.

어떻게 쓰지?
1. 시작할 때 준비
 프로그램이 시작할 때 DbContext 장난감 몇개를 미리 만들어서 수영장에 넣어놓는다.
2. 필요할 때 꺼내쓰기
 데이터베이스 작업이 필요할 때 이 수영장에서 DbContext를 하나 꺼내서 사용한다.
3. 다 쓰면 돌려놓기
 작업이 끝나면 DbContext를 초기 상태로 돌려놓고 다시 수영장에 넣는다. 다음에 누군가 또 쓸 수 있게

어떤 이점이?

  • 속도가 향상되고 자원이 절약 된다.

주의할 점은?

  • DbContext를 다시 수영장에 넣기 전에 잘 청소해서 처음 상태로 만들어야 한다. 그래야 다음에 쓸 때 문제가 안일어난다.

DbContextPooling을 쓸때는 AddDbContextPool을 설정할 필요가 없이 그냥 풀링만 설정하면 된다.

0개의 댓글