API 데이터를 요청하고 응답받은 데이터를 필터링해서 필요한 필드만 전달해주는 소스 코드입니다.
let foodNm = req.query.foodNm;
const apiUrl = `http://api.data.go.kr/openapi/tn_pubr_public_nutri_process_info_api?serviceKey=
${process.env.SERVICE_KEY_PROCESSED_FOOD}&pageNo=1&numOfRows=100&type=json&
foodNm=${encodeURIComponent(foodNm)}`;
const fieldsToExclude = [
'foodOriginCd',
'dataCd'
...
중략
...
]
foodData = foodData.map((item) => {
const filteredItem = Object.fromEntries(
Object.entries(item).filter(([key]) => !fieldsToExclude.includes(key)),
);
return filteredItem;
});
return res.status(StatusCodes.OK).json(foodData);
응답받은 데이터

{
"response": {
"header": {
"resultCode": "00",
"resultMsg": "NORMAL_SERVICE",
"type": "json"
},
"body": {
"items": [
{
"foodCd": "P101-101000100-0018",
"foodNm": "강냉이",
"dataCd": "P",
"typeNm": "가공식품",
"foodOriginCd": "1",
"foodOriginNm": "가공식품",
"foodLv3Cd": "01",
"foodLv3Nm": "과자류·빵류 또는 떡류",
"foodLv4Cd": "01101",
"foodLv4Nm": "강냉이/팝콘",
"foodLv5Cd": "0100000",
"foodLv5Nm": "해당없음",
"foodLv6Cd": "010000001",
"foodLv6Nm": "과자",
"foodLv7Cd": "00",
"foodLv7Nm": "해당없음",
"nutConSrtrQua": "100g",
"enerc": "409",
"water": "0.6",
"prot": "7.16",
"fatce": "3.25",
"ash": "1.09",
"chocdf": "87.9",
"sugar": "13.52",
"fibtg": "0.4",
"ca": "2",
"fe": "1.55",
"p": "228",
"k": "258",
"nat": "51",
"vitaRae": "0",
"retol": "0",
"cartb": "0",
"thia": "0",
"ribf": "0.389",
"nia": "1.99",
"vitc": "0",
"vitd": "0",
"chole": "0",
"fasat": "0.66",
"fatrn": "0.02",
"srcCd": "1",
"srcNm": "농촌진흥청(국가표준식품성분표)",
"servSize": "20g",
"foodSize": "-",
"itemMnftrRptNo": "",
"mfrNm": "해당없음",
"imptNm": "해당없음",
"distNm": "해당없음",
"imptYn": "N",
"cooCd": "",
"cooNm": "해당없음",
"dataProdCd": "1",
"dataProdNm": "분석",
"crtYmd": "2016-12-31",
"crtrYmd": "2024-09-25",
"insttCode": "1471000"
}
],
"totalCount": "4",
"numOfRows": "1",
"pageNo": "1"
}
}
}
Object.entries(item)는 객체인 item의 모든 키-값 쌍을 배열로 변환합니다.
예를 들어, 객체가 { name: "apple", color: "red" }일 때, Object.entries(item)는
[["name", "apple"], ["color", "red"]]와 같은 배열을 반환합니다.
예시)
(객체)
{ name: "apple", color: "red" }
(배열)
[["name", "apple"], ["color", "red"]]
foodData.map()이 호출되면서 배열의 각 요소를 하나씩 처리합니다. 여기서 각 요소는 item이라는 이름으로 함수에 전달됩니다.
"items": [
{
"foodCd": "P101-101000100-0018",
"foodNm": "강냉이",
...
중략
...
"insttCode": "1471000"
}
],
Object.entries(item)가 실행되어 item 객체가 키-값 쌍의 배열로 변환됩니다.
[
["foodCd", "P101-101000100-0018"],
["foodNm", "강냉이"],
// 중략
["insttCode", "1471000"]
]
변환된 키-값 쌍 배열에 대해 filter() 메서드가 실행됩니다.
filter()는 각 키-값 쌍을 순회하며, 현재 key가 fieldsToExclude 배열에 포함되지 않는지 확인합니다.
예를 들어, fieldsToExclude가 ["insttCode"]라면, "insttCode" 키는 제외되고 나머지 키-값 쌍만 남깁니다.
[["foodCd", "P101-101000100-0018"], ["foodNm", "강냉이"]]
필터링된 키-값 쌍 배열을 다시 객체 형태로 변환합니다. 이제 item은 다음과 같이 변경됩니다:
{ foodCd: "P101-101000100-0018", foodNm: "강냉이" }
변환된 객체(filteredItem)가 map() 메서드에 의해 새로운 배열에 추가됩니다.
첫 번째 요소 처리가 끝난 후 새로운 배열에는 다음과 같은 객체가 포함됩니다.
[{ foodCd: "P101-101000100-0018", foodNm: "강냉이" }]
모든 요소의 처리가 끝나면 map() 메서드는 필터링된 객체들을 포함하는 새로운 배열을 반환합니다.
[
{ foodCd: "P101-101000100-0018", foodNm: "강냉이" },
]
로직에 의해 필터링한 필드를 제외한 데이터입니다.
