Virtual Thread ์€ ๋ฌด์—‡์ผ๊นŒ?
ยท
๐Ÿ“‚ programming-language/java
1. Java Virtual Thread? Java Virtual Thead ๋Š” LTS ์ธ Java21 ๋ถ€ํ„ฐ ์ •์‹ ๋„์ž…๋œ ๊ฒฝ๋Ÿ‰์„ฑ ์Šค๋ ˆ๋“œ์ด๋‹ค. ๊ธฐ์กด ์ž๋ฐ” ์Šค๋ ˆ๋“œ ๋ชจ๋ธ์€ OS scheduler ๋ฅผ ํ†ตํ•ด ์Šค์ผ€์ค„๋งํ•˜๋Š” ์Šค๋ ˆ๋“œ ๋ชจ๋ธ์ธ ๋ฐ˜๋ฉด,๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๋Š” JVM ์—์„œ ์Šค์ผ€์ค„๋งํ•˜๋Š” ๊ฒฝ๋Ÿ‰์„ฑ ์Šค๋ ˆ๋“œ ๋ชจ๋ธ์ด๋‹ค. JVM ์ž์ฒด์ ์ธ ๋‚ด๋ถ€ ์Šค์ผ€์ค„๋ง์„ ํ†ตํ•ด ๊ธฐ์กด ์Šค๋ ˆ๋“œ์— ๋น„ํ•ด ์ตœ๋Œ€ ๊ฐ€์šฉ ์Šค๋ ˆ๋“œ ์ˆ˜๋ฅผ ์ฆ๊ฐ€์‹œ์ผœ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ๋„์ž…๋œ ๊ฐœ๋…์ด๋‹ค. 2. Java Thread ์€ JNI ๊ธฐ๋ฐ˜์œผ๋กœ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๊ธฐ์กด ์Šค๋ ˆ๋“œ๋Š” OS Thread ๋ฅผ ๋ž˜ํ•‘ํ•œ ํ˜•ํƒœ๋กœ OS ์Šค๋ ˆ๋“œ์™€ ์œ ์ € ์Šค๋ ˆ๋“œ๋ฅผ 1:1 ๋งคํ•‘ํ•˜๋Š” ํ˜•ํƒœ์ด๋‹ค. ๊ธฐ์กด ์Šค๋ ˆ๋“œ์˜ ์‹คํ–‰๊ณผ ์ƒ์„ฑ์€ JNI(Java Native Interface) ๊ฐ€ ๋‹ด๋‹นํ–ˆ๋‹ค. JNI ๋Š” ..
์ž๋ฐ”์—์„œ ๋™์‹œ์„ฑ์€ ์™œ ๋ฐœ์ƒํ• ๊นŒ?
ยท
๐Ÿ“‚ programming-language/java
ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋‹ค ๋ณด๋ฉด ๊ณ ๋ ค ์‚ฌํ•ญ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋™์‹œ์„ฑ์ด๋‹ค. ๋™์‹œ์„ฑ์ด ์™œ ๋ฐœ์ƒํ•˜๋Š”์ง€์— ๊ด€ํ•œ ๊ณ ๋ฏผ์˜ ํ๋ฆ„์„ ์ •๋ฆฌํ•˜๊ณ ์ž ๊ธ€๋กœ ์ž‘์„ฑํ•˜๊ณ ์ž ํ•œ๋‹ค. 1. ์ž๋ฐ” ์ฝ”๋“œ๋Š” ์–ด๋–ป๊ฒŒ ์‹คํ–‰๋ ๊นŒ?์ž๋ฐ” ์ฝ”๋“œ๋Š” ์–ด๋–ป๊ฒŒ ์‹คํ–‰๋ ๊นŒ? ์ž๋ฐ”๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ปดํŒŒ์ผ ์–ธ์–ด์ด๋‹ค. ์ปดํŒŒ์ผ ์–ธ์–ด๋ž€ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ด์ „์— ์ปดํŒŒ์ผ๋Ÿฌ(compiler) ๋ฅผ ๊ฑฐ์ณ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์น˜๋Š” ์–ธ์–ด๋ฅผ ๋งํ•œ๋‹ค. ์ž๋ฐ”๋Š” ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด์„œ ์†Œ์Šค ํŒŒ์ผ์„ ์ž๋ฐ” ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. ๋ณ€ํ™˜๋œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋Š” ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์—์„œ JVM(Java Virtual Machine) ์„ ํ†ตํ•ด OS ๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ณ„์–ด(binary code) ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ๋ณ€ํ™˜๋œ ๊ธฐ๊ณ„์–ด๋Š” OS ๊ฐ€ ์ฝ์–ด ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. 2. ๋™์‹œ์„ฑ์ด ๋ฐœ์ƒ ์ง€์ ์ธ ๊ณต์œ  ์ž์›์€ ์–ด๋А ์˜์—ญ์ผ๊นŒ..
Java Local Cache ๋น„๊ตํ•˜๊ธฐ
ยท
๐Ÿ“‚ programming-language/java
1. Local Cache ? Global Cache?(1) ๋กœ์ปฌ ์บ์‹œ์žฅ์ ํ•ด๋‹น ์ธ์Šคํ„ด์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•ด ๋น ๋ฅธ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ด๋‹น ์ธ์Šคํ„ด์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜๋ฏ€๋กœ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ ๊ฐ์†Œ๋‹จ์ ์บ์‹œ ๋ฐ์ดํ„ฐ ์ฆ๊ฐ€ ์‹œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ฆ๊ฐ€๋กœ ์ธํ•œ ์„ฑ๋Šฅ ์ €ํ•˜ ๊ฐ€๋Šฅ์บ์‹ฑ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์—ฌ๋Ÿฌ ์„œ๋ฒ„ ๊ฐ„ ์ •ํ•ฉ์„ฑ ๋ฌธ์ œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ(2) ๊ธ€๋กœ๋ฒŒ ์บ์‹œ์žฅ์ ๋‹ค์ค‘ ์ธ์Šคํ„ด์Šค์—์„œ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ๊ณต์œ  ๊ฐ€๋ŠฅSharding ๊ณผ Replication ์„ ํ™œ์šฉํ•œ ๊ณ ๊ฐ€์šฉ์„ฑ ๋ณด์žฅ ๋‹จ์ ์ถ”๊ฐ€ ์ธํ”„๋ผ ๊ตฌ์„ฑ์œผ๋กœ ์ธํ•œ ๋น„์šฉ ๋ฐœ์ƒ๋„คํŠธ์›Œํฌ ์ง€์—ฐ์œผ๋กœ ์ธํ•ด ๋กœ์ปฌ ์บ์‹œ๋ณด๋‹ค ์‘๋‹ต ์†๋„๊ฐ€ ๋А๋ฆด ์ˆ˜ ์žˆ์Œ 2. ๋กœ์ปฌ ์บ์‹œ ์ข…๋ฅ˜(1) EhCacheEhCache๋Š” Java ๊ธฐ๋ฐ˜์˜ ์˜คํ”ˆ ์†Œ์Šค ์บ์‹œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ์ฃผ๋กœ Spring ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.ํŠน์ง•Heap ๋ฉ”๋ชจ๋ฆฌ, Off..
SerialVersionUID๋ฅผ ์„ ์–ธํ•ด์•ผ ํ•˜๋Š” ์ด์œ 
ยท
๐Ÿ“‚ programming-language/java
JCF ์˜ HashMap ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ค๊ฐ€ SerialVersionUID ๋ฅผ ๋ณด๊ณ  ํ˜ธ๊ธฐ์‹ฌ์— ํ•™์Šตํ•œ ๋‚ด์šฉ 1. ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ ํ•ด์‹œ๊ฐ’์„ ํ†ตํ•œ SerialVersionUID ์˜ ๋ฌธ์ œํด๋ž˜์Šค์˜ ๊ตฌ์กฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.์˜ˆ์‹œ: ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ ํƒ€์ž… ๋ณ€๊ฒฝ, ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ ์‚ญ์ œํ”„๋ ˆ์ž„์›Œํฌ ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋„ ๋ฒ„์ „์—…์„ ํ†ตํ•ด SerialVersionUID๊ฐ€ ๋ณ€๊ฒฝ๋  ๊ฒฝ์šฐ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์˜ˆ์ƒํ•˜์ง€ ๋ชปํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. 2. SerialVersionUID??SUID ๋Š” ์ง๋ ฌํ™”์™€ ์—ญ์ง๋ ฌํ™” ๊ณผ์ •์—์„œ ๊ฐ’์ด ์„œ๋กœ ๋งž๋Š”์ง€ ํ™•์ธํ•œ ํ›„์— ์ฒ˜๋ฆฌํ•œ๋‹ค.(๋งž์ง€ ์•Š๋‹ค๋ฉด InvalidClassException ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.)์ž๋ฐ”์˜ ์ง๋ ฌํ™” ์ŠคํŽ™ ์ •์˜๋ฅผ ์‚ดํŽด๋ณด๋ฉด SUID ๊ฐ’์€ ํ•„์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ฉฐ ์„ ์–ธ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด ํด๋ž˜์Šค์˜ ๊ธฐ..
์ž๋ฐ” ๋น„๋™๊ธฐ๋กœ ์นดํŽ˜ ์ฝ˜์†” ์˜ˆ์ œ ๋งŒ๋“ค๊ธฐ
ยท
๐Ÿ“‚ programming-language/java
๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ์™€ ์ž๋ฐ” ๋น„๋™๊ธฐ ์ž‘์—…์œผ๋กœ ๊ฐ„๋‹จํ•œ ์ฝ˜์†” ๊ธฐ๋ฐ˜ ์นดํŽ˜ ๋งŒ๋“ค๊ธฐ GitHub - pbg0205/asyc-cafeContribute to pbg0205/asyc-cafe development by creating an account on GitHub.github.com CompletableFuture? ์ž๋ฐ”๋Š” ThreadPool ๊ณผ CompletableFuture ๋ฅผ ๊ธฐ๋ฐ˜ํ•ด ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ง€์›ํ•œ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž๋ฐ”๋Š” Synchrous & Blocking ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜์ง€๋งŒ ๋น„์ˆœ์ฐจ์  ์ž‘์—…๊ณผ ์‹คํ–‰ ํ๋ฆ„ ๋Œ€๊ธฐ๋กœ ์ธํ•œ ์ž์›์˜ ๋‚ญ๋น„์™€ ์ž‘์—…์ด ์ง€์—ฐ๋  ์ˆ˜ ์žˆ๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. ์ด๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์ž๋ฐ”์—์„œ ๋˜ํ•œ ๋น„๋™๊ธฐ(Asynchronous) ์ง€์›์„ ์œ„ํ•œ CompletableFuture ์™€ ๊ฐ™์€ ๊ฐœ๋…์ด ๋Œ€๋‘๋˜์—ˆ..
์–ด๋Œ‘ํ„ฐ ํŒจํ„ด(adapter pattern)
ยท
๐Ÿ“‚ programming-language/java
1. ์–ด๋Œ‘ํ„ฐ ํŒจํ„ด์–ด๋Œ‘ํ„ฐ ๋””์ž์ธ ํŒจํ„ด์€ ๊ธฐ์กด ํด๋ž˜์Šค์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‹ค๋ฅธ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ตฌ์กฐ ํŒจํ„ด์ด๋‹ค. ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๋‘ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ๋‹ค๋ฆฌ ์—ญํ• ์„ ํ•œ๋‹ค. ์ด ํŒจํ„ด์—๋Š” ๋…๋ฆฝ์ ์ด๊ฑฐ๋‚˜ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ธฐ๋Šฅ์„ ๊ฒฐํ•ฉํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š” Adapter ๋ผ๋Š” ๋‹จ์ผ ํด๋ž˜์Šค๊ฐ€ ํฌํ•จ๋œ๋‹ค. ์ด๋ฆ„์€ ์–ด๋Œ‘ํ„ฐ(Adapter) ์™ธ์—๋„ ๋ž˜ํผ(Wrapper) ๋กœ ๋ช…๋ช…๋˜๊ธฐ๋„ ํ•œ๋‹ค. 2. ์–ด๋Œ‘ํ„ฐ ํŒจํ„ด ๊ตฌ์„ฑ ์š”์†ŒTarget interface์„ค๋ช… : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•œ๋‹ค. ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์—ฐ์‚ฐ ์ง‘ํ•ฉ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.์—ญํ•  : ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ๊ฐ€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๊ณตํ†ต ์ธํ„ฐํŽ˜์ด์Šค ์ด๋‹ค.Adaptee์„ค๋ช…: ์ƒˆ ์‹œ์Šคํ…œ์— ํ†ตํ•ฉํ•ด์•ผ ํ•˜๋Š” ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ๋Š”..