# Delivery Tracker를 사용해서 택배 배송조회를 쉽게 만드는 방법
- 쇼핑몰과 같은 실물 제품을 파는 곳에라면 배송 조회 기능을 필요로 합니다. 특정 업체를 주로 이용한다면 그 배송업체의 배송조회 서비스를 이용하도록 안내해도 되지만, 사업 규모가 커지거나 사용자한테 원하는 UI나 UX로 해당 기능을 제공하고 싶다면, 배송조회 기능이 필요할 수 있습니다. 본 포스팅에서는 이런 경우에 도움이 될 수 있는 라이브러리를 소개하려고 합니다. 단 기본적인 NodeJS 백엔드에 대한 최소한의 지식이 있어야 사용하실 수 있습니다
# Delivery Tracker Github 저장소
https://github.com/shlee322/delivery-tracker
※ 위 사이트에 방문하시면, 우측 상단의 Star를 눌러주세요. 개발자 분들께 큰 힘이 됩니다.
# 사용법
- 해당 라이브러리는 배송 조회 요청을 받아서 각 택배사 배송조회 API로부터 배송정보를 조회하여 결과를 전달 해주는 apiServer와 조회할 배송업체와 송장번호를 입력할 수 있는 client로 구성되어 있습니다. 만약 바로 배송 조회 사이트를 구현하고 싶으시면, 전체를 사용하시면 됩니다. 하지만 쇼핑몰을 개발하거나, 조회를 앱에서 하는 등의 경우, Client 쪽은 직접 구현하게 될 확률이 높을 것으로 보이기 때문에, apiServer쪽을 주로 사용하실 경우가 많을 것 같습니다
- Delivery Tracker의 apiServer가 npm 패키지로 되어 있는 것이 아니기 때문에, 필요한 코드를 발췌해서 적용하도록 하겠습니다. (아래의 코드는 apiServer의 예제 코드입니다)깃헙 저장소를 클론하거나, 다운 받아서 packages/apiserver/carriers를 찾습니다. 이 경로에 각 택배사별로 배송조회를 위한 기능들이 구현되어 있습니다. 모두 자신의 NodeJS 백엔드 프로젝트의 원하는 경로에 복사합니다. 그리고 아래와 같이 해당 경로의 파일을 읽어서 Object로 만들어 줍니다.
fs.readdirSync(path.join(__dirname, 'carriers')).forEach(name => {
// eslint-disable-next-line no-console
console.log(`load carrier ${name}`);
// eslint-disable-next-line global-require, import/no-dynamic-require
CARRIERS[name] = require(`./carriers/${name}`);
});
const CARRIERS_INFOS = Object.keys(CARRIERS).map(id => ({ id, ...CARRIERS[id].info }));
- 위에서 만든 Object를 아래와 같이 배송업체 목록 조회 / 배송업체 조회 / 배송업체 및 배송조회와 같이 구현해서 사용하시면 될 것 같습니다.
~~~
app.get('/carriers', (req, res) => {
res.json(CARRIERS_INFOS);
});
app.get('/carriers/:carrierId', (req, res) => {
if (!(req.params.carrierId in CARRIERS)) {
res.status(404).json({
message: res.__('not supported carrier'),
});
return;
}
res.json({
id: req.params.carrierId,
...CARRIERS[req.params.carrierId].info,
});
});
app.get('/carriers/:carrierId/tracks/:trackId', (req, res) => {
const { carrierId, trackId } = req.params;
if (!(carrierId in CARRIERS)) {
res.status(404).json({
message: res.__('not supported carrier'),
});
return;
}
CARRIERS[carrierId]
.getTrack(trackId)
.then(info =>
res.status(200).json({
...info,
carrier: {
id: carrierId,
...CARRIERS[carrierId].info,
},
})
)
.catch(err =>
res.status(typeof err.code === 'number' ? err.code : 500).json({
message: err.message
? err.message
: res.__('error message'),
})
);
});
~~~
- 위의 방법으로 구현하는 경우 문제는 소스코드만 가져온 것이기 때문에, 배송 업체가 추가되는 등의 라이브러리가 업데이트 될 경우, 수동으로 반영해주어야 한다는 점은 꼭 참고해주시기 바랍니다.
'개발 > 백엔드' 카테고리의 다른 글
[Backend][Nextjs] next-auth (0) | 2022.03.05 |
---|---|
[Backend] Oracle Cloud - Free Tier 사용방법 # 1 (0) | 2022.03.02 |