개요 Virtual Thread는 일반 Thread보다 가볍기 때문에 Context Switching비용을 효과적으로 줄일 수 있습니다. 따라서, Context Switching이 많이 발생하는 환경에서 이를 사용한다면 처리량을 늘릴 수 있습니다. (참고 : Virtual Thread - https://nangmandeveloper.tistory.com/6) SpringBoot에서 Virtual Thread사용하기 JAVA21을 사용하는 SpringBoot에서 Virtual Thread를 간단히 사용할 수 있습니다. application.yml에서 해당 설정을 추가하면 됩니다. 이렇게 되면, Tomcat 내부적으로 사용하는 Thread를 Virtual Thread로 교체할 수 있습니다. 일반 작업을 수행..
개요 Spring에서 사용자의 요청을 처리하기 위해서 HTTP Connection이 수립되어야 합니다. 이러한 사용자와의 Connection을 Process로 관리하는 것은 불가능합니다. 자원소모가 너무 클 뿐더러, 이미 Tomcat자체가 Process로 동작하기 때문입니다. 만약 사용자의 Connection을 Process로 관리한다면, Connection마다 Process생성, 제거 등을 해야 하고, Tomcat과의 Process간 통신 방식을 따로 수립해 사용해야 합니다. Tomcat에서는 이러한 Connection을 Thread로 처리합니다. HTTP Connection Tomcat 9.0미만 버전에서는 IO(Input Output) Connector를 사용했습니다. IO Connector에서는 ..
개요 Java에서는 동시성 프로그래밍을 위해 Thread Class를 지원합니다. 이 Thread는 우리가 CS를 공부할 때 배웠던 Process, Thread의 Thread를 Java에서 구현한 것입니다. Thread를 사용하면 Process보다 많은 자원을 절약할 수 있습니다. 하지만, Thread를 그냥 사용한다면 많은 오버헤드가 발생합니다. Thread는 Kernel Thread, User Thread라는 두 종류가 있습니다. JVM은 User Thread를 Kernel Thread하나와 매칭하여 동작시킵니다. 따라서, Java로 Thread객체를 만들 때 Kernel단에 갔다 와야 할 것입니다. 그렇게 되면, System call, Interrupt, ISR등의 과정을 거쳐야 하기 때문에 비용이..
개요 Java19에서 Virtual Thread가 얼리억세스로 포함되었습니다. Java21에서는 Virtual Thread를 정식 기능으로 포함시켰습니다. Virtual Thread는 경량 스레드 모델입니다. 비슷한 모델로는 Go의 goroutine, Kotlin의 coroutine 등이 있습니다. Kotlin의 coroutine이 2017년 추가된 기능임을 감안하면, 6년이나 걸렸다는 것을 알 수 있습니다. 하지만 Virtual Thread가 Java21에 추가되며, 선택지가 하나 더 생겼습니다. 새로 서비스를 개발하는 입장에서는 Java + coroutine보다는 Only Java로 개발할 수 있을 것입니다. SpringBoot 3.2버전부터 Virtual Thread를 정식으로 지원하기 시작했습니다..