Skip to content

Latest commit

ย 

History

History
2886 lines (2830 loc) ยท 345 KB

File metadata and controls

2886 lines (2830 loc) ยท 345 KB

Java

API

Asynchronous

Book

Concurrency Parallel Thread

Concurrency Parallel Thread Akka

Concurrency Parallel Thread Executor

Conference

Eclipse

Functional Java

IntelliJ

IntelliJ Plugin

Java8

Java8 Library

Java8 Stream

Java9

Java10

Java11

Java12

  • Teeing Collector in Java 12
  • Java Futures, 2019 Edition Java12์— ๊ตญํ•œ๋œ ์ด์•ผ๊ธฐ๋Š” ์•„๋‹ˆ๋ฉฐ type inference, switch pattern matching, project Valhalla, Panama, Loom ๋“ฑ ๋‹ค์–‘ํ•œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ

Java13

Java14

Java15

Java16

Java17

Java18

Java19

Java20

  • Sailing Modern Java by Piotr Przybyl - YouTube
  • JDK 20 G1/Parallel/Serial GC changes
    • JDK 20์—์„œ Garbage Collector ๊ด€๋ จํ•ด์„œ ์ •๋ฆฌํ•œ ๊ธ€
    • Parallel GC๋Š” Full GC ์ค‘ ๊ฐ์ฒด ์ฒ˜๋ฆฌ์˜ ๋ณ‘๋ ฌํ™”๋กœ GC๋กœ ์ธํ•œ ์ค‘๋‹จ ์‹œ๊ฐ„์ด 20% ๊ฐ์†Œํ–ˆ๊ณ  Serial GC๋Š” ๋ˆˆ์— ๋„๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ์—†์Œ
    • G1 GC์—๋Š” ๋‹ค์Œ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ํฌํ•จ
      • G1 ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”๋ชจ๋ฆฌ ํ’‹ํ”„๋ฆฐํŠธ๋ฅผ Java ํž™์˜ 1.5๊นŒ์ง€ ์ค„์ผ ์ˆ˜ ์žˆ๊ฒŒ ๋จ
      • G1 ์ •์ œ ์Šค๋ ˆ๋“œ ๊ด€๋ฆฌ๊ฐ€ ๊ฐœ์„ ๋˜์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด CPU ์‚ฌ์ดํด์„ ๋œ ์‚ฌ์šฉ
      • G1์€ GC ์ผ์‹œ ์ •์ง€ ์ค‘ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•œ ๋กœ์ปฌ ํ• ๋‹น ๋ฒ„ํผ(PLAB)๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์ด ๊ณต๊ฐ„์ด ๋‚ญ๋น„๋˜๊ฑฐ๋‚˜ ๋ถ€์กฑํ•œ ํ˜„์ƒ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด PLAB์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•˜๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€
      • Young generation์˜ ํฌ๊ธฐ ๊ฒฐ์ •์— ๋Œ€ํ•œ ์˜ˆ์ธก ๊ฐœ์„ ์œผ๋กœ GC ํšŸ์ˆ˜ ๊ฐ์†Œ
      • ์˜ˆ๋ฐฉ์  GC๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”
  • ๊ฐœ๋ฐœ์ž๊ฐ€ ์•Œ์•„์•ผ ํ•  ๋ฐ์ดํ„ฐ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ with JDK 20 | ์š”์ฆ˜IT

Java21

Java22

Java25

JDK

JDK OpenJDK

JDK Oracle

JSP

JVM

  • JVM Internal
  • JVM Internals
  • Debugging JVM Safepoint Pauses
  • JVM Deep Dive
  • JVMLS 2015 - Compilers are Databases
  • JVMLS 2015 - Multi-Language Runtime
  • Effective Cryptography in the JVM
  • SIGSEGV as control flow - How the JVM optimizes your null checks
  • Why is my JVM process larger than max heap size?
  • Memory footprint of a Java process by Andrei Pangin
  • Why does my Java process consume more memory than Xmx?
  • Creating a memory leak with Java
  • Hunting Java Memory Leaks
  • ๋„์›€์ด ๋ ์ˆ˜๋„ ์žˆ๋Š” JVM memory leak ์ด์•ผ๊ธฐ | ์šฐ์•„ํ•œํ˜•์ œ๋“ค ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
  • The Trouble with Memory
  • Pirates of the JVM โ€” The infographic: Are you ready for an adventure?
  • Java ์‹œ์Šคํ…œ ์šด์˜ ์ค‘ ์•Œ์•„๋‘๋ฉด ์“ธ๋ชจ ์žˆ๋Š” ์ง€์‹๋“ค
  • ์šฐ์•„ํ•œ ํ…Œํฌ ์„ธ๋ฏธ๋‚˜ - ์ž๋ฐ”, ์„ฑ๋Šฅ, ๋ชจ๋‹ˆํ„ฐ๋ง ์ด์•ผ๊ธฐ ํ›„๊ธฐ
  • Evolving Java With โ€“โ€“enableโ€“preview aka Preview Features
  • Beyond ByteBuffers by Brian Goetz
  • A Dozen Cool Things We Can Do With Popular JVM Languages by Venkat Subramaniam java๋ฟ๋งŒ ์•„๋‹ˆ๋ผ JVM์—์„œ ๋™์ž‘ํ•˜๋Š” ์–ธ์–ด๋“ค์˜ ํŠน์ • feature์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ
  • Really Small Java Apps jlink, jpackage
  • JVM Ecosystem Report 2018
  • How Memory Leaks Happen in a Java Application
  • Memory Leaks in Java | Issues Caused and How to Prevent | Example - YouTube
  • Docker ์•ˆ์— ์ˆจ์–ด ์žˆ๋Š” Web application JMX profiling Tip
  • JVM Anatomy Quarks ํ•œ ๊ถŒ์˜ ์ฑ…
  • Why does my Java process consume more memory than Xmx?
  • Java Heap Memory ๋ถ„์„ ๋‚ด์šฉ ์ •๋ฆฌ : ๋„ค์ด๋ฒ„ ๋ธ”๋กœ๊ทธ
  • JVM ๋ฉ”๋ชจ๋ฆฌ ํ•ด๋ถ€ํ•™
  • JAVA ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ํ…Œ์ŠคํŠธ, ์ด๊ฑด ํ•ด๋ณด์…จ๋‚˜์š”? - YouTube
  • A New Future for Java. JVM, Kotlin, and where Java is goingโ€ฆ | by The Bored Dev | Better Programming | Aug, 2020 | Medium
  • JVM ๋‚ด๋ถ€ ๋™์ž‘ ์›๋ฆฌ & ์ž๋ฐ” ์ปดํŒŒ์ผ,์‹คํ–‰ ์ˆœ์„œ - ๋Ÿฐํƒ€์ž„ ์˜์—ญ, JIT ์ปดํŒŒ์ผ๋Ÿฌ, ์ธํ„ฐํ”„๋ฆฌํ„ฐ
  • Off-Heap memory reconnaissance โ€ข Brice Dutheil
  • How to Write Unmaintainable (But Wicked Fast!) Code on the JVM by John A. De Goes - YouTube
  • ๐Ÿš€ Visualizing memory management in JVM(Java, Kotlin, Scala, Groovy, Clojure) | Technorage
  • Demystifying Java Virtual Machine Memory Management | foojay
  • JVM Ecosystem Report 2021 | Snyk
  • Journey to the Centre of the JVM โ€” Daniel Spiewak - YouTube
  • capsule - Package and Deploy JVM Applications
  • Micrometer provides a simple facade over the instrumentation clients for the most popular monitoring systems, allowing you to instrument your JVM-based application code without vendor lock-in. Think SLF4J, but for metrics
  • JVM Architecture๋ž€? :: ๋‹น๊ทผ์ผ€์žŒ
  • JVM Architecture & Class Loaders Java | Making Java Easy To Learn
  • Java Memory Model(์ž๋ฐ” ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋ธ) :: ๋‹น๊ทผ์ผ€์žŒ
  • ์ž๋ฐ” ์ฝ”๋“œ์™€ ๋ฉ”์„œ๋“œ, ์Šคํƒœํ‹ฑ ๋ณ€์ˆ˜ ๋“ฑ์€ ๋ฉ”๋ชจ๋ฆฌ์˜ ์–ด๋””์— ์œ„์น˜ํ• ๊นŒ? - ๊ณจ๋“ ๋ž˜๋น—
  • ์Šคํƒ๊ณผ ํž™ ๋ฉ”๋ชจ๋ฆฌ, ๊ทธ๋ฆฌ๊ณ  ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ :: ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ์ค„์ด๋Š” ๋ฐฉ๋ฒ• Kotlin
  • 10๋ถ„ ํ…Œ์ฝ”ํ†ก ๐ŸŽน ๊น€๊น€์˜ JVM Specification - YouTube
  • Java in Containers - Part Deux
  • Understanding the constant pool inside a Java class file
  • Inside JVM debug symbols | Itโ€™s All Relative
  • ์ž๋ฐ” ์ปดํŒŒ์ผ ๊ณผ์ • & JVM ๋‚ด๋ถ€ ๊ตฌ์กฐ
  • Seeing through hardware counters: a journey to threefold performance increase | by Netflix Technology Blog | Nov, 2022 | Netflix TechBlog
    • Neflix์—์„œ Java ์„œ๋น„์Šค ์ค‘ ํ•˜๋‚˜์ธ GS2๋ฅผ m5.4xl(vCPU 16๊ฐœ)์—์„œ m5.12xl(vCPU 48๊ฐœ)๋กœ ์˜ฌ๋ ค์„œ ์„ฑ๋Šฅ์ด 3๋ฐฐ ์ฆ๊ฐ€ํ•  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€
      • ์ฒ˜๋ฆฌ๋Ÿ‰์€ 25%๋งŒ ์ฆ๊ฐ€ํ–ˆ๊ณ  ์ง€์—ฐ์‹œ๊ฐ„์„ ์˜คํžˆ๋ ค ์ฆ๊ฐ€ํ•˜๋Š” ๋ฌธ์ œ ๋ฐœ๊ฒฌ
      • ๋งคํŠธ๋ฆญ์„ ์‚ดํŽด๋ณด๋‹ค๊ฐ€ CPU์™€ ๋Œ€๊ธฐ์‹œ๊ฐ„์ด ๋‚ฎ์€ ๋…ธ๋“œ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌ
    • ๋” ๋‚ฎ์€ ์ˆ˜์ค€์„ ๋ณด๊ธฐ ์œ„ํ•ด PMC๋ฅผ ์‚ดํŽด๋ณด๋‹ค๊ฐ€ 2๊ฐœ์˜ ์ฝ”์–ด๊ฐ€ ๋™์ผํ•œ L1 ์บ์‹œ ๋ผ์ธ์„ ๊ณต์œ ํ•˜๋ฉด์„œ ๊ด€๋ จ ์—†๋Š” ๋ณ€์ˆ˜์—์„œ ์ฝ๊ณ  ์“ธ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” False Sharing์˜ ์ผ๋ฐ˜์ ์ธ ํŒจํ„ด ๋ฐœ๊ฒฌ
      • JDK์˜ ๋™์ž‘์„ ์ˆ˜์ •ํ•˜์ง„ ์•Š๊ณ  ๋ฐ์ดํ„ฐ ๋ ˆ์ด์•„์›ƒ์—์„œ _secondary_super_cache, _secondary_supers์— ํŒจ๋”ฉ์„ ์ถ”๊ฐ€ํ•ด์„œ ๋А๋ฆฐ ๋…ธ๋“œ๊ฐ€ ์‚ฌ๋ผ์ง
      • ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ๋ชฉํ‘œ์ธ 250 RPS์— ๋ชป ๋ฏธ์น˜๋Š” 150 RPS๋งŒ ์ฒ˜๋ฆฌ
    • ์ด ๋ฌธ์ œ๋Š” ๋™์ผํ•œ ๋ณ€์ˆ˜๋ฅผ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ/์ฝ”์–ด์—์„œ ์ฝ๊ณ  ์“ฐ๋Š” True Sharing์ž„์„ ๊นจ๋‹ซ๊ณ  ๊ณต์œ  ๋ณ€์ˆ˜์— ๋ชจ๋‘ ์“ฐ์ง€ ์•Š๊ณ  JVM์˜ ๋ณด์กฐ ์Šˆํผํด๋ž˜์Šค ์บ์‹œ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์šฐํšŒํ•˜๋„๋ก ์ˆ˜์ •ํ•˜๊ณ  3.5๋ฐฐ์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ
    • ๋” ๋น ๋ฅธ ์ธ์Šคํ„ด์Šค๋กœ ์˜ฎ๊ฒผ๋Š”๋ฐ ์„ฑ๋Šฅ์ด ์•ˆ ๋‚˜์˜ค๋ฉด ์–ด๋””๋ฅผ ๋ด์•ผ ํ• ๊นŒ? | GeekNews
  • Java Compiler Optimization โ€” ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ์ค„์ด๋Š” ๋ฐฉ๋ฒ• - ์ง„ํƒœ์–‘
  • Java compiler message file broken ์—๋Ÿฌ
  • -XX:MaxDirectMemorySize ํŒŒ์ผ ์„œ๋ฒ„์— 1GB ํŒŒ์ผ ํŒจ์น˜ ์š”์ฒญ ์‹คํŒจ (๊ฐ„๋‹จํ•œ JVM ํŠœ๋‹์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ)
  • VDBUH2023 - Ionuศ› Baloศ™in & Florin Blฤƒnaru - JVM Performance Comparison - YouTube
  • ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ ์งํ›„ ๋ฐœ์ƒํ•˜๋Š” Latency์˜ ์›์ธ๊ณผ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ JVM Warm-up
  • Welcome to the Jungle - A safari through the JVM landscape by Gerrit Grunwald - YouTube
  • Java Language
  • JVM Crash ๋ฌธ์ œ ํ•ด๊ฒฐํ•˜๊ธฐ | ์™€ํƒญ ๋ธ”๋กœ๊ทธ
  • Instrument to Remove: Using Java agents for fun and profit by Johannes Bechberger - YouTube javaagent
  • failsafe: Fault tolerance and resilience patterns for the JVM
  • hsdis HotSpot Disassembler Developers disassemble! Use Java and hsdis to see it all
  • jasm: A JVM assembler for the modern age
  • Loom: https://openjdk.org/projects/loom
    • Project Loom: Fibers and Continuations for the Java Virtual Machine
    • Project Loom: Fiber์™€ Continuation
    • Project Loom: Helping Write Concurrent Applications on the Java Platform by Ron Pressler
    • Project Loom? Better Futures? Whatโ€™s next for JVM concurrent programming - YouTube
    • Java์˜ ๋™์‹œ์„ฑ ๊ฐœ์„ ์„ ์œ„ํ•œ Project Loom์€ reactive streams๋ฅผ ๋Œ€์ฒดํ•  ๊ฒƒ์ธ๊ฐ€? ์ •๋ง ์ข‹์€ ๊ธ€. async ์ดํ•ด ์ „๋ฐ˜์— ํŠนํžˆ ์ข‹์Œ
    • Scale By The Bay 2020: Adam Warski, Project Loom? Better Futures? Whatโ€™s next for JVM concurrent... - YouTube
    • Going inside Javaโ€™s Project Loom and virtual threads
    • 'ํ”„๋กœ์ ํŠธ ๋ฃธ' ์ตœ์‹  ์ž๋ฐ” ๋™์‹œ์„ฑ ๋ชจ๋ธ ๋”ฐ๋ผ์žก๊ธฐ - CIO Korea
    • Using Java's Project Loom to build more reliable distributed systems ยท James Baker
    • Implementing Raft using Project Loom scala์ง€๋งŒ loom ์—ฐ๊ด€
    • Project Loom: Revolution in Java Concurrency or Obscure Implementation Detail? - YouTube
    • Loom is Blooming by Josรฉ Paumard & Remi Forax - YouTube
    • Prototype Loom-based concurrency API for Scala
    • Game of Loom: implementation patterns ... playing with virtual threads by Mario Fusco - YouTube
    • Java Next - From Amber to Loom, from Panama to Valhalla by Nicolai Parlog - YouTube
    • Prepare for what "Loom"s ahead by Dr. Heinz Kabutz - YouTube
    • Coroutines and Loom behind the scenes by Roman Elizarov - YouTube
    • #92 Virtual Threads Looming with Adam Warski by Happy Path Programming
    • Java Project Loom: Why Should I Care? โ€ข Erwin de Gier โ€ข GOTO 2023 - YouTube
      • VidiGo Java Project Loom: Why Should I Care? โ€ข Erwin de G
        • ์ž๋ฐ”์˜ ๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ˜์‹ , ํ”„๋กœ์ ํŠธ ๋ฃธ
          • ํ”„๋กœ์ ํŠธ ๋ฃธ์€ ์ž๋ฐ” ๊ฐœ๋ฐœ์ž๋“ค์ด ๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ›จ์”ฌ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” jdk ์ œ์•ˆ
          • ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ์™€ ๊ตฌ์กฐํ™”๋œ ๋™์‹œ์„ฑ์„ ํฌํ•จํ•˜์—ฌ, ๊ธฐ์กด์˜ ๋ณต์žกํ•œ ๋™์‹œ์„ฑ ๋ชจ๋ธ์„ ๋‹จ์ˆœํ™”ํ•˜๊ณ ์ž ํ•จ
          • ์ด๋Š” ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ์ด๋‚˜ i/o ์ž‘์—… ์ค‘ ๋Œ€๊ธฐ ์‹œ๊ฐ„์— ๋‹ค๋ฅธ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํšจ์œจ์„ฑ ํ–ฅ์ƒ
        • ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๋ฅผ ํ™œ์šฉํ•œ ์‹ค์ œ ์‚ฌ๋ก€ ๋น„๊ต
          • ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์™€ ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ๋ฅผ ๋น„๊ตํ•˜์—ฌ ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ์˜ ํšจ๊ณผ๋ฅผ ์‹ค์ œ ์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ์„ค๋ช…
          • ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๋Š” ๊ธฐ์กด์˜ ์“ฐ๋ ˆ๋“œ ๋ชจ๋ธ๋ณด๋‹ค ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ ๊ณ , ์Šค๋ ˆ๋“œ ์ „ํ™˜ ๋น„์šฉ์ด ๋‚ฎ์•„ ๋งŽ์€ ์ˆ˜์˜ ์š”์ฒญ ์ฒ˜๋ฆฌ์— ์œ ๋ฆฌ
          • ๋ฐ˜์‘ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ์ฝ”๋ฃจํ‹ด ๋“ฑ ๋‹ค๋ฅธ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋ฐฉ์‹๊ณผ ๋น„๊ตํ•˜๋ฉฐ, ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ฐ€์ ธ์˜ค๋Š” ์žฅ์ ๋“ค์„ ๊ฐ•์กฐ
        • ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ์™€ ๊ตฌ์กฐ์  ๋™์‹œ์„ฑ์˜ ์ดํ•ด
          • ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ tomcat์—์„œ ๊ธฐ์กด ๋™๊ธฐ ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ณ€๊ฒฝ ์—†์ด ํ–ฅ์ƒ๋œ ์„ฑ๋Šฅ ํš๋“
          • ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ์™€ ํ—ฌ๋ฆฌ๋ˆ ๋‹ˆ๋งˆ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์—์„œ๋„ ์„ฑ๋Šฅ ์ด์ ์„ ๋ˆ„๋ฆด ์ˆ˜ ์žˆ์Œ
          • ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๋Š” ํ”Œ๋žซํผ ์Šค๋ ˆ๋“œ์— ๋น„ํ•ด ์ž‘์—… ์ „ํ™˜ ๋น„์šฉ์ด ๋‚ฎ์•„ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„๊ณผ ์ฒ˜๋ฆฌ๋Ÿ‰ ๋ชจ๋‘์—์„œ ์ด์ ์„ ์ œ๊ณต
        • ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ์˜ ์‹ฌํ™” ์ดํ•ด ๋ฐ ์ตœ์ ํ™” ๋ฐฉ๋ฒ•
          • Synchronized ๋ธ”๋ก๊ณผ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ์€ ์—ฌ์ „ํžˆ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, reentrant lock์œผ๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅ
          • Threadlocal์€ ๊ฐ ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ๋ณ„๋„๋กœ ์กด์žฌํ•˜์ง€๋งŒ, ํฐ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์–ด ์ฃผ์˜๊ฐ€ ํ•„์š”
          • Jdk 21๋ถ€ํ„ฐ๋Š” scoped values๋ฅผ ๋„์ž…ํ•˜์—ฌ threadlocal์˜ ๋Œ€์•ˆ์œผ๋กœ ์ œ๊ณต๋˜๋ฉฐ, ๋” ๋‚ฎ์€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰๊ณผ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅ์„ฑ์„ ์ œ๊ณต
        • ๊ตฌ์กฐ์  ๋™์‹œ์„ฑ๊ณผ ๊ทธ ํ™œ์šฉ
          • ๊ตฌ์กฐ์  ๋™์‹œ์„ฑ์€ ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ ์œ„์— ๊ตฌ์ถ•๋œ ์“ฐ๋ ˆ๋”ฉ ๋ชจ๋ธ๋กœ ๋ณ‘ํ–‰ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅ˜ ๊ฐ์†Œ
          • Structured task scope๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ‘๋ ฌ ์ž‘์—… ์‹คํ–‰ ๋ฐ ๊ฒฐ๊ณผ ์ˆ˜์ง‘ ๋“ฑ ๋‹ค์–‘ํ•œ ๋™์‹œ์„ฑ ์ž‘์—… ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
          • ๊ตฌ์กฐ์  ๋™์‹œ์„ฑ์€ ์ฝ”๋“œ ๋ฒ”์œ„์— ๋”ฐ๋ผ ์Šค๋ ˆ๋“œ์˜ ์ƒ๋ช…์ฃผ๊ธฐ๊ฐ€ ๊ฒฐ์ •๋˜๋ฏ€๋กœ ๋ณด๋‹ค ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฌ์šด ๋ณ‘ํ–‰ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ€๋Šฅ
      • ์ž๋ฐ” ํ”„๋กœ์ ํŠธ ๋ฃธ: ๋‚ด๊ฐ€ ์™œ ๊ด€์‹ฌ์„ ๊ฐ€์ ธ์•ผ ํ• ๊นŒ? - ์—๋ฅด๋นˆ ๋“œ ๊ธฐ์–ด - GOTO 2023 | ์™„๋ฒฝํ•œ ์˜์ƒ์š”์•ฝ, ๋ฆด๋ฆฌ์Šค์—์ด์•„์ด | Lilys AI
        • 1.๐Ÿ’ป์ž๋ฐ” ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ Project Loom: ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ์™€ ๊ตฌ์กฐํ™”๋œ ๋™์‹œ์„ฑ
          • ํ”„๋กœ์ ํŠธ ๋ฃธ์€ ์ž๋ฐ”์˜ ๋™์‹œ์„ฑ ๋ชจ๋ธ์ด ๊ฐ•๋ ฅํ•˜๊ณ  ์œ ์—ฐํ•˜์ง€๋งŒ ๋ณต์žกํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•ด ์ œ์•ˆ๋œ ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ์™€ ๊ตฌ์กฐํ™”๋œ ๋™์‹œ์„ฑ ๋‘ ๊ฐ€์ง€๋กœ ๊ตฌ์„ฑ
          • Project Loom์˜ ๋ชฉํ‘œ๋Š” ์ž๋ฐ”์—์„œ ๋™์‹œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ๋งค์šฐ ์‰ฝ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ
            • ๊ธฐ์กด ์†”๋ฃจ์…˜๋“ค์€ ๋ณต์žก์„ฑ์„ ์ˆจ๊ธฐ์ง€ ๋ชปํ•ด ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋ถ€๋‹ด์„ ์•ˆ๊ฒจ์ฃผ์—ˆ๋Š”๋ฐ, ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๋ฅผ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ชฉํ‘œ
          • ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๋Š” ์‚ฌ์šฉ์ž ๋ชจ๋“œ ์Šค๋ ˆ๋“œ๋กœ, ์šฐ๋ฆฌ๊ฐ€ ์ต์ˆ™ํ•œ ๋™๊ธฐ์‹ ์ฝ”๋“œ ์Šคํƒ€์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”Œ๋žซํผ ์ˆ˜์ค€์—์„œ ์ž‘์—…์„ ์ „ํ™˜ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ
          • ์ด๋กœ ์ธํ•ด ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๋Š” ์ดˆ๊ธฐ ๋ฉ”๋ชจ๋ฆฌ ํ”Œ๋กฏํผ์ด ๋งค์šฐ ๋‚ฎ๊ณ , ์Šคํƒ์ด ํž™์— ์ €์žฅ๋˜์–ด ํ•„์š” ์‹œ ๋‚˜์ค‘์— ํฌ๊ธฐ๋ฅผ ์กฐ์ • ๊ฐ€๋Šฅ
            • ์ด ๋ชจ๋“  ๊ฒƒ๋“ค๋กœ ์ธํ•ด ์ˆ˜์ฒœ ๊ฐœ์˜ ํ”Œ๋žซํผ ์Šค๋ ˆ๋“œ๋ณด๋‹ค ๋” ๋งŽ์€ ์Šค๋ ˆ๋“œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
        • 2.๐Ÿ”„๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌ ์†๋„ ํ–ฅ์ƒ ๋ฐ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ์ค‘์š”์„ฑ ๊ฐ•์กฐ
          • ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์šด์˜ ์ฒด์ œ ์Šค๋ ˆ๋“œ๋กœ ๋งคํ•‘๋˜๋Š” ์ถ”๊ฐ€ ์ถ”์ƒ ๊ณ„์ธต์ด ์“ฐ๋ ˆ๋“œ ๋ชจ๋ธ์— ์กด์žฌ
          • I/O ๋˜๋Š” ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ๋กœ ์ธํ•œ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•  ๋•Œ, ๋Œ€๋‹ตํ•ด์•ผ ํ•˜๋Š” ๋งŽ์€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ์‚ฌ์šฉ ์‚ฌ๋ก€
          • ๊ณ„์‚ฐ์ด ๋งŽ๊ณ  ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋„ ์œ ์šฉํ•˜์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง„ ์•Š์Œ
          • ๊ธฐ์กด ๋ฐฉ๋ฒ•๊ณผ ๋น„๊ต์‹œ, ์ฝœ๋ฐฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๋น„๋™๊ธฐ ์ฝ”๋“œ ๋Œ€์‹  NonNull ๋ฐ˜ํ™˜ ๊ฐ์ฒด์ธ CompletableFutures ์ด์šฉ์‹œ ์ฝ”๋“œ๊ฐ€ ๋” ์ฝ๊ธฐ ์‰ฌ์›Œ์ง€๋ฉฐ ๋น„๋™๊ธฐ๋กœ ๊ฒฐ๊ณผ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์žˆ์Œ
        • 3.๐Ÿ’ป๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ์ฝ”๋ฃจํ‹ด ์žฅ์ ๊ณผ ์ฃผ์˜์ 
          • ๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๊ฐ•๋ ฅํ•˜๊ณ  ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์Šคํƒ€์ผ์„ ๊ฐ€์ง€๋ฉฐ, Mono์™€ flatMap์„ ํ†ตํ•ด ๊ฒฐ๊ณผ ์กฐํ•ฉํ•˜๊ณ  ๋น„๋™๊ธฐ ํ˜ธ์ถœ ๊ฐ€๋Šฅ
          • ๋ฆฌ์•กํ‹ฐ๋ธŒ๋Š” ์‹œ๊ฐ„์„ ๋‹ค๋ฃจ๋Š” ๊ฒฝ์šฐ์— ์œ ์šฉํ•˜์ง€๋งŒ, ์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด์ง€๊ณ  ํ•ด๋…ํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํŒจ๋Ÿฌ๋‹ค์ž„ ์ „ํ™˜ ํ•„์š”
          • ์ฝ”ํ‹€๋ฆฐ์˜ ์ฝ”๋ฃจํ‹ด์€ ๊ฐ€๋ฒผ์šด ํ˜•ํƒœ๋กœ ๋น„๋™๊ธฐ ๋ฌธ์ œ ํ•ด๊ฒฐ, ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์ฐจ๋‹จํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ•ญ์ƒ ์ฃผ์˜ ํ•„์š”
          • ์ฝ”ํ‹€๋ฆฐ์€ JDK์—์„œ ์‹คํ–‰๋˜์ง€๋งŒ ๋„ค์ดํ‹ฐ๋ธŒ๋กœ ์ง€์›๋˜์ง€ ์•Š์œผ๋ฉฐ, ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ž‘๋™. ๋˜ํ•œ, ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ธ”๋กœํ‚น ํ˜ธ์ถœ์ด ๋น„๋ธ”๋กœํ‚น ํ˜ธ์ถœ๋กœ ๋ณ€ํ™˜
        • 4.๐Ÿ’ปJava 21 ์ดํ›„, ๊ฐ€์ƒ ์Šค๋ ˆ๋”ฉ ๋ชจ๋ธ์—์„œ๋Š” ๋ฉ”์ธ ์Šค๋ ˆ๋“œ ์ฐจ๋‹จ๋˜์ง€ ์•Š์Œ
          • Java 21๋ถ€ํ„ฐ ๊ฐ€์ƒ ์Šค๋ ˆ๋”ฉ ๋ชจ๋ธ์—์„œ Thread.sleep์™€ future๋กœ๋ถ€ํ„ฐ ๊ฒฐ๊ณผ๋ฅผ ์–ป๋Š” ๊ฒƒ์ด ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์ฐจ๋‹จํ•˜์ง€ ์•Š๊ฒŒ ๋จ
          • ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„  Java 19๋‚˜ Java 21์ด์ƒ์ด ํ•„์š”, ํ˜„์žฌ๋Š” low-level API๋ฅผ ํ†ตํ•ด ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ ์ƒ์„ฑ ๊ฐ€๋Šฅ
          • ์‹ค์ œ๋กœ๋Š” ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๋ฅผ ์ง์ ‘ ๋งŒ๋“ค๊ณ  ์‹ถ์ง€ ์•Š์•„ ํ•  ๊ฒƒ์ด๋ฉฐ, ๋Œ€์‹  ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋˜ ์ง์ ‘ ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Œ์„ ๋ฐ”๋ผ๋Š” ์‹ค์ œ ์ƒํ™ฉ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ
          • ํ•˜์ง€๋งŒ ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๋Š” ์ง์ ‘ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ์‚ฌ์šฉํ•˜๊ณ ์žํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Œ. ์ด๋ฅผ ์œ„ํ•ด ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ›„๋ณด๋กœ ๋‘๊ณ  ๋ฐ๋ชจ ์ค€๋น„
        • 5.๐Ÿ’ปJava ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์š”์ฒญ ์‹œ๊ฐ„ ๋ฐ ์„ฑ๋Šฅ ๋น„๊ต
          • ์ผ๋ฐ˜ Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์˜ˆ์ œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, ๋ธ”๋กœํ‚น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ์š”์ฒญ ์‹œ๊ฐ„์ด ๊ธ‰๊ฒฉํžˆ ์ฆ๊ฐ€. ๋ฐ˜๋ฉด ๋ฆฌ์•กํ‹ฐ๋ธŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ 1์ดˆ๋กœ ์œ ์ง€
          • ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์‘๋‹ต ์‹œ๊ฐ„์ด 1์ดˆ ๋‚ด์™ธ๋กœ ์•ˆ์ •์ ์œผ๋กœ ์œ ์ง€
            • ๋ฆฌ์•กํ‹ฐ๋ธŒ ๋ฐ ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ์˜ ํ‰๊ท  ์‘๋‹ต ์‹œ๊ฐ„์ด ์œ ์‚ฌํ•œ๋ฐ, ์ด๋Š” ๋‘ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์‹ค์ œ๋กœ ๋งค์šฐ ์œ ์‚ฌํ•˜๊ธฐ ๋•Œ๋ฌธ
          • ๊ธฐ์กด ์Šค๋ ˆ๋“œ-์š”์ฒญ ๋ชจ๋ธ์€ ๊ฐ ์š”์ฒญ์ด ๋ธ”๋ก ์ฒ˜๋ฆฌ๋˜์–ด ๋Œ€๊ธฐํ•ด์•ผํ•˜๋‚˜, ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๋Š” ์ž‘์—… ๊ฐ„ ์ „ํ™˜์œผ๋กœ ๋” ๋งŽ์€ ์š”์ฒญ์„ ๋™์ผํ•œ ์Šค๋ ˆ๋“œ์—์„œ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ์ฒ˜๋ฆฌ๋Ÿ‰ ํ–ฅ์ƒ
          • Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๋กœ ์ „ํ™˜ํ•˜๋ ค๋ฉด Tomcat์—์„œ ์‹คํ–‰ ์ค‘ ์ผ ๋•Œ ๋‘ ๋นˆ์„ ์ œ๊ณตํ•ด์•ผ ํ•˜๋ฉฐ ๊ตฌ์„ฑ ํด๋ž˜์Šค์— ๊ตฌ์„ฑ ํŒŒ์ผ์— ๋ณต์‚ฌํ•˜์—ฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
            • ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด REST ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ ๋„ ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
        • 6.๐Ÿ’ป ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ์™€ ๋™๊ธฐํ™” ๋ธ”๋ก, ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ž ๊ธˆ์— ๋Œ€ํ•œ ์„ค๋ช…
          • ์ปดํ“จํ„ฐ๋ฅผ ์œ„ํ•œ ๊ณ ์† CPU๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์„ ๋น„๊ตํ•˜๋ฉฐ, Virtual threads๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ํšจ์œจ์ ์ž„์„ ํ™•์ธ
          • ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์Šค๋ ˆ๋“œ ์ „ํ™˜ ๋น„์šฉ์ด ๋‚ฎ์•„์ง€๋Š”๋ฐ, ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ์˜ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์€ ์•ฝ 66๋ฐ€๋ฆฌ์ดˆ๋กœ, ํ”Œ๋žซํผ ์Šค๋ ˆ๋“œ์˜ 100๋ฐ€๋ฆฌ์ดˆ๋ณด๋‹ค ๋น ๋ฆ„
          • ๋™๊ธฐํ™” ๋ธ”๋ก ํ™œ์šฉ, Thread.sleep์— ๋Œ€ํ•œ ์„ค๋ช…๊ณผ ํ•จ๊ป˜ ๋™๊ธฐํ™” ๋ฉ”์„œ๋“œ ๋‚ด์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ Main thread๋ฅผ ์ฐจ๋‹จ์‹œํ‚ค๋Š” ๋ฌธ์ œ ๋“ฑ์„ ์„ธ๋ถ€์ ์œผ๋กœ ๋‹ค๋ฃธ
          • ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๋ฅผ ํ™œ์šฉํ•  ๋•Œ๋Š” reentrant lock์„ ๊ฒ€ํ† ํ•˜์—ฌ ๋™๊ธฐํ™” ๋ฉ”์„œ๋“œ ๋‚ด์˜ ๋ธ”๋ก์„ ์ค€๋น„ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”
        • 7.๐Ÿ’ก ์Šค๋ ˆ๋“œ ๋กœ์ปฌ๊ณผ ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ์—์„œ์˜ ๋™์ž‘๊ณผ ์Šค์ฝ”ํ”„ ๊ฐ’ ์†Œ๊ฐœ
          • ์Šค๋ ˆ๋“œ ๋กœ์ปฌ์€ ์Šค๋ ˆ๋“œ์— ๋ฐ”์šด๋“œ๋œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ์ธ์Šคํ„ด์Šค๋กœ, ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ์—์„œ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
            • ์Šค์ฝ”ํ”„ ๊ฐ’์„ ํ†ตํ•ด ์Šค๋ ˆ๋“œ ๋กœ์ปฌ์˜ ๋ฉ”๋ชจ๋ฆฌ ํ’‹ํ”„๋ฆฐํŠธ๋ฅผ ๋‚ฎ์ถ”๋Š” JDK 21์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์†Œ๊ฐœ
          • ์Šค๋ ˆ๋“œ ๋กœ์ปฌ์€ ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ์—์„œ๋„ ํ™œ์šฉ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์Šค๋ ˆ๋“œ๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•˜๊ณ , ์ƒํƒœ ๋ณ€์ด ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Œ
          • ์Šค์ฝ”ํ”„ ๊ฐ’์€ ์ด ๋žŒ๋‹ค ํ•จ์ˆ˜ ์•ˆ์—์„œ๋งŒ ์œ ํšจํ•˜๋ฉฐ ๋” ์ €๋ ดํ•œ ๋Œ€์•ˆ์ด ๋˜๋Š” ์Šค๋ ˆ๋“œ ๋กœ์ปฌ ๋Œ€์ฒด๋กœ JDK 21์—์„œ ์†Œ๊ฐœ
          • ์Šค์ฝ”ํ”„ ๊ฐ’์€ ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ์™€ ๊ฐ™์ด ๊ฐ๊ฐ ๋…๋ฆฝ๋œ ์Šค๋ ˆ๋“œ ๋กœ์ปฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ–์ง€๋งŒ, ์ˆ˜์ • ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ , ๋ณต์‚ฌ๋˜์ง€ ์•Š์•„ ๋” ํšจ์œจ์ 
        • 8.๐Ÿ’ป Project Loom: ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ์™€ ๊ตฌ์กฐํ™”๋œ ๋™์‹œ์„ฑ์— ๋Œ€ํ•œ ์„ค๋ช…
          • Project Loom์˜ ๋‘ ๋ฒˆ์งธ ์š”์†Œ๋Š” ๊ตฌ์กฐํ™”๋œ ๋™์‹œ์„ฑ๊ณผ ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ
          • ๊ตฌ์กฐํ™”๋œ ๋™์‹œ์„ฑ์€ ๋น„๋™๊ธฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ
          • ๊ตฌ์กฐํ™”๋œ ๋™์‹œ์„ฑ์„ ํ†ตํ•ด ๋ณ‘๋ ฌ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ ๊ฒฐ๊ณผ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ฑฐ๋‚˜ ์žฌ์‹œ๋„ ๋ฐ ์‹œ๊ฐ„ ์ œํ•œ์„ ์„ค์ • ๊ฐ€๋Šฅ
          • ๊ตฌ์กฐํ™”๋œ ์ž‘์—… ๋ฒ”์œ„์— ๋”ฐ๋ผ ์Šค๋ ˆ๋“œ์˜ ๋ฒ”์œ„๊ฐ€ ์ฝ”๋“œ์˜ ๋ฒ”์œ„์— ๋ฐ”์ธ๋”ฉ๋˜์–ด ๋” ๊ด€๋ฆฌ ์šฉ์ด
          • Project Loom์€ ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ ๋ฐ ๊ตฌ์กฐํ™”๋œ ๋™์‹œ์„ฑ์„ ํ†ตํ•ด ๋™์‹œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์˜ค๋ฅ˜๋ฅผ ์ค„์ด๊ณ  ๋ณด๋‹ค ์‰ฝ๊ฒŒ ์Šค๋ ˆ๋“œ ๊ด€๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ
        • 9.โ˜•๏ธ ์ž๋ฐ” 20์— ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ณ  ์Šคํ”„๋ง ๋ถ€ํŠธ 3์—์„œ ๋™๊ธฐํ™” ๋ธ”๋ก์„ ReentrantLock์œผ๋กœ ๋Œ€์ฒด
          • 9์›”์— ๋ฆด๋ฆฌ์Šค๋  ์ž๋ฐ” 20์œผ๋กœ ์ค€๋น„ํ•˜๊ณ , ์Šคํ”„๋ง ๋ถ€ํŠธ 3๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋ฉฐ ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ์— ๋Œ€๋น„ํ•  ๊ฒƒ์„ ๊ถŒ์œ 
          • ๋ฆฌ์•กํ‹ฐ๋ธŒ๋‚˜ ์ฝ”๋ฃจํ‹ด๋ณด๋‹ค๋Š” ๊ฐ„๋‹จํ•œ ์Šคํƒ์„ ์œ ์ง€ํ•˜๋ฉฐ ๊ณ ๊ธ‰ํ™”ํ•˜๋ฉด ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๋ฅผ ์‰ฝ๊ฒŒ ์—…๊ทธ๋ ˆ์ด๋“œ ๊ฐ€๋Šฅ
          • ๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ๋™์ผํ•œ ํ˜œํƒ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. ๋ฆฌ์•กํ‹ฐ๋ธŒ์™€ ์ฝ”๋ฃจํ‹ด์˜ ๊ทธ๊ฐ„ ๋ฌธ์ œ๋ฅผ ๊ณ ๋ ค ํ•„์š”
          • ๋ฆฌ์•กํ‹ฐ๋ธŒ ์ŠคํŠธ๋ฆผ์€ ๋ฌดํ•œ ์ŠคํŠธ๋ฆผ ๋ฌธ์ œ ํ•ด๊ฒฐ, ์ฝ”ํ‹€๋ฆฐ ์ฝ”๋ฃจํ‹ด์€ ๋น„๋™๊ธฐ I/O๋ฅผ ๊ธฐ๋ฐ˜, ๋ธ”๋กœํ‚น ๋ฐ ๋„Œ๋ธ”๋กœํ‚น ์ฝœ์„ ์ธ์ง€ํ•˜์—ฌ ์Šค๋ ˆ๋“œ ๊ด€๋ฆฌ๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ฒ˜๋ฆฌ
          • ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๋Š” ์Šค๋ ˆ๋“œ๋กœ ๊ธฐ๋Šฅํ•˜๋ฉฐ ์ฝ”ํ‹€๋ฆฐ ์ฝ”๋ฃจํ‹ด์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์–ด, ์˜ฌ๋ฐ”๋ฅธ ๋„๊ตฌ ์„ ํƒ์€ ํ•ญ์ƒ ์ค‘์š”
        • 10.๐Ÿ’ปSpring Boot 3๋กœ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฒฐ๊ณผ
          • Spring Boot 3๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•œ ํ›„ ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ Executor๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ์—์„œ throughput์ด 2๋ฐฐ ๋†’์•„์ง„ ๊ฒƒ์„ ํ™•์ธ
          • ๋ฐ๋ชจ์™€ ๋ฐœํ‘œ ์ž๋ฃŒ๋Š” GitHub์— ์žˆ์œผ๋ฉฐ, Markdown์œผ๋กœ ์Šฌ๋ผ์ด๋“œ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ HTML ๋ฒ„์ „๋„ ์žˆ์Œ
          • ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ž‘๋™ํ•˜๊ณ , ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ์—์„œ ๋†’์€ ์„ฑ๊ณผ๋ฅผ ๋ณด์ž„
          • ์‹ค์ œ๋กœ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ๊ฐ„๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์‹คํ—˜์„ ํ†ตํ•ด ํ™•์ธ
    • Project Loom Virtual Thread์— ๋ด„(Spring)์€ ์™”๋Š”๊ฐ€ | ์นด์นด์˜คํŽ˜์ด ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ
    • project-loom-c5m: Experiment to achieve 5 million persistent connections with Project Loom virtual threads
  • Dynamic Constants โ€” Oxymoron or Promising JVM Feature? โ€ข Evgeny Mandrikov โ€ข GOTO 2023 - YouTube
    • VidiGo | ๋น„๋””๊ณ  - Analyze Video AI
      • ์ž๋ฐ”์˜ ์ˆจ๊ฒจ์ง„ ๊ธฐ๋Šฅ ํƒํ—˜
        • ์—๋ธŒ๊ฒŒ๋‹ˆ ๋งŒ๋“œ๋ฆฌ์ฝ”ํ”„๊ฐ€ ์ž์‹ ์„ ์†Œ๊ฐœ, ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ (jvm)์˜ ์ž˜ ์•Œ๋ ค์ง€์ง€ ์•Š์€ ๊ธฐ๋Šฅ์ธ ๋™์  ์ƒ์ˆ˜์— ๋Œ€ํ•ด ๋ฐœํ‘œ
        • ๋ฐœํ‘œ์—์„œ๋Š” ๋‹ค์–‘ํ•œ ์ž๋ฐ” ๋ฒ„์ „์—์„œ ํ…Œ์ŠคํŠธ๋œ ๋„๊ตฌ์— ๋Œ€ํ•ด ์„ค๋ช…, jdk์—์„œ ๋ฐœ๊ฒฌ๋œ ๋ฒ„๊ทธ๋ฅผ ๋ณด๊ณ ํ•˜๋Š” ๊ณผ์ • ์„ค๋ช…
      • ์ž๋ฐ”์˜ ๋žŒ๋‹ค์™€ ๋™์  ์ƒ์ˆ˜
        • ์ž๋ฐ” 8์—์„œ ๋žŒ๋‹ค๊ฐ€ ๋„์ž…๋˜์—ˆ์œผ๋ฉฐ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์„ค๋ช…
        • Invokedynamic ์ง€์‹œ๋ฌธ๊ณผ ๋ฐ”์ดํŠธ์ฝ”๋“œ ๋‚ด๋ถ€์˜ ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ• ์„ค๋ช…
        • ์ž๋ฐ” 11์—์„œ ์ƒˆ๋กญ๊ฒŒ ๋“ฑ์žฅํ•œ condy(๋™์  ํด๋ž˜์Šค ํŒŒ์ผ ์ƒ์ˆ˜)๊ฐ€ ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ์œ„ํ•ด ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๋Š”์ง€ ์„ค๋ช…
      • ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€ ์ธก์ •๊ณผ ์ตœ์ ํ™”
        • ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€ ์ธก์ • ๋ฐฉ๋ฒ•๊ณผ ์ด๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ํŠน๋ณ„ํ•œ ๊ตฌ์กฐ์ฒด(props)์— ๋Œ€ํ•ด ์„ค๋ช…
        • Boolean ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ ์‹คํ–‰ ์‚ฌ์‹ค์„ ๊ธฐ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์ด ๋ฐฐ์—ด์„ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ๋…ผ์˜
        • ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€ ๋„๊ตฌ์ธ jacoco๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์„ค๋ช…
      • ์ž๋ฐ” ์–ด์„œ์…˜๊ณผ ์ดˆ๊ธฐํ™” ๋ฌธ์ œ
        • ์ž๋ฐ”์˜ ์–ด์„œ์…˜(assertion) ๊ธฐ๋Šฅ๊ณผ ํด๋ž˜์Šค ์ดˆ๊ธฐํ™” ์‹œ์ ์— ๋”ฐ๋ฅธ ์–ด์„œ์…˜ ํ™œ์„ฑํ™” ์—ฌ๋ถ€ ์„ค๋ช…
        • ํด๋ž˜์Šค ๋กœ๋”์™€ ๊ด€๋ จํ•˜์—ฌ ๊ฐ™์€ ์ด๋ฆ„์˜ ํด๋ž˜์Šค๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์„ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์™€ ์ด๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ• ์„ค๋ช…
        • ์‹ค์ œ ์ฝ”๋“œ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์–ด์„œ์…˜ ํ™œ์„ฑํ™” ์กฐ๊ฑด๊ณผ ์ด์™€ ๊ด€๋ จ๋œ java ์–ธ์–ด ๋ช…์„ธ๋ฅผ ๋ถ„์„
      • ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ์˜ ๋‹จ์ ๊ณผ ํ•ด๊ฒฐ์ฑ…
        • ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ๋‹จ์–ธ๋ฌธ(assertions)์ด ๊ตฌํ˜„๋œ ๋ฐฉ์‹์€ ํŠน์ดํ•œ ์  ์กด์žฌ
        • ํด๋ž˜์Šค๊ฐ€ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์•˜์„ ๋•Œ null ํฌ์ธํ„ฐ ์˜ˆ์™ธ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
        • ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ง€์—ฐ ์ดˆ๊ธฐํ™”(lazy initialization) ๋ฐฉ์‹ ์‚ฌ์šฉ
      • ์ •์  ์ตœ์ข… ํ•„๋“œ์™€ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋„์ „
        • ์ •์  ์ตœ์ข…(static final) ํ•„๋“œ์— ๊ฐ’์„ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์€ ์ œํ•œ์ 
        • ์ธํ„ฐํŽ˜์ด์Šค์—์„œ๋Š” ๋ชจ๋“  ํ•„๋“œ๊ฐ€ ์•”๋ฌต์ ์œผ๋กœ ์ •์  ์ตœ์ข…(static final)์ด๋ฏ€๋กœ ๋” ๋ณต์žก
        • ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ ๊ทธ ํ•œ๊ณ„ ํƒ์ƒ‰
      • ๋™์  ์ƒ์ˆ˜์™€ JVM์˜ ๋ณ€ํ™”
        • ๋™์  ์ƒ์ˆ˜(dynamic constants)๋Š” jvm์— ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋œ ๊ธฐ๋Šฅ์œผ๋กœ ๋งŽ์€ ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ
        • ๋™์  ์ƒ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ •์  ์ดˆ๊ธฐํ™”์™€ ๊ด€๋ จ๋œ ๋ฌธ์ œ ์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œ ๊ฐ€๋Šฅ
        • ํ•˜์ง€๋งŒ ๋™์  ์ƒ์ˆ˜์˜ ๋„์ž… ๊ณผ์ •์—์„œ ์—ฌ๋Ÿฌ ๋ฒ„๊ทธ์™€ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ๊ฒฌ๋˜๊ณ  ์ˆ˜์ •
      • ๋‹จ์–ธ๋ฌธ๊ณผ ๋™์  ์ƒ์ˆ˜์˜ ํ™œ์šฉ
        • ๋‹จ์–ธ๋ฌธ ์‚ฌ์šฉ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ์ •์  ์ดˆ๊ธฐํ™” ๋ฌธ์ œ๋„ ๋™์  ์ƒ์ˆ˜๋กœ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ
        • Jdk ๋‚ด๋ถ€์—์„œ ์•„์ง ์™„์ „ํžˆ ์ ์šฉ๋˜์ง€ ์•Š์•˜์œผ๋‚˜, ์ด๋ก ์ƒ์œผ๋กœ๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜
        • ์ด ์™ธ์—๋„ ์ž๋ฐ”์—์„œ ๋™์  ์ƒ์ˆ˜๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ์‚ฌ๋ก€๋“ค ์กด์žฌ
      • ๋‹ค์ด๋‚˜๋ฏน ์ƒ์ˆ˜์˜ ์ด์ ๊ณผ ํ•œ๊ณ„
        • ๋‹ค์ด๋‚˜๋ฏน ์ƒ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ดˆ๊ธฐํ™”์— ๋Œ€ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ ๊ฐ์†Œ
        • ์œ ์ €๋“ค์€ ๋‹ค์–‘ํ•œ ์‹คํ—˜์„ ํ†ตํ•ด ์ƒ์ˆ˜ ์„ ์–ธ ๊ฐ€๋Šฅ ๊ฐœ์ˆ˜ ํƒ์ƒ‰
        • ํด๋ž˜์Šค ๋‚ด ํ•„๋“œ ์ˆ˜์—๋Š” ์ œํ•œ์ด ์žˆ์œผ๋ฉฐ, ์ด๋Š” enum ์ƒ์ˆ˜ ์„ ์–ธ์—๋„ ์˜ํ–ฅ
      • ์Šค์œ„์น˜ ๋ฌธ๊ณผ ์ •์  ์ดˆ๊ธฐํ™”์˜ ๋ฌธ์ œ์ 
        • ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๋Š” enum ์Šค์œ„์น˜๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํŠน๋ณ„ํ•œ ๊ธฐ๋ฒ• ์‚ฌ์šฉ
        • ์ •์  ์ดˆ๊ธฐํ™”๋Š” ์—ฌ๋Ÿฌ ๋ฌธ์ œ์˜ ์›์ธ์ด ๋  ๊ฐ€๋Šฅ์„ฑ
        • Condi๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šค์œ„์น˜ ๋ฌธ๊ณผ ๋ฐฐ์—ด ์ดˆ๊ธฐํ™” ๊ฐ„์†Œํ™” ๊ฐ€๋Šฅ
      • Condi์˜ ์ถ”๊ฐ€ ํ™œ์šฉ ์˜ˆ์‹œ์™€ ์ž๋ฐ”์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ํƒ์ƒ‰
        • Condi๋Š” ์‹ฑ๊ธ€ํ„ด ํŒจํ„ด ๊ตฌํ˜„ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ฒฝ์šฐ์— ํ™œ์šฉ ๊ฐ€๋Šฅ
        • ์ž๋ฐ”์™€ jvm์€ ์ง€์†์ ์œผ๋กœ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๋„์ž…
        • ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์‹œ๋„ํ•˜๊ณ  ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณต ์ค‘์š”
    • ๋™์  ์ƒ์ˆ˜ - ๋ชจ์ˆœ์ธ๊ฐ€, ์•„๋‹ˆ๋ฉด ์œ ๋งํ•œ JVM ๊ธฐ๋Šฅ์ธ๊ฐ€? - ์—๋ธŒ๊ฒŒ๋‹ˆ ๋งŒ๋“œ๋ฆฌ์ฝ”ํ”„ - GOTO 2023 | ์™„๋ฒฝํ•œ ์˜์ƒ์š”์•ฝ, ๋ฆด๋ฆฌ์Šค์—์ด์•„์ด | Lilys AI
      • 1.๏ธ๏ธ JVM์˜ ๋™์  ์ƒ์ˆ˜ ๊ธฐ๋Šฅ๊ณผ Java ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ
        • Evgeny Mandrikov์€ SonarSource์—์„œ ์ผํ•˜๋ฉฐ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌ, JVM์˜ ํ•œ ์•Œ๋ ค์ง€์ง€ ์•Š์€ ๊ธฐ๋Šฅ์ธ ๋™์  ์ƒ์ˆ˜์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ
        • SonarLint, SonarQube ๋“ฑ Sonar ์ œํ’ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์นœ์ˆ™ํ•œ ํšŒ์‚ฌ SonarSource์˜ ์ผ๊ณผ๋Š” ๋ฌด๊ด€, ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ์™€ ๊ด€๋ จ๋œ ๋‚ด์šฉ
        • Java ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€ ๋„๊ตฌ์— ๋Œ€ํ•ด ์˜ค๋žœ ๊ธฐ๊ฐ„ ๋™์•ˆ ๊ฐœ๋ฐœํ•˜์˜€์œผ๋ฉฐ, ๋‹ค์–‘ํ•œ Java ๋ฒ„์ „์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰
        • OpenJDK Quality Outreach ํ”„๋กœ๊ทธ๋žจ์— ์ฐธ์—ฌํ•˜์—ฌ JDK ๋ฒ„๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ณ  ๋ณด๊ณ ํ•˜๋Š” ๋“ฑ JDK ๊ฐœ๋ฐœ์— ๊ธฐ์—ฌ
        • ์ด๋ฒˆ ๋ฐœํ‘œ์—์„œ๋Š” Java ๋ฐ”์ดํŠธ์ฝ”๋“œ์— ๋Œ€ํ•ด ๋‹ค๋ฃจ๋ฉฐ, Java ์ปดํŒŒ์ผ๋Ÿฌ๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ์ง„ํ–‰
        1. ์ž๋ฐ” ๋ฒ„์ „8์˜ ๋žŒ๋‹ค์™€ ConstantDynamic ์‚ฌ์šฉ ๋น„๊ต
        • Java 8์—์„œ ๋žŒ๋‹ค๊ฐ€ ๋“ฑ์žฅ, ๋ฉ”์†Œ๋“œ๊ฐ€ ๋žŒ๋‹ค๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ ์ œ์‹œ
        • ๋žŒ๋‹ค๋ฅผ ์ปดํŒŒ์ผํ•  ๊ฒฝ์šฐ ๋ฐ”์ดํŠธ์ฝ”๋“œ ํ™•์ธ ํ•„์š”, Java disassembler ํˆด์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด๋ถ€ ๊ตฌํ˜„์„ ํ™•์ธํ•˜๋Š” ๊ณผ์ •๊ณผ ๊ฒฐ๊ณผ ์„ค๋ช…
        • ConstantDynamic ํด๋ž˜์Šค-ํŒŒ์ผ ์ƒ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋” ์ ์€ ์˜ค๋ฒ„ํ—ค๋“œ์™€ ์„ฑ๋Šฅ ํ–ฅ์ƒ ๊ฐ€๋Šฅ, ๋žŒ๋‹ค์˜ ๋™์ž‘ ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์„ค๋ช…
        1. ๋ฉ”์†Œ๋“œ ์‹คํ–‰ ๊ธฐ๋กํ•˜๊ธฐ: ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€ ์ธก์ •ํ•˜๊ธฐ
        • ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€๋ฅผ ์ธก์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”์†Œ๋“œ ์‹คํ–‰์„ ๊ธฐ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…
        • ์‹คํ–‰ ์ค‘์ธ ๋ฉ”์†Œ๋“œ์—์„œ ํ๋ฆ„์„ ๊ธฐ๋กํ•  *์†์„ฑ(Props)*๋ฅผ ์‚ฝ์ž…ํ•˜์—ฌ ๋ถ„๊ธฐ๋ฅผ ํŒ๋‹จ, ์‹คํ–‰ ์—ฌ๋ถ€๋ฅผ ํ™•์ธ
        • Java์—์„œ๋Š” ๊ฐ„๋‹จํ•œ ๊ตฌ์กฐ์ธ Boolean array๊ฐ€ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ชจ๋‘ ์ถฉ์กฑํ•˜๋Š” ๋ฐฉ๋ฒ•
        • ์ด ๋ฐฐ์—ด์„ ํ†ตํ•ด ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€ ๋„๊ตฌ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•ด ๋ณด๊ณ ์„œ ์ž‘์„ฑ ๊ฐ€๋Šฅ
        1. ์ž๋ฐ” ๊ฐ€์ƒ๋จธ์‹ ์˜ ๋™์ž‘ ์›๋ฆฌ์™€ ์–ด์„œํŠธ ๋ฌธ์ œ
        • ์ž๋ฐ” ์—์ด์ „ํŠธ๊ฐ€ ์ •๋ณด ์ˆ˜์ง‘์„ ์œ„ํ•ด ์ž๋ฐ” ์—์ด์ „ํŠธ๋ฅผ ์‚ฌ์šฉ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘, ์†๋„ ํ–ฅ์ƒ์„ ์œ„ํ•ด ํ•„๋“œ์˜ ๋ฐฐ์—ด์— ๋ฐ์ดํ„ฐ ์ €์žฅ
        • ๋กœ์ปฌ ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•˜๋Š” ๊ฒƒ์ด ํ•„๋“œ์— ์•ก์„ธ์Šคํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋น ๋ฆ„
        • ์–ด์„œ์…˜ ์ƒํƒœ์— ๋”ฐ๋ผ ์–ด์„œ์…˜ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ดˆ๊ธฐํ™”๊ฐ€ ์™„๋ฃŒ๋˜๊ธฐ ์ „์— ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ ํ•ญ์ƒ ํ™œ์„ฑํ™”
        • ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ์˜ ์ •์ ํ•œ ์ดˆ๊ธฐํ™” ๋™์ž‘, ์ž๋ฐ” ์–ธ์–ด ๋ช…์„ธ์„œ ํ™•์ธ ํ•„์š”ํ•˜๋ฉฐ, ์ด์— ๋”ฐ๋ผ ์–ด์„œ์…˜ ์—๋Ÿฌ๊ฐ€ ํ•ญ์ƒ ํ™œ์„ฑํ™”
        1. ์ž๋ฐ” ์–ธ์–ด ์‚ฌ์–‘์— ๋Œ€ํ•œ ์ดํ•ด
        • ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ๋‹จ์–ธ๋ฌธ์ด ๊ตฌํ˜„๋œ ๋ฐฉ์‹์— ๋”ฐ๋ผ, ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ํด๋ž˜์Šค์—์„œ ์“ฐ๋ ˆ๊ธฐ๊ฐ’์ธ 'null' ์˜ˆ์™ธ ๋ฐœ์ƒ
        • ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ ์ดˆ๊ธฐํ™”๋ฅผ ๋Šฆ๊ฒŒ ์ง„ํ–‰ํ•˜๊ณ , ํ•„๋“œ ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•˜๋Š” ์ง€์—ฐ ์ดˆ๊ธฐํ™” ๋ฐฉ์‹ ์‚ฌ์šฉ
        • ํ•ด๋‹น ๋ฐฉ๋ฒ•์€ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ํด๋ž˜์Šค์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ, ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ณ  ํšจ๊ณผ์ ์œผ๋กœ ์ž‘๋™
        • ์ด๋Ÿฌํ•œ ๋ณ€ํ™”๋Š” ์ž๋ฐ” ์–ธ์–ด ๋ช…์„ธ์„œ ๋‚ด ์‚ฌ์†Œํ•œ ์„ค๋ช…์ด์ง€๋งŒ, ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ๋‹จ์–ธ๋ฌธ์ด ๊ตฌํ˜„๋œ ํŠน์ด์ ์œผ๋กœ ์—ฐ๊ฒฐ
        1. Java Version 9 ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ static final field ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ์ฑ…
        • Java ์ปดํŒŒ์ผ๋Ÿฌ๋Š” static final field์— ๋ฉ”์„œ๋“œ์—์„œ ๊ฐ’์„ ํ• ๋‹นํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š์ง€๋งŒ, Java ๊ฐ€์ƒ ๋จธ์‹ ์€ ์˜ˆ์™ธ๋กœ ์ฒ˜๋ฆฌ
        • Java 9 ์ด์ „์—๋Š” ๊ฐ€์ƒ ๋จธ์‹ ์—์„œ ์ด๋ฅผ ๊ฒ€์‚ฌํ•˜์ง€ ์•Š๊ณ  ์ปดํŒŒ์ผ๋Ÿฌ ๋ ˆ๋ฒจ์—์„œ๋งŒ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ OpenJDK 9๋ถ€ํ„ฐ ์ด๋Š” ๋™์ž‘ํ•˜์ง€ ์•Š๊ฒŒ ๋ณ€๊ฒฝ
        • ํ•ด๊ฒฐ์ฑ…์œผ๋กœ final ์˜ˆ์•ฝ์–ด๋ฅผ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ static initializer๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ–ˆ์œผ๋ฉฐ, ์ด์— ๋Œ€ํ•œ ๋‹ค์–‘ํ•œ ๋ฌธ์ œ ๋ฐœ์ƒ
        • ์ธํ„ฐํŽ˜์ด์Šค์—์„œ๋„ ๋ฌธ์ œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์–ด final ํ•„๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ static initializer๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„์•ผ ํ–ˆ์œผ๋ฉฐ, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์˜ˆ์™ธ ๋ฐœ์ƒ
        1. ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ํ๋ฆ„ ๋ถ„์„๊ณผ ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •
        • ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ถ”์ ์„ ์œ„ํ•ด ์ž์‹์— ์ถœ๋ ฅ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๋ชจ๋“  ๊ณ„์ธต์˜ ์ดˆ๊ธฐํ™”๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ๊ณผ์ •์„ ์„ค๋ช…
        • ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ๊ฒฐ๊ณผ๋กœ, base๊ฐ€ ์ดˆ๊ธฐํ™”๋˜๊ธฐ ์ „์— AssertionError base๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜, child๊ฐ€ ๋จผ์ € ์ดˆ๊ธฐํ™”๋˜๊ณ  ๋‚˜์„œ base๊ฐ€ ์ดˆ๊ธฐํ™”๋œ ๊ฒฝ์šฐ ์„ค๋ช…
        • ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ์ค‘์— ๋‘ ๋‚˜๋ผ์—์„œ ๋™์‹œ์— ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ, JDK ๋ฒ„์ „ ์ฐจ์ด๋กœ ์ธํ•ด ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ, ํ•ด๊ฒฐ์ฑ…์€ ์ฆ‰์‹œ ์ ์šฉ, JVM crash ๋ฌธ์ œ ์ˆ˜์ •
        • ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ดˆ๊ธฐํ™” ์ˆœ์„œ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ ๋ฐ JVM์˜ ๋™์ž‘ ์‚ฌํ•ญ ์„ค๋ช…
          • JDK ๋ฒ„์ „์— ๋”ฐ๋ผ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๋”๋ผ๋„ class ์ดˆ๊ธฐํ™” ํ›„์— ๊ฐ’์ด ์บ์‹œ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋А๋ฆฐ ์ ‘๊ทผ ๋ฐฉ์‹ ๊ฒฝํ—˜ ๊ณต์œ 
      • 8.๏ธ JVM์—์„œ ๋™์  ์ƒ์ˆ˜ ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
        • ์ž๋ฐ” JVM์— ๋„์ž…๋œ Coni๋Š” ๋งค์ง ๋น„ํ–‰์„ ์—†์•จ ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๊ธฐ๋Šฅ
        • ๋™์  ์ƒ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ž˜์Šค ํ•„๋“œ๋กœ ๋…ธ์ถœ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ๋ฆฌํ”Œ๋ ‰์…˜์„ ํ†ตํ•ด ๋ณผ ์ˆ˜ ์—†์–ด์„œ, ์ง๋ ฌํ™” ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ข‹์€ ๋ถ€์ž‘์šฉ ๋ฐœ์ƒ
        • ์ดˆ๊ธฐ ๋ฒ„์ „์—์„œ ์ผ๋ถ€ ๋ฌธ์ œ๋Š” ์žˆ์—ˆ์ง€๋งŒ, ์‹ค์ œ ์‚ฌ์šฉ์ž๋“ค์ด ๋ฐœ๊ฒฌํ•˜๊ณ  ๋™์  ์ƒ์ˆ˜๋กœ ์ธํ•œ JVM ์ถฉ๋Œ ๋ฌธ์ œ๋Š” OpenJDK 13์—์„œ ์ˆ˜์ •
        • ๋™์  ์ƒ์ˆ˜ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์ง€๋งŒ, ํด๋ž˜์Šค์˜ ์ •์  ์ดˆ๊ธฐํ™”์™€ ์—ฐ๊ฒฐ๋œ ๋ถ€์ŠคํŠธ๋žฉ ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉ ์‹œ์˜ ๋ฌธ์ œ ๋“ฑ์€ ์—ฌ์ „ํžˆ ์ฃผ์˜ ํ•„์š”
        • ์—๋Ÿฌ ๋ฐฉ์ถœ์„ ์—†์• ๋Š” ๋Œ€์•ˆ์„ ์ฐพ์•„์•ผ ํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž์—๊ฒŒ ์„ค์ • ๋…ธ์ถœ ํ•„์š”
        1. Java ์–ธ์–ด์—์„œ ๋™์  ์ƒ์ˆ˜ ์‚ฌ์šฉ ์˜ˆ์‹œ์™€ ๊ทธ ์žฅ์ 
        • ์‚ฌ์šฉ์ž๋“ค์ด ๋‹ค์–‘ํ•œ JVM์„ ์‚ฌ์šฉํ•˜๋ฉฐ, OpenJDK9์—์„œ ๋ฐœ์ƒํ•œ garbage collector ์˜ค๋ฅ˜ ๋ณด๊ณ . ์ด๋ฅผ ๋™์  ์ƒ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ•ด๊ฒฐ
        • ๋™์  ์ƒ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด ์ดˆ๊ธฐํ™” ๊ณผ์ •์—์„œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ค„์–ด๋“ค์–ด ํšจ์œจ์ , Java ์–ธ์–ด ๋ช…์„ธ์˜ ์ž‘์€ ๋ฌธ์ œ๋„ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ
        • ASM๊ณผ ๊ฐ™์€ ๋ฉ”์†Œ๋“œ๊ฐ€ ๋™์ผํ•œ ๋žŒ๋‹ค๋กœ ์‚ฌ์šฉ๋  ๋•Œ, ๋™์  ์ƒ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์ดˆ๊ธฐํ™” ์˜ค๋ฒ„ํ—ค๋“œ ๊ฐ์†Œ
        • OpenJDK์—์„œ๋Š” ์•„์ง ๋™์  ์ƒ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ๋ฌธ์ œ ํ•ด๊ฒฐ์ด ์ด๋ค„์ง€์ง€ ์•Š์•˜์œผ๋‚˜, Java ์–ธ์–ด ๋ช…์„ธ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ณผ์ •์€ ์–ด๋ ค์›€
        • ๋™์  ์ƒ์ˆ˜์˜ ๋‹ค๋ฅธ ํ™œ์šฉ ์˜ˆ์‹œ๋“ค๋„ ์žˆ์œผ๋ฉฐ, ASM์„ ํ™œ์šฉํ•˜์—ฌ ํด๋ž˜์Šค ํŒŒ์ผ ๋‚ด์—์„œ ๋™์  ์ƒ์ˆ˜ ์ธ์ฝ”๋”ฉ์ด ์ด๋ฏธ ๊ฐ€๋Šฅ
        1. ์ž๋ฐ” Virtual Machine์—์„œ์˜ ์ƒ์ˆ˜, ๋ฐฐ์—ด, ๋ฉ”์†Œ๋“œ ์ œํ•œ
        • ์ž๋ฐ” Virtual Machine์—์„œ๋Š” Class ๋‚ด์˜ ํ•„๋“œ ์ˆ˜๊ฐ€ 65,536๊ฐœ๋กœ ์ œํ•œ, ๋ฐฐ์—ด์˜ ํฌ๊ธฐ ์—ญ์‹œ Integer.MAX_INT๋กœ ์ œํ•œ
        • HotSpot JVM์—์„œ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” Integer.MAX_INT์—์„œ 2 ๋˜๋Š” 3์„ ๋บ€ ๊ฐ’์œผ๋กœ ์ œํ•œ๋˜๋ฉฐ ๋ฉ”์†Œ๋“œ ํฌ๊ธฐ๋Š” 65,000๋ช…๋ น์–ด๋กœ ์ œํ•œ
        • ์‹ค์ œ๋กœ๋Š” ์ƒ์ˆ˜์˜ ์ˆ˜๋Š” 32,000๋ณด๋‹ค ์ ๊ณ , ๋‹ค๋ฅธ ์ œํ•œ๋“ค์— ๊ฐ€๊นŒ์›Œ์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Œ
        1. ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ์˜ ํŠธ๋ฆญ: ์Šค์œ„์น˜ ์•ˆ์ •์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•
        • ์ž๋ฐ” 14์—์„œ ์†Œ๊ฐœ๋œ '์Šค์œ„์น˜ ํ‘œํ˜„'์— ๋Œ€ํ•œ ์„ค๋ช…, switch expression์„ ์ปดํŒŒ์ผํ•˜๊ณ  ๋””์ปดํŒŒ์ผ ํ•  ๋•Œ ๋‚˜ํƒ€๋‚˜๋Š” ๋ฐ”์ดํŠธ์ฝ”๋“œ ์‚ดํŽด๋ด„
        • ์ฝ”๋“œ ์•ˆ์—์„œ ์Šค์œ„์น˜ ๋งต์ด ์ ‘๊ทผ๋˜์–ด ํ˜„์žฌ ๋Ÿฐํƒ€์ž„ ๊ฐ’ ๋งคํ•‘ ์ œ๊ณต, ์ปดํŒŒ์ผ ํƒ€์ž„ ๊ฐ’์œผ๋กœ ๋งตํ•‘ ์ œ๊ณต, ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์Šค์œ„์น˜ ์•ˆ์ •์„ฑ์„ ์œ ์ง€ํ•˜๋„๋ก ํ•˜๋Š” ํŠธ๋ฆญ ์†Œ๊ฐœ
        • ์Šคํƒœํ‹ฑ ์ดˆ๊ธฐํ™”๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ์˜ ๋ฌธ์ œ์ ๊ณผ, ์Šค์œ„์น˜ ์•ˆ์ •์„ฑ์„ ์œ„ํ•ด ๋Ÿฐํƒ€์ž„ ๊ฐ’์— ๋”ฐ๋ผ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋งคํ•‘์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹ ์†Œ๊ฐœ
        • ์ฝ”๋“œ์˜ ๋ณต์žก์„ฑ๊ณผ ์Šคํƒœํ‹ฑ ์ดˆ๊ธฐํ™”์— ๋Œ€ํ•œ ๋ฌธ์ œ, ๋ฉ”์†Œ๋“œ์˜ ํ˜ธ์ถœ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ์Šค์œ„์น˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹ ๋“ฑ์„ ์‚ดํŽด๋ด„
        1. ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ ํŠธ๋ฆญ์œผ๋กœ ์ธํ•œ ๋„ํฌ์ธํ„ฐ ์˜ˆ์™ธ ๋ฐœ์ƒ
        • ๋„ํฌ์ธํ„ฐ ์˜ˆ์™ธ๊ฐ€ C์–ธ์–ด์— ์—†๋‹ค๋Š” ๋ง์„ ๋ฏฟ๋Š” ์‚ฌ๋žŒ๋“ค์ด ์žˆ์ง€๋งŒ ์‹ค์ œ๋ก  ์žˆ์Œ
        • ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ƒ์„ฑํ•œ ์Šค์œ„์น˜ ๋งต์˜ ๊ตฌํ˜„ ๋‚ด๋ถ€ ์„ธ๋ถ€ ์‚ฌํ•ญ์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ
        • ์‚ฌ์–‘์„ ๋‹ค๋ฃจ๋Š” ์Šค์œ„์น˜ ๋งต ํด๋ž˜์Šค์˜ ์ดˆ๊ธฐํ™” ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋กœ ๋ฐœ์ƒ ์›์ธ์„ ์ž์„ธํžˆ ์„ค๋ช…
        • ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ์˜ ํŠธ๋ฆญ๊ณผ ๊ธฐ์ˆ ๋กœ ์ธํ•ด ์‹ฑ๊ธ€ ์ƒ์ˆ˜ ๋™์  ๋ช…๋ น์–ด๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅ
        1. ์ƒˆ๋กœ์šด Java ๋ฐ JVM ๊ธฐ๋Šฅ ์†๋„๋ก  ์„ฑ์žฅ๊ณผ ์ค‘์š”๋„ ํŒ
        • ์ƒˆ๋กœ์šด Java ๋ฐ JVM ๊ธฐ๋Šฅ์€ ๋น ๋ฅธ ์†๋„๋กœ ๋„์ž…๋˜๊ณ , ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ๋“ค์ด ์—ด๋ฆฌ๋ฉฐ, Scala, Groovy ๋“ฑ ๋‹ค๋ฅธ ์–ธ์–ด๋ฟ๋งŒ ์•„๋‹ˆ๋ผ JVM์—๋„ ํ™œ์šฉ
        • ๊ฐœ๋ฐœ์ž๋“ค์€ ์‹ค์ˆ˜ํ•  ์ˆ˜ ์žˆ๊ธฐ์— ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์‹œ๋„ํ•˜๊ณ  ํ”ผ๋“œ๋ฐฑ ๋ณด๊ณ  ํ•„์š”
        • ๋ฒ„๊ทธ ์‹ ๊ณ ๊ฐ€ ์ค‘์š”ํ•˜๋ฉฐ, ๋‹ค์Œ LTS๋ฅผ ์œ„ํ•ด ํ•จ๊ป˜ ๋” ๋‚˜์€ LTS๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ ๊ทน์ ์ธ ์ฐธ์—ฌ ํ•„์š”

JVM GC Garbage Collection

JVM Flag, Option

JVM Profile

Library

Library Debug

Library GraphQL

Library logger logging

Library Spring

Library Spring AI

Library Spring Boot

Memory Leak, OOM, Out of memory

NetBeans

News

Performance Tuning

Reactive

Serialization

TDD Test

Tutorial

Web