SOAP(3) - Nest.js에서 SOAP API 사용하기

kukjunLEE·2024년 2월 20일
0

Protocol

목록 보기
3/3
post-thumbnail

본 내용은 Nestjs에서 SOAP를 사용하는 방법에 대해서 설명하고 있습니다. 여기에서는 구현만 진행할 예정이라, 어떻게 구현하는지가 궁금하신 분은 SOAP(2)를 읽고 와주세요.

1. 사용할 API와 프로그램의 목적


사용하고자 하는 SOAP API는 법제처 생활법령 백문백답 서비스 입니다.

직접 들어가서 보시면 알겠지만, 분야별로 다양한 생활법령의 질문들과 그에 대한 대답을 제공하고 있습니다.

제가 만들고자 하는 프로그램의 목적은 특정한 분류의 백문백답을 정해서, 랜덤하게 사용자에게 보여주는 서비스를 만들어 내는 것 입니다.

예를 들면, 이혼 -> 합의 이혼 에 대한 질문과 대답을 보고싶다고 하면, 랜덤하게 정해서 사용자에게 보여주는 방식으로 제공하려고 합니다.

간단하게 아키텍처를 그려보자면 다음과 같습니다.

Program Archetecture

2. SOAP 프로그램 구현


WDSL 문서 확인

구현을 위해서는, 먼저 상대방이 어떠한 요청을 받을 수 있도록 했는지 알아야 합니다. SOAP Broker는 이러한 정보들을 설명하는 문서를 Provider로부터 받아 가지고 있습니다. 이를 WSDL이라고 합니다.

법제처 백문백답 서비스(이하 서비스)에서 제공하고 있는 WSDL 정보는 다음과 같네요.

WSDL

그리고, 홈페이지에 가이드 문서도 있으니 참고해서 만들어보면 될 것 같습니다.



nestjs에서 soap 사용을 위한 의존성 설치

먼저 nestjs에서 soap를 다루기 위한 의존성을 설치해야 합니다. 기존 node 진영에서 사용하던 soap 모듈을 nestjs에서 사용하기 편하게 만들어놓은게 nestjs-soap입니다.

yarn add nestjs-soap


SOAP 모듈 등록

프로젝트 내부에 nestjs-soap를 설치하고, Soap 모듈을 사용하기 위해서는 SoapModule을 설정하는 절차를 거쳐야 합니다.

@Module({
  imports: [
    SoapModule.registerAsync({
      clientName: 'EASYLAW',
      useFactory: (configService: ConfigService) => ({
        uri: configService.get('EASYLAW_URI'),
      }),
      inject: [ConfigService],
    }),
  ],
  controllers: [EasylawController],
  providers: [EasylawService, ConfigService],
})
export class EasylawModule {}

제 경우에는, Easylaw라는 Module에서 SoapModule을 구성했습니다.

만약 환경변수로 등록한 값을 가져오려면 동적 모듈의 팩토리 함수 기능을 이용해서 가져오면 됩니다.



Service에서 Soap Client 사용

@Injectable()
export class EasylawService {
  constructor(@Inject('EASYLAW') private readonly easylawSoapClient: Client) {}

  async wsdl() {
    return await this.easylawSoapClient.describe();
  }
  
  ...

SoapModule을 미리 Import 해두었으므로, easylawSoapClient를 지금처럼 명시해서 가져올 수 있습니다.

이후에 해당 Client를 이용해서 외부 SOAP Server와 통신할 수 있습니다!

해당 API를 이용해서 테스트를 하고 있었는데 자꾸 01 Code가 나와서 확인해보니,
01 Error Code

🙄 슬프네요 ...

profile
Backend Developer

0개의 댓글