๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

728x90

์ „์ฒด ๊ธ€

(74)
[Java] ๋ฉ€ํ‹ฐํ”Œ๋ ‰์‹ฑ ๊ธฐ๋ฐ˜์˜ ๋‹ค์ค‘ ์ ‘์† ์„œ๋ฒ„๋กœ ๊ฐ€๊ธฐ๊นŒ์ง€ ์†Œ์ผ“์„ ํ†ตํ•œ ๋„คํŠธ์›Œํฌ I/O ์†Œ์ผ“์€ ๋„คํŠธ์›Œํฌ์—์„œ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ, ๋‘ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํŠน์ • ํฌํŠธ๋ฅผ ํ†ตํ•ด ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“ค์–ด ์ฃผ๋Š” ์ถ”์ƒํ™”๋œ ์žฅ์น˜์ž…๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ์˜ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์— ์กด์žฌํ•˜๋Š” ํ”„๋กœ์„ธ์Šค(์„œ๋ฒ„, ํด๋ผ์ด์–ธํŠธ)๋Š” ์ปค๋„ ๊ณต๊ฐ„์— ์ƒ์„ฑ๋œ ์†Œ์ผ“์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์†ก์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์†Œ์ผ“์€ ์ง€์—ญ(๋กœ์ปฌ) IP ์ฃผ์†Œ์™€ ํฌํŠธ ๋ฒˆํ˜ธ, ์ƒ๋Œ€๋ฐฉ์˜ IP ์ฃผ์†Œ์™€ ํฌํŠธ๋ฒˆํ˜ธ, ๊ทธ๋ฆฌ๊ณ  ์ˆ˜์‹ ๋ฒ„ํผ์™€ ์†ก์‹  ๋ฒ„ํผ๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์†Œ์ผ“์ด ์„œ๋กœ ์—ฐ๊ฒฐ๋œ ํ›„ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ์ˆ˜์‹  ๋ฒ„ํผ์— ์ˆ˜์‹  ๋ฐ์ดํ„ฐ๊ฐ€ ์“ฐ์ด๊ณ , ๋ฐ˜๋Œ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๋ณด๋‚ผ ๋•Œ๋Š” ์†ก์‹  ๋ฒ„ํผ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์“ฐ์ธ๋‹ค. ๊ณ ์ฐฐ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์†Œ์ผ“ ์ƒ์„ฑ๊ณผ ์—ฐ๊ฒฐ ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„ ํด๋ผ์ด์–ธํŠธ์˜ ์—ฐ๊ฒฐ ์š”์ฒญ๋„ ์ผ์ข…์˜ ๋ฐ์ดํ„ฐ ์ „์†ก์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์—ฐ๊ฒฐ ์š”์ฒญ์„ ๋ฐ›์•„๋“ค์ด๊ธฐ..
[Network] TCP/IP์™€ ์†Œ์ผ“ํ†ต์‹  Send/Recv ๋™์ž‘ ์›๋ฆฌ( + Blocking VS NonBlocking) ํ…Œ์ŠคํŠธ ์‹คํŒจ ํ˜„์ƒ ์„œ๋ฒ„(๊ณ ๊ฐ์‚ฌ ๊ฐœ๋ฐœ)์™€ ํด๋ผ์ด์–ธํŠธ(ํ•„์ž๊ฐ€ ๊ฐœ๋ฐœ) ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” 150Hz๋กœ ํด๋ผ์ด์–ธํŠธ ์ธก์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์†ก์‹ ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•˜์—ฌ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ 1ํšŒ ์†ก์‹  ์š”์ฒญ ๋ฐ์ดํ„ฐ๋งŒ ๋ณด๋‚ด๋ฉด, ์„œ๋ฒ„๋Š” ์ŠคํŠธ๋ฆผ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ„์† ์†ก์‹ ํ•˜๊ณ , ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ค‘๋‹จ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ๊ทธ๋•Œ ์ •์ง€ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„์—์„œ ์ •์ƒ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ sendํ•˜์˜€๊ณ , ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ •์ƒ ์ˆ˜์‹  ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์—์„œ ์ผ์ • ์‹œ๊ฐ„ ์ดํ›„( ๋ฐœ์ƒ ์‹œ์ ์€ ๋ถˆํŠน์ •) ํด๋ผ์ด์–ธํŠธ ์ž…์žฅ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ •์ƒ ์ˆ˜์‹ ํ•˜์ง€ ๋ชปํ•จ. ์„œ๋ฒ„ ์ž…์žฅ์—์„œ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ฐ€์ ธ๊ฐ€์ง€ ๋ชปํ•ด์„œ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ฐํ˜€์ง. ์ด๋Ÿด ๊ฒฝ์šฐ ๋ญ๊ฐ€ ๋ฌธ์ œ์ด๊ณ  ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฌด์—‡์„ ํ•ด์•ผํ• ๊นŒ? TCP/IP์™€ ์†Œ์ผ“ํ†ต์‹  Send/Recv..
[Java] ํ†ฐ์ผ“๊ณผ ๋„คํ‹ฐ ์„œ๋ฒ„์˜ ์ฐจ์ด์  OverView ์ด์ „ ๊ธ€์—์„  ์š”์ฒญ์— ๋Œ€ํ•œ Asynchronousํ•œ ์š”์ฒญ์„ ๋ฐ›๊ธฐ์œ„ํ•œ NIO ์˜ Tomcat์—์„œ์˜ ๋™์ž‘์„ ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. Tomcat์€ New I/O Connector๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์—๋Œ€ํ•ด ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์ด๋ฒˆ์—” Tomcat๊ณผ Netty ๋‘ ์„œ๋ฒ„๊ฐ„์˜ ์–ด๋–ค์ฐจ์ด์ ์ด ์žˆ์„๊นŒ๋ฅผ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. Tomcat & Netty ์šฐ๋ฆฌ๊ฐ€ Asynchronous/Non-Blocking ํ•˜๋ฉด Netty์„œ๋ฒ„๋ฅผ ๋– ์˜ฌ๋ฆฌ๋Š”๋ฐ๋Š” ์ด์œ ๊ฐ€ ์žˆ์„๊ฒ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์™œ Spring์˜ WebFlux๋Š” Netty๋ฅผ ์“ธ๊นŒ๊ฐ€ ๊ถ๊ธˆํ–ˆ์Šต๋‹ˆ๋‹ค. WebFlux์™€ Tomcat์„ ์ž˜ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๋Š”๊ฑฐ ์•„๋‹๊นŒ๋ž€ ์˜๋ฌธ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์™œ Reactive Programming์—์„œ Tomcat์€ ์ž˜ ์ด์•ผ๊ธฐ ๋˜์ง€ ์•Š์„๊นŒ์š”?..
[Java] Java NIO์˜ Tomcat์—์„œ์˜ ๋™์ž‘ OverView ์ด์ „ ๊ธ€์—์„œ Tomcat์€ Default๋กœ NIO Connector๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์ด๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์—ฐ๊ฒฐ์„ Non-blockingํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. Tomcat์˜ NIO Connector๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ Java์˜ NIO๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ์—, ์ด๋ฒˆ์‹œ๊ฐ„์—” JAVA์˜ NIO์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ณ  Tomcat์€ ์–ด๋–ป๊ฒŒ NIO๋ฅผ ํ†ตํ•ด ๋™์ž‘ํ•˜๋Š”์ง€ ์•Œ์•„๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. Java NIO java.nio์˜ ์ •์‹ ๋ช…์นญ์€ New Input/Output ์˜ ์•ฝ์ž๋กœ ๊ธฐ์กด ํ‘œ์ค€ I/O๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด Java J2SE 1.4์™€ ํ•จ๊ป˜ ๋™๋น„๋˜์—ˆ์œผ๋ฉฐ, ์ดํ›„ NIO2๊ฐ€ Java SE 7๊ณผ ํ•จ๊ป˜ ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์ด๋“ค BIO/NIO๋ฅผ Blocking IO / Non-blocking IO๋กœ ์ƒ๊ฐํ•˜๊ณ  ์“ฐ๊ณ  ์žˆ์ง€๋งŒ ์‹ค์ œ I/..
[Java] ๋™๊ธฐ/๋น„๋™๊ธฐ & NonBlocking Blocking๊ณผ Spring์˜ ๊ด€๊ณ„ ๋™๊ธฐ์‹/๋น„๋™๊ธฐ์‹ & blocking/non-blocking ๋‘ ๊ทธ๋ฃน์€ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์‹ค ๊ทธ ๊ตฌ๋ถ„์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•˜๊ธฐ๋ž€ ์‰ฝ์ง€ ์•Š์•˜๊ณ  ์›น ํ”„๋กœ์ ํŠธ์—์„  ๋” ๋”์šฑ ํ˜ผ๋™์„ ์•ผ๊ธฐํ•˜๋Š” ๊ฒƒ ๊ฐ™์•„ ์ •๋ฆฌ๊ฐ€ ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ”ํžˆ reactive processing์—์„œ ๋งํ•˜๋Š” Asynchronouse non-blocing์€ ๋ญ๊ฐ€ Asynchronouseํ•˜๊ณ  ๋ญ๊ฐ€ non-blocingํ•˜๋‹ค๋Š” ๊ฑด์ง€ ๋‚ด๊ฐ€ ๊ฐœ๋ฐœํ•˜๋Š” WebServer์—์„  ์–ด๋–ป๊ฒŒ ์ดํ•ดํ•ด์•ผ ํ• ์ง€ ์ดํ•ด๊ฐ€ ๊ฐ€์ง€ ์•Š์•„ ์ •๋ฆฌํ•ด๋ดค์Šต๋‹ˆ๋‹ค. ์šฉ์–ด ์ •๋ฆฌ Synchronouse & Asynchronouse ๋™๊ธฐ์™€ ๋น„๋™๊ธฐ์˜ ๊ด€๊ณ„๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ์‚ฌ๋ก€๋Š” ํŠน์ • ์ž‘์—…์ด ์ˆ˜ํ–‰์ค‘์ด๊ณ  ์ข…๋ฃŒ๋˜์ง€ ์•Š์€ ์ƒํƒœ์—ฌ๋„, ๋Œ€๊ธฐํ•˜์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋Š๋ƒ ๋ชปํ•˜๋Š๋ƒ์˜ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค...
[Java] Callable, Future ๋ฐ Executors, Executor, ExecutorService, ScheduledExecutorService์— ๋Œ€ํ•œ ์ดํ•ด ๋ฐ ์‚ฌ์šฉ๋ฒ• ์ด๋ฒˆ์—๋Š” ์ž๋ฐ”5 ๋ถ€ํ„ฐ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ๊ธฐ๋ฐ˜์˜ ๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•ด ์ถ”๊ฐ€๋œ Executor, ExecutorService, ScheduledExecutorService์™€ Callable, Future๋ฅผ ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 1. Callable๊ณผ Future ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•œ ์ดํ•ด ๋ฐ ์‚ฌ์šฉ๋ฒ• [ Thread์™€ Runnable์˜ ๋‹จ์  ๋ฐ ํ•œ๊ณ„ ] Thread์™€ Runnable์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•œ๊ณ„์ ์ด ์žˆ์Šต๋‹ˆ. ์ง€๋‚˜์น˜๊ฒŒ ์ €์ˆ˜์ค€์˜ API(์“ฐ๋ ˆ๋“œ์˜ ์ƒ์„ฑ)์— ์˜์กดํ•จ ๊ฐ’์˜ ๋ฐ˜ํ™˜์ด ๋ถˆ๊ฐ€๋Šฅ ๋งค๋ฒˆ ์“ฐ๋ ˆ๋“œ ์ƒ์„ฑ๊ณผ ์ข…๋ฃŒํ•˜๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒ ์“ฐ๋ ˆ๋“œ๋“ค์˜ ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ค์›€ ๋จผ์ € ์“ฐ๋ ˆ๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ๋งŒ๋“œ๋Š”์ง€๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ž์˜ ๊ด€์‹ฌ๊ณผ๋Š” ๊ฑฐ๋ฆฌ๊ฐ€ ๋จผ๋ฐ, Thread์™€ Runnable๋ฅผ ํ†ตํ•œ ์“ฐ๋ ˆ๋“œ์˜ ์ƒ์„ฑ๊ณผ ์‹คํ–‰์€ ๋„ˆ๋ฌด..
[Java] Thread์™€ Runnable์— ๋Œ€ํ•œ ์ดํ•ด ๋ฐ ์‚ฌ์šฉ๋ฒ• ์ž๋ฐ” ์ดˆ๊ธฐ๋ถ€ํ„ฐ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ๊ธฐ๋ฐ˜์˜ ๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ๋˜ Thread์™€ Runnable๋ฅผ ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 1. Thread์™€ Runnable์— ๋Œ€ํ•œ ์ดํ•ด ๋ฐ ์‚ฌ์šฉ๋ฒ• [ ์“ฐ๋ ˆ๋“œ์™€ ์ž๋ฐ”์˜ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ] ์“ฐ๋ ˆ๋“œ๋ž€ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์˜ ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค์–ด ์‹คํ–‰ํ•˜๋ฉด 1๊ฐœ์˜ ๋ฉ”์ธ(main) ์“ฐ๋ ˆ๋“œ์— ์˜ํ•ด ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ 1๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ ๋งŒ์œผ๋กœ๋Š” ๋™์‹œ์— ์—ฌ๋Ÿฌ ์ž‘์—…์„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋™์‹œ์— ์—ฌ๋Ÿฌ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ๋ณ„๋„์˜ ์“ฐ๋ ˆ๋“œ๋ฅผ ๋งŒ๋“ค์–ด ์‹คํ–‰์‹œ์ผœ์ค˜์•ผ ํ•˜๋Š”๋ฐ, ์ž๋ฐ”๋Š” ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•๋“ค์„ ๊ณ„์†ํ•ด์„œ ๋ฐœ์ „์‹œ์ผœ ์™”์Šต๋‹ˆ๋‹ค. ๊ทธ ์ค‘์—์„œ Thread์™€ Runnable์€ ์ž๋ฐ” ์ดˆ๊ธฐ๋ถ€ํ„ฐ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๋ฅผ ์œ„ํ•ด ์ œ๊ณต๋˜์—ˆ๋˜ ..
[Java] CompletableFuture์— ๋Œ€ํ•œ ์ดํ•ด ๋ฐ ์‚ฌ์šฉ๋ฒ• 1. CompletableFuture์— ๋Œ€ํ•œ ์ดํ•ด [ Future์˜ ๋‹จ์  ๋ฐ ํ•œ๊ณ„ ] Java5์— Future๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉด์„œ ๋น„๋™๊ธฐ ์ž‘์—…์— ๋Œ€ํ•œ ๊ฒจ๋กœ๊ฐ€๊ฐ’์„ ๋ฐ˜ํ™˜ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Future๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•œ๊ณ„์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์™ธ๋ถ€์—์„œ ์™„๋ฃŒ์‹œํ‚ฌ ์ˆ˜ ์—†๊ณ , get์˜ ํƒ€์ž„์•„์›ƒ ์„ค์ •์œผ๋กœ๋งŒ ์™„๋ฃŒ ๊ฐ€๋Šฅ ๋ธ”๋กœํ‚น ์ฝ”๋“œ(get)์„ ํ†ตํ•ด์„œ๋งŒ ์ดํ›„์˜ ๊ฒฐ๊ณผ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ ์—ฌ๋Ÿฌ Future๋ฅผ ์กฐํ•ฉํ•  ์ˆ˜ ์—†์Œ ex> ํšŒ์› ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , ์•Œ๋ฆผ์„ ๋ฐœ์†กํ•˜๋Š” ๋“ฑ ์—ฌ๋Ÿฌ ์ž‘์—…์„ ์กฐํ•ฉํ•˜๊ฑฐ๋‚˜ ใ…–์™ธ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์Œ Future๋Š” ์™ธ๋ถ€์—์„œ ์ž‘์—…์„ ์™„๋ฃŒ์‹œํ‚ฌ ์ˆ˜ ์—†๊ณ , ์ž‘์—… ์™„๋ฃŒ๋Š” ์˜ค์ง get ํ˜ธ์ถœ ์‹œ์— ํƒ€์ž„์•„์›ƒ์œผ๋กœ๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋น„๋™๊ธฐ ์ž‘์—…์˜ ์‘๋‹ต์— ์ถ”๊ฐ€ ์ž‘์—…์„ ํ•˜๋ ค๋ฉด get์„ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋Š”๋ฐ, get์€ ๋ธ”๋กœํ‚น ํ˜ธ์ถœ์ด๋ฏ€๋กœ..

728x90