λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

빈 ꡬ멍 μ±„μš°κΈ°

[JVM] 클래슀 λ‘œλ”© 지연 및 ν•΄κ²° λ°©μ•ˆ

 

좜처

Gemini


클래슀 λ‘œλ”© 지연 및 ν•΄κ²° λ°©μ•ˆ

클래슀 λ‘œλ”© μ§€μ—°μ˜ μ£Όμš” 원인

1. λ„€νŠΈμ›Œν¬ 톡신

클래슀 νŒŒμΌμ„ λ„€νŠΈμ›Œν¬λ₯Ό 톡해 λ‘œλ“œν•˜λŠ” 경우 λ„€νŠΈμ›Œν¬ μ§€μ—°μœΌλ‘œ 인해 λ‘œλ”© μ‹œκ°„μ΄ κΈΈμ–΄μ§ˆ 수 μžˆλ‹€.

2. λ””μŠ€νŠΈ I/O 

클래슀 νŒŒμΌμ„ λ””μŠ€ν¬μ—μ„œ μ½μ–΄μ˜€λŠ” κ³Όμ •μ—μ„œ λ°œμƒν•˜λŠ” I/O 병λͺ© ν˜„μƒμ΄ 원인이 될 수 μžˆλ‹€.

3. 클래슀 μ˜μ‘΄μ„±

λ§Žμ€ ν΄λž˜μŠ€μ— μ˜μ‘΄ν•˜λŠ” 클래슀λ₯Ό λ‘œλ“œν•˜λŠ” 경우, μ˜μ‘΄μ„± ν•΄κ²° κ³Όμ •μ—μ„œ μ‹œκ°„μ΄ 였래 걸릴 수 μžˆλ‹€.

4. 클래슀 μ΄ˆκΈ°ν™”

클래슀 μ΄ˆκΈ°ν™” κ³Όμ •μ—μ„œ λ§Žμ€ μž‘μ—…μ΄ μˆ˜ν–‰λ˜λŠ” 경우 λ‘œλ”© μ‹œκ°„μ΄ κΈΈμ–΄μ§ˆ 수 μžˆλ‹€.

5. JVM μ„€μ •

JVM의 섀정에 따라 클래슀 λ‘œλ”© μ„±λŠ₯이 λ‹¬λΌμ§ˆ 수 μžˆλ‹€.

6. ν΄λž˜μŠ€λ‘œλ“œ 문제

ν΄λž˜μŠ€λ‘œλ”μ˜ κ΅¬ν˜„μ΄λ‚˜ 섀정에 λ¬Έμ œκ°€ μžˆμ„ 경우 λ‘œλ”©μ΄ 지연될 수 μžˆλ‹€.

 

ν΄λž˜μŠ€λ‘œλ”© 지연 ν•΄κ²° λ°©μ•ˆ

1. λ„€νŠΈμ›Œν¬ μ΅œμ ν™”

클래슀 νŒŒμΌμ„ 둜컬 μΊμ‹œμ— μ €μž₯ν•΄ λ„€νŠΈμ›Œν¬ μš”μ²­ 횟수λ₯Ό 쀄인닀.

CDN(Content Delivery Network)λ₯Ό ν™œμš©ν•΄ μ½˜ν…μΈ  전솑 속도λ₯Ό ν–₯μƒμ‹œν‚¨λ‹€.

gzip 압좕을 μ‚¬μš©ν•΄ μ „μ†‘λ˜λŠ” 데이터 크기λ₯Ό 쀄인닀.

2. λ””μŠ€νŠΈ I/O μ΅œμ ν™”

SSDλ₯Ό μ‚¬μš©ν•΄ λ””μŠ€νŠΈ I/O 속도λ₯Ό ν–₯μƒμ‹œν‚¨λ‹€.

ν”Œλž˜μŠ€ νŒŒμΌμ„ λ©”λͺ¨λ¦¬μ— 미리 λ‘œλ“œν•΄ λ””μŠ€ν¬ μ ‘κ·Ό 횟수λ₯Ό 쀄인닀.

3. 클래슀 μ˜μ‘΄μ„± 관리

μ˜μ‘΄μ„± 관리 도ꡬ(Maven, Gradle λ“±)λ₯Ό μ‚¬μš©ν•΄ μ˜μ‘΄μ„±μ„ 효율적으둜 κ΄€λ¦¬ν•œλ‹€.

λΆˆν•„μš”ν•œ μ˜μ‘΄μ„±μ„ μ œκ±°ν•œλ‹€.

4. 클래슀 μ΄ˆκΈ°ν™” μ΅œμ ν™”

클래슀 μ΄ˆκΈ°ν™” λ‘œμ§μ„ μ΅œμ ν™”ν•œλ‹€.

ν•„μš”ν•œ μ‹œμ μ—λ§Œ 클래슀λ₯Ό μ΄ˆκΈ°ν™”ν•œλ‹€.

지연 μ΄ˆκΈ°ν™”(Lazyu Initialization) 기법을 μ‚¬μš©ν•œλ‹€.

5. JVM μ„€μ • μ΅œμ ν™”

  • -Xmx, -Xms μ˜΅μ…˜μ„ μ‚¬μš©ν•˜μ—¬ νž™ λ©”λͺ¨λ¦¬ 크기λ₯Ό μ‘°μ ˆν•œλ‹€.
  • -XX:+UseParallelGC μ˜΅μ…˜μ„ μ‚¬μš©ν•˜μ—¬ 병렬 가비지 μ»¬λ ‰μ…˜μ„ ν™œμ„±ν™”ν•œλ‹€.
  • -XX:+TieredCompilation μ˜΅μ…˜μ„ μ‚¬μš©ν•˜μ—¬ JIT 컴파일러λ₯Ό μ΅œμ ν™”ν•œλ‹€.

6. ν΄λž˜μŠ€λ‘œλ” μ΅œμ ν™”

μ»€μŠ€ν…€ ν΄λž˜μŠ€λ‘œλ”λ₯Ό μ‚¬μš©ν•΄ 클래슀 λ‘œλ”© 과정을 μ œμ–΄ν•œλ‹€.

λΆ€λͺ¨ ν΄λž˜μŠ€λ‘œλ” μœ„μž„ 방식을 μ΅œμ ν™”ν•œλ‹€.

7. ν”„λ‘œνŒŒμΌλ§

ν”„λ‘œνŒŒμΌλ§ 도ꡬλ₯Ό μ‚¬μš©ν•΄ 클래슀 λ‘œλ”©μ— κ±Έλ¦¬λŠ” μ‹œκ°„μ„ λΆ„μ„ν•˜κ³  병λͺ© ν˜„μƒμ„ μ°Ύμ•„λ‚Έλ‹€.

 

좔가적인 κ³ λ € 사항

  • λͺ¨λ“ˆ μ‹œμŠ€ν…œ: μžλ°” 9λΆ€ν„° λ„μž…λœ λͺ¨λ“ˆ μ‹œμŠ€ν…œμ„ ν™œμš©ν•˜μ—¬ 클래슀 λ‘œλ”©μ„ λ”μš± μ„Έλ°€ν•˜κ²Œ 관리할 수 μžˆλ‹€.
  • AOT 컴파일: Ahead-of-Time μ»΄νŒŒμΌμ„ 톡해 클래슀λ₯Ό 미리 μ»΄νŒŒμΌν•˜μ—¬ μ‹€ν–‰ 속도λ₯Ό ν–₯μƒμ‹œν‚¬ 수 μžˆλ‹€.
  • 동적 클래슀 λ‘œλ”©: ν•„μš”ν•œ μ‹œμ μ— 클래슀λ₯Ό λ™μ μœΌλ‘œ λ‘œλ”©ν•˜μ—¬ λ©”λͺ¨λ¦¬ λ‚­λΉ„λ₯Ό 쀄일 수 μžˆλ‹€.

클래슀 λ‘œλ”© λ¬Έμ œ ν•΄κ²° μ‹œ μ€‘μš”ν•œ κ²ƒμ€

  • μ •ν™•ν•œ 원인 뢄석: ν”„λ‘œνŒŒμΌλ§ 도ꡬλ₯Ό ν™œμš©ν•˜μ—¬ 문제의 κ·Όλ³Έ 원인을 νŒŒμ•…ν•΄μ•Ό ν•œλ‹€.
  • 단계별 μ ‘κ·Ό: ν•˜λ‚˜μ˜ ν•΄κ²° λ°©μ•ˆμœΌλ‘œ λͺ¨λ“  문제λ₯Ό ν•΄κ²°ν•˜κΈ° μ–΄λ €μšΈ 수 μžˆμœΌλ―€λ‘œ, μ—¬λŸ¬ 가지 방법을 μ‘°ν•©ν•˜μ—¬ 문제λ₯Ό ν•΄κ²°ν•΄μ•Ό ν•œλ‹€.
  • 지속적인 λͺ¨λ‹ˆν„°λ§: μ‹œμŠ€ν…œ ν™˜κ²½ 변화에 따라 λ¬Έμ œκ°€ μž¬λ°œν•  수 μžˆμœΌλ―€λ‘œ μ§€μ†μ μœΌλ‘œ μ‹œμŠ€ν…œμ„ λͺ¨λ‹ˆν„°λ§ν•΄μ•Ό ν•œλ‹€.

μ˜ˆμ‹œ μ‹œλ‚˜λ¦¬μ˜€

  • 문제: μŠ€ν”„링 λΆ€νŠΈ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ΄ˆκΈ° λ‘œλ”© μ‹œκ°„이 μ˜€λž˜ κ±Έλ¦°λ‹€.
  • 원인 λΆ„석: ν”„λ‘œνŒŒμΌλ§ κ²°κ³Ό, νŠΉμ • μ„€μ • νŒŒμΌμ„ μ½μ–΄μ˜€λŠ” κ³Όμ •μ—μ„œ I/O λ³‘λͺ© ν˜„상이 λ°œμƒν•˜λŠ” κ²ƒμ„ ν™•μΈν–ˆλ‹€.
  • ν•΄κ²° λ°©μ•ˆ: μ„€μ • νŒŒμΌμ„ λ©”λͺ¨λ¦¬μ— μΊμ‹œν•˜κ³ , μ„€μ • νŒŒμΌμ˜ ν¬κΈ°λ₯Ό μ€„이며, I/O μž‘업을 λΉ„동기 μ²˜λ¦¬ν•˜λ„둝 λ³€κ²½ν–ˆλ‹€.

κ²°λ‘ 

클래슀 λ‘œλ”© 지연 λ¬Έμ œλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„±λŠ₯에 큰 영ν–₯을 λ―ΈμΉ  수 μžˆμœΌλ―€λ‘œ, λ‹€μ–‘ν•œ μš”μΈμ„ κ³ λ €ν•΄ 쒅합적인 ν•΄κ²° λ°©μ•ˆμ„ λͺ¨μƒ‰ν•΄μ•Ό ν•œλ‹€.