λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
  • μž₯원읡 κΈ°μˆ λΈ”λ‘œκ·Έ

πŸ’Š Java & Kotlin & Spring57

[Distributed Tracing] Messaging ν™˜κ²½μ—μ„œμ˜ λΆ„μ‚° 좔적 μ‹€μŠ΅ λ³Έ 글은 λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ˜ λΆ„μ‚° 좔적 μ‹œλ¦¬μ¦ˆλ‘œ 이둠과 μ‹€μŠ΅μ΄ ν•¨κ»˜ ν¬ν•¨λœ μ‹œλ¦¬μ¦ˆμž…λ‹ˆλ‹€. μ•„λž˜ λͺ©μ°¨μ— ν‘œμ‹œλœ 글을 λͺ¨λ‘ μ°Έκ³ ν•˜λ©΄ μ’‹μŠ΅λ‹ˆλ‹€. λͺ©μ°¨ Distributed Tracing, λΆ„μ‚° μΆ”μ μ΄λž€? Spring Cloud Sleuth 와 Zipkin Sleuth 둜 Http ν™˜κ²½μ˜ λΆ„μ‚° 좔적 μ‹€μŠ΅ Sleuth 둜 Messaging ν™˜κ²½μ˜ λΆ„μ‚° 좔적 μ‹€μŠ΅ μ‹€μŠ΅μ— λŒ€ν•œ μ†ŒμŠ€μ½”λ“œλ₯Ό ν™•μΈν•˜μ‹œκ³  μ‹Άλ‹€λ©΄ μ‹€μŠ΅ githubμ—μ„œ ν™•μΈν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€. Messaging ν™˜κ²½ μ—μ„œμ˜ λΆ„μ‚° 좔적 μ‹€μŠ΅ μ§€λ‚œ μ‹œκ°„ μš°λ¦¬λŠ” HTTP ν™˜κ²½μ—μ„œμ˜ λΆ„μ‚° 좔적 에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄μ•˜λ‹€. λ‹€μ‹œ ν•œλ²ˆ 개랡적인 μ•„ν‚€ν…μ²˜μ— λŒ€ν•΄μ„œ ν™•μΈν•΄λ³΄μž μœ„ μ•„ν‚€ν…μ²˜λ₯Ό κ΅¬λΆ„ν•˜μžλ©΄ 2개의 λΆ€λΆ„μœΌλ‘œ λ‚˜λˆŒ 수 μžˆλ‹€. HTTP API Messaging μ΄λ²ˆμ—λŠ” HTTP.. 2022. 5. 1.
[Distributed Tracing] HTTP ν™˜κ²½μ—μ„œμ˜ λΆ„μ‚° 좔적 μ‹€μŠ΅ν•˜κΈ° λ³Έ 글은 λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ˜ λΆ„μ‚° 좔적 μ‹œλ¦¬μ¦ˆλ‘œ 이둠과 μ‹€μŠ΅μ΄ ν•¨κ»˜ ν¬ν•¨λœ μ‹œλ¦¬μ¦ˆμž…λ‹ˆλ‹€. μ•„λž˜ λͺ©μ°¨μ— ν‘œμ‹œλœ 글을 λͺ¨λ‘ μ°Έκ³ ν•˜λ©΄ μ’‹μŠ΅λ‹ˆλ‹€. λͺ©μ°¨ Distributed Tracing, λΆ„μ‚° μΆ”μ μ΄λž€? Spring Cloud Sleuth 와 Zipkin Sleuth 둜 Http ν™˜κ²½μ˜ λΆ„μ‚° 좔적 μ‹€μŠ΅ Sleuth 둜 Messaging ν™˜κ²½μ˜ λΆ„μ‚° 좔적 μ‹€μŠ΅ μ‹€μŠ΅μ— λŒ€ν•œ μ†ŒμŠ€μ½”λ“œλ₯Ό ν™•μΈν•˜μ‹œκ³  μ‹Άλ‹€λ©΄ μ‹€μŠ΅ githubμ—μ„œ ν™•μΈν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€. Spring Cloud Sleuth λ₯Ό μ΄μš©ν•œ HTTP ν™˜κ²½μ˜ λΆ„μ‚° 좔적 μ΄λ²ˆμ€ μ§€λ‚œ μ‹œκ°„μ— μ•Œμ•„λ³΄μ•˜λ˜ λΆ„μ‚° 좔적에 λŒ€ν•œ μ‹€μŠ΅μ„ 진행해보렀 ν•œλ‹€. μš°μ„  개랡적인 μ•„ν‚€ν…μ²˜λŠ” λ‹€μŒκ³Ό κ°™λ‹€ μœ„ μ•„ν‚€ν…μ²˜λ₯Ό κ΅¬λΆ„ν•˜μžλ©΄ 2개의 λΆ€λΆ„μœΌλ‘œ λ‚˜λˆŒ 수 μžˆλ‹€. HTTP API Messaging.. 2022. 5. 1.
λ‹€ν˜•μ„±μ„ μœ„ν•œ instanceof λ₯Ό Generic 으둜 μ œκ±°ν•˜λŠ” 방법 λͺ©μ°¨ μ„œλ‘  instanceof λž€? μ½”λ“œμ—μ„œ instanceof λ₯Ό 느껴보자 Generic 을 μ΄μš©ν•˜μ—¬ μš°μ•„ν•˜κ²Œ μ œκ±°ν•˜κΈ° κ·ΈλŸΌμ—λ„ μ‘΄μž¬ν•˜λŠ” 문제점 ν•˜μ§€λ§Œ? μ„œλ‘  μžλ°”μ—μ„œ λ‹€ν˜•μ„±μ„ μ΄μš©ν•œ 객체지ν–₯적 ν”„λ‘œκ·Έλž˜λ°μ„ ν•˜λ‹€λ³΄λ©΄ μ’…μ’… νŠΉμ • 객체가 μ§€μ •λœ μœ ν˜•μ˜ μΈμŠ€ν„΄μŠ€μΈμ§€ 확인해야 ν•˜λŠ” κ²½μš°κ°€ μžˆλ‹€. κ·Έ 경우 μš°λ¦¬λŠ” μ—¬λŸ¬κ°€μ§€ 선택지가 μžˆμ§€λ§Œ, μ˜€λŠ˜μ€ instanceof 에 λŒ€ν•΄ μ§‘μ€‘ν•˜κ³  이야기해보렀 ν•œλ‹€. λ‹€ν˜•μ„±μ„ μ΄μš©ν•œ ν”„λ‘œκ·Έλž˜λ°μ„ ν•˜λ‹€ 보면 νŠΉμ • ν˜•μœΌλ‘œ λ³€ν™˜ν•˜κΈ° μœ„ν•΄ λͺ‡κ°€μ§€ μž‘μ—…μ„ ν•΄μ•Ό ν•˜λŠ”λ°, 그쀑 λŒ€ν‘œμ μΈ 것이 λ°”λ‘œ instanceof μ—°μ‚°μžμ΄λ‹€. instanceof λž€? μ•žμ„œ λ§ν–ˆλ“― Java μ—μ„œλŠ” μ–΄λ–€ 객체의 νŠΉμ • type 에 λŒ€ν•΄μ„œ λ™μΌν•œ type 인지 확인할 수 μžˆλŠ” 연산을 instanceof μ—°μ‚°μž.. 2022. 4. 3.
[쑰금 더 κΉŠμ€ Java] JVM의 Runtime Data Area, Execution Engine, Garbage Collection 에 λŒ€ν•΄μ„œ μžλ°”λ₯Ό κ³΅λΆ€ν•΄λ³΄μ•˜λ‹€λ©΄ 읡히 λ“€μ—ˆμ„ JVM, Java Virtual Machine 에 λŒ€ν•΄μ„œ 이야기해보렀 ν•œλ‹€. λ§‰μ—°ν•˜κ²Œ JVM 이 λ™μž‘ν•˜κ³  JVM이 있기 λ•Œλ¬Έμ— ν”Œλž«νΌμ— 독립적이며 Garbage Collection 으둜 μž₯점을 얻을 수 μžˆλ‹€κ³  μƒκ°ν•˜λŠ” μ‚¬λžŒλ“€μ΄ λ§Žμ„ 것이닀. μ˜€λŠ˜μ€ JRE의 κ΅¬μ„±μš”μ†ŒμΈ JVM이 μ–΄λ–»κ²Œ κ΅¬μ„±λ˜κ³  Garbage Collection 이 μ–΄λ–€ λ°©μ‹μœΌλ‘œ λ™μž‘ν•˜λŠ”μ§€ μ•Œμ•„λ³Ό 것이닀. JVM μ΄λž€? μ§€λ‚œ 2번의 μ‹œκ°„μ— 거쳐 μš°λ¦¬λŠ” Java Bytecode와 Java ClassLoader 에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄μ•˜λ‹€. μ§€λ‚œ μ‹œκ°„μ—λŠ” μ–΄λ–»κ²Œ μžλ°” 파일이 μ»΄νŒŒμΌλ˜μ–΄ 클래슀 파일둜 λ³€ν™˜μ΄ 되고, μ–΄λ–»κ²Œ ν΄λž˜μŠ€λ‘œλ”μ— μ˜ν•΄μ„œ 동적 적재되며 verification 을 μˆ˜ν–‰ν•˜λŠ”μ§€ μ•Œμ•„λ³΄μ•˜λ‹€. μ˜€λŠ˜μ€ κ·Έ 이후.. 2021. 12. 5.
[쑰금 더 κΉŠμ€ Java] JRE의 Classloader 에 λŒ€ν•΄ μ•Œμ•„λ³΄μž μ˜€λŠ˜μ€ JRE의 핡심 κ΅¬μ„±μš”μ†ŒμΈ Classloader에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄λ € ν•œλ‹€. μ§€λ‚œ μ‹œκ°„ μš°λ¦¬λŠ” Java Bytecode 에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄μ•˜λ‹€. [쑰금 더 κΉŠμ€ Java] Java Bytecode λ₯Ό μ•Œμ•„λ³΄μž (μžλ°”λ₯Ό μ»΄νŒŒμΌν•˜λ©΄ μ–΄λ–€ 일이 μΌμ–΄λ‚ κΉŒ?) μš°λ¦¬λŠ” λ§Žμ€ μ‹œκ°„ Javaλ₯Ό μ΄μš©ν•΄μ„œ λ‹€μ–‘ν•œ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό κ°œλ°œν•˜λ©΄μ„œ λ“€μ—ˆλ˜ μ†Œλ¦¬κ°€ μžˆλ‹€. JavaλŠ” JVM 이 있기 λ•Œλ¬Έμ— ν”Œλž«νΌμ— 쒅속적이지 μ•Šκ³  이식성이 λ›°μ–΄λ‚˜λ‹€. κ·Έ μ΄μœ μ— λŒ€ν•΄μ„œ 생각해본 κ²½ wonit.tistory.com μš°λ¦¬κ°€ .java νŒŒμΌμ„ μ»΄νŒŒμΌν•œλ‹€λ©΄ .class λΌλŠ” λ°”μ΄νŠΈ μ½”λ“œλ‘œ λ³€ν™˜μ΄λ˜κ³  JVM이 ν•΄λ‹Ή class νŒŒμΌμ„ λ™μ μœΌλ‘œ μ‹€ν–‰ν•˜λŠ” κ³Όμ •μ—μ„œ κ°€μž₯ μ€‘μš”ν•œ 것이 λ°”λ‘œ ClassLoader 이닀. Java ClassLoader Java.. 2021. 12. 2.
[쑰금 더 κΉŠμ€ Java] Java Bytecode λ₯Ό μ•Œμ•„λ³΄μž (μžλ°”λ₯Ό μ»΄νŒŒμΌν•˜λ©΄ μ–΄λ–€ 일이 μΌμ–΄λ‚ κΉŒ?) μš°λ¦¬λŠ” λ§Žμ€ μ‹œκ°„ Javaλ₯Ό μ΄μš©ν•΄μ„œ λ‹€μ–‘ν•œ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό κ°œλ°œν•˜λ©΄μ„œ λ“€μ—ˆλ˜ μ†Œλ¦¬κ°€ μžˆλ‹€. JavaλŠ” JVM 이 있기 λ•Œλ¬Έμ— ν”Œλž«νΌμ— 쒅속적이지 μ•Šκ³  이식성이 λ›°μ–΄λ‚˜λ‹€. κ·Έ μ΄μœ μ— λŒ€ν•΄μ„œ 생각해본 κ²½ν—˜μ΄ μžˆλŠ”κ°€? μ˜€λŠ˜μ€ μœ„μ˜ JVMκ³Ό 이식성을 μ΄ν•΄ν•˜κΈ° μœ„ν•΄ κΌ­ μ•Œμ•„μ•Ό ν•˜λŠ” Java Bytecode 에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄λ € ν•œλ‹€. Java Bytecode, μžλ°” λ°”μ΄νŠΈμ½”λ“œ μš°λ¦¬λŠ” Java μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό κ°œλ°œν•˜κΈ° μœ„ν•΄μ„œ JDKλ₯Ό μ„€μΉ˜ν•˜κ³  Java μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ‹€ν–‰μ‹œν‚€κΈ° μœ„ν•΄μ„œ JRE λ₯Ό μ„€μΉ˜ν•œλ‹€. λ˜ν•œ κ°œλ°œμ„ ν•˜λ©΄ μ‹€ν–‰ κ²°κ³Όλ₯Ό ν™•μΈν•˜κΈ° μœ„ν•΄μ„œ Compile 과정을 거치게 λ˜λŠ”λ°, 이 μ»΄νŒŒμΌμ€ λ°”λ‘œ JDKλ‚˜ JRE 에 ν•¨κ»˜ ν¬ν•¨λ˜λŠ” javac.exe μ‹€ν–‰νŒŒμΌμ΄ μˆ˜ν–‰ν•˜λŠ” 것이닀. μ΄λŠ” κ°œλ°œμžκ°€ μž‘μ„±ν•œ .java νŒŒμΌμ„ .. 2021. 11. 25.