"ν
μ€νΈ μ½λλ μ νμ΄ μλ νμλ€" μ΄μ λ€λ₯Έ νλ‘μ νΈμμλ ν
μ€νΈ μ½λκ° μμ΄μ ν¬μ€νΈλ§¨μΌλ‘ API ν
μ€νΈν λλ μ λλ€κ° μκΈ°μΉ λͺ»ν μ€λ₯κ° λκ³€ νμλ€. μ½λλ₯Ό 리ν©ν°λ§ νκ±°λ λ‘μ§μ μμ ν κ²½μ°μ λ°μνλ ν΄λ¨Ό μλ¬ λλ μκΈ°μΉ λͺ»ν μλ¬λ₯Ό μ¬λ¬ μΌμ΄μ€λ‘ μμ±ν΄ λμ ν
μ€νΈ μ½λ λλΆμ λ°©μ΄ν μ μμλ€. μκ°λ³΄λ€ 리ν©ν°λ§μ ν λ μ€μκ° μκΈ°λ μμ£Ό μκ²Όλλ°, μ½λ μμ νμ ν
μ€νΈ μ½λλ₯Ό μ€νμμΌ λ³΄λ μ΅κ΄μ λ€μ¬λμμΌλ‘μ¨ μ΄λ λΆλΆμμ μ₯μ κ° λ¬λμ§λ₯Ό λΉ λ₯΄κ² νμΈν μ μμλ€. κΈ°μ‘΄μ μ λμνλ ν
μ€νΈ μ½λκ° κ°μκΈ° μ€ν¨νλ€λ κ²μ λ΄κ° λ°©κΈ μμ ν λΆλΆμ΄ μλͺ»λλ€λ κ²μ΄κΈ° λλ¬Έμ΄λ€. μ΄λ² νλ‘μ νΈλ₯Ό μ§ννλ©΄μ λ¨μ ν
μ€νΈμ λν λͺ¨νΈνλ μκ°λ€μ΄ μ 리λμκ³ , ν΅ν© ν
μ€νΈ μ½λλ₯Ό ν΅ν΄ ..
β’ νλ‘μ νΈμμ ν₯μ¬κ³ λ μν€ν
μ²λ₯Ό μ μ©νκΈ°λ‘ νκ³ , MSA λ°©μμΌλ‘ κ°μ λΆλ¦¬λ λ΄λΉ μλΉμ€λ₯Ό κ°λ°νλ€. μ무리 λΆλ¦¬λ μλΉμ€λΌκ³ ν΄λ μ²μμλ ν¨ν€μ§ ꡬ쑰λ λ€μ΄λ° 컨벀μ
μ μ ν΄λλ κ² μΆνμ μλ‘ μ½λ리뷰ν λ νΈνκ³ μ¬λ¬ μ₯μ μ΄ μλ κ² κ°μμ 미리 μ€κ³νμλ€. 1. ν₯μ¬κ³ λ μν€ν
μ² κ΅¬μ‘° μ λν κ²μ μ΄μ ν¬μ€ν
μ νμΈν΄μ£ΌμΈμ. 2023.07.06 - [π¨π©π§π¦ Project/π© DevTalk] - ν₯μ¬κ³ λ (Hexagonal) μν€ν
μ²λ₯Ό 곡λΆν΄ 보μ (with Layered, Clean Architecture) 2. λ΄κ° μκ°ν ν¨ν€μ§ ꡬ쑰 src.groupname γ΄ global γ΄ config γ΄ util γ΄ error γ΄ exception γ΄ handler γ΄ {μ κ·Έλ¦¬κ±°νΈ μ΄λ¦} γ΄..
β’ λ°λΈν‘ νλ‘μ νΈμμ ν₯μ¬κ³ λ μν€ν
μ²λ₯Ό μ μ©ν΄ 보μκ³ μ μν΄ λ³΄κΈ° μν΄ κ³΅λΆνμκ³ λ΄μ©μ μ 리νμλ€. μ μ©ν΄λ³΄κ³ μ νλ μ΄μ λ λ°λΈν‘μ MSAλ‘μ¨ Port&Adapter μν€ν
μ²μΈ ν₯μ¬κ³ λ μν€ν
μ²λ₯Ό μ¬μ©νλ κ² μμ‘΄μ±μ κ΄λ¦¬νκΈ° μ’μ κ² κ°μκΈ° λλ¬Έμ΄λ€. (1) μ ν΅μ μΈ λ μ΄μ΄λ μν€ν
μ²μ λ¬Έμ 1. λ°μ΄ν°λ² μ΄μ€ μ£Όλ μ€κ³λ₯Ό μ λνλ€. μ ν΅μ μΈ κ³μΈ΅ν μν€ν
μ²μ ν λλ λ°μ΄ν°λ² μ΄μ€μ΄λ€. μΉ κ³μΈ΅μ λλ©μΈ κ³μΈ΅μ μμ‘΄νκ³ , λλ©μΈ κ³μΈ΅μ μμμ± κ³μΈ΅μ μμ‘΄νκΈ° λλ¬Έμ μμ°μ€λ½κ² DBμ μμ‘΄νκ² λλ€. μ°λ¦¬κ° λ³΄ν΅ κ°λ°νλ μ ν리μΌμ΄μ
μ λͺ©μ μ λΉμ§λμ€λ₯Ό κ΄μ₯νλ κ·μΉμ΄λ μ μ±
μ λ°μν λͺ¨λΈμ λ§λ€μ΄μ μ¬μ©μκ° νΈλ¦¬νκ² μ¬μ©ν μ μκ² νλ κ²μ΄λ€. μ΄λ μ°λ¦¬λ Stateκ° μλλΌ Behaviorλ₯Ό μ€..
1. ν
μ€νΈμ λν΄μ 곡λΆνκ² λ κ³κΈ° κΈ°μ‘΄μλ ν
μ€νΈλ₯Ό API ꡬν μλ£ ν PostmanμΌλ‘ ꡬλ νμΈ μμ£Όλ‘ νμλ€. ν
μ€νΈμ½λλ₯Ό μμ±νλ λ°©λ²λ λͺ°λκ³ μ€μμ±λ ν¬κ² λͺ°λμλ€. νμ§λ§ μ΄λ²μλ μ€μ μλΉμ€ ν΄μΌνλ μ ν리μΌμ΄μ
μ΄κ³ μλΉμ€νμλ κ³μ μμ μ¬νμ΄ λ°μν κ²μ΄κΈ° λλ¬Έμ ν
μ€νΈμ½λλ₯Ό μμ±ν΄λμ§ μλλ€λ©΄ μ λ§ νλ€μ΄μ§ κ² κ°λ€λ μκ°μ΄ λ€μλ€. νμ§λ§ λ¨μ ν
μ€νΈλ μ΄λ»κ² νλ κ²μΈμ§? λ¨μ ν
μ€νΈμ ν΅ν© ν
μ€νΈμ μ°¨μ΄κ° 무μμΈμ§? μ ν λͺ°λλ€. λ°λΌμ λ¨μ ν
μ€νΈ λΌλ μ±
μ μ½κ³ μμ μν©μ μ 리ν΄λ³΄λ©° μκ°μ μ 리ν΄λ΄€λ€. 2. λ¨μ ν
μ€νΈλ? μ μ λͺ¨λμ΄λ μ ν리μΌμ΄μ
λ΄λΆμ μλ μμ μ½λ μ‘°κ°μ΄ μμκ³Ό λκ°μ΄ λμνλμ§ κ²μ¦νλ λ°λ³΅μ μΈ νμ μμ± - νλ‘κ·Έλ¨μ μμ μ½λ μ‘°κ° λ¨μλ₯Ό..
1. λ¬Έμ μν© κΈ°μ‘΄ μ½λ νλ¦ @Getter public enum ErrorCode { DUPLICATED_LONGIND("0101", μ΄λ―Έ μ¬μ©μ€μΈ μμ΄λ(νλ²) μ
λλ€.)"), ... public DuplicatedLoginIdException extends RuntimeException { public DuplicatedLoginIdException() { } } # SignupService public void signup(LoginReq req) { ... throw new DuplicatedLoginIdException(); } @RestControllerAdvice public class ControllerAdvice { @ResponseStatus(HttpsStatus.CONFLICT) ..
1. λ¬Έμ μν© μ¬μ©μ μκ° λ§μ§ μμ§λ§ λ°°ν¬νλ €λ 물리 μλ² μ»΄ν¨ν°μ μ±λ₯μ΄ κ·Έλ₯ μ’μ§ μκΈ°μ νΉμλ μλͺ»λλ©΄ μ΄λ‘νλλΌλ κ±±μ μ΄ κ³μ μμκ³ CPU, λ©λͺ¨λ¦¬, Thread Poolμ κ³μ λͺ¨λν°λ§ ν μ μλ λ°©λ²μ΄ μμκΉ? λΌκ³ μκ°νμ¬ μ°Ύμ보λ€κ° Spring Actuator, Micrometer, Prometheus, Grafanaμ κ°μ ν€μλλ₯Ό μκ²λμ΄ κ³΅λΆνκ³ κ΅¬μΆνκ² λμλ€. 2. λ¬Έμ ν΄κ²° βοΈ Spring Actuator Productionμ μ΄μνκ²½μ λ°°ν¬ν λ Metric(μ§ν), Trace(μΆμ ), Auditing(κ°μ¬), λͺ¨λν°λ§κ³Ό κ°μ νμν κΈ°λ₯μ λ§€μ° νΈλ¦¬νκ² μ¬μ©ν μ μλλ‘ ν΄μ£Όλ λΌμ΄λΈλ¬λ¦¬μ΄λ€. Micrometer, Prometheus, Grafanaλ₯Ό λ§€μ° μ½κ² μ°λ..