🌱 JAVA & SPRING/Java (JVM)

Java μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 싀행될 λ•Œ CPUκ°€ λ©”λͺ¨λ¦¬λ₯Ό μ–΄λ–»κ²Œ μ‚¬μš©ν• κΉŒ?

ming412 2023. 8. 28. 15:38

λŸ°νƒ€μž„ 데이터 μ˜μ—­ (=λ©”λͺ¨λ¦¬ μ˜μ—­)

 

μŠ€ν”„λ§λΆ€νŠΈ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ΄ λ„μ°©ν–ˆμ„ λ•Œ,

Controllerκ°€ μ‹€ν–‰λ˜λŠ” κ³Όμ •μ—μ„œ CPU와 λ©”λͺ¨λ¦¬ μ˜μ—­μ΄ μ–΄λ–»κ²Œ μƒν˜Έμž‘μš©ν• κΉŒ?

 

1. μš”μ²­ 도착

  • ν΄λΌμ΄μ–ΈνŠΈλ‘œλΆ€ν„° HTTP μš”μ²­μ΄ μ›Ή μ„œλ²„(ex. Tomcat)에 λ„μ°©ν•˜λ©΄, μ„œλ²„λŠ” μš”μ²­μ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ μ“°λ ˆλ“œλ₯Ό μƒμ„±ν•˜κ±°λ‚˜ μ“°λ ˆλ“œ ν’€μ—μ„œ κ°€μ Έμ˜¨λ‹€.
    • μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ λ™μ‹œμ— μ—¬λŸ¬ μš”μ²­μ„ μ²˜λ¦¬ν•΄μ•Ό ν•  수 μžˆλ‹€. λ”°λΌμ„œ 각 μš”μ²­μœΌ λ³„λ„μ˜ μ“°λ ˆλ“œ(thread)둜 μ²˜λ¦¬λœλ‹€.

 

2. μŠ€νƒ μ˜μ—­ ν™œμš©

  • μ“°λ ˆλ“œκ°€ μƒμ„±λ˜λ©΄, ν•΄λ‹Ή μ“°λ ˆλ“œμ— μŠ€νƒ μ˜μ—­(=μž‘μ—… 곡간)이 ν• λ‹Ήλœλ‹€.
    • μŠ€νƒ μ˜μ—­μ€ 각 μ“°λ ˆλ“œλ§ˆλ‹€ λ³„λ„λ‘œ μ‘΄μž¬ν•œλ‹€.
  • μ“°λ ˆλ“œλŠ” μŠ€νƒ μ˜μ—­μ„ μ‚¬μš©ν•΄ λ©”μ„œλ“œ 호좜 정보(λ©”μ„œλ“œ μœ„μΉ˜, 이름, λ§€κ°œλ³€μˆ˜ νƒ€μž…, λ°˜ν™˜ νƒ€μž…, 호좜 μœ„μΉ˜ λ“±..)와 μ§€μ—­ λ³€μˆ˜ 등을 κ΄€λ¦¬ν•œλ‹€.
  • μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈλ‘œλΆ€ν„° 온 HTTP μš”μ²­μ„ νŒŒμ‹±ν•˜μ—¬ μš”μ²­ 정보, header, body 등을 μΆ”μΆœν•œλ‹€. μΆ”μΆœλœ μ •λ³΄λŠ” ν•΄λ‹Ή μš”μ²­μ„ μ²˜λ¦¬ν•  λ©”μ„œλ“œμ˜ λ§€κ°œλ³€μˆ˜λ‚˜ μ§€μ—­ λ³€μˆ˜μ— μ €μž₯λœλ‹€.

 

3. 컨트둀러 λ§€ν•‘ 및 호좜

  • μ„œλ²„λŠ” μš”μ²­μ˜ URLκ³Ό HTTP λ©”μ„œλ“œ(GET, POST, ..)λ₯Ό 기반으둜 μ μ ˆν•œ 컨트둀러 λ©”μ„œλ“œλ₯Ό μ°ΎλŠ”λ‹€.
    • μŠ€ν”„λ§μ˜ DispatcherServlet이 μš”μ²­μ„ λ°›μœΌλ©΄, URL λ§€ν•‘ 정보λ₯Ό 톡해 μ–΄λ–€ 컨트둀러 λ©”μ„œλ“œκ°€ ν•΄λ‹Ή μš”μ²­μ„ μ²˜λ¦¬ν•΄μ•Ό ν•˜λŠ”μ§€ κ²°μ •λœλ‹€. 
  • κ²°μ •λœ 컨트둀러 λ©”μ„œλ“œλŠ” ν•΄λ‹Ή μš”μ²­μ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ ν¬ν•¨ν•˜κ³  μžˆλŠ” λ°”μ΄νŠΈ μ½”λ“œλ₯Ό κ°€μ§€κ³  μžˆλ‹€.
    • 이 λ°”μ΄νŠΈ μ½”λ“œλŠ” λ©”μ„œλ“œ μ˜μ—­μ— μ €μž₯λ˜μ–΄ 있으며 μ‹€ν–‰ μ‹œ CPU둜 가져와 CPUμ—μ„œ μ‹€ν–‰ν•œλ‹€.

 

4. 객체 생성 및 νž™ μ˜μ—­ ν™œμš©

  • 컨트둀러 λ©”μ„œλ“œ μ‹€ν–‰ 쀑 ν•„μš”ν•œ 객체(DTO, Service 객체 호좜 κ²°κ³Ό)λŠ” new ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄ λ™μ μœΌλ‘œ μƒμ„±λœλ‹€.
    • 이런 객체듀은 νž™ μ˜μ—­μ— μ €μž₯λœλ‹€.

 

5. λ©”μ„œλ“œ μ˜μ—­ ν™œμš©

  • μ»¨νŠΈλ‘€λŸ¬λ‚˜ λ‹€λ₯Έ ν΄λž˜μŠ€μ—μ„œ static ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ λ³€μˆ˜λ‚˜ Singleton Scope의 Bean에 μ ‘κ·Όν•΄μ•Ό ν•˜λŠ” 경우 λ©”μ„œλ“œ μ˜μ—­μ—μ„œ ν•΄λ‹Ή 정보λ₯Ό κ°€μ Έμ˜¨λ‹€.

 

6. λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 μ‹€ν–‰ 및 DB μ ‘κ·Ό

  • μ»¨νŠΈλ‘€λŸ¬λŠ” ν•„μš”ν•œ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ Serviceλ‚˜ Repository λ ˆμ΄μ–΄μ˜ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  수 μžˆλ‹€.
    • 이 λ•Œλ„ μŠ€νƒ μ˜μ—­μ€ λ©”μ„œλ“œ 호좜 정보λ₯Ό κ΄€λ¦¬ν•˜λŠ”λ° μ‚¬μš©λœλ‹€.

 

7. 응닡 생성

  • 둜직 처리 ν›„, μ»¨νŠΈλ‘€λŸ¬λŠ” 응닡을 μƒμ„±ν•œλ‹€.
    • 이 λ•Œ μƒμ„±λœ 응닡 객체도 νž™ μ˜μ—­μ— μ €μž₯될 수 μžˆλ‹€.

 

8. μš”μ²­ 처리 μ™„λ£Œ

  • 응닡이 ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ „μ†‘λœ ν›„,
    μ‚¬μš©λœ μŠ€νƒ μ˜μ—­μ˜ λ©”λͺ¨λ¦¬λŠ” ν•΄μ œλ˜λ©°, 더 이상 μ°Έμ‘°λ˜μ§€ μ•ŠλŠ” νž™ μ˜μ—­μ˜ 객체듀은 GC에 μ˜ν•΄ 회수될 수 μžˆλ‹€.