Post

πŸ’₯ MSA ν™˜κ²½μ—μ„œ 잘λͺ»λœ νšŒμ›κ°€μž… API νλ¦„μœΌλ‘œ μΈν•œ 문제

πŸ’₯ MSA ν™˜κ²½μ—μ„œ 잘λͺ»λœ νšŒμ›κ°€μž… API νλ¦„μœΌλ‘œ μΈν•œ 문제

문제 상황

  • 각 μ„œλΉ„μŠ€μ˜ 계정을 톡합 κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ 쀑앙에 Gateway 톡합 인증 μ„œλ²„λ₯Ό λ‘ .
  • 각 μ„œλΉ„μŠ€μ—μ„œ μ‚¬μš©μž 메타 데이터λ₯Ό μ €μž₯ν•˜κ³  쀑앙 데이터와 λ§€ν•‘ν•˜λ €λ©΄ νšŒμ›κ°€μž… μ‹œ μƒμ„±λœ UUIDκ°€ ν•„μš”ν•¨.
  • ν˜„μž¬ κ΅¬μ‘°μ—μ„œλŠ” 각 μ„œλΉ„μŠ€κ°€ μ—­μœΌλ‘œ Gateway APIλ₯Ό ν˜ΈμΆœν•΄ UUIDλ₯Ό λ°›μ•„μ˜€λŠ” λ°©μ‹μž„.
  • 이둜 인해 각 μ„œλΉ„μŠ€κ°€ Gateway μ„œλ²„μ— μ˜μ‘΄ν•˜κ²Œ 됨.
  • CORS 이슈 및 Spring Security ν•„ν„° 좩돌둜 인해 API 호좜이 λ³΅μž‘ν•΄μ Έ μœ μ§€ 보수 및 λ³΄μ•ˆ 섀정이 점점 μ–΄λ €μ›Œμ§.

문제 원인

  • λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 상 Gateway μ„œλ²„κ°€ 쀑심 역할을 ν•΄μ•Ό 함에도 λΆˆκ΅¬ν•˜κ³  각 μ„œλΉ„μŠ€κ°€ μ‚¬μš©μž 등둝을 μœ„ν•΄ λ³„λ„λ‘œ Gateway μ„œλ²„μ—μ„œ UUIDλ₯Ό κ°€μ Έκ°€μ•Ό ν•˜λŠ” κ΅¬μ‘°λŠ” μ—­λ°©ν–₯ 흐름이고, SRP μœ„λ°˜μž„.

ν•΄κ²° 방법

  • νšŒμ›κ°€μž… 흐름을 μ •λ°©ν–₯으둜 μž¬μ„€κ³„
  1. ν΄λΌμ΄μ–ΈνŠΈκ°€ Gateway μ„œλ²„μ— νšŒμ›κ°€μž…μ„ μš”μ²­ν•¨.
  2. Gateway μ„œλ²„κ°€ νšŒμ›κ°€μž…μ„ μ²˜λ¦¬ν•˜κ³ , μƒμ„±ν•œ UUID와 ν•¨κ»˜ μ„œλΉ„μŠ€λ³„ μ‚¬μš©μž 메타 데이터λ₯Ό 각 μ„œλΉ„μŠ€μ— 전달함.
  3. 각 μ„œλΉ„μŠ€λŠ” 전달받은 UUID 및 메타 λ°μ΄ν„°λ‘œ μ‚¬μš©μž 정보λ₯Ό μ €μž₯함.

κ°œμ„  효과

  • Gateway μ„œλ²„κ°€ νšŒμ›κ°€μž… 흐름을 ν†΅μ œ, μ„œλΉ„μŠ€λŠ” 메타 데이터 μ €μž₯만 λ‹΄λ‹Ήν•˜μ—¬ Gateway μ„œλ²„ μ€‘μ‹¬μ˜ μ±…μž„ 뢄리
  • μ„œλΉ„μŠ€ β†’ Gateway μ„œλ²„ 호좜 제거둜 CORS 및 ν•„ν„° μ„€μ • λ‹¨μˆœν™”
  • 흐름이 직관적이며, 각 κ³„μΈ΅μ˜ 역할을 λͺ…ν™•ν•˜μ—¬ μœ μ§€ 보수 μš©μ΄μ„± ν–₯상

회고

  • 참고둜 κΈ°μ‘΄ λ‘œμ§μ€ λ‹€μŒκ³Ό κ°™λ‹€.
  1. [ν΄λΌμ΄μ–ΈνŠΈ] ν΄λΌμ΄μ–ΈνŠΈκ°€ Gateway μ„œλ²„λ‘œ νŠΉμ • μ„œλΉ„μŠ€μ— νšŒμ›κ°€μž… μš”μ²­
  2. [Gateway] Gateway μ„œλ²„μ—μ„œ νŠΉμ • μ„œλΉ„μŠ€λ‘œ 프둝싱
  3. [νŠΉμ • μ„œλΉ„μŠ€] νŠΉμ • μ„œλΉ„μŠ€μ—μ„œ Gateway μ„œλ²„λ‘œ νšŒμ›κ°€μž… μš”μ²­
  4. [Gateway] νšŒμ›κ°€μž… 처리 및 맀핑을 μœ„ν•œ 계정 UUID 응닡
  5. [νŠΉμ • μ„œλΉ„μŠ€] 응닡 받은 UUID와 ν•¨κ»˜ μ„œλΉ„μŠ€λ³„ μ‚¬μš©μž 메타 데이터λ₯Ό ν•¨κ»˜ μ €μž₯
  • λͺ¨λ“  μš”μ²­μ„ Gateway μ„œλ²„λ‘œ λ°›μ•„μ„œ 각 μ„œλΉ„μŠ€μ— ν”„λ‘μ‹±ν•˜λŠ” ꡬ쑰둜 섀계λ₯Ό ν•˜μ˜€λŠ”λ°, Spring Security 및 JWTλ₯Ό ν†΅ν•œ 인증 및 인가 κΈ°λŠ₯도 Gateway μ„œλ²„μ—μ„œ λ‹΄λ‹Ήν•˜λ‹€ λ³΄λ‹ˆ μ΄λŸ¬ν•œ λ³΅μž‘ν•œ 둜직이 λ˜μ–΄ 버렸닀.
  • 둜직이 λ³΅μž‘ν•˜λ”λΌλ„ 각 μ„œλΉ„μŠ€μ˜ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직의 μΆœλ°œμ μ€ ν•΄λ‹Ή μ„œλΉ„μŠ€μ— μžˆλ‹€κ³  μƒκ°ν•΄μ„œ 일관성을 μœ„ν•΄ κ°•ν–‰ν–ˆμ—ˆλ‹€.
  • ν•˜μ§€λ§Œ 둜직의 λ³΅μž‘μ„±μ€ μœ μ§€ 보수λ₯Ό μ–΄λ ΅κ²Œ ν•˜μ˜€κ³ , MSA μ•„ν‚€ν…μ²˜λ₯Ό κ³ λ €ν•΄μ„œ μ„œλΉ„μŠ€μ™€ Gateway μ„œλ²„μ˜ Docker-compose 파일이 λΆ„λ¦¬λ˜μ–΄ μžˆμ–΄μ„œ, λ¬Έμ œκ°€ λ°œμƒν•œλ‹€κ³  ν•˜λ©΄ μ–΄λ””κ°€ λ¬Έμ œμΈμ§€ μ§„λ‹¨ν•˜κΈ°κ°€ λ”μš± μ–΄λ €μ› λ‹€.
  • 문제 해결에 μžˆμ–΄ 일관성도 μ€‘μš”ν•˜μ§€λ§Œ, μœ μ—°ν•¨ μ—­μ‹œ ν•„μˆ˜μž„μ„ μ‹€κ°ν–ˆλ‹€.
This post is licensed under CC BY 4.0 by the author.