π§ 곡μ λμ보λ μ΄μ κΈμμ μ΄ν΄λ³΄μλ―μ΄ λμ보λλ₯Ό νλνλ μ§μ μμ±νλ κ²μ λ²κ±°λ‘μ΄ μμ
μ
λλ€. μ΄λ² κΈμμλ λ€λ₯Έ μ¬μ©μλ€μ΄ μ΄λ―Έ μμ±νμ¬ κ³΅μ ν΄λ λμ보λλ₯Ό μ¬μ©νλ λ°©λ²μ λν΄ μμλ³΄κ² μ΅λλ€. μ°μ λ€μ λμ보λ 곡μ μ¬μ΄νΈ(https://grafana.com/grafana/dashboards)μ μ μν©λλ€. μ μν΄μ springμ κ²μν΄ λ³΄λ©΄ μμ κ°μ΄ μ΄λ―Έ λ§λ€μ΄λ μ¬λ¬ λμ보λλ₯Ό νμΈν μ μμ΅λλ€. (μ λ°μ€μΉ λκ°κ° λ§μ΄ μ¬μ©λλ€κ³ ν©λλ€. λΆνΈ 3.0μ μμ§ μμ§λ§, 2.1 λμ보λλ νΈνμ΄ λλ€κ³ ν©λλ€.) π§ 곡μ λμ보λ μ¬μ©νκΈ° - Spring Boot 2.1 System Monitor μμ Spring Boot 2.1 System Monitorλ₯Ό μ¬μ©ν΄ 보λλ‘ νκ² μ΅λλ€...
ποΈ Spring
π§ κ·ΈλΌνλ (Grafana) μ΄μ κΈμμ κ°λ¨ν μΈκΈνμ§λ§ λ€μ ν λ² νλλ‘ νκ² μ΅λλ€. νλ‘λ©ν
μ°μ€κ° DBλΌκ³ νλ€λ©΄, μ΄ DBμ μλ λ°μ΄ν°λ₯Ό λΆλ¬μ μ¬μ©μκ° λ³΄κΈ° νΈνκ² λ³΄μ¬μ£Όλ λμ보λκ° νμν©λλ€. κ·ΈλΌνλλ λ°μ΄ν°λ₯Ό κ·Έλνλ‘ λ³΄μ¬μ£Όλ ν΄μ
λλ€. μ λ§μ κ·Έλνλ₯Ό μ 곡νκ³ , νλ‘λ©ν
μ°μ€λ₯Ό ν¬ν¨ν λ€μν λ°μ΄ν°μμ€λ₯Ό μ§μν©λλ€. π§ κ·ΈλΌνλ μ€μΉ κ·ΈλΌνλ μ€μΉ μ¬μ΄νΈ(https://grafana.com/grafana/download)λ‘ μ΄λν©λλ€. μ¬κΈ°μλ λ§₯ OS κΈ°μ€μΌλ‘ μ€μΉλ₯Ό μ§ννκ² μ΅λλ€. μμ λͺ
λ Ήμ΄λ₯Ό 볡μ¬ν©λλ€. μ΄ν κ·ΈλΌνλλ₯Ό μ€μΉν (μμμ)ν΄λλ‘ μ΄λν λ€, μμ λͺ
λ Ήμ΄λ₯Ό κ·Έλλ‘ μ
λ ₯ν©λλ€. (μ€μΉνλλ° μκ°μ΄ μ’ κ±Έλ¦΄ μ μμ΅λλ€) κ·ΈλΌνλλ₯Ό μ€μΉν ν΄λμ bin ν΄λλ‘ μ΄λ..
π§ μΈμ ν
μ€νΈ μμ€ν
μ μΈμλ₯Ό μν΄ κΈ°λ₯μ /λΉκΈ°λ₯μ μꡬμ¬νμ μ¬μ©μκ° μ§μ ν
μ€νΈνμ¬ κ°λ°μ΄ μλ£λμμμ μ¦λͺ
νλ ν
μ€νΈ μΈμ ν
μ€νΈλ μμ κ°μ΄ μμ€ν
μ μΈμλ₯Ό μν΄ μμ±νλ ν
μ€νΈμ
λλ€. μ¦ μΈμν
μ€μ λͺ©μ μ μ¬μ©μλ€μ΄ μνλ μλ리μ€λλ‘ κΈ°λ₯μ΄ μ λμνλμ§λ₯Ό κ²μ¦νλ κ²μ΄λΌ ν μ μμ΅λλ€. μ΄λ² κΈμμλ μΈμ ν
μ€νΈλ₯Ό μμ±ν λ, κ°λ
μ±μ λμ¬ ν
μ€νΈλ₯Ό μμ±νλ λ°©λ²μ λν΄μ μμ보λλ‘ νκ² μ΅λλ€. π§ RestAssured μ½λ μ¨κΈ°κΈ° μΈμν
μ€νΈλ κ·Έ λͺ©μ μ λ°λΌ κ°λ°μκ° μλ μ¬λλ€μ΄ 보λλΌλ μ½κ² μ΄ν΄ν μ μλλ‘ ν
μ€νΈλ₯Ό μμ±νλ κ²μ΄ μ€μνλ€κ³ μκ°ν©λλ€. κ·Έλμ μ λ κ°λ°κ³Ό κ΄λ ¨λ μ½λλ₯Ό μ΅λν κ°μΆμ΄ μ½λλ₯Ό μμ±νλ λ° μ΄μ μ λμ΄ ν
μ€νΈλ₯Ό μμ±νμμ΅λλ€. μμ μ½λμ ν¨κ» μ΄ν΄λ³΄..
π§ νλ‘λ©ν
μ°μ€ (Prometheus) μ ν리μΌμ΄μ
μμ λ°μν λ©νΈλ¦(μ§ν)λ₯Ό κ·Έ μκ°λ§ νμΈνλ κ²μ΄ μλλΌ κ³Όκ±° μ΄λ ₯κΉμ§ ν¨κ» νμΈνλ €λ©΄ λ©νΈλ¦μ 보κ΄νλ λ°μ΄ν°λ² μ΄μ€κ° νμν©λλ€. λν λ©νΈλ¦μ μ§μμ μΌλ‘ μμ§νκ³ μ΄λ₯Ό DBμ μ μ₯νλ 무μΈκ°κ° νμν©λλ€. νλ‘λ©ν
μ°μ€κ° λ°λ‘ μ΄λ° μν μ μνν©λλ€. π§ κ·ΈλΌνλ (Grafana) νλ‘λ©ν
μ°μ€κ° DBλΌκ³ νλ€λ©΄, μ΄ DBμ μλ λ°μ΄ν°λ₯Ό λΆλ¬μ μ¬μ©μκ° λ³΄κΈ° νΈνκ² λ³΄μ¬μ£Όλ λμ보λκ° νμν©λλ€. κ·ΈλΌνλλ λ°μ΄ν°λ₯Ό κ·Έλνλ‘ λ³΄μ¬μ£Όλ ν΄μ
λλ€. μ λ§μ κ·Έλνλ₯Ό μ 곡νκ³ , νλ‘λ©ν
μ°μ€λ₯Ό ν¬ν¨ν λ€μν λ°μ΄ν°μμ€λ₯Ό μ§μν©λλ€. π§ νλ‘λ©ν
μ°μ€μ κ·ΈλΌνλλ₯Ό μ¬μ©ν λͺ¨λν°λ§ μ 체 ꡬ쑰λ λ€μκ³Ό κ°μ΅λλ€. μ€νλ§ λΆνΈ μ‘μΆμμ΄ν°μ λ§μ΄ν¬λ‘λ―Έν°λ₯Ό μ¬μ©νλ©΄ μ¬..
π§ λ§μ΄ν¬λ‘λ―Έν° μλΉμ€λ₯Ό μ΄μν λλ μ ν리μΌμ΄μ
μ CPU, λ©λͺ¨λ¦¬, 컀λ₯μ
μ¬μ©, κ³ κ° μμ²μμ κ°μ λ§μ μ§ν(metric)λ€μ νμΈνλ κ²μ΄ νμν©λλ€. κ·ΈλμΌ μ΄λμ μ΄λ€ λ¬Έμ κ° λ°μνλμ§ μ¬μ μ λμλ ν μ μκ³ , μ€μ λ¬Έμ κ° λ°μνλλΌλ μμΈμ λΉ λ₯΄κ² νμ
ν΄μ λμ²ν μ μμ΅λλ€. μλ₯Ό λ€μ΄ λͺ¨λν°λ§μ ν΅ν΄ λ©λͺ¨λ¦¬ μ¬μ©λμ΄ κ°λ μ°Όλ€λ κ²μ λ°κ²¬νλ€λ©΄, λ©λͺ¨λ¦¬ λ¬Έμ μ κ΄λ ¨μλ κ³³μ λΉ λ₯΄κ² μ°Ύμμ λμν μ μμ κ²μ
λλ€. νμ¬ μλ§μ λͺ¨λν°λ§ ν΄μ΄ μλ―μ¬, μμ€ν
μ λ€μν μ 보λ₯Ό μ΄ λͺ¨λν°λ§ ν΄μ μ λ¬ν΄μ μ¬μ©νκ² λ©λλ€. λ€μμ λ§μ΄ μ¬μ©λλ λͺ¨λν°λ§ ν΄λ€μ μμμ
λλ€. μμ κ°μ λͺ¨λν°λ§ ν΄λ€μ μ¬μ©νκΈ° μν΄μλ, μμ€ν
μ λ€μν μ§νλ€μ κ°κ°μ λͺ¨λν°λ§ ν΄μ λ§λλ‘ λ§λ€μ΄μ 보λ΄μ£Όμ΄μΌ ..
π§ νλ‘λμ
μ€λΉ κΈ°λ₯ μ ν리μΌμ΄μ
μ κ°λ°ν λμλ κΈ°λ₯μ μ μꡬμ¬νλ§μ κ°λ°νλ κ²μ΄ μλλλ€. μλΉμ€λ₯Ό μ€μ λ°°ν¬ν μ΄ν μλΉμ€μ λ¬Έμ κ° μλμ§ λͺ¨λν°λ§νλ νλλ€μ΄ μΆκ°λ‘ νμν©λλ€. μ΄μ νκ²½μμ μ ν리μΌμ΄μ
μ μ€νν λ νμν μ΄λ¬ν κΈ°λ₯λ€μ νλ‘λμ
μ€λΉ κΈ°λ₯μ΄λΌ ν©λλ€. μ¦ νλ‘λμ
μ μ΄μμ λ°°ν¬ν λ μ€λΉν΄μΌ νλ λΉ κΈ°λ₯μ μμλ€μ μλ―Έν©λλ€. λ€μκ³Ό κ°μ κ²λ€μ΄ νλ‘λμ
μ€λΉ κΈ°λ₯μ μν©λλ€. μ§ν (metric) μΆμ (trace) κ°μ¬ (auditing) λͺ¨λν°λ§ μ΄λ€μ μ ν리μΌμ΄μ
μ΄ νμ¬ μ΄μμλμ§, λ‘κ·Έ μ 보λ μ μμ μΌλ‘ μ€μ λμλμ§, 컀λ₯μ
νμ μΌλ§λ μ¬μ©λκ³ μλμ§ λ±μ νμΈνλλ° μ¬μ©λ©λλ€. π§ μ€νλ§ λΆνΈ μ‘μΆμμ΄ν° μ€νλ§ λΆνΈκ° μ 곡νλ μ‘μΆμμ΄ν°λ νλ‘λμ
μ€λΉ κΈ°λ₯..
π§ μλ‘ Repositoryμ DAOμ κ΄ν΄μ ν·κ°λ € νλ λΆλ€μ΄ λκ² λ§μ κ² κ°λ€λ κ²μ λλΌκ³ μμ΅λλ€. μ λ μ²μ ν΄λΉ λ μ©μ΄λ₯Ό μ νμ λμλ κ΅μ₯ν νΌλμ€λ¬μ λ κΈ°μ΅μ΄ μμ΅λλ€. μ΄λ² κΈμμλ μ λ μ©μ΄μ λν΄μ κ°κ° μ΄λ€ μλ―Έλ₯Ό κ°κ³ μ΄λ€ μμΌλ‘ μ¬μ©λλμ§ μ΄ν΄λ΄μΌλ‘μ¨ κ³ λ―Όμ μ‘°κΈ ν΄κ²°ν΄ 보λ μκ°μ κ°μ§λ € ν©λλ€. κ²°λ‘ λ§ λ³΄κ³ μΆμΌμλ€λ©΄, 맨 μλλ‘ λ΄λ €κ°μ
λ λ©λλ€. π§ DAO Data Access Objectμ μ€μλ§μΈ DAOλ ν΄μ κ·Έλλ‘ λ°μ΄ν°μ μ κ·Όνλ κ°μ²΄λ₯Ό μλ―Έν©λλ€. μ‘°κΈ λ νμ΄μ μ€λͺ
νμλ©΄, DAOλ λ°μ΄ν°λ² μ΄μ€ νΉμ λ€λ₯Έ μμμ±(Persistence) λ©μ»€λμ¦μ λν μ κ·Όμ μΆμνν΄μ£Όλ μν μ μνν©λλ€. μ¦ μ΄λ€ λ°μ΄ν°λ² μ΄μ€λ₯Ό μ¬μ©ν κ²μΈμ§, νΉμ μ΄λ€ μμμ± μ μ₯ ..
π§ μλ‘ μ€νλ§μμλ μΈν°μ
ν°λ₯Ό ν΅ν΄, 컨νΈλ‘€λ¬(νΈλ€λ¬)λ₯Ό νΈμΆνκΈ° μ κ³Ό νμ μΆκ°μ μΈ μμ
λ€μ μ²λ¦¬ν μ μλλ‘ ν΄μ€λλ€. μλ₯Ό λ€μ΄ μΈμ¦ μ 보λ₯Ό νμΈνλ λ±μ μμ
μ΄ μμ μ μκ² λ€μ. μΈν°μ
ν°μ λν΄μλ λ€μ κΈμ μ°Έκ³ ν΄μ£ΌμΈμ. μ΄λ² κΈμμλ μΈν°μ
ν°κ° μ€μ λ‘ μ΄λ€ μμΌλ‘ λμνλμ§ μμ보λλ‘ νκ² μ΅λλ€. μ°μ μ€λͺ
μ νΈμλ₯Ό μν΄ HandlerExecutionChainλΆν° μ΄ν΄λ³΄λλ‘ νκ² μ΅λλ€. π§ HandlerExecutionChain HandlerExecutionChainμ μμ κ°μ΄ νΈλ€λ¬μ, ν΄λΉ νΈλ€λ¬μ μ μ©λ μΈν°μ
ν°λ€μ κ°μ§κ³ μλ ν΄λμ€μ
λλ€. (@Controllerμ @RequestMappingμΌλ‘ μ μν λ©μλκ° νλμ νΈλ€λ¬κ° λ μ μμ΅λλ€.) μ¦ HandlerExecution..