1. CircuitBreaker가 필요한 이유개발을 하다 보면 외부 API를 호출해야 하는 경우가 있다. 특히나 전체적인 시스템 구성이 MSA(Microservice Architecture)로 되어 있다면 다른 서비스를 호출하는 경우가 매우 빈번하다. 문제는 서버들에 장애가 발생할 수 있다는 점인데, 호출한 다른 서비스에 장애가 발생했다면 장애가 전파되어, 해당 서비스까지 문제가 발생할 수 있다. 또한 장애가 발생한 서버에 계속 요청을 보내는 것은 장애 복구를 힘들게 만든다. 예를 들어, 사용자의 대시보드에서 한 번의 요청으로 사용자의 여러 정보를 조회해 한 화면에 보여주어야 하는 상황을 생각해보자. 이 대시보드는 아래와 같이 각기 다른 서비스에서 데이터를 가져와야 한다.사용자 정보 서비스: 사용자..
1. 개요MSA를 도입하면서, 혹은 고려하면서 대부분의 사람들이 인증 인가에 대한 고민을 하게 될거라 생각한다. 나도 Spring Cloud를 사용한 MSA 아키텍처 구조로 개발을 진행하면서 인증, 인가에 대한 고민을 하게 됐다. 구글링 해보면 크게 2가지 방법으로 나뉘었다. 1. Gateway에서 모든 인증, 인가 처리 2. 각 Micro Service 에서 인증, 인가 처리 이 두 가지 방법 중 어떤걸 선택해야 할 지에 대해 많은 고민을 했다. 결론부터 얘기하면 현재는 Gateway에서 인증 처리, 각 Micro Service에서 인가 처리를 하는 것으로 결정했다. 하지만, 서비스를 운영해본게 아니고 학습하는 단계이기 때문에 내 생각이 틀릴 수도 있다. 그리고 각자 개발하는 서비스의 도메인,..
1. 개요예전에 봤던 Spring Cloud 강의를 복습하며 이벤트 스트리밍, SAGA 패턴, CQRS 등 MSA에 사용되는 여러 기술들에 익히기 위해 간단한 프로젝트를 만들고 학습하고 있었다. 처음 multi module을 공부해야겠다 했던 건 kafka 관련 설정과 이벤트 통신을 위한 dto들의 코드 중복 때문이었다. MSA 환경을 구성하면서도 코드가 중복된다는게 많이 느껴졌고 공통 모듈로 빼고 싶다는 생각이 들었다. 또한 JWT 토큰을 사용하여 인증, 인가 처리를 하고 있었기 때문에 위 로직도 어디로 빼야할 지 고민이 되었다. 정말 예전에 multi module에 대해서 강의를 본 적이 있는데, 그 땐 이런게 있구나 하고 넘어갔지만 이번엔 제대로 알아보고 multi module로 msa 환경을..
포트와 어댑터 아키텍처 라고도 불리는 헥사고날 아키텍처(Hexagonal Architecture)는 인터페이스나 기반 요소(infrastructure)의 변경에 영향을 받지 않는 핵심 코드를 만들고 이를 견고하게 관리할 수 있도록 해준다. 헥사고날 아키텍처를 설명하기전에 계층형 아키텍처와 클린 아키텍처, 그리고 도메인 주도 설계(DDD)에 대해서도 언급이 필요하다. 헥사고날 아키텍처는 전통 방식인 계층형 아키텍처의 단점을 보완하기 위해 설계되었다. 기존 계층형 아키텍처의 문제점은 무엇일까?1. 데이터베이스, 영속성에 대한 의존성 도메인 계층이 데이터베이스에 의존하게 되어 데이터베이스에 변화가 일어나면 도메인 계층에도 변화가 생긴다. 서비스 계층에서도 영속성 모델을 도메인 모델처럼 사용하게 된..