티스토리 뷰
개요
고객사에서 문자전송 서비스 업체를 팝빌로 선정해서 SDK 연동이 필요했고, MMS 전송시 이미지를 담아 전송해야했다.
팝빌 SDK MMS 전송 함수
messageService.sendMMS(CorpNum, Sender, Receiver, ReceiverName, Subject, Contents, FilePaths, reserveDT, adsYN, requestNum, success, error)
FilePaths 파라미터에 이미지 URL을 넣어야 한다는 API 문서를 보고
- Object Storage에 저장된 이미지 External URL
- 이미지의 Data Uri
둘을 넣어서 API를 호출해 보았으나, 파일을 찾을 수 없다는 에러만 리턴받았다.
그래서 SDK를 열어봤더니, FilePaths를 입력받아 fs.readFile 함수에 넣어 실제 이미지의 바이너리 데이터를 가져오는 로직으로 구현되어있었고, fs.readFIle 함수는 Local URL만 파라미터로 받는 함수여서 연동에 문제가 발생했다.
방법
전송할 이미지는 앞단에서 넘어오면 리사이징 등 여러 과정을 통해 가공 후 Object Storage에 저장만 하는 상황이어서 이에 대처할 방법이 필요했다.
- Local Server에 전송될 이미지를 임시저장 후, 전송 후 삭제한다.
- SDK를 쓰지 않고, 직접 팝빌 API를 호출한다.
- SDK를 수정해 fs.readFile 대신 binary 파일을 파라미터로 받게 만든다.
1번 방법은 이미지 서버 저장 및 삭제를 하는 과정에서 응답속도의 지연 발생 및 혹시라도 이미지 삭제에 실패했을경우 개인정보가 저장되는 등의 이슈로 선정하지 않았다.
2번 방법은 API 문서도 없는 상황에서 나머지 방법들보다 시간 소요가 많을 것으로 예상되어 선정하지 않았다.
결국 3번인 SDK를 직접 수정으로 방향을 잡았다.
다행으로 SDK 내부 코어 함수에는 팩스 전송용으로 Binary 파일을 직접 입력받아 처리하는 부분이 구현되어있어, MMS 전송 함수에서 Binary 파일을 직접 입력받아 코어 함수로 전달 해주는 구현만 하면 될것으로 예상되었다.
개선
sendMMS 함수는 입력된 파라미터 갯수에 따라 오버로딩으로 함수를 구현하고있었고 그래서 모든 sendMMS 함수들에 BinaryFiles 파라미터만 추가하였다.
messageService.sendMMS(CorpNum, Sender, Receiver, ReceiverName, Subject, Contents, FilePaths, BinaryFiles, reserveDT, adsYN, requestNum, success, error)
sendMMS함수는 sendMessage_MMS 함수를 호출중이었고, sendMessage_MMS는 코어 함수인 _executeAction 함수를 호출한다.
_executeAction 함수는 Binary 파일이 입력되면 FilePaths 파라미터를 무시하고 바로 Binary 파일을 전송하는 로직으로 구현되있어서, sendMessage_MMS 함수도 위에 추가한 BinaryFiles 파라미터에 값이 넘어오면 FilePaths 대신 BinaryFiles를 _executeAction 함수로 보내는 로직으로 수정하였다.
정리하면,
- 코어함수인 _executeAction는 Binary 파일을 받으면 FilePaths 무시하고 Binary 파일을 API로 전송
- sendMessage_MMS 함수를 수정하여, Binary 파일을 파라미터로 받게하고, 값이 존재하는경우 _executeAction 함수로 보냄
- MMS에 서버의 Local 파일 경로가 아닌 Binary 파일을 바로 전송할 수 있게됨
수정된 코드 : https://github.com/SehyeonGil/node-popbill
'web > backEnd' 카테고리의 다른 글
fluentd 도입기 - 발단 및 mysql bulk insert 성능 테스트 (0) | 2022.09.27 |
---|---|
도커에서 default-libmysqlclient-dev 설치 불가 이슈 (0) | 2022.09.23 |
UUID v1 중복 이슈 (0) | 2022.09.22 |
팝빌 문자 전송 SDK 연동기 - 통신사 이슈 및 의존성 이슈 (0) | 2022.09.20 |
nginx API cache 도입기 (0) | 2022.09.14 |
- Total
- Today
- Yesterday
- nestjs
- log forwarder
- tojson
- rewrite-tag-filter
- split_array
- default-libmysqlclient-dev
- rewrite_tag_filter
- nginx cache
- fluentd
- dockerfile
- mms
- 대규모 시스템 설계 기초
- mms 연동
- libpaper-utils
- 혼자 공부하는 컴퓨터구조 + 운영체제
- fluent-plugin-s3
- nginx api cache
- reverse proxy
- 뉴스피드 시스템
- reverse proxy cache
- popbill
- log
- fluentd-plugin-split-array
- uuid v1
- fluent-plugin-mysql
- bigint to number
- log aggregator
- uuid 중복
- 팝빌
- forwarder
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |