인프런 커뮤니티 질문&답변

독커노인님의 프로필 이미지

작성한 질문수

견고한 결제 시스템 구축

결제 승인 기능 구현

강의를 듣고 문득 궁금한 점이 생겼습니다.

작성

·

324

0

  • 현재 강의는 핵사고날 아키텍처를 사용하여 결제 시스템을 구축하고 있습니다. 어니언 아키텍처로도 충분히 의존성을 안쪽으로 향하게 하여 entity와 usecase를 외부 변경으로 부터 보호가 가능하지 않나 생각이 들었습니다.
    (결정적으로 핵사고날은 구조가 좀 복잡했습니다.)

  • webflux를 쓰신 이유가 궁금합니다. 강의에서 내세운 견고한 시스템을 만들기위한 요구사항을 읽어봤을 때 반응성이 아니더라도 충분히 무리가는 상황이 아니기도 했고
    성능보단 견고함이 중요한 상황인데 webflux를 쓰신 이유가 궁금합니다!

 

제 역량이 모자라 이해 못하는 부분이 있을 수 있어 배우고자 질문드립니다. 감사합니다!

답변 1

1

여정민님의 프로필 이미지
여정민
지식공유자

안녕하세요~ 질문 남겨주셔서 감사합니다.

궁금한 사항이 있으셨던 것 같은데 제 생각을 남겨볼게요.

 

1) 어니언 아키텍처가 아닌 핵사고날 아키텍처로 한 이유:

  • 저는 어니언 아키텍처와 핵사고날 아키텍처가 크게 다르다고 생각하지는 않아요. 핵사고날 아키텍처가 조금 더 복잡할 순 있겠지만 외부 시스템과의 입출력 상호작용을 파악하기 더 쉽다라고 생각하기 때문에 사용했습니다. 장단점을 판단해서 자신에게 맞는 아키텍처를 사용하면 될 것 같습니다.

 

2) Webflux 를 사용한 이유:

  • Spring Webflux 와 Spring MVC 를 비교했을 때 Webflux 가 좀 더 복잡한 프로그래밍을 요구하는 것 제외하고는 웬만해서는 MVC 보다 안정성 측면에서도 더 뛰어나다고 생각해요.

  • 현재의 시스템은 서비스들이 마이크로서비스처럼 대부분 쪼개져있고 필요할 때 외부 통신을 하는데요. Spring MVC 와 같은 Synchronous Client 를 사용하게 되면 외부 서비스들이 장애가 나거나 요청이 안왔을 때 리소스가 점유당하는 문제가 생길 수 있습니다. 그에 반해서 웹플럭스와 같은 Asynchronous Client 는 하나의 이벤트 루프에서 최대 500개 까지의 Active Channel 을 맺을 수 있기 때문에 외부 서버의 장애에 클라이언트를 보다 보호해줄 수 있는거죠.

  • 현재의 이 결제 시스템의 경우에는 외부 시스템과 상호작용하는 API 가 거의 없는데요. 카카오페이의 경우에는 수십개의 API 를 사용한다고도 합니다. 이 경우에는 Webflux 가 보다 안전할거에요.

 

도움이 되셨으면 좋겠습니다. 제 답변이 잘 와닿지 않는다면 다시 질문 주세요~

독커노인님의 프로필 이미지
독커노인
질문자

이해 됐습니다. 감사해요 사용자 요청으로 부터 발생하는 트래픽을 높은 동시성으로 해결하겠다로 바라봤는데 오히려 외부 수십개의 API를 높은 동시성으로 해결하는 것이군요. 또 webflux가 제공해주는 library를 사용하는 것이 MVC에서 직접 문제를 해결하기위한 라이브러리를 만드는 것 보다 안정성이 뛰어나기 때문이고요!

여정민님의 프로필 이미지
여정민
지식공유자

넵넵 맞습니다~~ 필요하다면 언제든 질문 주세요!