{"id":1950,"date":"2025-05-09T18:53:24","date_gmt":"2025-05-09T09:53:24","guid":{"rendered":"https:\/\/skanto.co.kr\/?p=1950"},"modified":"2025-05-09T19:00:38","modified_gmt":"2025-05-09T10:00:38","slug":"java-virtual-threads-and-enterprise-scalability","status":"publish","type":"post","link":"https:\/\/skanto.co.kr\/?p=1950","title":{"rendered":"Java Virtual Threads and Enterprise Scalability"},"content":{"rendered":"\n<p>Java\uc5b8\uc5b4\ub85c Enterprise \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc791\uc131\ud558\uac70\ub098 \uae30\uc874\uc758 Enterprise \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc774 \uc788\ub2e4\uba74 Virtual Thread\uc5d0 \uad00\uc2ec\uc744 \ub458 \ud544\uc694\uac00 \uc788\ub2e4. Virtual Thread\ub294 Java 21\uc5d0 \uc18c\uac1c\ub41c \uc0c8\ub85c\uc6b4 \uae30\ub2a5\uc73c\ub85c \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \ud655\uc7a5\uc131(Scalability)\ub97c \ud68d\uae30\uc801\uc73c\ub85c \ub192\uc5ec\uc8fc\uba70 \ud504\ub85c\uc81d\ud2b8\uc5d0 \ub4dc\ub294 \ube44\uc6a9\uc744 \uc904\uc5ec \uc900\ub2e4. \uc774 \ubb38\uc11c\ub294 \ubb38\uc81c\uc758 \uadfc\uac04\uc744 \ub4e4\uc5ec\ub2e4 \ubd04\uc73c\ub85c\uc368 Virtual Thread\ub97c \ud65c\uc6a9\ud560 \uacbd\uc6b0 \uc65c \ud655\uc7a5\uc131\uc774 \uac1c\uc120 \ub418\ub294\uc9c0\ub97c \uc124\uba85\ud558\uace0\uc790 \ud55c\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Platform Thread<\/h2>\n\n\n\n<p> Java 21 \uc774\uc804\uc5d0 \uad6c\ud604\ub41c Thread\ub97c Platform Thread \ub77c\uace0\ud558\uba70 \uadfc\ubcf8\uc801\uc73c\ub85c OS(Operating System) Thread\ub97c Wrapping\ud55c \ud615\ud0dc\ub85c \uad6c\ud604\ub418\uc5b4 \uc788\ub2e4. \ub530\ub77c\uc11c Platform Thread\uc640 OS Thread\uac04\uc758 \uad00\uacc4\ub294 1:1 \ub9e4\ud551\uc774\ub77c\uace0 \uc0dd\uac01\ud558\uba74 \ub41c\ub2e4.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1400\/format:webp\/1*aQvc8x6hNyW14FIWj3hgkA.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Platform Threads in the JVM<\/figcaption><\/figure>\n<\/div>\n\n\n<p>\uc704 \uadf8\ub9bc\uc744 \ubcf4\uba74 \uac00\uc7a5 \ubc11 \ubd80\ubd84\uc740 CPU Core \ub97c \ub098\ud0c0\ub0b4\uba70 OS \ub808\ubca8\uc5d0\uc11c\ub294 OS Thread\uac00 \uc788\uace0 JVM\uc5d0 \uc788\ub294 Platform Thread\ub294 OS Thread\uc640 1:1 \uad00\uacc4\ub97c \uac00\uc9c4\ub2e4. Platform Thread\uc5d0\uc11c \uc2e4\ud589\ub418\ub294 \ucf54\ub4dc\ub294 OS Thread \uc0c1\uc5d0\uc11c \ub3d9\uc791\ud558\uba70 \uc774\ub294 \uacb0\uad6d \uac00\uc6a9\ud55c CPU Core\ub4e4 \uc911 \ud558\ub098\ub97c \uc774\uc6a9\ud558\ub294 \ud615\ud0dc\uac00 \ub41c\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Limitations of Platform Threads<\/h2>\n\n\n\n<p>JVM\uc5d0\uc11c\ub294 \uc81c\ud55c\ub41c \uc218\uc758 Platform Thread\ub9cc \uc0dd\uc131 \uac00\ub2a5\ud558\ub2e4. \uc774\ub294 \uac1c\ubcc4 Platform Thread\uac00 \ub514\ud3f4\ud2b8 1MB\uc758 \uba54\ubaa8\ub9ac\ub97c \ucc28\uc9c0\ud558\uae30 \ub54c\ubb38\uc774\uba70 \uc774\ub85c \uc778\ud574 \uac12\ube44\uc2fc \uc790\uc6d0\uc73c\ub85c \uc778\uc2dd\ub418\uae30\ub3c4 \ud55c\ub2e4. OS\ub294 \uc77c\ubc18\uc801\uc73c\ub85c \ud558\ub098\uc758 \ud504\ub85c\uc138\uc2a4\ub97c \uc704\ud574 \uc2e4\ud589\ud560 \uc218 \uc788\ub294 OS Thread \uac1c\uc218\uc5d0 \uc81c\ud55c\uc744 \ub450\uace0 \uc788\ub2e4. JVM \ub0b4\uc5d0\uc11c \uc0dd\uc131\ud560 \uc218 \uc788\ub294 Platform Thread\uc758 \uac1c\uc218\ub294 \uad81\uadf9\uc801\uc73c\ub85c JVM\uc774 \uad00\ub9ac\ud558\ub294 \uba54\ubaa8\ub9ac\uc640 OS\uc5d0 \uc758\uc874\ud558\uac8c \ub41c\ub2e4. \uc608\ub97c\ub4e4\uba74 \uc560\ud50c\uc758 Mac Mini\uc5d0\uc11c 1G \uba54\ubaa8\ub9ac\ub85c \uc2e4\ud589\ud558\ub294 \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c\ub294 \uc57d 4,000\uac1c\uc758 Platform Thread\ub97c \uc0dd\uc131\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p>\uc774\ub294 Enterprise \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \ud655\uc7a5\uc131\uc5d0\ub294 \uc88b\uc740 \uc18c\uc2dd\uc774 \ubabb\ub41c\ub2e4. \uc65c\ub098\ud558\uba74 \uc77c\ubc18\uc801\uc73c\ub85c \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158 \uc11c\ubc84\uc5d0\uc11c \uac1c\ubcc4 \uc0ac\uc6a9\uc790 Request\ub294 \ud558\ub098\uc758 Java Platform Thread\uc640 \ub9e4\ud551\ub418\uba70 \uc774 User Request\uc758 \uc2e4\ud589\uc774 \uc644\uc804\ud788 \ub05d\ub0a0 \ub54c\uae4c\uc9c0 \ud574\ub2f9 Thread\ub294 \ubc18\ud658\ub418\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc774\ub2e4. \uc544\ub798 \uadf8\ub9bc\uc740 Enterprise \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \uc804\ud615\uc801\uc778 \uc608\ub97c \ubcf4\uc5ec\uc900\ub2e4. \uc5ec\uae30\uc11c Web \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc740 \ubaa8\ub4e0 User Request\ub97c Platform Thread\ub85c \ucc98\ub9ac\ud558\uace0 \uc788\ub2e4 (\ube68\uac04\uc0c9\uc758 \uc138\ub85c \ubc29\ud5a5 \ud654\uc0b4\ud45c\ub294 Platform Thread\ub97c \ub098\ud0c0\ub0c4). \uc774\ub294 <strong>Thread Per Request<\/strong> \ubaa8\ub378\ub85c Tomcat\uacfc \uac19\uc740 \ub300\ubd80\ubd84\uc758 Blocking \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158 \uc11c\ubc84\uc5d0\uc11c \uc801\uc6a9\ub418\uace0 \uc788\ub2e4.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1400\/format:webp\/1*Ns4CjCPaGXf_vXbZviZXyA.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">A Typical Enterprise Web Application<\/figcaption><\/figure>\n<\/div>\n\n\n<p>\uc774\ub7f0 \uc804\ud615\uc801\uc778 Web \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc740 User Request\ub97c \ucc98\ub9ac\ud558\uae30 \uc704\ud574 \uc815\ud574\uc9c4 \uac1c\uc218 \uc774\uc0c1\uc73c\ub85c Platform Thread\ub97c \uc0dd\uc131\ud560 \uc218 \uc5c6\uc74c\uc744 \uc758\ubbf8\ud55c\ub2e4. \uadf8\ub807\uc9c0 \uc54a\ub2e4\uba74 \uba54\ubaa8\ub9ac \ubd80\uc871 \ub610\ub294 \uadf8\uc678 \ub2e4\ub978 \ub9ac\uc18c\uc2a4\uac00 \ubd80\uc871\ud574\uc9c0\ub294 \uc0c1\ud669\uc744 \ub9de\uc774\ud558\uac8c \ub420 \uac83\uc774\ub2e4. \ub530\ub77c\uc11c \uc774\ub7f0 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud574 \uc77c\ubc18\uc801\uc73c\ub85c \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158 \uc11c\ubc84\ub294 Thread Pool\uc744 \uc774\uc6a9\ud558\uc5ec Thread\ub97c Pooling\ud558\ub3c4\ub85d \ucc98\ub9ac\ud55c\ub2e4.<\/p>\n\n\n\n<p>Tomcat \uc11c\ubc84\ub294 default\ub85c 200\uac1c\uc758 Thread\ub97c Pool\ub85c \uc0dd\uc131\ud55c\ub2e4. \uc774\ub294 \ub3d9\uc2dc \uc811\uc18d\uc790 \uc218\uac00 200\uba85\uc774 \ub420 \ub54c\uae4c\uc9c0\ub294 \ubb38\uc81c\uc5c6\uc774 \ub3d9\uc791\ud55c\ub2e4. \uadf8\ub7ec\ub098 \ub3d9\uc2dc \uc811\uc18d\uc790 300\uba85\uc774 \uc11c\ubc84\uc5d0 \ubab0\ub9ac\uba74 \uc5b4\ub5bb\uac8c \ub420\uae4c? \uc0ac\uc6a9\uc790 Request \uc911 200\uac1c\ub294 Thread Pool\uc758 Thread\uc5d0 \uc758\ud574 \ucc98\ub9ac\ub420 \uac83\uc774\uc9c0\ub9cc \ub098\uba38\uc9c0 100\uac1c\ub294 \uc790\uae30 \ucc28\ub840\uac00 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub824\uc57c \ud558\uba70 \uc774\ub294 \uc131\ub2a5 \ubb38\uc81c\ub97c \uc57c\uae30\uc2dc\ud0a8\ub2e4. \ub300\ubd80\ubd84\uc758 Enterprise \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c CPU \ud65c\uc6a9\uc728\uacfc \uba54\ubaa8\ub9ac\ub294 \uc774 \uc0c1\ud669\uc5d0\uc11c\ub3c4 \uc784\uacc4\uce58\uc5d0 \ub3c4\ub2ec\ud558\uc9c0 \uc54a\ub294\ub2e4. \uc694\uc57d\ud558\uba74 \ud655\uc7a5\uc131 \uc774\uc288\ub97c \ubc1c\uc0dd\uc2dc\ud0a4\ub294 \uc694\uc778\uc740 CPU \ub610\ub294 \uba54\ubaa8\ub9ac\uac00 \uc544\ub2cc Thread\uc758 \uac1c\uc218\uc758 \uc81c\uc57d\uc73c\ub85c \uc778\ud55c \uac83\uc77c \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Scaling to Large Number of Users<\/h2>\n\n\n\n<p>\ub9ce\uc740 \uc218\uc758 \uc0ac\uc6a9\uc790\ub97c \ucc98\ub9ac\ud560 \uc218 \uc788\ub3c4\ub85d \ud655\uc7a5\ud560 \uc218 \uc788\ub294 \ud55c\uac00\uc9c0 \ubc29\ubc95\uc740 \uc11c\ubc84 \uc7a5\ube44\uc5d0 \uba54\ubaa8\ub9ac\ub098 CPU \uac19\uc740 \ub9ac\uc18c\uc2a4\ub97c \ucd94\uac00\ud558\ub294 \uac83\uc774\ub2e4. \uc774\ub807\uac8c \ud558\ub294 \uac83\uc744 Vertical Scaling\uc774\ub77c\uace0 \ud55c\ub2e4.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1400\/format:webp\/1*bAnhXrC_l_qVTJZRfZItYQ.png\" alt=\"\" style=\"width:801px;height:auto\"\/><figcaption class=\"wp-element-caption\">Vertical Scaling of Applications<\/figcaption><\/figure>\n<\/div>\n\n\n<p>\ub610\ub294, \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158 \uc778\uc2a4\ud134\uc2a4 \uc218\ub97c \ub298\ub9b0 \ud6c4 \ub4e4\uc5b4\uc624\ub294 \uc694\uccad\uc744 Load Balancer\uac00 \uc774\ub4e4 \uc778\uc2a4\ud134\uc2a4\ub85c Routing \ud558\ub3c4\ub85d \ucc98\ub9ac\ud560 \uc218 \uc788\ub2e4. \uc774 \uac19\uc740 \ubc29\ubc95\uc744 Horizontal Scaling\uc774\ub77c\uace0 \ud55c\ub2e4.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1400\/format:webp\/1*M4V0HxlduMt_25i5SgcifA.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Horizontal Scaling of Applications<\/figcaption><\/figure>\n<\/div>\n\n\n<p>\ub9ce\uc740 \uc0ac\uc6a9\uc790\ub97c \ucc98\ub9ac\ud558\ub3c4\ub85d Enterprise \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ud655\uc7a5\ud558\uace0\uc790 \ud560 \uacbd\uc6b0 \ub2e4\uc74c\uacfc \uac19\uc774 3\uac00\uc9c0\uc758 \ubc29\ubc95\uc73c\ub85c \uc811\uadfc\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\ucd5c\uc801\uc758 \uc0ac\uc6a9\uc790 \uc218\ub97c \ucc98\ub9ac\ub97c \uc758\ud55c \uac1c\ubcc4 Instance \ucd5c\uc801\ud654<\/li>\n\n\n\n<li>Vertical Scaling<\/li>\n\n\n\n<li>Horizontal Scaling<\/li>\n<\/ul>\n\n\n\n<p>\uc774 \ubc29\ubc95\ub4e4\uc740 \ud55c\uac00\uc9c0 \uc911\ub300\ud55c \ubb38\uc81c\uc810\uc744 \ub0b4\ud3ec\ud558\uace0 \uc788\ub2e4. Horizontal\uacfc Vertical Scaling\uc744 \ud65c\uc6a9\ud560 \uacbd\uc6b0 \ud504\ub85c\uc81d\ud2b8 \ube44\uc6a9\uc774 \uc99d\uac00\ud55c\ub2e4. \uc65c\ub0d0\ud558\uba74 \uc7a5\ube44\uc640 \ub9ac\uc18c\uc2a4\ub97c \ub300\uc5ec \ub610\ub294 \uad6c\ub9e4\ub97c \ud574\uc57c\ud558\uae30 \ub54c\ubb38\uc774\ub2e4. \ud55c\uac00\uc9c0 \ud65c\uc6a9\ud560 \uc218 \uc788\ub294 \ubc29\ubc95\uc73c\ub85c Horizontal\uacfc Vertical Scaling\uc740 \uc801\uac8c\ud558\uba74\uc11c \uac1c\ubcc4 Instance\ub97c \ub354\uc6b1 \ucd5c\uc801\ud654 \ud558\ub294 \uac83\uc774\ub2e4.<\/p>\n\n\n\n<p>\uc790 \uadf8\ub7fc, \ud655\uc7a5\uc131 \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud558\ub294 \uadf8 \uadfc\uac04\uc744 \ub4e4\uc5ec\ub2e4 \ubd04\uc73c\ub85c\uc368 \ucd5c\uc801\ud654 \ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574 \uc54c\uc544\ubcf4\uc790.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Blocking in Platform Threads<\/h2>\n\n\n\n<p>\uad6c\uccb4\uc801\uc778 \uc608\ub97c \ud65c\uc6a9\ud558\uc5ec Platform Thread\uac00 \ub3d9\uc791\ud560 \ub54c \uc5b4\ub5a4 \uc77c\uc774 \ubc1c\uc0dd\ub418\ub294\uc9c0 \uc0b4\ud3b4\ubcf4\uc790. \uc544\ub798 \uadf8\ub9bc\uc740 Platform Thread\uc5d0 \uc758\ud574 \ucc98\ub9ac\ub418\ub294 User Request\ub97c \ubcf4\uc5ec\uc8fc\uba70 \uc774\ub54c \uc774 Platform Thread\ub294 Thread Pool\uc5d0\uc11c \uac00\uc838\uc628 \uac83\uc73c\ub85c \ubcf4\uba74 \ub41c\ub2e4.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1400\/format:webp\/1*WVkZfyGfwNv1m6wlSjVIvw.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">IO and CPU time on a Platform Thread<\/figcaption><\/figure>\n<\/div>\n\n\n<p>User Request\ub294 DB\uc5d0\uc11c \ub370\uc774\ud130\ub97c \uc77d\uc5b4\uc624\uace0 micro service 1 \uc5d0\uc11c \uadf8 \uc678\uc758 \uc815\ubcf4\ub97c \uc5bb\uc5b4\uc628 \ub2e4\uc74c \ucd5c\uc885 \uacb0\uacfc\ub97c \ubc18\ud658\ud55c\ub2e4. Thread\uac00 \uc218\ud589\ud55c CPU\uc5f0\uc0b0\uc740 \ub179\uc0c9\uc73c\ub85c IO\uc5f0\uc0b0\uc740 \ubd89\uc740\uc0c9\uc73c\ub85c \ud45c\uc2dc\ud588\ub2e4. Thread\ub294 IO \ub3d9\uc791\uc744 \ub300\uae30\ud558\ub294 \ub3d9\uc548\uc5d0 \uba48\ucd98 \uc0c1\ud0dc\ub85c \uc788\uc5b4 \ub2e4\ub978 User Request\ub97c \ucc98\ub9ac\ud560 \uc218\uac00 \uc5c6\ub2e4. IO \ub3d9\uc791\uc774 \uc9d1\uc57d\uc801\uc778 \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc740 \uc4f0\ub808\ub4dc\uac00 \ub300\ubd80\ubd84 IO \ub3d9\uc791 \ub300\uae30\uc0c1\ud0dc\ub85c \uc18c\ube44\ud558\uac8c \ub41c\ub2e4. \ub530\ub77c\uc11c Platform Thread\ub294 user request\uac00 \ubaa8\ub450 \uc885\ub8cc\ud560 \ub54c\uae4c\uc9c0 \ub300\uae30\uc0c1\ud0dc\ub85c \uc788\uc5b4\uc57c \ub41c\ub2e4.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\uac04\ub2e8\ud788 \ub9d0\ud558\uba74 \ud544\uc694 \uc774\uc0c1\uc73c\ub85c \uc624\ub7ab\ub3d9\uc548 \uc4f0\ub808\ub4dc\ub97c \uc7a1\uace0 \uc788\uae30 \ub54c\ubb38\uc5d0 \uc774\ub294 \ud655\uc7a5\uc131\uc744 \uc800\ud574\ud558\ub294 \uadfc\ubcf8\uc801\uc778 \uc6d0\uc778\uc774 \ub41c\ub2e4.<\/p>\n<\/blockquote>\n\n\n\n<p>\uc774\ub7f0 \ubb38\uc81c\ub85c \uc778\ud574 <strong>Reactive Framework<\/strong>\uc774\ub77c\ub294 \ub2e4\uc591\ud55c \ud615\ud0dc\uc758 non blocking \ud574\uacb0\ucc45\ub4e4\uc774 \ub098\ud0c0\ub098\uac8c \ub41c\ub2e4. Spring Boot\ub294 Spring WebFlux\ub77c\ub294 \uc774\ub984\uc758 \uc628\uc804\ud55c \uc2a4\ud0dd\uc73c\ub85c \uad6c\uc131\ub418\uba70 \uc774\ub294 Project Reactor\ub77c\ub294 Reactive library\ub97c \uae30\ubc18\uc73c\ub85c \ud55c\ub2e4. \uadf8\ub7ec\ub098 non blocking IO\uc758 \ud504\ub85c\uadf8\ub798\ubc0d \ubaa8\ub378\uc740 \uc9c1\uad00\uc801\uc774\uc9c0\uac00 \uc54a\ub2e4. \ud504\ub85c\uadf8\ub798\uba38\ub4e4\uc740 \uc77c\ubc18\uc801\uc778 \ud504\ub85c\uadf8\ub798\ubc0d \uc2a4\ud0c0\uc77c\uc778 imperative \ud615\ud0dc\uc5d0\uc11c reactive \ud615\ud0dc\ub85c \uac1c\ubc1c \uc2a4\ud0c0\uc77c\uc5d0 \ubcc0\ud654\ub97c \uc918\uc57c \ud55c\ub2e4. \uc774\ub7f0 \ubcc0\ud654\ub97c \ub9de\uc774\ud558\uba74 \uac1c\ubc1c\uc790\ub294 \uc2e4\uc218\ub97c \ud55c\ub2e4\uac70\ub098 \ub514\ubc84\uae45\uc5d0 \uc5b4\ub824\uc6c0\uc744 \uacaa\uc744 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p>\uc774\uc640 \uac19\uc740 \ud655\uc7a5\uc131 \ubb38\uc81c \ud574\uacb0\uc744 \uc704\ud55c \uc77c\ud658\uc73c\ub85c 2018\ub144 \uc790\ubc14 \uc5d4\uc9c0\ub2c8\uc5b4\ub4e4\uc740 Project Loom\uc774\ub77c\ub294 \ud504\ub85c\uc81d\ud2b8\ub97c \ucd9c\ubc94\uc2dc\ud0a8\ub2e4. \uc774 \ub2f9\uc2dc Fiber(\uc12c\uc720)\ub77c\ub294 \uc774\ub984\uc73c\ub85c \uace0\uc548\ud574 \ub0b8 \uac83\uc774 \uc9c0\uae08\uc5d0 \uc640\uc11c Virtual Thread\ub77c \ubd88\ub9ac\uace0 \uc788\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Virtual Threads to the rescue<\/h2>\n\n\n\n<p>JVM\uc5d0\uc11c Virtual Thread\ub294 Thread \ud074\ub798\uc2a4\uc758 \uacbd\ub7c9\ud654\ub41c \uad6c\ud604\uccb4\uc774\ub2e4. Virtual Thread\ub97c \uc0dd\uc131\ud558\ub294 \uac83\uc740 String \uac1d\uccb4 \uc0dd\uc131\ub9cc\ud07c \ube60\ub974\uba70 Platform Thread\uc640 \ub2ec\ub9ac \uac12\ube44\uc2fc \uc790\uc6d0\ub3c4 \uc544\ub2c8\ub2e4. \uc0ac\uc2e4 JVM\uc5d0\uc11c \uc218 \ubc31\ub9cc\uac1c\uc758 Virtual Thread\ub97c \uc0dd\uc131 \ud558\ub354\ub77c\ub3c4 \uc11c\ubc84\ub294 \ub2e4\uc6b4\ub418\uc9c0 \uc54a\ub294\ub2e4. \ud604\uc7ac\ub85c\uc11c\ub294 \ub2e8\uc9c0 Virtual Thread\ub97c IO \uc624\ud37c\ub808\uc774\uc158 \ub3d9\uc548 \uc8fc\uc694 \uc790\uc6d0\uc744 \uc810\uc720\ud558\uc9c0 \uc54a\ub294\ub2e4\uc640 \uac19\uc740 \uc7a5\uc810\uc744 \uac00\uc9c4 Thread\uc815\ub3c4\ub85c \uc0dd\uac01 \ud558\uc790.<\/p>\n\n\n\n<p>\uc544\ub798\uc5d0 Virtual Thread\uc5d0\uc11c \uc2e4\ud589\ub418\ub294 <em>handleRequest()<\/em> \uba54\uc18c\ub4dc \uc608\uc81c\uac00 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Start a new Virtual Thread. No name is associated with thread \nThread thread = Thread.startVirtualThread(() -&gt; handleUserRequest())<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\ud558\uc9c0\ub9cc \ub9c9\ud6c4\uc5d0\uc11c\ub294 Virtual Thread\uac00 \uc5b4\ub5bb\uac8c \ub3d9\uc791\ud560\uae4c?<\/h3>\n\n\n\n<p>CPU\uad00\ub828 \uc5f0\uc0b0\uc744 \uc704\ud574\uc11c\ub294 \uc2e4\uc9c8\uc801\uc73c\ub85c Platform Thread\ub97c \uc774\uc6a9\ud558\uace0 IO \uc624\ud37c\ub808\uc774\uc158 \ub3d9\uc548\uc5d0\ub294 \uc5b4\ub5a0\ud55c \uc911\uc694\ud55c \uc790\uc6d0\ub3c4 \uc810\uc720\ud558\uc9c0 \uc54a\uace0 \ub300\uae30 \uc0c1\ud0dc\ub97c \uc720\uc9c0\ud55c\ub2e4. \uc544\ub798 \uadf8\ub9bc\uc5d0\uc11c\uc640 \uac19\uc774 Virtual Thread\uc5d0\uc11c \uc2e4\ud589\ub418\ub294 \ub2e8\uc21c\ud55c \uc0ac\uc6a9\uc790 \uc694\uccad(request)\uc744 \ud55c \ubc88 \uc0dd\uac01\ud574 \ubcf4\uc790.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1400\/format:webp\/1*3V_NQdGaPuoz90hl47UzKw.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Virtual Thread uses Platform Threads (Carrier Threads)<\/figcaption><\/figure>\n<\/div>\n\n\n<p>\ud575\uc2ec\uc801\uc73c\ub85c, Request \ucc98\ub9ac\ub97c \uc704\ud55c CPU \uc624\ud37c\ub808\uc774\uc158 \ub3d9\uc548 Virtual Thread\ub294 Job\uc744 \uc218\ud589\ud558\uae30 \uc704\ud574 \uae30\uc874\uc758 Fork Join Pool\ub85c\ubd80\ud130 Platform Thread\ub97c \uc0ac\uc6a9\ud558\uace0  IO \uc624\ud37c\ub808\uc774\uc158\uc744 \uc218\ud589\ud558\ub294 \ub3d9\uc548\uc5d0\ub294 &#8211; <em>\uc704 \uadf8\ub9bc\uc5d0\uc11c\uc758 \uacbd\uc6b0 sleep() \uba54\uc18c\ub4dc<\/em>. &#8211; Platform Thread\uac00 \ub2e4\uc2dc Pool\ub85c \ubc18\ud658\ub41c\ub2e4. Virtual Thread\uac00 CPU \uc624\ud37c\ub808\uc774\uc158\uc744 \ud558\ub3c4\ub85d \ub3c4\uc640\uc8fc\ub294 Platform Thread\ub294 <strong>Carrier Thread<\/strong>\ub77c\ub3c4\ub3c4 \ubd88\ub9b0\ub2e4. \uc5ec\uae30\uc11c\ub294 Carrier Thread\uc640 Platform Thread\ub97c \ub3d9\uc77c\ud55c Thread\ub97c \uc9c0\uce6d\ud558\ub294 \uac83\uc73c\ub85c \ud55c\ub2e4. Sleep \ubaa8\ub4dc\uc5d0\uc11c \uae68\uc5b4\ub09c \uc774\ud6c4\uc5d0\ub3c4 Virtual Thread\ub294 CPU \uc624\ud37c\ub808\uc774\uc158\uc744 \uc218\ud589\ud558\uae30 \uc704\ud574 \ub610 \ub2e4\ub978 Carrier Thread\ub97c \uc120\ud0dd\ud574 \uac00\ub294 \uacfc\uc815\uc744 \uacc4\uc18d \uc774\uc5b4\uac04\ub2e4. \uc0ac\uc2e4, Virtual Thread\ub294 \uc0ac\uc6a9\uc790 Request\ub97c \ucc98\ub9ac\ud568\uc5d0 \uc788\uc5b4 \ud544\uc694\ud55c CPU \uc624\ud37c\ub808\uc774\uc158\uc744 \uc218\ud589\ud558\uae30 \uc704\ud574 \ub2e4\uc218\uc758 Carrier Thread\ub97c \uc0ac\uc6a9\ud558\ub294 \ud615\ud0dc\uac00 \ub420 \uac83\uc774\ub2e4. \uc704\uc758 \uc608\uc81c\uc5d0\uc11c \ubcf4\uba74 \ub2e4\ub978 \ub77c\uc778\uc5d0 \ucd9c\ub825\ub418\ub294 \ub450 \uac1c\uc758 Thread \uc815\ubcf4\ub294 \uc11c\ub85c \ub2e4\ub978 \ud615\ud0dc\ub97c \uac00\uc9c4\ub2e4. \uc774\ub54c \ucd9c\ub825\uc744 \ubcf4\uba74 \ub3d9\uc77c\ud55c id\uc758 Virtual Thread\ub77c \ud558\ub354\ub77c\ub3c4 \uc11c\ub85c \ub2e4\ub978 Carrier Thread\uac00 \uc0ac\uc6a9\ub428\uc744 \ud655\uc778\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">IO \uc624\ud37c\ub808\uc774\uc158 \uc2dc\uc791 \uc2dc\uc810\uc5d0 Carrier Thread\ub97c \ub194\uc918\uc57c \ud55c\ub2e4\ub294 \uac83\uc744 Virtual Thread\ub294 \uc5b4\ub5bb\uac8c \uc54c\uae4c?<\/h3>\n\n\n\n<p>\uc774 \ubd80\ubd84\uc774 JVM\uc5d0\uc11c Virtual Thread \uc0c1\uc758 \ucf54\ub4dc\uac00 IO \uc624\ud37c\ub808\uc774\uc158\uc744 \uc218\ud589\ud560 \uacbd\uc6b0 Carrier Thread\ub294 \ubc18\ud658\ub418\uc5b4\uc57c \ud55c\ub2e4\ub294 \uac83\uc744 \ucc98\ub9ac\ud558\uae30 \uc704\ud574 Java \uc5d4\uc9c0\ub2c8\uc5b4\ub4e4\uc774 \uc774 \ub450 \uc601\uc5ed\uc744 \uc624\uac00\uba74\uc11c \uace0\uc2ec\uc744 \ub9ce\uc774 \ud588\ub358 \uc601\uc5ed\uc774\ub2e4.  IO \uc624\ud37c\ub808\uc774\uc158\uc73c\ub85c\ub294 \ud30c\uc77c \ucc98\ub9ac, Socket \uc77d\uae30\/\uc4f0\uae30, Locking \ub4f1\uc774 \uc788\ub2e4. \uadf8\ub7ec\ub098 \uc790\ubc14 \uac1c\ubc1c\uc790\ub4e4\uc740 \uc774\uc81c \uc774\ub7f0 IO \uc624\ud37c\ub808\uc774\uc158\uc5d0 \ub300\ud55c \uace0\ubbfc\uc774 \ud544\uc694 \uc5c6\uac8c \ub418\uc5c8\ub2e4. \uc774\ub294 \uc790\ubc14 \uac1c\ubc1c\uc790\ub4e4\uc5d0\uac8c \ud070 \uc7a5\uc810\uc744 \uc81c\uacf5\ud55c\ub2e4. \uc65c\ub0d0\ud558\uba74 \ud575\uc2ec\uc801\uc778 \uac83\uc73c\ub85c \uac1c\ubc1c \uc2a4\ud0c0\uc77c\uc5d0 \ubcc0\ud654\ub97c \uc8fc\uc9c0 \uc54a\uc73c\uba74\uc11c \uacf5\uc9dc\ub85c non blocking \uae30\ub2a5\uc744 \uc801\uc6a9\ud560 \uc218 \uc788\uae30 \ub54c\ubb38\uc774\ub2e4. \uc608\uc804\uacfc \uac19\uc774 \ub3d9\uc77c\ud55c \ud615\ud0dc\uc758 \uc808\ucc28\uc801\uc778 \uac1c\ubc1c \uc2a4\ud0c0\uc77c, \ub3d9\uc77c\ud55c \ud615\ud0dc\uc758 \uc608\uc678\ucc98\ub9ac, \uadf8\ub9ac\uace0 \ub3d9\uc77c\ud55c \ub514\ubc84\uae45 \uae30\ub2a5\uc744 \uc774\uc6a9\ud560 \uc218 \uc788\uac8c \ub418\ub294 \uac83\uc774\ub2e4.<\/p>\n\n\n\n<p>\ub108\ubb34\ub098 \ud070 \uc7a5\uc810\uc744 \uc5bb\uac8c \ub418\ub294 \uac83\uc774\ub2e4!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Virtual Thread \uc0dd\uc131<\/h2>\n\n\n\n<p>\uc55e\uc5d0\uc11c \uc124\uba85\ud588\ub358 \uac83\ucc98\ub7fc, Virtual Thread\ub294 JVM\ub0b4\uc5d0\uc11c\uc758 \uc644\uc804\ud788 \uc0c8\ub85c\uc6b4 \uc4f0\ub808\ub4dc \uad6c\ud604\uccb4\uc774\uba70 Platform Thread \ucc98\ub7fc \ub9ce\uc740 \uc790\uc6d0\uc744 \uc18c\ubaa8\ud558\uc9c0\ub3c4 \uc54a\ub294\ub2e4. Virtual Thread\ub294 \uae30\uc874\uc758 Thread \ud074\ub798\uc2a4\ub97c \ud655\uc7a5\ud558\ubbc0\ub85c \ud504\ub85c\uadf8\ub798\ubc0d \ubaa8\ub378\uc740 \uc544\uc8fc \uc2ec\ud50c\ud558\ub2e4. \uc989 \uae30\uc874\uc758 Platform Thread\uc640 \ub3d9\uc77c\ud55c \ud615\ud0dc\ub97c \uc720\uc9c0\ud55c\ub2e4. \uadf8\ub7ec\ub098 \ud655\uc7a5\uc131 \uce21\uba74\uc5d0\uc11c \ubcf4\uba74 \uadf8 \uacb0\uacfc\ub294 \ubcf8\uc9c8\uc801\uc73c\ub85c \ub2e4\ub974\ub2e4.<\/p>\n\n\n\n<p>\ub2e4\uc74c\uc740 Virtual Thread\ub97c \uc2dc\uc791\ud558\uae30 \uc704\ud55c \uba87 \uac00\uc9c0 \ubc29\ubc95\uc744 \ubcf4\uc5ec \uc900\ub2e4.<\/p>\n\n\n\n<p>1. \uc544\ub798 \uc608\uc81c\uc5d0\uc11c <em>handleUserRequest()<\/em> \ub294 Virtual Thread\uc0c1\uc5d0\uc11c \ub3d9\uc791\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Start a new Virtual Thread. No name is associated with thread \nThread thread = Thread.startVirtualThread(() -&gt; handleUserRequest())<\/code><\/pre>\n\n\n\n<p>2. \uc544\ub798 \uc608\uc81c\ub294 Virtual Thread\uc5d0 \uc774\ub984\uc744 \uc124\uc815\ud558\uace0 <em>handleUserRequest()<\/em> \uac00 \ub3d9\uc791\ub418\ub294 \uac83\uc744 \ubcf4\uc5ec \uc900\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Start a new Virtual Thread with a name \u2018userthread\u2019\nThread vThread = Thread.ofVirtual()\n                       .name(\"userthread\")\n                       .start(() -&gt; handleUserRequest());<\/code><\/pre>\n\n\n\n<p>3. \uc544\ub798 \uc608\uc81c\ub294 \uc4f0\ub808\ub4dc\ub97c \uc0dd\uc131\ud558\uae30 \uc704\ud574 Virtual Thread Factory\uac00 \uc774\uc6a9 \ub418\uc5c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Create Virtual Threads from a Thread factory \nThreadFactory factory \n      = Thread.ofVirtual().name(\"userthread-\", 0).factory();\n\n\/\/ Thread name is userthread-0\nThread vThread1 = factory.newThread(() -&gt; handleUserRequest());\nvThread1.start();\n\n\/\/ Thread name is userthread-1\nThread vThread2 = factory.newThread(() -&gt; handleUserRequest());\nvThread2.start();<\/code><\/pre>\n\n\n\n<p>4. \uc544\ub798 \uc608\uc81c\uc5d0\uc11c\ub294 \ud0dc\uc2a4\ud06c(task)\ub97c Thread\ub85c \uc804\ub2ec\ud558\uae30 \uc704\ud574 Virtual Thread Per Task Executor\uac00 \uc774\uc6a9 \ub418\uc5c8\ub2e4. \uc5ec\uae30\uc11c ExecutorService\ub97c \uc774\uc6a9\ud558\uae34 \ud558\uc9c0\ub9cc \uc2e4\uc9c8\uc801\uc778 Virtual Thread \ud480\ub9c1(Pooling)\uc740 \uc544\ub2c8\ub2e4. task\uac00 Executor Service\uc5d0 \uc804\ub2ec\ub418\uba74 \uc774 task\ub97c \uc2e4\ud589\ud558\uae30 \uc704\ud574 \uc0c8\ub85c\uc6b4 Virtual Thread\uac00 \uc0dd\uc131\ub41c\ub2e4. \ub9e4\uc6b0 \ube60\ub974\uac8c \uc0dd\uc131\ub418\uace0 Pool\uc758 \ud544\uc694\uc131\uc774 \ub0ae\uae30 \ub54c\ubb38\uc5d0 Virtual Thread\ub97c \ud480\ub9c1(Pooling)\ud55c\ub2e4\ub294 \uac83\uc740 \uc88b\uc740 \uc0dd\uac01\uc774 \ubabb\ub41c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Submit two tasks to an Executor Service which uses Virtual Threads\ntry (var service = Executors.newVirtualThreadPerTaskExecutor()) {\n   service.submit(() -&gt; handleUserRequest());\n   service.submit(() -&gt; handleUserRequest());\n}<\/code><\/pre>\n\n\n\n<p>Virtual Thread \uac00 \uc0dd\uc131\ub418\uba74, \uc77c\ubc18\uc801\uc778 Thread \uac1d\uccb4\uc5d0 \uc788\ub294 \ubaa8\ub4e0 \uba54\uc18c\ub4dc\ub4e4\uc740 Virtual Thread\uc5d0\ub3c4 \ub3d9\uc77c\ud558\uac8c \uc801\uc6a9\ub41c\ub2e4. Platform Thread\ucc98\ub7fc Virtual Thread\ub294 Thread Local\uacfc Inheritable Thread Local\uacfc\ub3c4 \uac19\uc774 \uc0ac\uc6a9 \uac00\ub2a5\ud558\ub2e4. \uadf8\ub7ec\ub098 Virtual Thread\ub294 \ud56d\uc0c1 Daemon \uc4f0\ub808\ub4dc\ub77c\ub294 \uac83\uc744 \uba85\uc2ec\ud560 \ud544\uc694\uac00 \uc788\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">JVM \ub0b4\ubd80\uc5d0\uc11c\uc758 Virtual Thread<\/h2>\n\n\n\n<p> \uc544\ub798 \uadf8\ub9bc\uc740 JVM \ub0b4\ubd80\uc5d0\uc11c\uc758 Virtual Thread\ub97c \ub098\ud0c0\ub0b8\ub2e4.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1400\/format:webp\/1*uV5eWIRUFliMVdfhjv7TNg.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Virtual Threads in the JVM<\/figcaption><\/figure>\n<\/div>\n\n\n<p>\uac1c\ubcc4 Virtual Thread\ub294 \ud55c \ubc88\uc5d0 \ud558\ub098\uc529\uc774\uae34 \ud558\uc9c0\ub9cc \ub3d9\uc791 \uc911\uc5d0 \ub2e4\uc218\uc758 Platform Thread\uc640 \ub9e4\ud551\ub420 \uc218 \uc788\ub2e4.  Virtual Thread\uac00 \uc5ec\ub7ec \uac1c\uc758 CPU \uc5f0\uc0b0\uc744 \uc218\ud589\ud55c\ub2e4\uace0 \uc0dd\uac01\ud574 \ubcf4\uba74 \uc774\ub4e4 \uac01\uac01\uc758 \uc5f0\uc0b0\uc740 \uc11c\ub85c \ub2e4\ub978 Carrier Thread\uc5d0 \uc758\ud574 \uc2e4\ud589\ub420 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Application Server \uc0c1\uc5d0\uc11c\uc758 Virtual Thread<\/h2>\n\n\n\n<p> Application Server \ub0b4\uc5d0\uc11c Virtual Thread\ub97c \uc2e4\uc9c8\uc801\uc73c\ub85c \uc5b4\ub5bb\uac8c \uc774\uc6a9\ud560 \uc218 \uc788\uc744\uae4c? \uc5ec\uae30\uc11c \ud575\uc2ec\uc740 \uc0ac\uc6a9\uc790\uc758 Request\uac00 Platform Thread\uac00 \uc544\ub2c8\ub77c Virtual Thread\ub85c \ub9e4\ud551\ub41c\ub2e4\ub294 \uac83\uc774\ub2e4. (\uc544\ub798 \uadf8\ub9bc \ucc38\uc870)<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1400\/format:webp\/1*1dtNxPQzV4pCSU7OiUpisg.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Virtual Threads in Enterprise Applications<\/figcaption><\/figure>\n<\/div>\n\n\n<p>\ud30c\ub780\uc0c9\uc758 \uc544\ub798\ucabd \ubc29\ud5a5\uc758 \ud654\uc0b4\ud45c\ub294 Virtual Thread\ub97c \ub098\ud0c0\ub0b8\ub2e4. \uc9c0\uae08\uc740 Virtual Thread\ub97c \uc774\uc6a9\ud558\ubbc0\ub85c \ud480\ub9c1(Pooling)\uc73c\ub85c \uc778\ud55c \uc81c\uc57d\uc774 \uc5c6\uc73c\uba70 \ub530\ub77c\uc11c, \ub3d9\uc811\uc790 \uc218 5000\uba85\uc774 \uc788\ub2e4\uba74 \uc774\uc81c 5000\uac1c\uc758 Virtual Thread\uc5d0\uc11c \ubcd1\ub82c\ub85c \ucc98\ub9ac\ud55c\ub2e4. \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc740 \uc624\uc9c1 CPU \uc5f0\uc0b0\uc744 \uc218\ud589\ud560 \ub54c\uc5d0\ub9cc Platform Thread(Carrier Thread)\ub97c \uc774\uc6a9\ud558\uac8c \ub41c\ub2e4. IO\ub97c \ucc98\ub9ac\ud558\ub294 \ub3d9\uc548\uc5d0\ub294 Carrier Thread\uac00 \ub2e4\ub978 \uc0ac\uc6a9\uc790\ub4e4\uc774 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \ubc18\ud658\ucc98\ub9ac \ub41c\ub2e4. \uc774 \uc544\ud0a4\ud14d\ucc98\ub294 \ub300\ub7c9\uc758 Virtual Thread\ub97c \uc9c0\uc6d0\ud558\ub354\ub77c\ub3c4 \ub9e4\uc6b0 \uc801\uc740 \uc218(\ub300\ub7b5 \ucf54\uc5b4 \uc218\ub9cc\ud07c)\uc758 Platform Thread\ub9cc \uc694\uad6c\ub41c\ub2e4.<\/p>\n\n\n\n<p>\uc774\ub294 \ub9e4\uc6b0 \uc911\uc694\ud55c \uac83\uc73c\ub85c \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \ud655\uc7a5\uc131\uc744 \ub4dc\ub77c\ub9c8\ud2f1\ud558\uac8c \ub192\uc5ec \uc900\ub2e4. \uc65c\ub098\ud558\uba74 \uac1c\ubcc4 \uc778\uc2a4\ud134\uc2a4\uac00 \ud6e8\uc52c \ub9ce\uc740 \uc218\uc758 \uc0ac\uc6a9\uc790\ub97c \uc9c0\uc6d0\ud560 \uc218 \uc788\uc73c\uba70 \uc774\ub294, \ub3d9\uc77c\ud55c \uc218\uc758 \uc0ac\uc6a9\uc790\ub97c \uc9c0\uc6d0\ud558\ub354\ub77c\ub3c4 \uc801\uc740 \uc218\uc758 \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158 \uc778\uc2a4\ud134\uc2a4\ub85c \ucc98\ub9ac \uac00\ub2a5\ud558\uae30 \ub54c\ubb38\uc774\ub2e4.<\/p>\n\n\n\n<p>\uc5ec\uae30\uc11c \uc8fc\ubaa9\ud560 \uc8fc\uc694 \ud3ec\uc778\ud2b8\ub294 \ub2e4\ub7c9\uc758 Virtual Thread\ub97c \uc0ac\uc6a9\ud560 \uacbd\uc6b0, \ub2e4\ub978 \uacf3\uc5d0\uc11c \ub9ac\uc18c\uc2a4 \uc81c\uc57d \uc0c1\ud669\uc744 \ub9c8\uc8fc\ud560 \uc218 \uc788\ub2e4\ub294 \uac83\uc774\ub2e4. \uc608\ub97c \ub4e4\uba74, \ub298\uc5b4\ub09c \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc811\uc18d\uc744 \ucc98\ub9ac\ud558\uae30 \uc704\ud574 \ub370\uc774\ud130\ubca0\uc774\uc2a4 Connection Pool\uc744 \ub298\ub824\uc57c \ud560 \uc218 \uc788\uc73c\uba70, \ub354 \ub9ce\uc740 Socket Connection \uc9c0\uc6d0\uc744 \uc704\ud574 \ub9ac\ub205\uc2a4 \uc2dc\uc2a4\ud15c\uc758 \ub514\ud3f4\ud2b8 \uc124\uc815\uc744 \ubcc0\uacbd\ud574\uc57c \ud560 \uc218\ub3c4 \uc788\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\uc694\uc57d<\/h2>\n\n\n\n<p>\uc694\uc57d\ud558\uc790\uba74, Virtual Thread\ub294 Java Thread\uc758 \uacbd\ub7c9\ud654\ub41c \uad6c\ud604\uccb4\uc774\uba70 File IO, Socket IO, Locking\uacfc \uac19\uc774 IO \ub3d9\uc791\uc744 \uc218\ud589\ud558\ub294 \ub3d9\uc548\uc5d0\ub294 Carrier Thread\uac00 \ubc18\ud658\ucc98\ub9ac \ub418\ub3c4\ub85d \ud55c\ub2e4. IO \ub3d9\uc791\uc774 \uc9d1\uc57d\uc801\uc778 \uc5d4\ud130\ud504\ub77c\uc774\uc988 \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0 \uc801\ud569\ud558\uba70 \ub300\ubd80\ubd84\uc758 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\ub3c4 \uc801\ud569\ud558\ub2e4. \uc774\ub294 \uc801\uc808\ud55c \uc2dc\uc810\uc5d0 Carrier Thread\uac00 \ubc18\ud658\ub418\ub3c4\ub85d \ud568\uc73c\ub85c\uc368 \uc774\uc640 \uac19\uc740 IO \uc9d1\uc57d\uc801\uc778 \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \ud655\uc7a5\uc131\uc744 \uadf9\ub300\ud654 \uc2dc\ucf1c\uc900\ub2e4. \ub300\ubd80\ubd84\uc758 \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \uacbd\uc6b0 Virtual Thread\ub97c \uc801\uc6a9\ud568\uc73c\ub85c\uc368 \uc131\ub2a5\uc774 \ud6e8\uc52c \uac1c\uc120\ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc744 \uac83\uc774\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\uad81\uadf9\uc801\uc73c\ub85c \uc774 \uae30\uc220\uc774 \ud504\ub85c\uc81d\ud2b8\uc5d0 \uc5b4\ub5a4 \ub3c4\uc6c0\uc744 \uc8fc\ub294\uac00?<\/h3>\n\n\n\n<p>\ub300\ub7c9\uc758 \uace0\uac1d\uc744 \ucc98\ub9ac\ud558\ub294 \ud504\ub85c\uc81d\ud2b8\ub294 \ud6e8\uc52c \uc801\uc740 \uc218\uc758 \uc778\uc2a4\ud134\uc2a4\uc640 \ub9ac\uc18c\uc2a4\ub85c \uc0ac\uc6a9\uc790\ub97c \uc9c0\uc6d0\ud560 \uc218 \uc788\uc73c\uba70, \uc774\ub294 \ud504\ub85c\uc81d\ud2b8\uc5d0 \ub4dc\ub294 \ube44\uc6a9\uc744 \ud68d\uae30\uc801\uc73c\ub85c \uc904\uc5ec \uc904 \uc218 \uc788\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Java\uc5b8\uc5b4\ub85c Enterprise \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc791\uc131\ud558\uac70\ub098 \uae30\uc874\uc758 Enterprise \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc774 \uc788\ub2e4\uba74 Virtual Thread\uc5d0 \uad00\uc2ec\uc744 \ub458 \ud544\uc694\uac00 \uc788\ub2e4. Virtual Thread\ub294 Java 21\uc5d0 \uc18c\uac1c\ub41c \uc0c8\ub85c\uc6b4 \uae30\ub2a5\uc73c\ub85c \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \ud655\uc7a5\uc131(Scalability)\ub97c \ud68d\uae30\uc801\uc73c\ub85c \ub192\uc5ec\uc8fc\uba70 \ud504\ub85c\uc81d\ud2b8\uc5d0 \ub4dc\ub294 \ube44\uc6a9\uc744 \uc904\uc5ec \uc900\ub2e4. \uc774 \ubb38\uc11c\ub294 \ubb38\uc81c\uc758 \uadfc\uac04\uc744 \ub4e4\uc5ec\ub2e4 \ubd04\uc73c\ub85c\uc368 Virtual Thread\ub97c \ud65c\uc6a9\ud560 \uacbd\uc6b0 \uc65c \ud655\uc7a5\uc131\uc774 \uac1c\uc120 \ub418\ub294\uc9c0\ub97c \uc124\uba85\ud558\uace0\uc790 \ud55c\ub2e4. Platform Thread Java 21 \uc774\uc804\uc5d0 \uad6c\ud604\ub41c Thread\ub97c Platform Thread \ub77c\uace0\ud558\uba70 \uadfc\ubcf8\uc801\uc73c\ub85c OS(Operating System) Thread\ub97c Wrapping\ud55c \ud615\ud0dc\ub85c \uad6c\ud604\ub418\uc5b4 \uc788\ub2e4. \ub530\ub77c\uc11c Platform Thread\uc640 OS Thread\uac04\uc758 \uad00\uacc4\ub294 1:1 \ub9e4\ud551\uc774\ub77c\uace0 \uc0dd\uac01\ud558\uba74 \ub41c\ub2e4. \uc704 \uadf8\ub9bc\uc744 \ubcf4\uba74 \uac00\uc7a5 \ubc11 \ubd80\ubd84\uc740&#8230;<\/p>\n<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/skanto.co.kr\/?p=1950\"> Read More<span class=\"screen-reader-text\">  Read More<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[14,7],"tags":[221,222],"class_list":["post-1950","post","type-post","status-publish","format-standard","hentry","category-sw-development","category-7","tag-thread","tag-virtual-thread"],"_links":{"self":[{"href":"https:\/\/skanto.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/1950","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/skanto.co.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/skanto.co.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/skanto.co.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/skanto.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1950"}],"version-history":[{"count":27,"href":"https:\/\/skanto.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/1950\/revisions"}],"predecessor-version":[{"id":2356,"href":"https:\/\/skanto.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/1950\/revisions\/2356"}],"wp:attachment":[{"href":"https:\/\/skanto.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1950"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/skanto.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1950"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/skanto.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1950"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}