DCEVM - aragorn/home GitHub Wiki
KakaoPick Server Projectμ DCEVM(Dynamic Code Evolution VM) μ μ©νκΈ°
Introduction to HotSwap
- HotSwap κ³Ό DCEVM μ λν μ λ°μ μΈ κ°μλ₯Ό νμ νκΈ°μ μ’μ λ¬Έμλ‘ μλμ λ¬Έμλ€μ΄ μλ€. μλ λ¬Έμμ λ΄μ©μ μμ½νκ³ λ³΄μνμ¬ μ 리νμλ€.
- Java 1.4 μμ HotSwap μ΄ κ΅¬νλμ΄ κ³΅κ°λμλ€. μ΄ HotSwap κΈ°λ₯κ³Ό IDE μ€μ μ ν΅ν©νλ λ°©λ²μ λͺλͺ λΈλ‘κ·Έμμ μκ°λμ΄ μλ€. κ·Έλ¬λ μ΄ HotSwap μ μ΄λ―Έ μ‘΄μ¬νλ λ©μλλ₯Ό μ¬μ μ(redefine)ν κ²½μ°λ§μ μ§μνλ€. λ©μλλ₯Ό μ¬μ μνμλ€λ κ²μ λ©μλμ ꡬν λ΄μ©μ μμ νμλ€λ μλ―Έμ΄λ€. μ¦, μλ‘μ΄ λ©μλλ₯Ό μΆκ°νκ±°λ, μ΄λ¦μ΄ λ³κ²½λλ κ²½μ° λ±μ μ§μνμ§ μλλ€.
- http://www.asjava.com/core-java/how-to-hotswap-java-code-into-jvm-redefinition-example/ ... Unfortunately, the redefinition is limited to only change the body of method β it cannot apply to add either method, fields or otherwise. but Good news from JavaOne 2010: A modification of the Java HotSpot(TM) VM that allows unlimited class redefinition at runtime will become soon, it may be a nice feature in next JDK release.
- κΈ°μ‘΄μ JRebel μ΄λΌλ μ λ£ ν΄μ΄ κΈ°λ³Έ JVM μ HotSwap μ 보μνλ νμ₯λ hot swap κΈ°λ₯μ μ 곡νμλ€. JVM μμ€μ HotSwap λΏλ§ μλλΌ, j2ee 컨ν μ΄λ νΉνλ HotSwap κΈ°λ₯μ λ체νλ κΈ°λ₯μ JRebel μ΄ μ 곡νκ³ μκ³ , λ€μν κ°λ°ν΄μ΄λ νλ μμν¬μμ μ½κ² νμ©ν μ μλλ‘ κΈ°μ μ§μμ μ 곡νλ€. JRebel μ JVM μ μμ νλ λ°©μμ΄ μλλΌ, κ°λ°μκ° κ΅¬ννλ μλ°μ½λμ λ°μ΄νΈμ½λλ₯Ό νμ μμ νμ¬ Java 1.4 μμ μκ°λ 'old HotSwap' μ μ μ©ν μ μκ² λ§λ€μ΄ μ£Όλ λꡬμ΄λ€. μ΄ λλ¬Έμ, IDE μμ μ½λλ₯Ό λλ²κΉ νλ €λ©΄, κ°λ°μκ° μμ±ν μ½λμλ μλΉν λ€λ₯Έ λ°μ΄νΈμ½λκ° λ°°ν¬λμκΈ°μ, λ°λμ IDE μμ λ³νλ λ°μ΄νΈμ½λλ₯Ό μ΄ν΄λ³Ό μ μλ κΈ°λ₯μ μ 곡ν΄μΌ νλ€.
- DCEVM (Dynamic Code Evolution VM)μ method μ¬μ μ λΏλ§ μλλΌ, ν΄λμ€μ νλλ₯Ό μμ νκ±°λ λ©μλλ₯Ό μΆκ°, μμ ν κ²½μ°, super ν΄λμ€λ₯Ό λ³κ²½ν κ²½μ°μλ hot swap μ μ§μνκ² λλ€. DCEVM μ Thomas WΓΌrthingerκ° λ°μ¬κ³Όμ μ°κ΅¬ μ£Όμ λ‘ κ΅¬νν κΈ°λ₯μΌλ‘, JVMμ μμ νλ ν¨μΉ ννμ΄λ€. DCEVMμ μ₯μ μ JRebel μ λΉν΄ μ€ν μλκ° λΉ λ₯΄λ€λ κ², κ·Έλ¦¬κ³ κ°λ°μκ° κ΅¬νν μ½λμ λ°μ΄νΈμ½λλ₯Ό μμ νμ§ μκΈ° λλ¬Έμ, IDEμμ λ³λ€λ₯Έ κΈ°λ₯μ μ§μνμ§ μμλ λκ³ , IDE μμ‘΄μ±μ΄ μλ€λ κ²μ΄λ€. λ¨μ§ μ ν리μΌμ΄μ
μ μ€ννκΈ° μν JVMμ DCEVM ν¨μΉ μ μ©λ κ²μΌλ‘ μ ννλ©΄ λλ€.
- https://github.com/HotswapProjects/HotswapAgent μμ λ°°ν¬νλ DCEVM installerλ Java 7κ³Ό Java 8 λ²μ μ μ§μνλ€.
- https://github.com/dcevm/dcevm μμ μ΅μ λ²μ μ μμ€μ½λλ₯Ό κ΄λ¦¬νλ€. Java 7, Java 8 μ λ°μ΄νΈμ λ°λΌ ν¨μΉλ₯Ό κ³μ μμ νλ κ²μΌλ‘ 보μΈλ€. DCEVM μ΄ light λ²μ κ³Ό full λ²μ μΌλ‘ λΆλ¦¬λμλλ°, full λ²μ μ νμ¬ Java 7 λ²μ λ§μ μ§μνλ€. light λ²μ μ Java 7 κ³Ό Java 8 μ λͺ¨λ μ§μνλλ°, class hierarchy μμ μ λν κΈ°λ₯μ΄ μ νμ μ΄λ€. κΈ°λ₯ μ νμ κ°λ¨ν μ€λͺ νλ©΄, class hierarchy μ μΆκ°λλ κ²μ κ°λ₯νλ°, μμ λλ κ²μ μ§μνμ§ μλλ€κ³ νλ€. β 2014λ 11μ νμ¬
- DCEVM κΈ°λ°μ Hotswap Agent κ° κ³΅κ°λμ΄ μλ€. jar λ‘ λ°°ν¬νλ μ΄ agent λ₯Ό μ μ©νκ² λλ©΄, μΆκ°μ μΈ μ μ©ν κΈ°λ₯μ μ¬μ©ν μ μκ² λλ€.
DCEVM κΈ°λ°μ Hotswap Agent
- Hotswap Agent Homepage
- DCEVM κΈ°λ°μ Hotswap Agent κ° μ 곡νλ κΈ°λ₯
- DCEVM light λ²μ μ μΈμ€ν¨λ¬λ‘ λ°°ν¬νκ³ μλ€. full λ²μ μ΄ μλκΈ° λλ¬Έμ, class hierarchy λ³κ²½μ hot swap νλλ° μ μ½μ΄ μλ€.
- IDE κ°λ° νκ²½μμλ debug mode λ‘ μ€ννλ κ²λ§μΌλ‘ λ³κ²½λ class λ₯Ό reload νλ hot swap κΈ°λ₯μ μ΄μ©ν μ μλ€.
- autoHotswap νλ‘νΌν°λ₯Ό μ€μ νλ©΄, νλ‘λμ μμ€ν μμλ JVM μ¬μμ μμ΄ ν΄λμ€λ₯Ό reload ν μ μκ² λλ€.
- JAR μ λ€μ΄μμ§ μμ λͺ¨λ λ‘컬 νμΌμμ€ν μ νμΌμ λν΄ λ³κ²½μ λͺ¨λν°λ§νλ©° reload νλ κΈ°λ₯μ μλμ μΌλ‘ μννλ€. μ΄λ κ²½λ‘μ μ΄λ€ νμΌλ€μ λ³κ²½μ μ§μΌλ΄μΌ νλμ§ λ°λ‘ μ€μ νμ§ μμλ, κΈ°λ³Έ μ€μ μΌλ‘ μλνκ² λλ€.
- μΆκ° classpath λ₯Ό μ§μ ν μ μλ€. extraClasspath νλ‘νΌν°λ₯Ό μ΄μ©ν΄, λ³κ²½μ λͺ¨λν°λ§ν ν΄λμ€ νμΌλ€μ λλ ν 리λ₯Ό μΆκ°ν μ μλ€.
- resource νμΌμ΄ λ³κ²½λ κ²½μ°μλ reload νλλ‘ μ€μ ν μ μλ€. webapp λλ ν 리 λ΄μ resources λ μ ν리μΌμ΄μ μλ²κ° reload νλ κ²μ΄ μΌλ°μ μΈλ°, src/main/resources λ κ·Έλ μ§ μλ€. watchResources νλ‘νΌν°λ₯Ό μ΄μ©ν΄ resource νμΌ λ³κ²½μ λͺ¨λν°λ§ν μ μλ€.
- νλ μμν¬λ₯Ό μ§μνλ€. μμΈν κΈ°λ₯μ https://github.com/HotswapProjects/HotswapAgent#hotswap-agent-1 λ₯Ό μ°Έκ³ νλ©΄ λλ€. μ΄ κ°μ΄λ°, μ€νλ§ νλ μμν¬ μ§μ κΈ°λ₯μ μλμ κ°λ€.
Modify root Spring classes to get Spring contexts and registered scan path
- Watch for any resource change on a scan path
- Watch for a hotswap of a class file within a scan path package
- Reload bean definition after a change
- ... and many other
- IntelliJ μμλ DCEVM μ μν νλ¬κ·ΈμΈμ μ 곡νλ€. μ΄ νλ¬κ·ΈμΈμ λ³Έμ§μ μΌλ‘ νΉλ³ν κΈ°λ₯μ μ 곡νλ κ²μ μλκ³ , νλ‘μ νΈ μ€μ μμ VMμ μ νν μ μκ² λͺ©λ‘μ μ 곡νλ λ± μ€μ μ λμμ£Όλ κ²μ΄λ€.
- DCEVM light λ²μ μ μΈμ€ν¨λ¬λ‘ λ°°ν¬νκ³ μλ€. full λ²μ μ΄ μλκΈ° λλ¬Έμ, class hierarchy λ³κ²½μ hot swap νλλ° μ μ½μ΄ μλ€.
Using hot swap with DCEVM and IntelliJ
- μ΄ λ¬Έμλ ν½ κ°λ°μ Java Class λ³κ²½μ΄ μμ κ²½μ°, λ§€λ² ν°μΊ£μ μ¬μμνμ§ μκ³ λμ μΌλ‘ Hotswap νλ λ°©λ²μ μ€λͺ νλ λ¬Έμμ΄λ€.
- κΈ°μ‘΄μ IntelliJμ Hotswap κΈ°λ₯μ΄ μμ§λ§, Method Bodyμμλ§ Howswapμ΄ κ°λ₯νκ³ , μλ‘μ΄ λ©μλμ add / remove, class μμ±μ λ±μ κΈ°λ₯λ€μ μ 곡λμ§ μμ, μΌλͺ Full featured hotswap (true hotswap)μ μ μ©νλ λ°©λ²μ μκ°νλ€.
- μ€λΉλ¬Ό
- JDK 1.8.0 Update 5 build 13
- DCEVM Installer
- IntellIJ DCEVM Integration Plugin
- μ€μΉλ°©λ²
- JDK 1.8.0 Update 5 build 13μ μ€μΉνλ€. DCEVM Installκ° λͺ¨λ λ²μ μ jdk8μ μ§μνμ§ μμμ jdk8 update 5λ₯Ό μ€μΉνλ€ - 2014.10.29 κΈ°μ€
- μ€μΉκ°λλ©΄ /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdkμ μ€μΉλλ€.
- DCEVM Installλ₯Ό μ€νμν¨λ€. rootκΆνμ΄ νμνλ€. sudo java -jar installer-light-jdk8u5.52.jar
- Add installation directoryλ₯Ό λλ¬μ .../jdk1.8.0_05.jdk/Contents/Home ν΄λλ₯Ό μ§μ νλ€.
- Replaced by DCEVM / Install DCEVM as altjvm μ°¨λ‘λ‘ λλ₯Έλ€.
- μλ£νμ java -version μ νμκ²½μ° λ€μκ³Ό κ°μ΄ λμμΌ ν¨. $ java -version java version "1.8.0_05" Java(TM) SE Runtime Environment (build 1.8.0_05-b13) Dynamic Code Evolution 64-Bit Server VM (build 25.5-b02-dcevmlight-58, mixed mode) $
- IntelliJμμ DECVMμ κ²μν΄μ DCEVM Integeration νλ¬κ·ΈμΈ μ€μΉ ν IntellIJ μ¬μμ.
- μ¬μ©λ°©λ²
- Java νμΌμ νλ λ°κΎΌλ€μμ Compile νν, Tomcat restart μμ΄ λ°μλλμ§ νμΈ
- tip : Ctrl + Sλ Cmd+S λ±μ Save And Compile Macroλ‘ κ±Έμ΄λλ©΄ Save & Compileμ΄λμ μ μ₯κ³Ό λμμ ν«μ€μμ΄ λλ€.