Computer >> 컴퓨터 >  >> 프로그래밍 >> 프로그래밍

JSP의 isThreadSafe 속성이란? 스레드 안전성 완벽 정리

JSP의 isThreadSafe 속성이란?

isThreadSafe 속성은 JSP 페이지가 스레드로부터 안전(thread-safe)한지 여부를 지정하는 페이지 지시어(page directive)입니다. 기본적으로 모든 JSP는 스레드 안전하다고 간주되며, 이 경우 JSP 엔진은 여러 클라이언트의 요청을 동시에 멀티스레드 방식으로 처리할 수 있습니다.

반면 isThreadSafefalse로 설정하면, JSP 엔진은 한 번에 하나의 스레드만 해당 JSP를 실행하도록 보장합니다. 즉, 모든 요청이 순차적으로 처리되기 때문에 여러 스레드가 공유 자원에 동시에 접근해 발생할 수 있는 데이터 불일치나 경쟁 상태(race condition) 문제를 예방할 수 있습니다.

isThreadSafe 설정 방법

다음과 같이 page 지시어를 사용하여 isThreadSafe 옵션을 false로 설정할 수 있습니다.

<%@ page isThreadSafe = "false" %>

사용 시 주의 사항

isThreadSafe="false"로 설정하면 내부적으로 서블릿의 SingleThreadModel 인터페이스가 구현됩니다. 이 방식은 요청마다 새로운 서블릿 인스턴스를 생성하거나 요청을 대기열에 쌓아 처리하기 때문에 성능 저하와 메모리 오버헤드를 유발할 수 있습니다.

따라서 실무에서는 isThreadSafe 속성에 의존하기보다 다음과 같은 방법으로 직접 스레드 안전성을 확보하는 것이 권장됩니다.

  • 인스턴스 변수 대신 지역 변수(local variable) 사용
  • 공유 자원 접근 시 synchronized 블록 활용
  • 불변(immutable) 객체 설계
  • 필요한 경우 ThreadLocal 클래스 활용

결론적으로 isThreadSafe 속성은 JSP의 동시성 처리 방식을 제어하는 유용한 옵션이지만, 성능 특성을 충분히 이해한 후 신중하게 사용하는 것이 좋습니다.