OpenFeign λμ μ κ³ λ―Όν΄λ³΄μ
λ§μ΄ν¬λ‘μλΉμ€ κ°λ°μ μμ΄μ OpenFeign νμ©μ λν λΆλΆμ΄ μλ μμ λͺ¨λ리μμΌλ‘ ꡬμ±λ μκ·λͺ¨ μμ€ν
μμλ Apache HttpClient
λ₯Ό μ§μ μ μΌλ‘ μ¬μ©νμ§ μκ³ μ΄λ
Έν
μ΄μ
κ³Ό μΈν°νμ΄μ€ κΈ°λ°μ μ μΈμ μΌλ‘ ν΅μ μ λν λ‘μ§μ μμ±νλ κ²μ κ³ λ―Όνκ² λλ λΆλΆμ μ μ΄λ³΄κ³ μ νλ€.
ν΅μ λ‘μ§μ λν λ°λ³΅μ μΈ μ½λ μμ±
RestTemplateμ HttpClientλ₯Ό μ§μ μ μΌλ‘ μ¬μ©νμ¬ ν΅μ μ λν μ½λλ₯Ό μμ±νλ κ²½μ° URI ꡬμ±κ³Ό 쿼리 νλΌλ―Έν° κ·Έλ¦¬κ³ νΌ λ°μ΄ν° λλ μμ² λ°μ΄ν° κ·Έλ¦¬κ³ μλ΅ κ²°κ³Όμ λν λ°μ΄ν° μ²λ¦¬κΉμ§ μλμ κ°μ λΆλΆλ€μ΄ κ°μ ν λμ΄λ²λ¦¬λ κ²½μ°κ° λ§μ κ² κ°λ€.
ObjectMapper objectMapper = new ObjectMapper();
LoginEntity login = objectMapper.readValue(json, new TypeReference<>(){});
ν΅μ ν΄μΌνλ μμ€ν
μμ μ 곡νλ REST API κ·κ²©μ λ°λΌ 쿼리 νλΌλ―Έν° λλ μμ² λ°μ΄ν°λ₯Ό μ§μ ꡬμ±ν΄μΌνκ³ μ λ¬λ°μ μλ΅μ λνμ¬ μμ κ°μ΄ μ§μ μ μΌλ‘ μνλ λͺ¨λΈ ν΄λμ€λ‘ λ³ννλ μ½λλ₯Ό μμ±ν΄μΌλ§ νλ€. μ΄κ²μ μ€νλ§ λ°±μλ κ°λ°μκ° Spring MVCμ 컨νΈλ‘€λ¬λ₯Ό μμ±νλ κ²κ³Όλ λ€λ₯Έλ° OpenFeign ν΄λΌμ΄μΈνΈλ μ μΈμ μΈ(Declarative) λ°©μμ ν΅ν΄ μ΄λ¬ν κ³Όμ μ κ°μν
νκ³ Spring MVCμ λΉμ·ν λ°©μμΌλ‘ μμ±λ¨μ λ°λΌμ μμ€ν
κ° μ°λμ μν ν΅μ λ‘μ§μ μμ±νκ³ κ΄λ¦¬νκΈ° μ©μ΄ν μ₯μ μ κ°μ§κ³ μλ κ² κ°λ€.
μμ‘΄ μμ€ν μ λν μ₯μ μ²λ¦¬ λΆμ‘±
λ§μ΄ν¬λ‘μλΉμ€ ꡬμ±μ΄ μλ μΌλ°μ μΈ μκ·λͺ¨ μμ€ν
μμ RestTemplateμ HttpClientλ₯Ό μ§μ μ μΌλ‘ μ¬μ©νλ€λ³΄λ©΄ μμ€ν
κ° ν΅μ μ λν μ€λ₯μ μ¬μλ λ°©μμ λν κ³ λ―Όμ νμ§ μκ³ λ¬΄μνκ² λλ κ²½μ°
κ° λ§λ€. OpenFeignμ λ§μ΄ν¬λ‘μλΉμ€ κ°λ°μ μ¬μ©λμ΄μ§λ λ§νΌ λ§μ΄ν¬λ‘μλΉμ€μμ μ€μμνκ² λλ μ₯μ μ ν λ°©μ§μ λν λΆλΆμ κ³ λ €ν μ μλ€.
λ§μ΄ν¬λ‘μλΉμ€ κ΅¬μ± νμ₯μ λν κ³ λ €
λͺ¨λ리μ μν€ν
μ²λ‘ ꡬμ±λλ μκ·λͺ¨ μμ€ν
λ νμ¬ μμ€ν
κ·λͺ¨μ μꡬμ¬νμ λμ΄ λκ·λͺ¨ νΈλν½ λλ λ°μ΄ν°λ₯Ό μ²λ¦¬νκΈ° μν μμ€ν
μΌλ‘ νμ₯λλ κ²μ λͺ©νλ‘ νλ κ²½μ°κ° λλΆλΆμ΄λ€. νμ¬ μ κ· νλ‘μ νΈλ λ§μ΄ν¬λ‘μλΉμ€ ꡬμ±μ λͺ©νλ‘ μ΄κΈ° μ€κ³κ° λμ΄μμμ λ°λΌ Spring Cloud λͺ¨λμ λν μμ‘΄μ±μ 보μ νκ³ μλ€. Spring Cloud OpenFeign λ‘ μμ±λμ΄μλ κ²½μ° μλΉμ€ λμ€μ»€λ²λ¦¬λ₯Ό μν Eurekaμ μ₯μ μ²λ¦¬λ₯Ό μν Resilience4J κ³Όμ ν΅ν©μ΄ μ©μ΄νλ€
κ³ νλ€.
μ΄μ κ°μ΄ λ§μ΄ν¬λ‘μλΉμ€ μν€ν μ²κ° μλλλΌλ μΈλΆ μμ€ν λλ μμ€ν κ° ν΅μ μ΄ λ§μ μμ€ν μ νλ‘μ νΈλΌλ©΄ OpenFeign ν΄λΌμ΄μΈνΈ λμ μ κ³ λ €ν΄λ³Όλ§νμ§ μμκΉ? λ¬Όλ‘ , Feign μ½λ λΆμκ³Ό μλ² μ±λ₯ κ°μ μμμ²λΌ λ¬Έμ κ° λ΄μ¬λμ§ μλ 건 μλμ κ°μνκΈ΄ ν΄μΌκ² μ§λ§ λ§μ΄λ€.
π₯ FeignClient μμ GET λμ μ POST μμ²μ΄ λλ μ΄μ
FeignClientμ λν κ°λ¨ν μμ μ½λλ₯Ό μμ±ν΄λ³΄λ μ€μ GET μμ²μ΄ POSTλ‘ μ νλμ΄ μμ²λλ λ¬Έμ λ₯Ό κ²½ννλ€. GET μμ² μ 쿼리 νλΌλ―Έν°λ₯Ό μ λ¬νκΈ° μν΄μλ @SpringQueryMapλ₯Ό ν΄λΉ νλΌλ―Έν°μ μ μΈν΄μΌ
νλλΌ. 쿼리 νλΌλ―Έν°κ° μ λ¬λμ§ μλ κ²½μ°κ° μλ μ μΈλ μμ² ν¨μκ° λ°λμ΄λ²λ¦¬λ 건 μ κΈ°ν λΆλΆμ΄λ€.