서블릿 풀링 사용 안함: 우수 사례 및 고려사항
애플리케이션이 애플리케이션의 내부에서 스레드를 작성하거나 요청 및 응답 오브젝트를 재사용하는 웹 컨테이너에 대해 고려하는 경우 요청 및 응답 풀링을 사용 안함으로 설정하려고 할 수 있습니다.
요청 및 응답 풀링 사용 안함
- 애플리케이션은 애플리케이션의 내부에서 스레드를 작성합니다.
서블릿 2.4 스펙은 다음을 말합니다.
요청 오브젝트의 SRV.4.10 수명 각 요청 오브젝트는 서블릿의 서비스 메소드의 범위 내 또는 필터의 doFilter 메소드의 범위 내에서만 올바릅니다. 컨테이너는 보통 요청 오브젝트 작성의 성능 오버레이를 피하기 위해 요청 오브젝트를 리사이클링합니다. 이전에 설명된 범위 밖의 요청 오브젝트에 대한 참조사항을 유지보수하는 것은 부정확한 결과를 가져올 수 있기 때문에 권장되지 않는다는 것을 개발자가 인지해야 합니다.
응답 오브젝트의 SRV.5.6 수명 각 응답 오브젝트는 서블릿의 서비스 메소드의 범위 내 또는 필터의 doFilter 메소드의 범위 내에서만 올바릅니다. 컨테이너는 보통 응답 오브젝트 작성의 성능 오버레이를 피하기 위해 응답 오브젝트를 리사이클링합니다. 이전에 설명한 범위 밖의 응답 오브젝트에 대한 참조를 유지보수할 경우 부정확한 동작이 야기될 수 있음을 개발자는 유의해야 합니다.
- 요청 및 응답 오브젝트 재사용의 웹 컨테이너 재사용에 대해
고려하는 경우. 이러한 오브젝트가 재사용되므로 서블릿 2.4의
스레드 안전 섹션에 설명된 것과 동일한 요청 또는 응답 오브젝트에 대한
액세스 권한을 가지도록 두 개의 개별 애플리케이션에 두 개의 요청에 대한
잠재력이 있습니다.
요청과 응답 오브젝트의 SRV.2.3.3.3 스레드 안전 구현은 스레드 안전이라고 보장하지 않습니다. 이는 요청 핸들링 스레드의 범위 내에서만 사용되어야 한다는 의미입니다.
요청 및 응답 오브젝트에 대한 참조사항은 결과 동작이 부정확할 수 있기 때문에 다른 스레드에서 실행 중인 오브젝트에 제공되지 않아야 합니다. 애플리케이션에서 작성되는 스레드가 컨테이너 관리 오브젝트(예: 요청 또는 응답 오브젝트)를 사용하는 경우, 서비스 메소드가 종료된 이후 해당 오브젝트에 액세스하는 것이 비결정적 문제점을 야기하기 때문에 해당 오브젝트가 서블릿의 서비스 라이프사이클 내에서만 액세스되어야 하고 그러한 스레드 자체에는 서블릿의 서비스 메소드의 라이프사이클 내에 라이프사이클이 있어야 합니다. 요청 및 응답 오브젝트가 스레드 안전이 아니라는 것을 명심하십시오. 해당 오브젝트가 다중 스레드에서 액세스되면 액세스는 동기화되거나 스레드 안전을 추가하기 위해 랩퍼를 통해 수행되어야 합니다(예: 요청 속성에 액세스하기 위한 메소드의 호출 동기화 또는 스레드 내의 응답 오브젝트에 대한 로컬 출력 스트림 사용).