- MethodArgumentNotValidException
- ํจ์คํธ์บ ํผ์คX์ผ๋์
- aligoapi
- DATABASE
- datagrip
- C++
- Spring
- docker
- @CreatedDate
- spring์ผ๋ก https ์ ์ฉ
- node js
- Data Structure
- Unity
- ์์คํ ์ํํธ์จ์ด
- RP 2๊ธฐ
- ๋ฆฌ๋ ์ค ๋ช ๋ น์ด
- MAKE US
- GIT
- Rp2๊ธฐ
- OpenAPI
- Java
- mysql
- Quick Sort
- merge sort
- spring ์์ ๋ก๊ทธ์ธ
- SQL
- SSL
- spring ๊ตฌ๊ธ ์์ ๋ก๊ทธ์ธ
- java error
- ๊ตฌ๊ธ ์์ ๋ก๊ทธ์ธ
YS's develop story
Open API ํ์ฉํ์ฌ ๊ณตํด์ผ ์ ๋ณด DB์ ์ ์ฅ ๋ฐ ๋ถ๋ฌ์ค๊ธฐ with request module ๐ ๋ณธ๋ฌธ
Open API ํ์ฉํ์ฌ ๊ณตํด์ผ ์ ๋ณด DB์ ์ ์ฅ ๋ฐ ๋ถ๋ฌ์ค๊ธฐ with request module ๐
Yusang 2021. 7. 21. 09:46๐ Open API ํ์ฉํ์ฌ ๊ณตํด์ผ ์ ๋ณด ์ ์ฅ ๋ฐ ๋ถ๋ฌ์ค๊ธฐ with request module
โ Problem
์ฌ์ฉ์์๊ฒ ์์ฝ ๊ด๋ จ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ค๊ณ ํ ๋, ๋ชจ๋ ๊ณตํด์ผ ๋ ์ง๋ฅผ ์๊ณ ์์ด์ผ๋ง
๊ณตํด์ผ์ ์์ฝ์ด ๋ถ๊ฐ๋ฅํ๋๋ก ์ค์ ํ ์ ์์ ๊ฒ์ ๋๋ค.
์ด๋ป๊ฒ ํ๋ฉด ๋ชจ๋ ๊ณตํด์ผ ๋ ์ง๋ฅผ DB์ ์ ์ฅํ๊ณ ์ด๋ฅผ ํ์ฉํ ์ ์์๊น์?
์ธํฐ๋ท์์ ๋ชจ๋ ๊ณตํด์ผ์ ์ฐพ์์ DB์ ํ๋์ฉ ์
๋ ฅํ๋ฉด ๋ ๊น์?
๋ฌผ๋ก ๊ทธ๋ ๊ฒ ํ ์ ์๊ฒ ์ง๋ง ๋๋ฌด ๋ณ๋ก์ธ ๊ฑฐ ๊ฐ์์.. ๐
๋ฐฉ๋ฒ์ ์ฐพ์๋ณด์์ต๋๋ค.
๐ Solution
๊ฒ์ ์ค ๊ณตํด์ผ ๊ด๋ จ ์คํ API๊ฐ ์์์ ์ฐพ๊ฒ ๋์๊ณ
์ ๋งํฌ์์ Open API๋ฅผ ๋ฐ๊ธ๋ฐ์ API๋ฅผ Post Man์ ํ์ฉํด ์์ฒญํด ๋ณด์์ต๋๋ค.
์ฟผ๋ฆฌ ์คํธ๋ง์ผ๋ก ์ฐ๋์ ์์ ์ค์ ํ ์ ์์๊ณ
์ค์ ํ ๊ธฐ๊ฐ์ ๋ง๋ ๊ณตํด์ผ์ ๋ชจ๋ ๋ณด์ฌ์ฃผ๋ ํ์์ API์์ต๋๋ค.
์ ๋ ์ด๋ฅผ request ๋ชจ๋์ ํ์ฉํ์ฌ ์์ฒญ๋ฐ์ ๊ฐ์ ํ์ฑ ํ์ฌ
๊ณตํด์ผ ๋ ์ง๋ฅผ ์ ๋ถ DB์ ์ ์ฅํ๊ณ ์ ํ์์ต๋๋ค.
์ ๋งํฌ๋ request ๋ชจ๋์ ๋ํ ์ค๋ช ์ ๋๋ค.
npm i request
request ๋ชจ๋์ ์ค์นํ์ง ์์๋ค๋ฉด ์ ๋ช ๋ น์ด๋ฅผ ํตํด request๋ชจ๋์ ์ค์นํด ์ค๋๋ค.
const {solYear, solMonth} = req.query;
.....
~
let request = require('request'); //request๋ฅผ ์ฌ์ฉํ ๊ฒ์์ ๋ช
์ํด ์ค๋๋ค.
let options = {
'method' : 'GET',
'url' : 'http://apis.data.go.kr/B090041/openapi/service/SpcdeInfoService/getRestDeInfo?solYear=' + solYear + '&solMonth=' + solMonth + '&_type=json&ServiceKey=' + secret_config.holidayOpenAPISecretKey,
'headers': {}
};
let holidayList = [];
request(options, async function (error, response, body) {
if (error) {
throw new Error(error);
}
let info = JSON.parse(body);
if (solMonth == '01' || solMonth == '02' || solMonth == '05' || solMonth == '09' || solMonth == '10') {
for (i in info['response']['body']['items']['item']) {
let holidayName = info['response']['body']['items']['item'][i]['dateName'];
let holidayDate = info['response']['body']['items']['item'][i]['locdate'];
holidayList.push([holidayName, holidayDate])
}
} else {
let holidayName = info['response']['body']['items']['item']['dateName'];
let holidayDate = info['response']['body']['items']['item']['locdate'];
holidayList.push([holidayName, holidayDate])
}
if (holidayList.length > 0) {
await reservationDao.postHoliday(connection, [holidayList]);
}
});
async function postHoliday(connection, [values]) {
const postHolidayQuery = `
INSERT INTO Holiday (holidayName, holidayDate)
VALUES ?
`;
const [postHolidayRow] = await connection.query(
postHolidayQuery,
[values]
);
return postHolidayRow;
}
์ ์ฝ๋์ฒ๋ผ ์ฐ๋์ ์์ ์ฟผ๋ฆฌ ์คํธ๋ง์ผ๋ก ์ ๋ ฅ๋ฐ์
ํด๋น ์์ ๋ชจ๋ ๊ณตํด์ผ์ DB์ ์ ์ฅํ ์ ์๋๋ก API๋ฅผ ์ค๊ณํ์ต๋๋ค.
์ค์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ค์ ๋๋ค. 2021๋ 8์๋ถํฐ 2022๋ 12์๊น์ง์ ๋ชจ๋ ๊ณตํด์ผ๋ค์ ์ ์ฅํ์ต๋๋ค.
๊ณตํด์ผ๋ก ๋ฑ๋ก๋ ๋ํต๋ น ์ ๊ฑฐ์ ์ ๊ตญ ๋์ ์ง๋ฐฉ์ ๊ฑฐ๊ฐ ๋์ ๋๋ค์.
์ด์ ์์ผ๋ก ์ ๋ ๊ณตํด์ผ์ ์ถ๊ฐํ ๋ ์์ฒ๋ผ ์ง์ ์ค๊ณํ API๋ฅผ ์ฌ์ฉํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
๐ ์ถ๊ฐ์ ์ธ ํ์ฉ๋ฒ
SELECT holidayName, DATE_FORMAT(holidayDate, "%Y-%m-%d") AS holiday
FROM Holiday
WHERE DATE_FORMAT(holidayDate, "%Y-%m") = ?
์ด๋ ๊ฒ ์ ์ฅ๋ ๊ณตํด์ผ ๋ ์ง๋ฅผ ๋ฐํ์ผ๋ก ์์ฝ ๊ธฐ๋ฅ API๋ฅผ ์ค๊ณํ ๋
ํด๋ผ์ด์ธํธ๊ฐ 'ํน์ ์์ ๊ณตํด์ผ์ ์๋ ค์ค'๋ผ๊ณ ์์ฒญํ๋ค๋ฉด
์์ฒ๋ผ ์ฟผ๋ฆฌ๋ฅผ ์ค๊ณํ์ฌ ์ ์ฅํ๊ณ ์๋ ํน์ ์์ ๊ณตํด์ผ ๋ ์ง๋ฅผ ์ ๊ณตํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
์ด๋ ๊ฒ ๋ ์ง๋ฅผ ์ ๊ณตํ๋ค๋ฉด ํ๋ก ํธ ์ชฝ์์ ์ด ๋ ์ง๋ ์์ฝ์ด ๋ถ๊ฐ๋ฅํ๋๋ก ์์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์๊ฒ ๋ค์.
'๊ธฐํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Nginx 413 Request Entity Too Large ์๋ฌ ๊ด๋ จ (0) | 2021.11.29 |
---|---|
์๋ฆฌ๊ณ ์นด์นด์ค ์๋ฆผํก API ์ฐ๋ํ๊ธฐ (with Node js) (0) | 2021.08.04 |
NodeJS Node-Schedule๋ก ํน์ ์๊ฐ์ ์คํ ํ ์์ ์์ฝํ๊ธฐ ๐ค (0) | 2021.07.20 |
IntelliJ ์ฝ๋ ์๋ ์ ๋ ฌ ๊ด๋ จ ๐ (0) | 2021.07.15 |
Node Js, OpenAPI๋ฅผ ํ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ DB์ ์ ์ฅํ๊ธฐ (Request.js) (1) | 2021.06.25 |