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

광전사님의 프로필 이미지

작성한 질문수

견고한 결제 시스템 구축

수업 자료

전체적인 헥사고날 아키텍쳐 설명

작성

·

84

0

안녕하세요, 좋은 강의 감사합니다.

 

제공해 주신 코드를 분석해 보고있는데요,

구현한 헥사고날 아키텍쳐에 대한 다이어그램이나 설명이 있으면 이해하기 쉬울것 같은데 혹시 작성하신 게 있으실까요?

 

예를들어서, 이런 부분의 코드는 어디서 메시지를 가져오는지 intellij 로 검색해봐도 나오질 않아서요.

package com.example.paymentservice2.payment.adapter.`in`.stream

@Configuration
@StreamAdapter
class LedgerEventMessageHandler (
  private val paymentCompleteUseCase: PaymentCompleteUseCase
) {

  @Bean
  fun ledger(): Function<Flux<Message<LedgerEventMessage>>, Mono<Void>> {
    return Function { flux ->
      flux.flatMap { message ->
        paymentCompleteUseCase.completePayment(message.payload)
          .then(Mono.defer { message.headers.get(KafkaHeaders.ACKNOWLEDGMENT, ReceiverOffset::class.java)!!.commit() })
      }.then()
    }
  }
}

그리고, adapter 내부의 in, out 폴더와 application 내부의 in, out 폴더의 차이점은 뭔가요??

 

P.S 수준 높은 코드라서 매우 좋습니다. 다른 강의도 이정도 수준이면 수강할 것 같습니다. 타강사님들의 강의는 쉬운것들이 많아서 경쟁력이 있으신것 같아요.

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

님이 질문하신 헥사고날 아키텍처와 관련된 자세한 다이어그램이나 설명에 대해서는 제공된 정보 중에 직접적인 답변을 드릴 내용이 없습니다. 헥사고날 아키텍처는 애플리케이션의 핵심 로직을 외부 요소로부터 격리시켜 유지보수와 확장성을 높이는 설계 방식입니다. 일반적으로, adapter 폴더 내의 in, out은 애플리케이션으로 들어오는 요청과 밖으로 나가는 응답을 처리하는 부분을 말하며, application 내의 in, out 폴더도 이와 유사한 역할을 하지만, 구체적인 차이점이나 구현 방법은 강의 내용이나 제공된 소스 코드의 구조에 따라 다를 수 있습니다.

어댑터의 in 폴더는 주로 외부로부터의 요청을 애플리케이션의 핵심 로직에 전달하는 역할을, out 폴더는 애플리케이션의 결과를 외부로 전달하는 역할을 합니다. 이는 메시지 큐, API 요청 등 다양한 형태로 구현될 수 있습니다. 차이점에 대한 정확한 설명은 강의 내용을 통해 제공되는 구조와 문맥을 참조해야 합니다.

제공해주신 코드 조각을 보면, Kafka와 연동하여 메시지를 처리하는 어댑터의 구현 사례로 보입니다. 여기서 메시지의 처리 과정에서 비동기적으로 핸들링하는 로직을 확인할 수 있습니다. paymentCompleteUseCase.completePayment 메소드를 통해 결제 완료 처리를 하고, Kafka 메시지의 확인(acknowledgment)을 비동기적으로 커밋(commit)합니다.

질문하신 내용을 더 깊이 이해하고 싶으시다면, 헥사고날 아키텍처에 대한 자료를 찾아보시거나, 구체적인 구현 방법과 패턴에 대해 더 자세히 설명하는 개발 관련 문서나 추가적인 강의를 참조하시기를 추천드립니다.