Skip to content

Latest commit

ย 

History

History
319 lines (252 loc) ยท 32.3 KB

File metadata and controls

319 lines (252 loc) ยท 32.3 KB

OffWay ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ ์ธ๋ฒคํ† ๋ฆฌ ยท ๋ฐœ๊ธ‰ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

  • ์กฐ์‚ฌ์ผ: 2026-07-18
  • ๋ชฉ์ : OffWay๊ฐ€ ๋Œ์–ด์˜ฌ ๋ชจ๋“  ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ์˜ ๋ฐœ๊ธ‰์ฒ˜ยท์ธ์ฆยท์—”๋“œํฌ์ธํŠธยท๊ฐ€์šฉ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ๊ณณ์—. ์ด ๋ฌธ์„œ๊ฐ€ ๊ณง (1) ํšŒ์›๊ฐ€์ž…/ํ‚ค ๋ฐœ๊ธ‰ ์ฒดํฌ๋ฆฌ์ŠคํŠธ, (2) ์šฐ๋ฆฌ๊ฐ€ ์กฐํ•ฉํ•  ๋ฐ์ดํ„ฐ ์ „์ฒด ๋ชฉ๋ก.
  • ์ „๋žต: ๋ฏธ๋ฆฌ ์ „๋ถ€ ํ™•๋ณดยท์ ์žฌ(๋ผ์ด๋ธŒ API + ์ •์  ์‹œ๋”ฉ) ํ•ด๋‘๊ณ  ์กฐํ•ฉํ•ด ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

โš ๏ธ ์‹ ๋ขฐ๋„ ํ‘œ๊ธฐ: ์•„๋ž˜ ์ƒ๋‹น์ˆ˜๋Š” ์กฐ์‚ฌ ๊ธฐ๋ฐ˜์ด๋ฉฐ ์ผ๋ถ€ ์˜คํผ๋ ˆ์ด์…˜๋ช…ยทํŒŒ๋ผ๋ฏธํ„ฐ ์ฒ ์ž๋Š” ํ™œ์šฉ์‹ ์ฒญ ํ›„ ๊ฐ ์ƒ์„ธํŽ˜์ด์ง€์˜ ํ™œ์šฉ๊ฐ€์ด๋“œ/Swagger๋กœ ์ตœ์ข… ํ™•์ • ํ•„์š”. "์ถ”์ •" ํ‘œ์‹œ๋œ ํ•ญ๋ชฉ ์ฃผ์˜.


0. ํšŒ์›๊ฐ€์ž…์€ ๋”ฑ 3๊ณณ (๋Œ€๋ถ€๋ถ„ data.go.kr ํ•˜๋‚˜๋กœ ์ปค๋ฒ„)

# ํฌํ„ธ URL ์ปค๋ฒ„ํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ธ์ฆ ๋ฐฉ์‹
1 ๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ data.go.kr https://www.data.go.kr ํŠน์ผ์ •๋ณด ยท TourAPI ยท ๊ด€๊ด‘๋น…๋ฐ์ดํ„ฐ ยท TAGO(๋ฒ„์Šค/์—ด์ฐจ) ยท ์ฝ”๋ ˆ์ผ ยท ์ƒํ™œ์ธ๊ตฌ(ํŒŒ์ผ) ๊ณ„์ • 1๊ฐœ + API๋ณ„ ํ™œ์šฉ์‹ ์ฒญ โ†’ serviceKey
2 SK openapi.sk.com https://openapi.sk.com TMAP ๊ฒฝ๋กœ/๊ฒฝ์œ ์ง€ ์ตœ์ ํ™” ์•ฑ ๋“ฑ๋ก โ†’ appKey(ํ—ค๋”)
3 (์„ ํƒ) ํ†ต๊ณ„์ฒญ SGIS https://sgis.kostat.go.kr/developer ์„ผ์„œ์Šค ์ธ๊ตฌยทํ†ต๊ณ„(์ƒํ™œ์ธ๊ตฌ ๋ณด๊ฐ•์šฉ) key+secret โ†’ accessToken

data.go.kr ์„œ๋น„์Šคํ‚ค ํ•ต์‹ฌ ํ•จ์ •: ๋ฐœ๊ธ‰ ํ™”๋ฉด์— Encoding ํ‚ค / Decoding ํ‚ค ๋‘ ์ข…๋ฅ˜๊ฐ€ ๋‚˜์˜จ๋‹ค. HTTP ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ž๋™ ์ธ์ฝ”๋”ฉํ•˜๋ฉด Decoding ํ‚ค, ์•„๋‹ˆ๋ฉด Encoding ํ‚ค๋ฅผ ์“ด๋‹ค. ์ž˜๋ชป ์“ฐ๋ฉด SERVICE_KEY_IS_NOT_REGISTERED_ERROR. โ†’ application secret์œผ๋กœ ๋‘ ํ‚ค ๋‹ค ๋ณด๊ด€ํ•˜๊ณ , ํ•œ์ชฝ ์‹คํŒจ ์‹œ ๋ฐ˜๋Œ€๋กœ ์‹œ๋„.


1. ๋ผ์ด๋ธŒ REST API (ํด๋ผ์ด์–ธํŠธ ๊ตฌํ˜„ ๋Œ€์ƒ โ†’ external/ port)

1-1. ํŠน์ผ ์ •๋ณด (๊ณตํœด์ผยท๋Œ€์ฒด๊ณตํœด์ผ) โ€” ํ•œ๊ตญ์ฒœ๋ฌธ์—ฐ๊ตฌ์›

  • ๋ฐœ๊ธ‰: data.go.kr ๋ฐ์ดํ„ฐ์…‹ 15012690 ํ•œ๊ตญ์ฒœ๋ฌธ์—ฐ๊ตฌ์›_ํŠน์ผ ์ •๋ณด โ†’ ํ™œ์šฉ์‹ ์ฒญ (์ž๋™์Šน์ธ)
  • Base: https://apis.data.go.kr/B090041/openapi/service/SpcdeInfoService
  • ์˜คํผ๋ ˆ์ด์…˜: getRestDeInfo(๊ณตํœด์ผ+๋Œ€์ฒด๊ณตํœด์ผ โ€” ์ด๊ฑธ ์‚ฌ์šฉ), getHoliDeInfo(๊ตญ๊ฒฝ์ผ), getAnniversaryInfo, get24DivisionsInfo
  • ํŒŒ๋ผ๋ฏธํ„ฐ: serviceKey, solYear(ํ•„์ˆ˜), solMonth(๊ถŒ์žฅ, ์›”๋ณ„ ๋ฐ˜๋ณต ํ˜ธ์ถœ ์•ˆ์ „), _type=json, numOfRows, pageNo
  • ์‘๋‹ต ํ•„๋“œ: locdate(YYYYMMDD), dateName(์˜ˆ "๋Œ€์ฒด๊ณตํœด์ผ"), isHoliday(Y/N), dateKind
  • ํ•œ๋„: ๋ฌด๋ฃŒ, ๊ฐœ๋ฐœ๊ณ„์ • ์ผ 10,000๊ฑด(์ถ”์ •)
  • ํ•จ์ •: ๋Œ€์ฒด๊ณตํœด์ผ์€ ๋ณ„๋„ ํ”Œ๋ž˜๊ทธ ์—†์ด dateName="๋Œ€์ฒด๊ณตํœด์ผ"๋กœ ํŒ๋ณ„. ๋ฏธ๋ž˜ ์—ฐ๋„๋Š” ์ง€์ • ์ „ ๋ˆ„๋ฝ ๊ฐ€๋Šฅ.
  • OffWay ์šฉ๋„: LNT ์‚ฐ์ถœ ยท ์ƒŒ๋“œ์œ„์น˜ ์—ฐํœด ํƒ์ง€์˜ ๊ธฐ๋ฐ˜.

1-2. ๊ตญ๋ฌธ ๊ด€๊ด‘์ •๋ณด ์„œ๋น„์Šค (TourAPI) โ€” ํ•œ๊ตญ๊ด€๊ด‘๊ณต์‚ฌ

  • ๋ฐœ๊ธ‰: data.go.kr ๋ฐ์ดํ„ฐ์…‹ 15101578 ํ•œ๊ตญ๊ด€๊ด‘๊ณต์‚ฌ_๊ตญ๋ฌธ ๊ด€๊ด‘์ •๋ณด ์„œ๋น„์Šค_GW โ†’ ํ™œ์šฉ์‹ ์ฒญ (์ž๋™์Šน์ธ)

  • Base(๊ถŒ์žฅ v2, HTTPS): https://apis.data.go.kr/B551011/KorService2 (๋ ˆ๊ฑฐ์‹œ KorService1์€ ๋‹จ๊ณ„์  ํ์ง€)

  • ์˜คํผ๋ ˆ์ด์…˜: areaBasedList2(์ง€์—ญ๊ธฐ๋ฐ˜ ๋ชฉ๋ก โ€” ํ•ต์‹ฌ), locationBasedList2(์œ„๊ฒฝ๋„+๋ฐ˜๊ฒฝ), searchKeyword2, detailCommon2(์ฃผ์†Œยท์ขŒํ‘œยท๊ฐœ์š”), detailIntro2(์šด์˜์‹œ๊ฐ„ยทํœด๋ฌด์ผ), detailImage2, areaCode2(์ง€์—ญ์ฝ”๋“œ ์กฐํšŒ)

  • ํŒŒ๋ผ๋ฏธํ„ฐ: serviceKey, MobileOS(ETC), MobileApp(offway), _type=json, numOfRows, pageNo, arrange, areaCode, sigunguCode, contentTypeId, cat1/2/3

  • contentTypeId: 12=๊ด€๊ด‘์ง€ ยท 14=๋ฌธํ™”์‹œ์„ค ยท 15=์ถ•์ œ๊ณต์—ฐํ–‰์‚ฌ ยท 25=์—ฌํ–‰์ฝ”์Šค ยท 28=๋ ˆํฌ์ธ  ยท 32=์ˆ™๋ฐ• ยท 38=์‡ผํ•‘ ยท 39=์Œ์‹์ 

  • ์‘๋‹ต ํ•„๋“œ: contentid, title, addr1, mapx(๊ฒฝ๋„)/mapy(์œ„๋„), areacode, sigungucode, firstimage, tel; detailIntro๋Š” usetime/restdate(์šด์˜ยทํœด๋ฌด, ์ž์œ ํ…์ŠคํŠธ)

  • ํ•œ๋„: ๋ฌด๋ฃŒ, ๊ฐœ๋ฐœ๊ณ„์ • ์ผ 1,000๊ฑด (์šด์˜ ์ „ํ™˜ ์‹œ ์ฆ๋Ÿ‰)

  • โš ๏ธ ์ตœ๋Œ€ ํ•จ์ • โ€” ์ง€์—ญ์ฝ”๋“œ: sigunguCode๋Š” KTO ์ „์šฉ ์ˆœ๋ฒˆ(๋ฒ•์ • ์‹œ๊ตฐ๊ตฌ ์ฝ”๋“œ ์•„๋‹˜)์ด๊ณ  areaCode์™€ ํ•จ๊ป˜๋งŒ ์œ ํšจ. โ†’ ๋จผ์ € areaCode2๋กœ (areaCode,sigunguCode)โ†”์ง€๋ช… ๋งคํ•‘ ํ…Œ์ด๋ธ”์„ ํ™•๋ณดํ•œ ๋’ค ์ธ๊ตฌ๊ฐ์†Œ์ง€์—ญ 89๊ณณ ์ง€๋ช…๊ณผ ๋งค์นญ. ์ง€๋ช… ๊ธฐ์ค€ ์กฐ์ธ.

  • OffWay ์šฉ๋„: ์ธ๊ตฌ๊ฐ์†Œ์ง€์—ญ ๊ด€๊ด‘์ง€ยท์ˆ™๋ฐ•ยท์Œ์‹์  ํ‘œ์ถœ, ์šด์˜์‹œ๊ฐ„/ํœด๋ฌด ๊ธฐ๋ฐ˜ ์ผ์ • ์ƒ์„ฑ.

  • ์‹ค์ธก(2026-08-21 ยท 89๊ณณ ์ „์ˆ˜, areaBasedList2 89์ฝœ) โ€” ์ง€์—ญ ์žฅ์†Œ ํ’€(#304)์˜ ๊ทผ๊ฑฐ๋‹ค.

    ๊ฐ’
    ์ง€์—ญ๋‹น ๋“ฑ๋ก ๊ฑด์ˆ˜ ์ตœ์†Œ 16 ยท ์ค‘์•™๊ฐ’ 57 ยท ์ตœ๋Œ€ 97
    ์‚ฌ์ง„ ๋ณด์œ ์œจ ์นฉ๋ณ„ 84~95% (firstimage)
    ์‚ฌ์ง„ ์žˆ๋Š” ์žฅ์†Œ 10๊ฑด ์ด์ƒ 89/89๊ณณ

    ์นฉ๋ณ„๋กœ ์‚ฌ์ง„ ์žˆ๋Š” ์žฅ์†Œ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ๋Š” ์ง€์—ญ โ€” ๊ด€๊ด‘์ง€ 89/89 ยท ๋ง›์ง‘ 89/89 ยท ์ˆ™๋ฐ• 87/89 ยท ์ฒดํ—˜ 86/89. (์ˆ™๋ฐ•ยท๋ง›์ง‘์€ ์ „์ฒดํƒ€์ž… 1์ฝœ๋งŒ ์“ด ํ•˜ํ•œ์ด๋‹ค. ๋ฐฐ์น˜๋Š” ํƒ€์ž…๋ณ„ 2์ฝœ์„ ๋” ๋ถ€๋ฅธ๋‹ค.)

    ๊ตญ๊ฐ€์œ ์‚ฐ ๋ณด์ถฉ์€ ํ•„์š” ์—†๋‹ค. 89๊ณณ ์ „๋ถ€๊ฐ€ ์‚ฌ์ง„ ์žˆ๋Š” ์žฅ์†Œ๋ฅผ 10๊ฑด ์ด์ƒ ๋“ค๊ณ  ์žˆ์–ด ํ™”๋ฉด ์ƒํ•œ(10๊ฐœ)์„ ์ฑ„์šด๋‹ค. (์œ„ ํ‘œ์˜ ์ตœ์†Œ 16 ์€ ๋“ฑ๋ก ๊ฑด์ˆ˜๋ผ ์‚ฌ์ง„ ๊ฑด์ˆ˜์™€ ๋‹ค๋ฅด๋‹ค โ€” ์‚ฌ์ง„ ๋ณด์œ ์œจ์ด 84~95% ์ด๋ฏ€๋กœ ๊ทธ๋ณด๋‹ค ์ž‘๋‹ค.)

  • ์‹ค์ธก(2026-08-21 ยท ํ‘œ๋ณธ 40๊ฑด) โ€” ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ๋ถ€๊ฐ€ ์ •๋ณด ์ฑ„์›€๋ฅ . ํ™ˆ ์žฅ์†Œ ์นด๋“œ ๋ถ€์ œ(#305)์˜ ๊ทผ๊ฑฐ๋‹ค.

    ๋Œ€์ƒ ํ•„๋“œ ์ฑ„์›€๋ฅ 
    ๋ง›์ง‘ detailIntro2 firstmenu(๋Œ€ํ‘œ๋ฉ”๋‰ด) ยท opentimefood 100% (19/19)
    ์ˆ™๋ฐ• detailIntro2 roomcount 47% ยท checkintime 52% ์ ˆ๋ฐ˜
    ์ˆ™๋ฐ• detailInfo2 ๊ฐ์‹ค ์š”๊ธˆ(roomoffseasonminfee1 ๋“ฑ) 21% (4/19)

    1์ธ ๊ฐ€๊ฒฉ ํ•„๋“œ๋Š” ์Œ์‹์ ์— ์•„์˜ˆ ์—†๋‹ค. ์‹œ์•ˆ์˜ 1์ธ 9,000์› ์€ ๋Œ€ํ‘œ๋ฉ”๋‰ด๋กœ ๋Œ€์ฒดํ•ด์•ผ ํ•œ๋‹ค. ์ˆ™๋ฐ• ์š”๊ธˆ์€ detailInfo2 ๋ฅผ POI ๋งˆ๋‹ค ๋” ๋ถˆ๋Ÿฌ์•ผ ํ•˜๋Š”๋ฐ ์ฑ„์›€๋ฅ ์ด 21% ๋ผ ๋น„์šฉ์ด ๊ฐ’์–ด์น˜๋ฅผ ๋„˜๋Š”๋‹ค.

1-3. ๊ด€๊ด‘๋น…๋ฐ์ดํ„ฐ(๋ฐฉ๋ฌธ์ž์ˆ˜) โ€” ํ•œ๊ตญ๊ด€๊ด‘๊ณต์‚ฌ ยท ์‹คํ˜ธ์ถœ ํ™•์ธ(#20)

  • ๋ฐœ๊ธ‰: data.go.kr ๋ฐ์ดํ„ฐ์…‹ 15101972 ํ•œ๊ตญ๊ด€๊ด‘๊ณต์‚ฌ_๊ด€๊ด‘๋น…๋ฐ์ดํ„ฐ ์ •๋ณด์„œ๋น„์Šค_GW โ†’ ํ™œ์šฉ์‹ ์ฒญ (15101578๊ณผ ๋ณ„๊ฐœ ์‹ ์ฒญ)
  • Base: https://apis.data.go.kr/B551011/DataLabService โœ… ํ™•์ธ
  • ์˜คํผ๋ ˆ์ด์…˜: metcoRegnVisitrDDList(๊ด‘์—ญ๋ณ„ ์ผ๋ณ„ ๋ฐฉ๋ฌธ์ž์ˆ˜) ยท locgoRegnVisitrDDList(๊ธฐ์ดˆ ์‹œ๊ตฐ๊ตฌ๋ณ„ โ€” OffWay 89์— ์‚ฌ์šฉ). ๋‘˜ ๋‹ค ์‹คํ˜ธ์ถœ ์„ฑ๊ณต(resultCode 0000).
  • ํŒŒ๋ผ๋ฏธํ„ฐ: serviceKeyยทMobileOS(ETC)ยทMobileApp(offway)ยท_type=jsonยทstartYmd/endYmd(YYYYMMDD)ยทpageNoยทnumOfRows. (์ง€์—ญ ํ•„ํ„ฐ param ์—†์ด ๊ธฐ๊ฐ„ ์ „์ฒด ๋ฐ˜ํ™˜ โ†’ ํด๋ผ๊ฐ€ ์‹œ๊ตฐ๊ตฌ๋กœ ๋งค์นญ)
  • ์‘๋‹ต ํ•„๋“œ(locgo): signguCode(11110)ยทsignguNm(์ข…๋กœ๊ตฌ)ยทdaywkDivCd/daywkDivNm(์š”์ผ)ยทtouDivCd/touDivNm(1=ํ˜„์ง€์ธยท2=์™ธ์ง€์ธยท3=์™ธ๊ตญ์ธ)ยทtouNum(๋ฐฉ๋ฌธ์ž์ˆ˜, ๋ฌธ์ž์—ด)ยทbaseYmd
  • ํ•œ๋„: ๋ฌด๋ฃŒ, ๊ฐœ๋ฐœ๊ณ„์ • ์ผ 1,000๊ฑด
  • ํ•จ์ • โ‘ (๋งค์นญ ํ‚ค): signguCode๋Š” ๋ฒ•์ • ์‹œ๊ตฐ๊ตฌ์ฝ”๋“œ(ํ–‰์ •ํ‘œ์ค€์ฝ”๋“œ)๋ผ TourAPI KTO ์ฝ”๋“œ์™€ ๋‹ค๋ฆ„ โ†’ region ์— legal_code ์ปฌ๋Ÿผ์„ ๋”ฐ๋กœ ๋‘๊ณ  ์ฝ”๋“œ๋กœ ๋งค์นญํ•œ๋‹ค(#65).
    • signguNm(์ง€๋ช…)์œผ๋กœ ๋งค์นญ ์€ ํ๊ธฐํ–ˆ๋‹ค. ์ง€๋ช…์€ ์ „๊ตญ์—์„œ ๊ฒน์นœ๋‹ค โ€” ๋™๊ตฌ 6๊ณณยท์ค‘๊ตฌ 6๊ณณยท์„œ๊ตฌ 5๊ณณยท๋‚จ๊ตฌ 4๊ณณยท๋ถ๊ตฌ 4๊ณณยท๊ณ ์„ฑ๊ตฐ 2๊ณณ(2026-06 ์‹คํ˜ธ์ถœ, 268๊ฐœ ์‹œ๊ตฐ๊ตฌ ๊ธฐ์ค€). ์šฐ๋ฆฌ 89๊ณณ ์ค‘ ๋ถ€์‚ฐ ๋™๊ตฌยท๋ถ€์‚ฐ ์„œ๊ตฌยท๋Œ€๊ตฌ ๋‚จ๊ตฌยท๋Œ€๊ตฌ ์„œ๊ตฌยท๊ฐ•์› ๊ณ ์„ฑ๊ตฐ(51820)ยท๊ฒฝ๋‚จ ๊ณ ์„ฑ๊ตฐ(48820) 6๊ณณ์ด ๊ฑธ๋ ค, ์„œ๋กœ ๋‹ค๋ฅธ ์ง€์—ญ์˜ ๋ฐฉ๋ฌธ์ž๊ฐ€ ํ•œ ๋ฒ„ํ‚ท์— ํ•ฉ์‚ฐ๋๋‹ค(๋ถ€์‚ฐ ๋™๊ตฌ = ์ „๊ตญ ๋™๊ตฌ 6๊ณณ์˜ ํ•ฉ).
    • region.legal_code ์˜ ์ •๋ณธ์€ ์ด ์‘๋‹ต์˜ signguCode ์ž์ฒด๋‹ค. ๋งค์นญ ์ƒ๋Œ€์—์„œ ๊ทธ๋Œ€๋กœ ๋”ฐ์™€์•ผ 89๊ณณ ์ „๋ถ€ ๋งค์นญ์ด ๋ณด์žฅ๋œ๋‹ค.
  • ํ•จ์ • โ‘ก(๋ฐœํ–‰ ์ฃผ๊ธฐ): ์™„๊ฒฐ๋œ ๋‹ฌ๋งŒ ์›” ๋‹จ์œ„๋กœ ๋ฐœํ–‰๋œ๋‹ค. "N์ผ ์ง€์—ฐ"์ด ์•„๋‹ˆ๋‹ค โ€” 2026-07-30 ๊ธฐ์ค€ 6์›”(24,120๊ฑด)๊นŒ์ง€ ์žˆ๊ณ  7์›”์€ 0๊ฑด. ๊ณ ์ • ์ผ์ˆ˜ ์ง€์—ฐ์„ ๊ฐ€์ •ํ•˜๋ฉด ๊ด€์ธก ์ฐฝ์ด ๋ฏธ๋ฐœํ–‰ ๊ตฌ๊ฐ„์— ๊ฑธ๋ ค ์กฐํšŒ๊ฐ€ resultCode=0000 + ๋นˆ ๊ฒฐ๊ณผ๋กœ ์กฐ์šฉํžˆ ์„ฑ๊ณตํ•˜๊ณ , ์ „ ์ง€์—ญ ๋ฐฉ๋ฌธ์ž๊ฐ€ 0์ด ๋ผ ๋žญํ‚น์ด ๋ฌด์˜๋ฏธํ•ด์ง„๋‹ค(๊ฒฝ๊ณ  ๋กœ๊ทธ๋„ ์•ˆ ๋‚จ์Œ). โ†’ ์ง€๋‚œ๋‹ฌ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ๋น„๋ฉด ์ด์ „ ๋‹ฌ๋กœ ๋ฌผ๋Ÿฌ์„ ๋‹ค.
  • ํ•จ์ • โ‘ข(์‘๋‹ต ํฌ๊ธฐ): ์ง€์—ญ ํ•„ํ„ฐ๊ฐ€ ์—†์–ด ๊ธฐ๊ฐ„ ์ „์ฒด๊ฐ€ ๋‚ด๋ ค์˜จ๋‹ค. 268 ์‹œ๊ตฐ๊ตฌ ร— 3 ๊ตฌ๋ถ„ ร— ์ผ์ˆ˜ โ†’ 7์ผ ์•ฝ 1MB / ํ•œ ๋‹ฌ ์•ฝ 4MB. ์šด์˜ externalWebClient ์˜ maxInMemorySize ๊ฐ€ 2MB ๋ผ ํ•œ ๋‹ฌ์น˜๋Š” ๋ฒ„ํผ๋ฅผ ๋„˜๊ธด๋‹ค. ๊ด€์ธก ์ฐฝ์„ ๋ฐœํ–‰๋œ ๋‹ฌ์˜ ๋งˆ์ง€๋ง‰ ํ•œ ์ฃผ๋กœ ์žก๋Š” ์ด์œ .
  • ํ•จ์ • โ‘ฃ: "๋ฐฉ๋ฌธ์žโ‰ ๊ด€๊ด‘๊ฐ" โ†’ ๋žญํ‚น์—” ์™ธ์ง€์ธ+์™ธ๊ตญ์ธ๋งŒ.
  • OffWay ์šฉ๋„: "ํ‰์ผ์— ํ•œ์‚ฐํ•œ ์‹œ์ " ํ•œ์‚ฐ๋„ ๋ฑƒ์ง€ยท์ง€์—ญ ๋žญํ‚น โ€” ์ฐจ๋ณ„ํ™” ํ•ต์‹ฌ ๋ฐ์ดํ„ฐ.
  • ๋ฏธํ™•์ธ(ํ›„์†): ๊ด€๊ด‘์ง€๋ณ„ ์ง‘์ค‘๋ฅ ยทํ–ฅํ›„ ๋ฐฉ๋ฌธ์ž ์˜ˆ์ธก์€ ๋ณ„๋„ ์˜คํผ๋ ˆ์ด์…˜(#21+ ํ•„์š” ์‹œ ํ™•์ธ).

1-3-1. ๊ธฐ์ดˆ์ง€์ž์ฒด ์ค‘์‹ฌ ๊ด€๊ด‘์ง€ โ€” ํ•œ๊ตญ๊ด€๊ด‘๊ณต์‚ฌ ยท ์‹คํ˜ธ์ถœ ํ™•์ธ(#185)

  • ๋ฐœ๊ธ‰: ๊ด€๊ด‘๋น…๋ฐ์ดํ„ฐ์™€ ๊ฐ™์€ ๊ณ„์ •(15101972)์œผ๋กœ ํ˜ธ์ถœ๋œ๋‹ค โ€” ๋ณ„๋„ ์‹ ์ฒญ ์—†์ด serviceKey ๋ฅผ ๊ทธ๋Œ€๋กœ ์“ด๋‹ค.

  • Base: https://apis.data.go.kr/B551011/LocgoHubTarService1 โœ… ํ™•์ธ (1-3 ์˜ DataLabService ์™€ ๋‹ค๋ฅธ base)

  • ์˜คํผ๋ ˆ์ด์…˜: areaBasedList1 โ€” ํ•œ ์ง€์ž์ฒด์˜ ์ค‘์‹ฌ ๊ด€๊ด‘์ง€๋ฅผ ์ˆœ์œ„๋กœ. ์‹คํ˜ธ์ถœ ์„ฑ๊ณต(resultCode=0000).

  • ํŒŒ๋ผ๋ฏธํ„ฐ: serviceKeyยทMobileOS(ETC)ยทMobileApp(offway)ยท_type=jsonยทareaCd(์‹œ๋„ 2์ž๋ฆฌ)ยทsignguCd(์‹œ๊ตฐ๊ตฌ 5์ž๋ฆฌ)ยทbaseYm(YYYYMM)ยทnumOfRowsยทpageNo(ํ•„์ˆ˜)

  • ์‘๋‹ต ํ•„๋“œ: hubRank(์ˆœ์œ„)ยทhubTatsCd(์‹๋ณ„์ž)ยทhubTatsNm(๊ด€๊ด‘์ง€๋ช…)ยทhubCtgryLclsNm(๋Œ€๋ถ„๋ฅ˜: ๊ด€๊ด‘์ง€ยท์Œ์‹ยท์ˆ™๋ฐ•)ยทhubCtgryMclsNm(์ค‘๋ถ„๋ฅ˜)ยทmapX(๊ฒฝ๋„)/mapY(์œ„๋„)ยทsignguNmยทbaseYm

  • ์‹ค์ธก(2026-08-09, ๊ณต์ฃผ์‹œ 44150 ยท baseYm=202606)

    ํ•ญ๋ชฉ ๊ฐ’
    ์‘๋‹ต์‹œ๊ฐ„ n=20 ยท min 0.106s ยท p50 0.123s ยท p90 0.135s ยท p95 0.137s ยท max 0.139s
    ์‘๋‹ต ํฌ๊ธฐ numOfRows=30 โ†’ 9.5KB ยท numOfRows=100 โ†’ 31KB
    totalCount ์ง€์ž์ฒด๋‹น 51~100๊ฑด(ํ‘œ๋ณธ 5๊ณณ: ๊ณต์ฃผ 100ยท์™„๋„ 51ยท๊ฐ•์›๊ณ ์„ฑ 100ยท๊ฒฝ๋‚จ๊ณ ์„ฑ 100ยท์–‘๊ตฌ 82)
    ํŽ˜์ด์ง€ ์ƒํ•œ์ด 100๊ฑด์ด๋ผ numOfRows=100 ์ด๋ฉด 1ํŽ˜์ด์ง€๋กœ ๋๋‚œ๋‹ค โ€” ํŽ˜์ด์ง€ ์ˆœํšŒ๊ฐ€ ํ•„์š” ์—†๋‹ค
  • timeout ๊ทผ๊ฑฐ: ์–ด๋Œ‘ํ„ฐ๋Š” 6์ดˆ๋ฅผ ์“ด๋‹ค. ์ •์ƒ p95(0.14์ดˆ)์˜ 40๋ฐฐ๋กœ ํฌ๊ฒŒ ์žก์€ ๊ฐ’์ธ๋ฐ, ํ‘œ๋ณธ์ด 20ํšŒ๋ผ p99 ๋ฅผ ๋‚ผ ์ˆ˜ ์—†์–ด ๊ผฌ๋ฆฌ๋ฅผ ๋ณด์ˆ˜์ ์œผ๋กœ ๋’€๋‹ค. ์ด ๊ฒฝ๋กœ๋Š” ํ•˜๋ฃจ ํ•œ ๋ฒˆ ๋„๋Š” ๋ฐฐ๊ฒฝ ๋ฐฐ์น˜๋ผ ์ง€์—ฐ์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‹ฟ์ง€ ์•Š๋Š”๋‹ค โ€” 89๊ณณ ์ˆœ์ฐจ ์ตœ์•…์ด 534์ดˆ์—ฌ๋„ ์•„๋ฌด๋„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๋Š”๋‹ค. ์š”์ฒญ ๊ฒฝ๋กœ์— ๋ถ™์ผ ์ผ์ด ์ƒ๊ธฐ๋ฉด ์ด ๊ฐ’์„ ๋‹ค์‹œ ์žฌ์•ผ ํ•œ๋‹ค.

  • ํ•œ๋„: 1-3 ๊ณผ ๊ฐ™์€ ๊ณ„์ •์ด๋ผ ์ผ 1,000๊ฑด์„ ๊ณต์œ ํ•œ๋‹ค. ๊ฐฑ์‹  1ํšŒ๊ฐ€ 89๊ฑด(+๋ฐœํ–‰์›” ํƒ์ƒ‰ ์ตœ๋Œ€ 9๊ฑด)์ด๋ฏ€๋กœ ํ•˜๋ฃจ ํ•œ ๋ฒˆ์ด๋ฉด ์—ฌ์œ ๊ฐ€ ์žˆ๋‹ค. ์š”์ฒญ ๊ฒฝ๋กœ์—์„œ ๋ถ€๋ฅด๋ฉด ์•ˆ ๋˜๋Š” ์ด์œ ๊ฐ€ ์ด๊ฒƒ์ด๋‹ค(#193).

  • ํ•จ์ • โ‘ (์ฝ”๋“œ ์ฒด๊ณ„): areaCd/signguCd ๋Š” ๋ฒ•์ •๋™ ์ฝ”๋“œ๋‹ค โ€” ๊ณต์ฃผ์‹œ๋Š” 44/44150. TourAPI ์˜ KTO ์ฝ”๋“œ(34/1)๋ฅผ ๋„ฃ์œผ๋ฉด resultCode=0000 ์— totalCount=0 ์ด ์˜จ๋‹ค(์‹ค์ธก). ์„ฑ๊ณต ์ฝ”๋“œ๋ผ ์กฐ์šฉํžˆ ๋นˆ ๊ฒฐ๊ณผ๊ฐ€ ๋˜๋ฏ€๋กœ ํŠนํžˆ ์œ„ํ—˜ํ•˜๋‹ค.

  • ํ•จ์ • โ‘ก(pageNo ํ•„์ˆ˜): ๋น ๋œจ๋ฆฌ๋ฉด resultCode=11 NO_MANDATORY_REQUEST_PARAMETERS_ERROR1(pageNo) ์ธ๋ฐ, ๊ทธ ์‘๋‹ต๋งŒ response ๋ž˜ํผ ์—†์ด ์ตœ์ƒ์œ„์— ์ฝ”๋“œ๋ฅผ ๋‹ด์•„ ์˜จ๋‹ค(์‹ค์ธก ์›๋ฌธ: {"responseTime":"...","resultCode":"11","resultMsg":"..."}). ๋ž˜ํผ๋งŒ ๋ณด๊ณ  ํŒŒ์‹ฑํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๋นˆ ๋ฌธ์ž์—ด์ด ๋ผ "๊ฒฐ๊ณผ ์—†์Œ" ๊ณผ ๊ตฌ๋ถ„๋˜์ง€ ์•Š๋Š”๋‹ค โ€” ์กฐ์‚ฌ ์ค‘ ์‹ค์ œ๋กœ ์ด๊ฑธ๋กœ "์ตœ์‹  ์›”์ด ์—†๋‹ค" ๊ณ  ์ž˜๋ชป ์ฝ์—ˆ๋‹ค.

  • ํ•จ์ • โ‘ข(1๊ฑด์ด๋ฉด ๋‹จ์ผ ๊ฐ์ฒด): items.item ์ด ๋ฐฐ์—ด์ด ์•„๋‹ˆ๋ผ ๊ฐ์ฒด๋กœ ์˜จ๋‹ค. ๊ฒฐ๊ณผ๊ฐ€ ์—†์œผ๋ฉด items ๊ฐ€ ๋นˆ ๋ฌธ์ž์—ด์ด๋‹ค. ๋‘˜ ๋‹ค 1-2ยท1-3 ๊ณผ ๊ฐ™์€ data.go.kr ๊ณตํ†ต ํ•จ์ •.

  • ํ•จ์ • โ‘ฃ(1์œ„๊ฐ€ ๋Œ€ํ‘œ ์‚ฌ์ง„๊ฐ์€ ์•„๋‹˜): ๋Œ€๋ถ„๋ฅ˜๊ฐ€ ์ˆ™๋ฐ•ยท์Œ์‹์ธ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค โ€” ์ •์„ ๊ตฐ 1์œ„๋Š” ์ฝ˜๋„, 2์œ„๋Š” ์นด์ง€๋…ธ๋‹ค. ๋ฐ์ดํ„ฐ๋Š” ๋งž์ง€๋งŒ ์ง€์—ญ ์นด๋“œ์— ๊ฑธ ๊ทธ๋ฆผ์ด ์•„๋‹ˆ๋ผ ๋Œ€๋ถ„๋ฅ˜๋กœ ๊ฑธ๋Ÿฌ์•ผ ํ•œ๋‹ค.

  • ๋ฐœํ–‰ ์ฃผ๊ธฐ: 1-3 ๊ณผ ๊ฐ™์€ ์›” ๋‹จ์œ„. 2026-08-09 ๊ธฐ์ค€ 202607 ๊นŒ์ง€ ๋ฐœํ–‰๋จ(ํ™•์ธ). ์ด๋ฒˆ ๋‹ฌ์€ ์•„์ง์ด๋ฏ€๋กœ ์ง€๋‚œ๋‹ฌ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ๋น„๋ฉด ๋ฌผ๋Ÿฌ์„ ๋‹ค.

  • OffWay ์šฉ๋„: ์ง€์—ญ ๋Œ€ํ‘œ๋ฅผ "์ œ๋ชฉ์ˆœ ์ฒซ POI"(#182)๊ฐ€ ์•„๋‹ˆ๋ผ ์‹ค์ œ ์ด๋™ ๋ฐ์ดํ„ฐ์˜ ์ค‘์‹ฌ์„ฑ์œผ๋กœ ์ •ํ•œ๋‹ค. ๊ณต์ฃผ์‹œ 1์œ„ = ๊ณต์‚ฐ์„ฑ โ€” TourAPI ์—๋Š” ๋“ฑ๋ก์กฐ์ฐจ ์—†์–ด ๊ธฐ์กด ๊ตฌ์กฐ๋กœ๋Š” ์ฐพ์„ ์ˆ˜ ์—†๋˜ ๊ณณ์ด๋‹ค.

1-3-2. ๊ด€๊ด‘์‚ฌ์ง„ ๊ฐค๋Ÿฌ๋ฆฌ โ€” ํ•œ๊ตญ๊ด€๊ด‘๊ณต์‚ฌ ยท ์‹คํ˜ธ์ถœ ํ™•์ธ(#196)

  • ๋ฐœ๊ธ‰: ๊ด€๊ด‘๋น…๋ฐ์ดํ„ฐ์™€ ๊ฐ™์€ ๊ณ„์ •(15101972). ๋ณ„๋„ ์‹ ์ฒญ ์—†์ด serviceKey ๋ฅผ ๊ทธ๋Œ€๋กœ ์“ด๋‹ค.

  • Base: https://apis.data.go.kr/B551011/PhotoGalleryService1 โœ… ํ™•์ธ

  • ์˜คํผ๋ ˆ์ด์…˜: galleryList1 โ€” ์ „๋Ÿ‰ ๋ชฉ๋ก. ์‹คํ˜ธ์ถœ ์„ฑ๊ณต(resultCode=0000).

    • galleryKeywordList1 ์€ ํ˜ธ์ถœ์ด ์‹คํŒจํ–ˆ๋‹ค. ์ „๋Ÿ‰์„ DB ๋กœ ๋‚ด๋ฆฌ๋ฉด ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰์ด ํ•„์š” ์—†์–ด ๋” ํŒŒ์ง€ ์•Š์•˜๋‹ค.
  • ํŒŒ๋ผ๋ฏธํ„ฐ: serviceKeyยทMobileOS(ETC)ยทMobileApp(offway)ยท_type=jsonยทarrangeยทnumOfRowsยทpageNo

  • ์‘๋‹ต ํ•„๋“œ: galContentIdยทgalTitleยทgalWebImageUrlยทgalPhotographyMonth(YYYYMM)ยทgalPhotographyLocationยทgalPhotographerยทgalSearchKeyword

  • ์‹ค์ธก(2026-08-09)

    ํ•ญ๋ชฉ ๊ฐ’
    ์ „๋Ÿ‰ 6,118๊ฑด
    ํŽ˜์ด์ง€ numOfRows=1000 ์ด ๊ทธ๋Œ€๋กœ ๋ฐ›์•„๋“ค์—ฌ์ ธ 7ํŽ˜์ด์ง€๋กœ ๋๋‚œ๋‹ค
    ์‘๋‹ต ํฌ๊ธฐ 1,000๊ฑด ํŽ˜์ด์ง€ 554KB (3๊ฑด 1.9KB)
    ์‘๋‹ต์‹œ๊ฐ„ 0.18~0.35์ดˆ
  • timeout ๊ทผ๊ฑฐ: ์–ด๋Œ‘ํ„ฐ๋Š” 10์ดˆ. ์‹ค์ธก 0.35์ดˆ์˜ 30๋ฐฐ๋กœ, ํ‘œ๋ณธ์ด ์ ์–ด ๊ผฌ๋ฆฌ๋ฅผ ๋ณด์ˆ˜์ ์œผ๋กœ ๋’€๋‹ค. ๋ถ€ํŒ… ํ›„ ๋„๋Š” ๋ฐฐ๊ฒฝ ์ ์žฌ๋ผ ์ง€์—ฐ์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‹ฟ์ง€ ์•Š๋Š”๋‹ค.

  • maxInMemorySize ์ฃผ์˜: ํŽ˜์ด์ง€๋‹น 554KB ๋ผ ์šด์˜ externalWebClient ์ƒํ•œ(2MB) ์•ˆ์— ๋“ ๋‹ค. ํŽ˜์ด์ง€ ํฌ๊ธฐ๋ฅผ ๋” ํ‚ค์šฐ๋ฉด ์—ฌ๊ธฐ์— ๊ฑธ๋ฆฐ๋‹ค.

  • ํ•œ๋„: 1-3 ๊ณผ ๊ฐ™์€ ๊ณ„์ •์ด๋ผ ์ผ 1,000๊ฑด์„ ๊ณต์œ ํ•œ๋‹ค. ์ „๋Ÿ‰ ์ ์žฌ๊ฐ€ 7ํšŒ๋ฟ์ด๋ผ ์ฃผ 1ํšŒ ๊ฐฑ์‹ ์œผ๋กœ ์ถฉ๋ถ„ํ•˜๋‹ค.

  • โš ๏ธ ํ•จ์ • โ‘ (์ดฌ์˜ ์œ„์น˜๊ฐ€ ์ž์œ  ํ…์ŠคํŠธ): galPhotographyLocation ์€ ์ •์ œ๋œ ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๋‹ค. ์‹ค์ธก ๋ถ„ํฌ์—์„œ ์ด๋Ÿฐ ๊ฐ’์ด ๋‚˜์˜จ๋‹ค.

    ์ „๋‚จ๊ด‘์ฃผํ†ตํ•ฉํŠน๋ณ„์‹œ 711 ยท ๊ฐ•์›๋„ 581 / ๊ฐ•์›ํŠน๋ณ„์ž์น˜๋„ 198 ยท ์ „๋ผ๋ถ๋„ 402 / ์ „๋ถํŠน๋ณ„์ž์น˜๋„ 98
    ์„œ์šธ 231 / ์„œ์šธ์‹œ 18 / ์„œ์šธํŠน๋ณ„์‹œ 277 ยท ์ธ์ฒญ๊ด‘์—ญ์‹œ ยท ์‚ฐ๊ด‘์—ญ์‹œ ยท ์ „๋ถํŠน๋ณ„์ž์น˜๋„๋„ (์˜คํƒ€)
    ์‹ ์Šน๋ฐ˜์  ยท FNC ยท ์ „์ฃผ์‹๋‹น ยท ๋ฏผ๊ฐ€๋‹คํ—Œ (์‹œ๋„ ์ž๋ฆฌ์— ์ƒํ˜ธ๋ช…)
    

    โ†’ ์‹œ๋„๋ฅผ ํ•จ๊ป˜ ์ •๊ทœํ™”ํ•˜์ง€ ์•Š์œผ๋ฉด ์กฐ์šฉํžˆ ํ‹€๋ฆฐ๋‹ค. ์‹œ๊ตฐ๊ตฌ๋ช…๋งŒ์œผ๋กœ ์„ธ๋ฉด ๋Œ€๊ตฌ ๋‚จ๊ตฌ๊ฐ€ 104๊ฑด์œผ๋กœ ๋ถ€ํ’€์—ˆ๋‹ค(์ „๊ตญ ๋‚จ๊ตฌ์˜ ํ•ฉ). ์ •๊ทœํ™” ํ›„ 6๊ฑด. 1-3 ์˜ ํ•จ์ • โ‘ ๊ณผ ๊ฐ™์€ ๊ณ„์—ด์ด๋‹ค.

  • ํ•จ์ • โ‘ก(์ œ๋ชฉ์ด ์žฅ์†Œ๋ช…์ด ์•„๋‹ ์ˆ˜ ์žˆ๋‹ค): galTitle ์ด "๋ด„์˜ ์•ฝ์†" ๊ฐ™์€ ์ž‘ํ’ˆ๋ช…์ธ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ์žฅ์†Œ๋ช…์€ galSearchKeyword ์—๋งŒ ์žˆ์„ ์ˆ˜ ์žˆ์–ด ๋‘˜ ๋‹ค ๋ด์•ผ ํ•œ๋‹ค โ€” ์ œ๋ชฉ "๊ธˆ๊ฐ•์ฒ ๊ต" ์‚ฌ์ง„์˜ ํ‚ค์›Œ๋“œ์— "๊ณต์‚ฐ์„ฑ" ์ด ๋“ค์–ด ์žˆ๋‹ค.

  • ํ•จ์ • โ‘ข(1๊ฑด์ด๋ฉด ๋‹จ์ผ ๊ฐ์ฒดยท๊ฒฐ๊ณผ ์—†์œผ๋ฉด ๋นˆ ๋ฌธ์ž์—ด): 1-2ยท1-3 ๊ณผ ๊ฐ™์€ data.go.kr ๊ณตํ†ต ํ•จ์ •.

  • โš ๏ธ ํ•จ์ • โ‘ฃ(์ฃฝ์€ ์ด๋ฏธ์ง€ URL): galWebImageUrl ์˜ ์ƒ๋‹น์ˆ˜๊ฐ€ 404 ๋‹ค โ€” ์šฐ๋ฆฌ 89๊ณณ์— ๋ถ™์€ 1,790์žฅ ์ค‘ 345์žฅ(19.3%). ๊ฒฝ๋กœ๋กœ๋Š” ๋ชป ๊ฐ€๋ฅธ๋‹ค(๊ฐ™์€ cms2/website/ ์— ์‚ฐ ๊ฒƒ๊ณผ ์ฃฝ์€ ๊ฒƒ์ด ์„ž์—ฌ ์žˆ๋‹ค). ํ™•์ธํ•˜์ง€ ์•Š๊ณ  ์“ฐ๋ฉด ์ง€์—ญ ์นด๋“œ 15๊ณณ์— ๊นจ์ง„ ์ด๋ฏธ์ง€๊ฐ€ ๋‚˜๊ฐ„๋‹ค.

    • ์ƒ์กด ํ™•์ธ์— HEAD ๋ฅผ ์“ฐ๋ฉด ์•ˆ ๋œ๋‹ค. ์ด ํ˜ธ์ŠคํŠธ๋Š” HEAD ์— 405 ๋ฅผ ๋Œ๋ ค์ค˜ ์‚ด์•„ ์žˆ๋Š” URL ๋„ ์ฃฝ์€ ๊ฒƒ์œผ๋กœ ํŒ์ •๋œ๋‹ค(์ฒ˜์Œ ์žฐ 83๊ฐœ๊ฐ€ ์ „๋ถ€ 405 ์˜€๋‹ค). GET ์œผ๋กœ ํ™•์ธํ•˜๊ณ  ๋ณธ๋ฌธ์„ ๋ฒ„๋ฆฐ๋‹ค.
  • OffWay ์šฉ๋„: ์ง€์—ญ ๋Œ€ํ‘œ ์‚ฌ์ง„(#196). ์ค‘์‹ฌ ๊ด€๊ด‘์ง€(1-3-1) ์ˆœ์œ„์™€ ์ด์–ด "๊ทธ ์ง€์—ญ์˜ ๋Œ€ํ‘œ ๋ช…์†Œ ์‚ฌ์ง„"์„ ๊ณ ๋ฅธ๋‹ค.

  • ์ปค๋ฒ„๋ฆฌ์ง€ ์‹ค์ธก(์ฃฝ์€ URL ์ œ์™ธ ํ›„): 6,118๊ฑด ์ค‘ 1,790๊ฑด์ด ์šฐ๋ฆฌ 89๊ณณ์— ๋ถ™๊ณ , ๊ทธ์ค‘ ์‚ด์•„ ์žˆ๋Š” ๊ฒƒ์€ 1,445๊ฑด์ด๋‹ค. ์‚ฌ์ง„์ด ํ•œ ์žฅ๋„ ์—†๋Š” ๊ณณ์€ ์žฅ์ˆ˜๊ตฐ 1๊ณณ.

    ์‚ฌ๋‹ค๋ฆฌ ๋‹จ๊ณ„ ์ง€์—ญ ์ˆ˜
    โ‘  ์ค‘์‹ฌ ๊ด€๊ด‘์ง€(1-3-1) ร— ๊ฐค๋Ÿฌ๋ฆฌ 82๊ณณ
    โ‘ก ๊ทธ ์ง€์—ญ ๊ฐค๋Ÿฌ๋ฆฌ ์‚ฌ์ง„(5์žฅ ์ด์ƒ ๋ณด์œ ) 4๊ณณ โ€” ๋ถ€์‚ฐ ๋™๊ตฌยท์ธ์ฒœ ์˜น์ง„๊ตฐยท์ „๋‚จ ์˜์•”๊ตฐยท๊ฒฝ๋‚จ ์˜๋ น๊ตฐ
    โ‘ข TourAPI ํด๋ฐฑ 3๊ณณ โ€” ์ „๋ถ ์žฅ์ˆ˜๊ตฐยท๊ฒฝ๋ถ ์˜์–‘๊ตฐยท๊ฒฝ๋ถ ์˜์„ฑ๊ตฐ

    โ‘ก๋ฅผ ๋‘” ์ด์œ : ์ค‘์‹ฌ ๊ด€๊ด‘์ง€ ์ด๋ฆ„๊ณผ ๊ฐค๋Ÿฌ๋ฆฌ ์ œ๋ชฉ์ด ์•ˆ ๋งž์•„๋„ ๊ทธ ์ง€์—ญ์— ์“ธ ์‚ฌ์ง„์ด ์—†๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์˜์•”๊ตฐ์€ ์ค‘์‹ฌ ๊ด€๊ด‘์ง€ 3์œ„๊ฐ€ ๋„๊ฐ‘์‚ฌ์ธ๋ฐ ์ •์ž‘ ์˜์•”์„ ๋Œ€ํ‘œํ•˜๋Š” ์›”์ถœ์‚ฐ ์‚ฌ์ง„์ด 13์žฅ ์žˆ์—ˆ๋‹ค. ๋‹ค๋งŒ ํ•œ๋‘ ์žฅ๋ฟ์ธ ๊ณณ(์˜์–‘๊ตฐ์˜ ์œ ์ผํ•œ ์‚ฌ์ง„์€ '๊ฐ€๋งˆ')์€ ์šฐ์—ฐํžˆ ์ฐํžŒ ์ชฝ์— ๊ฐ€๊นŒ์›Œ TourAPI ๋กœ ๋‚ด๋ ค๋ณด๋‚ธ๋‹ค.

1-4. TAGO ๋Œ€์ค‘๊ตํ†ต โ€” ๊ตญํ† ๊ตํ†ต๋ถ€ (์—ฌ๋Ÿฌ ์„œ๋น„์Šค, ๋™์ผ ๊ณ„์ •)

  • Base ๊ณตํ†ต: https://apis.data.go.kr/1613000/... (serviceKey ๊ฐ€ URL ์— ์‹ค๋ฆฌ๋ฏ€๋กœ HTTPS ํ•„์ˆ˜ โ€” ํ‰๋ฌธ ์ „์†ก ๊ธˆ์ง€) ยท ์‘๋‹ต ๋ž˜ํผ resultCode/items>item[]
  • ํ•œ๋„: ๋ฌด๋ฃŒ, ๊ฐœ๋ฐœ๊ณ„์ • ์ผ 10,000๊ฑด

โš ๏ธ ๊ฒฝ๋กœ ๋ช…๋ช… โ€” ์„œ๋น„์Šค๋งˆ๋‹ค ๋‹ค๋ฅด๋‹ค: data.go.kr TAGO ๋Š” ์„œ๋น„์Šค๋งˆ๋‹ค baseยทop casing ์ด ์ œ๊ฐ๊ฐ์ด๋‹ค. ๋ฒ„์Šค๋ฅ˜๋Š” ...InqireService + ์†Œ๋ฌธ์ž op(getCtyCodeList)๋‹ค. ์—ด์ฐจ๋Š” ์‹ค์ธก ํ™•์ •: ์งง์€ base(TrainInfo) + ๋Œ€๋ฌธ์ž G op(GetStrtpntAlocFndTrainInfo). ๊ณ ์†๋ฒ„์Šคยท์‹œ์™ธ๋ฒ„์Šคยท์ง€ํ•˜์ฒ ์€ ์•„์ง ์ถ”์ •(์—ด์ฐจ์™€ ๊ฐ™์€ ๊ทœ์น™์ผ ๊ฒƒ์œผ๋กœ ๋ณด์ด๋‚˜ ์‹คํ˜ธ์ถœ ๋ฏธํ™•์ธ). ํ‹€๋ฆฐ ์กฐํ•ฉ์€ ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ 404 "API not found" โ€” 404 ์˜ ํƒœ๋ฐ˜์ด ๋ฏธ๊ตฌ๋…์ด ์•„๋‹ˆ๋ผ ๊ฒฝ๋กœยทcasing ์˜คํƒ€์˜€๋‹ค.

์„œ๋น„์Šค ๋ฐ์ดํ„ฐ์…‹ base ํ•ต์‹ฌ op / ํ•„๋“œ ๋น„๊ณ 
๋ฒ„์Šค๋„์ฐฉ์ •๋ณด(์‹œ๋‚ด) 15098530 ArvlInfoInqireService โœ… getSttnAcctoArvlPrearngeInfoList(์†Œ๋ฌธ์ž) โ†’ arrtime nodeId ์„ ์กฐํšŒ, ์‹ค์‹œ๊ฐ„
๋ฒ„์Šค์ •๋ฅ˜์†Œ์ •๋ณด 15098534 BusSttnInfoInqireService โœ… getCtyCodeList ๋“ฑ(์†Œ๋ฌธ์ž) 200
๋ฒ„์Šค๋…ธ์„ ์ •๋ณด 15098529 BusRouteInfoInqireService โœ… ๋…ธ์„ ยท๊ฒฝ์œ ์ •๋ฅ˜์†Œ(์†Œ๋ฌธ์ž) 200
๋ฒ„์Šค์œ„์น˜์ •๋ณด 15098531 BusLcInfoInqireService โœ… ์‹ค์‹œ๊ฐ„ ์ฐจ๋Ÿ‰ ์œ„์น˜(์†Œ๋ฌธ์ž) 200
์—ด์ฐจ์ •๋ณด 15098552 TrainInfo โœ… GetStrtpntAlocFndTrainInfo(๋Œ€๋ฌธ์ž G) ยท GetCtyCodeList ยท GetCtyAcctoTrainSttnList 200 ์‹คํ˜ธ์ถœยทKTX ํ™•์ธ. SRT ๋ฏธํฌํ•จ
๊ณ ์†๋ฒ„์Šค์ •๋ณด 15098522 ExpBusInfo(์ถ”์ •) GetExpBusTrminlList(๋Œ€๋ฌธ์ž ์ถ”์ •) ์—ด์ฐจ์™€ ๊ฐ™์€ ๊ทœ์น™ ์˜ˆ์ƒ
์‹œ์™ธ๋ฒ„์Šค์ •๋ณด 15098541 SuburbsBusInfo(์ถ”์ •) (๋Œ€๋ฌธ์ž ์ถ”์ •) โš ๏ธ ๋‹น์ผ ๋ฐฐ์ฐจ๋งŒ
์ง€ํ•˜์ฒ ์ •๋ณด โ€” SubwayInfo(์ถ”์ •) (๋Œ€๋ฌธ์ž ์ถ”์ •) ๋„์‹œ ๋‚ด
  • ์‘๋‹ต ํ•„๋“œ(์—ด์ฐจ): items.item[] (๋‹จ๊ฑด์ด๋ฉด item ๊ฐ์ฒด ํ•˜๋‚˜) ยท traingradename(KTXยทITX-์ƒˆ๋งˆ์„ยท๋ฌด๊ถํ™”) ยท depplandtime/arrplandtime(yyyyMMddHHmmss) ยท trainno. ๋ฏธ์šดํ–‰์ด๋ฉด items:""(๋นˆ ๋ฌธ์ž์—ด).
  • ์—ญ/์ •๋ฅ˜์†Œ/ํ„ฐ๋ฏธ๋„ ID๋Š” ๊ฐ ๋ชฉ๋ก op(GetCtyCodeList โ†’ GetCtyAcctoTrainSttnList ๋“ฑ)์œผ๋กœ ์„ ์กฐํšŒ. ์˜ˆ: ์„œ์šธ NAT010000 ยท ๋ถ€์‚ฐ NAT014445.
  • OffWay ์šฉ๋„: ๋ฐ˜์ฐจยทํ‡ด๊ทผํ›„ ๋ชจ๋“œ ๋„์ฐฉ์‹œ๊ฐ, ๊ตํ†ต์ˆ˜๋‹จ๋ณ„ ๋™์„ .

โš ๏ธ ์‹œ๋‚ด๋ฒ„์Šค ์ปค๋ฒ„๋ฆฌ์ง€ โ€” ์ „๊ตญ์ด ์•„๋‹ˆ๋‹ค (์‹คํ˜ธ์ถœ ํ™•์ธ 2026-07-31)

BusSttnInfoInqireService/getCtyCodeList ์‹คํ˜ธ์ถœ ๊ฒฐ๊ณผ 138๊ฐœ ์ง€์ž์ฒด๋งŒ ๋‹ด๋Š”๋‹ค. ์„œ์šธ์กฐ์ฐจ ์—†๋‹ค(๋ณ„๋„ TOPIS). ๋ฏธ์ปค๋ฒ„ ์ง€์—ญ์€ ์˜ค๋ฅ˜๊ฐ€ ์•„๋‹ˆ๋ผ resultCode=00 + ๋นˆ ๊ฒฐ๊ณผ๋กœ ์˜ค๋ฏ€๋กœ, ๊ทธ๋Œ€๋กœ ๋‘๋ฉด "์ฃผ๋ณ€์— ์ •๋ฅ˜์†Œ ์—†์Œ"๊ณผ ๊ตฌ๋ถ„๋˜์ง€ ์•Š๋Š”๋‹ค.

๋„์‹œ์ฝ”๋“œ ์•ž ๋‘ ์ž๋ฆฌ๊ฐ€ ์‹œ๋„๋‹ค(32010 ์ถ˜์ฒœ โ†’ 32 ๊ฐ•์›). ์ด ๊ตฌ๋ถ„์ด ์žˆ์–ด์•ผ ๋™๋ช… ์‹œ๊ตฐ๊ตฌ๋ฅผ ๊ฐˆ๋ผ๋‚ธ๋‹ค โ€” ๊ณ ์„ฑ๊ตฐ์€ ๊ฐ•์›(๋ฏธ์ปค๋ฒ„)ยท๊ฒฝ๋‚จ(์ปค๋ฒ„) ์–‘์ชฝ์— ์žˆ์–ด ์ง€๋ช…๋งŒ ๋งž์ถ”๋ฉด ๊ฐ•์› ๊ณ ์„ฑ๊ตฐ๊นŒ์ง€ ์ปค๋ฒ„๋กœ ์˜คํŒํ•œ๋‹ค. ๊ด‘์—ญ์‹œ๋Š” ๊ตฌ ๋‹จ์œ„ ์—†์ด ์‹œ ์ „์ฒด๊ฐ€ ํ•œ ์ฝ”๋“œ(21 ๋ถ€์‚ฐ)์ด๊ณ , ๋ฒ„์Šค๊ถŒ์—ญ์ด ๋ฌถ์ธ ๊ณณ์€ "์›์ฃผ์‹œ/ํšก์„ฑ๊ตฐ" ํ•ฉ๋ณธ์œผ๋กœ ์˜จ๋‹ค.

์šฐ๋ฆฌ 89๊ณณ ์ค‘ ๋ฏธ์ปค๋ฒ„ 13๊ณณ (89 ร— 138 ๋Œ€์กฐ):

์‹œ๋„ ๋ฏธ์ปค๋ฒ„ ์‹œ๊ตฐ๊ตฌ
๊ฐ•์›ํŠน๋ณ„์ž์น˜๋„ ๊ณ ์„ฑ๊ตฐ ยท ์‚ผ์ฒ™์‹œ ยท ์–‘๊ตฌ๊ตฐ ยท ์˜์›”๊ตฐ ยท ์ •์„ ๊ตฐ ยท ํ‰์ฐฝ๊ตฐ ยท ํ™”์ฒœ๊ตฐ
์ถฉ์ฒญ๋‚จ๋„ ์˜ˆ์‚ฐ๊ตฐ
์ „๋ผ๋‚จ๋„ ๊ฐ•์ง„๊ตฐ ยท ๋‹ด์–‘๊ตฐ ยท ๋ณด์„ฑ๊ตฐ ยท ์˜๊ด‘๊ตฐ ยท ํ™”์ˆœ๊ตฐ

ํ•˜ํ•„ ์ด ์„œ๋น„์Šค๊ฐ€ ๊ฒจ๋ƒฅํ•˜๋Š” ๊ฐ•์› ์‚ฐ๊ฐ„ยท์ „๋‚จ ์˜ค์ง€๋‹ค. ๊ณต๊ณต๋ฐ์ดํ„ฐ ํด๋ฐฑ ์—†์Œ โ€” ์ „๊ตญ ๋ฒ„์Šค์ •๋ฅ˜์žฅ ์œ„์น˜์ •๋ณด(15067528)๋„ "TAGO ์—ฐ๊ณ„ ์ง€์ž์ฒด" ์Šค๋ƒ…์ƒท์ด๋ผ ๊ฐ™์€ ๋ชจ์ง‘๋‹จ์ด๋‹ค. ์ƒ์šฉ API(ODsayยท์นด์นด์˜ค, ์œ ๋ฃŒ)๋งŒ ๋‚จ๋Š”๋‹ค. ์‹ค์‹œ๊ฐ„ ๋„์ฐฉ์€ ์ง€์ž์ฒด BIS ๊ตฌ์ถ•์ด ์ „์ œ๋ผ ๊ตฌ์กฐ์ ์œผ๋กœ ๋ถˆ๊ฐ€.

โ†’ ๋ฉ”์šธ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ๋“œ๋Ÿฌ๋‚ธ๋‹ค: BusStopAccess.NotCovered("๋ฐ์ดํ„ฐ ์—†์Œ") โ‰  NoStopNearby("์ •๋ฅ˜์†Œ ์—†์Œ"). ํŒ๋ณ„์€ BusAccessService ๊ฐ€ ๋„์‹œ๋ชฉ๋ก(24h ์บ์‹œ)์œผ๋กœ ํ•œ๋‹ค. ๋ชฉ๋ก์„ ๋ชป ์–ป์œผ๋ฉด ํŒ๋ณ„ ๋ถˆ๊ฐ€๋ผ Unavailable ๋กœ ํด๋ฐฑํ•œ๋‹ค โ€” ์ปค๋ฒ„ ์—ฌ๋ถ€๋ฅผ ๋ชจ๋ฅด๋Š” ์ฑ„ "๋ฒ„์Šค ์—†์Œ"์ด๋ผ ์•ˆ๋‚ดํ•˜๋ฉด ํ‹€๋ฆฐ ๋ง์ด ๋  ์ˆ˜ ์žˆ์–ด์„œ๋‹ค.

1-5. ์ฝ”๋ ˆ์ผ ์—ด์ฐจ์šดํ–‰์ •๋ณด โ€” ํ•œ๊ตญ์ฒ ๋„๊ณต์‚ฌ

  • ๋ฐœ๊ธ‰: data.go.kr 15125762 ํ•œ๊ตญ์ฒ ๋„๊ณต์‚ฌ_์—ด์ฐจ์šดํ–‰์ •๋ณด โ†’ ํ™œ์šฉ์‹ ์ฒญ
  • ์ œ๊ณต: ์—ฌ๊ฐ์—ด์ฐจ ์šดํ–‰๊ณ„ํš/์šดํ–‰์ •๋ณด(์‹ค์‹œ๊ฐ„ยท์ง€์—ฐ). ์ถœ๋ฐœ์—ญ/๋„์ฐฉ์—ญ/์šดํ–‰์ผ์ž ๊ธฐ๋ฐ˜.
  • ํ•จ์ •: ์š”๊ธˆยท์˜ˆ๋งคยท์ขŒ์„ ๋ฏธ์ œ๊ณต(์šดํ–‰ ํŠธ๋ž˜ํ‚น์šฉ). ์‹œ๊ฐ„ํ‘œ๋Š” 1-4 TAGO ์—ด์ฐจ์ •๋ณด๊ฐ€ ๋” ์ ํ•ฉ.
  • OffWay ์šฉ๋„: KTX ์ง€์—ฐ/์‹ค์ œ์šดํ–‰ ๋ณด์กฐ (์„ ํƒ).

1-6. TMAP ๊ฒฝ๋กœยท๊ฒฝ์œ ์ง€ ์ตœ์ ํ™” โ€” SK(ํ‹ฐ๋งต๋ชจ๋นŒ๋ฆฌํ‹ฐ) ๋ณ„๋„ ํฌํ„ธ

  • ๋ฐœ๊ธ‰: https://openapi.sk.com ํšŒ์›๊ฐ€์ž… โ†’ ์•ฑ ๋“ฑ๋ก โ†’ TMAP ์ƒํ’ˆ ๊ตฌ๋… โ†’ appKey(UUID) ๋ฐœ๊ธ‰
  • ์ธ์ฆ: ์š”์ฒญ ํ—ค๋” appKey: <ํ‚ค>
  • Base: https://apis.openapi.sk.com/tmap/...
    • ์ž๋™์ฐจ ๊ฒฝ๋กœ: POST /tmap/routes?version=1
    • ๊ฒฝ์œ ์ง€ ์ตœ์ ํ™”(10๊ณณ): POST /tmap/routes/routeOptimization10 (20/30๊ณณ์€ ์—”๋“œํฌ์ธํŠธ ๋ณ„๋„)
  • ํŒŒ๋ผ๋ฏธํ„ฐ: startX/startY, endX/endY(๊ฒฝ๋„X/์œ„๋„Y, WGS84GEO), searchOption; ์ตœ์ ํ™”๋Š” viaPoints[](viaX/viaY/viaTime)
  • ์‘๋‹ต: GeoJSON, totalTime(์ดˆ)ยทtotalDistance(m)ยทtotalFare
  • ํ•œ๋„(๋ฌด๋ฃŒ): ๊ฒฝ๋กœ 1,000/์ผ, ๊ฒฝ์œ ์ง€ ์ตœ์ ํ™”(10๊ณณ) 50/์ผ (์ดˆ๊ณผ ์‹œ ์œ ๋ฃŒ)
  • โš ๏ธ ํ•จ์ •: ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ 24์‹œ๊ฐ„ ์ด์ƒ ์ €์žฅ ๊ธˆ์ง€(์•ฝ๊ด€) โ†’ ๊ฒฝ๋กœ ๊ฒฐ๊ณผ ์˜๊ตฌ ์บ์‹ฑ ๋ถˆ๊ฐ€. ์ขŒํ‘œ X=๊ฒฝ๋„/Y=์œ„๋„ ์ˆœ์„œ.
  • OffWay ์šฉ๋„: ์ž๊ฐ€์šฉ ๊ธฐ์ค€ ์‹ค์‹œ๊ฐ„ ์†Œ์š”์‹œ๊ฐ„, ๊ด€๊ด‘์ง€ ๊ฒฝ์œ ์ง€ ์ˆœ์„œ ์ตœ์ ํ™”(์ผ์ • ์ž๋™ ์ƒ์„ฑ).

2. ์ •์  ๋ฐ์ดํ„ฐ์…‹ (๋Ÿฐํƒ€์ž„ ํ˜ธ์ถœ ์•„๋‹˜ โ†’ DB ์‹œ๋”ฉ/์ž„ํฌํŠธ)

# ๋ฐ์ดํ„ฐ ์ถœ์ฒ˜ ํ˜•์‹ ๋ฐฉ์‹
2-1 ์ธ๊ตฌ๊ฐ์†Œ์ง€์—ญ 89๊ณณ ํ–‰์•ˆ๋ถ€ ๊ณ ์‹œ (mois.go.kr / nabis.go.kr) ๊ณ ์‹œ๋ฌธ/ํ‘œ ์ƒ์ˆ˜ ์‹œ๋“œ(๊ฑฐ์˜ ๋ถˆ๋ณ€, "๊ณ ์‹œ ๊ธฐ์ค€์ผ" ๊ธฐ๋ก)
2-2 ์ƒํ™œ์ธ๊ตฌ(์ฒด๋ฅ˜) ํ–‰์•ˆ๋ถ€ data.go.kr 15130539 (ํŒŒ์ผ๋ฐ์ดํ„ฐ) XLSX(๋ถ„๊ธฐ) ๋ถ„๊ธฐ๋งˆ๋‹ค ๋‹ค์šด๋กœ๋“œโ†’์ž„ํฌํŠธ
2-3 ๋กœ์ปฌ100 ๋ฌธ์ฒด๋ถ€ mcst.go.kr / culture.go.kr PDF/๋ฆฌ์ŠคํŠธ ์‹œ๋“œ + ์ขŒํ‘œ๋Š” ์ง€์˜ค์ฝ”๋”ฉ ๋ณด๊ฐ•
2-4 ๊ด€๊ด‘๋‘๋ ˆ tourdure.mcst.go.kr ์›น/๋ฐœ๊ฐ„๋ฌผ ์‹œ๋“œ + ์ขŒํ‘œ๋Š” TourAPI/์ง€์˜ค์ฝ”๋”ฉ
2-5 7๋Œ€ ์—ฌํ–‰ ์ง€์› ํ˜œํƒ ์ „์šฉ API ์—†์Œ(์ œ์•ˆ์„œ ๋ช…์‹œ) ์ˆ˜๋™ ์ˆ˜๋™ ์ ์žฌ(์ •์ฑ…๋ช…ยท๊ธฐ๊ฐ„ยท๋Œ€์ƒ์ง€ยทํ• ์ธ)
  • ์ƒํ™œ์ธ๊ตฌ ์ฃผ์˜: ์ •์ฑ…์  "์ƒํ™œ์ธ๊ตฌ(์ฒด๋ฅ˜์ธ๊ตฌ)"๋Š” ํ–‰์•ˆ๋ถ€ XLSX๊ฐ€ ์ •๋ณธ. SGIS๋Š” ์„ผ์„œ์Šค ์ธ๊ตฌ๋ผ ๊ฐœ๋…์ด ๋‹ค๋ฆ„. ์„œ์šธ์‹œ ์ƒํ™œ์ธ๊ตฌ API๋Š” 2026-06 ํ˜„ํ–‰ํ™” ์ค‘์ง€.

3. ๋ฐ์ดํ„ฐ ์กฐํ•ฉ โ†’ ์ œ๊ณต ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ (์ „๋ถ€ ํ™•๋ณด ์‹œ)

๊ธฐ๋Šฅ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์กฐํ•ฉ
LNT ๊ฐ€์šฉ์‹œ๊ฐ„ยท์ƒŒ๋“œ์œ„์น˜ ์—ฐํœด ํŠน์ผ์ •๋ณด
์ธ๊ตฌ๊ฐ์†Œ์ง€์—ญ ์—ฌํ–‰์ง€ ์ถ”์ฒœ ์ธ๊ตฌ๊ฐ์†Œ์ง€์—ญ89(seed) + TourAPI + ๊ด€๊ด‘๋น…๋ฐ์ดํ„ฐ(์ง‘์ค‘๋ฅ โ†’ํ•œ์‚ฐ์‹œ์ ) + ์ƒํ™œ์ธ๊ตฌ(๊ฐ€์ค‘์น˜)
์ •์ฑ… ํ˜œํƒ ๋งค์นญยท๋ฑƒ์ง€ 7๋Œ€ํ˜œํƒ(seed) + ์ธ๊ตฌ๊ฐ์†Œ์ง€์—ญ + ๋กœ์ปฌ100/๊ด€๊ด‘๋‘๋ ˆ(seed)
๊ตํ†ตยท๋„์ฐฉ์‹œ๊ฐ (๋ฐ˜์ฐจ/ํ‡ด๊ทผํ›„) TAGO ๋ฒ„์Šค/์—ด์ฐจ + ์ฝ”๋ ˆ์ผ + TMAP(์ž๊ฐ€์šฉ)
์ผ์ • ์ž๋™ ์ƒ์„ฑ TourAPI(์šด์˜์‹œ๊ฐ„/ํœด๋ฌด) + TMAP(๊ฒฝ์œ ์ง€ ์ตœ์ ํ™”) + ์œ„ ์กฐํ•ฉ
์—ฐ์ฐจ ์ปจ์„คํŒ… ํŠน์ผ์ •๋ณด (+ ์œ„ ์ „์ฒด)

4. "๋ชจ๋“  ๊ฑธ ๋ฏธ๋ฆฌ ์ค€๋น„" ์‹คํ–‰ ์ œ์•ฝ (์„ค๊ณ„์— ๋ฐ˜์˜)

  • SRT ๊ณต๊ณตAPI ์—†์Œ โ†’ SRT ์‹œ๊ฐ„ํ‘œ๋Š” ์ œ์™ธํ•˜๊ฑฐ๋‚˜ ๋ณ„๋„ ์ฒ˜๋ฆฌ. KTX๋Š” TAGO๋กœ.
  • ์‹œ์™ธ๋ฒ„์Šค ๋ฏธ๋ž˜๋‚ ์งœ ์กฐํšŒ ๋ถˆ๊ฐ€(๋‹น์ผ๋งŒ) โ†’ ๋ฏธ๋ž˜ ์ผ์ •์€ "์˜ˆ์ƒ ์†Œ์š”์‹œ๊ฐ„"์œผ๋กœ ๊ทผ์‚ฌ, ์‹ค์‹œ๊ฐ„์€ ๋‹น์ผ์—.
  • TMAP 24h ์ €์žฅ ์ œํ•œ โ†’ ๊ฒฝ๋กœ ๊ฒฐ๊ณผ๋Š” ๋‹จ๊ธฐ ์บ์‹œ(โ‰ค24h)๋งŒ. ์˜๊ตฌ ์ €์žฅ ๊ธˆ์ง€.
  • ๊ฐœ๋ฐœ๊ณ„์ • ํ•œ๋„(TourAPI/๋น…๋ฐ์ดํ„ฐ 1,000/์ผ, TMAP ์ตœ์ ํ™” 50/์ผ) โ†’ ๋Œ€๋Ÿ‰ ์‚ฌ์ „์ ์žฌ๋Š” ๋ฐฐ์น˜ยทํŽ˜์ด์ง•ยท์šด์˜๊ณ„์ • ์ „ํ™˜ ๊ณ ๋ ค.
  • ์ง€์—ญ์ฝ”๋“œ ๋ถˆ์ผ์น˜(TourAPI sigunguCode โ†” ๋น…๋ฐ์ดํ„ฐ ์ฝ”๋“œ โ†” ์ธ๊ตฌ๊ฐ์†Œ์ง€์—ญ ์ง€๋ช…) โ†’ ์ง€๋ช… ๊ธฐ์ค€ ๋งคํ•‘ ํ…Œ์ด๋ธ”์„ ๋จผ์ € ๊ตฌ์ถ•(๋งˆ์Šคํ„ฐ ๋ฐ์ดํ„ฐ).
  • Encoding/Decoding ์„œ๋น„์Šคํ‚ค ๋‘ ๊ฐœ ๋‹ค ๋ณด๊ด€.

5. ๋ฐœ๊ธ‰ ์ฒดํฌ๋ฆฌ์ŠคํŠธ (๋ณธ์ธ ์•ก์…˜)

  • data.go.kr ํšŒ์›๊ฐ€์ž… (ํœด๋Œ€ํฐ ๋ณธ์ธ์ธ์ฆ)
  • ํ™œ์šฉ์‹ ์ฒญ: ํŠน์ผ์ •๋ณด(15012690) ยท ๊ตญ๋ฌธ๊ด€๊ด‘์ •๋ณด(15101578) ยท ๊ด€๊ด‘๋น…๋ฐ์ดํ„ฐ(15101972) ยท TAGO ๋ฒ„์Šค๋„์ฐฉ(15098530)ยท๊ณ ์†(15098522)ยท์‹œ์™ธ(15098541)ยท์—ด์ฐจ(15098552) ยท ์ฝ”๋ ˆ์ผ(15125762) ยท ์ƒํ™œ์ธ๊ตฌ ํŒŒ์ผ(15130539)
  • ๋ฐœ๊ธ‰๋œ serviceKey(Encoding+Decoding) ํ™•๋ณด
  • openapi.sk.com ํšŒ์›๊ฐ€์ž… โ†’ ์•ฑ ๋“ฑ๋ก โ†’ TMAP appKey ๋ฐœ๊ธ‰
  • (์„ ํƒ) SGIS ๊ฐœ๋ฐœ์ง€์›์„ผํ„ฐ key/secret
  • ์ •์  ๋ฐ์ดํ„ฐ ๋‹ค์šด๋กœ๋“œ: ์ธ๊ตฌ๊ฐ์†Œ์ง€์—ญ 89๊ณณ ยท ์ƒํ™œ์ธ๊ตฌ XLSX ยท ๋กœ์ปฌ100 ๋ฆฌ์ŠคํŠธ ยท ๊ด€๊ด‘๋‘๋ ˆ ๋ชฉ๋ก
  • 7๋Œ€ ํ˜œํƒ ์ •๋ณด ์ˆ˜๋™ ์ •๋ฆฌ(์ •์ฑ…๋ช…ยท์šด์˜๊ธฐ๊ฐ„ยท๋Œ€์ƒ์ง€ยทํ• ์ธ์œจ)

6. ๋ณผ๊ฑฐ๋ฆฌ ๋ณด๊ฐ• ํ›„๋ณด (๋ฏธ์—ฐ๋™)

2026-07-21 ์กฐ์‚ฌ. TourAPI๋งŒ์œผ๋ก  ๋ณผ๊ฑฐ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•œ ์†Œ๋„์‹œ(์˜์–‘ 10๊ฐœ๊ธ‰) ๋ณด๊ฐ•์šฉ ์ถ”๊ฐ€ ์†Œ์Šค. ์•„๋ž˜๋Š” ํ›„๋ณด์ด๋ฉฐ ์•„์ง ํด๋ผ์ด์–ธํŠธ ๋ฏธ๊ตฌํ˜„. ์ด๋ฏธ ์šฐ๋ฆฌ๊ฐ€ ์“ฐ๋Š” ์†Œ์Šค(ํŠน์ผ์ •๋ณดยทTourAPIยท๊ด€๊ด‘๋น…๋ฐ์ดํ„ฐยทTAGOยท์ฝ”๋ ˆ์ผยทTMAP)๋Š” ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•œ๋‹ค. ๊ด€๋ จ ์ด์Šˆ #44.

6-1. ๊ตญ๊ฐ€์œ ์‚ฐ ์ •๋ณด (๋ฌธํ™”์žฌ) โ€” ๊ตญ๊ฐ€์œ ์‚ฐ์ฒญ โญ ํ‚ค ๋ถˆํ•„์š”, ์ฆ‰์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

  • ์ธ์ฆ: ์—†์Œ (API keyยท๋กœ๊ทธ์ธยทํ”„๋ก์‹œ ๋ถˆํ•„์š”). GET ยท XML ์‘๋‹ต ยท User-Agent ํ—ค๋” ํ•„์š” ยท timeout ~20s
  • ๋ชฉ๋ก: https://www.khs.go.kr/cha/SearchKindOpenapiList.do
    • params: ccbaMnm1(์œ ์‚ฐ๋ช… ๊ฒ€์ƒ‰์–ด) ยท ccbaCtcd(์‹œ๋„์ฝ”๋“œ 2์ž๋ฆฌ) ยท pageUnit(1~100) ยท pageIndex ยท ccbaCncl=N(์ง€์ •ํ•ด์ œ ์ œ์™ธ)
    • item ํ•„๋“œ: ccbaMnm1(๋ช…) ยท ccbaMnm2(ํ•œ์ž) ยท ccbaCtcdNm(์‹œ๋„๋ช…) ยท ccbaAdmin(๊ด€๋ฆฌ๊ธฐ๊ด€) ยท latitude ยท longitude ยท ccbaKdcd(์ข…๋ชฉ์ฝ”๋“œ) ยท ccbaAsno(๊ด€๋ฆฌ๋ฒˆํ˜ธ) ยท ccbaCtcd(์‹œ๋„์ฝ”๋“œ)
  • ์ƒ์„ธ: https://www.khs.go.kr/cha/SearchKindOpenapiDt.do โ€” params ccbaKdcd+ccbaAsno+ccbaCtcd โ†’ ์„ค๋ช…(content)ยท์ฃผ์†Œยท์ขŒํ‘œยท์ด๋ฏธ์ง€
  • ํ–‰์‚ฌ: https://www.khs.go.kr/cha/openapi/selectEventListOpenapi.do โ€” params ์—ฐ๋„(YYYY)ยท์›”(1~12) โ†’ ํ–‰์‚ฌ๋ช…ยท๊ธฐ๊ฐ„ยท์ง€์—ญยท๋ณธ๋ฌธ(subContent)ยท๋งํฌ(subPath)
  • โญ ์ขŒํ‘œ ์ œ๊ณต โ†’ ์ง€๋ช…ยท์ขŒํ‘œ๋กœ ์šฐ๋ฆฌ region/POI์— ๋งคํ•‘. TourAPI contentTypeId=14(๋ฌธํ™”์‹œ์„ค) ๊ณ„์—ด ๋ณผ๊ฑฐ๋ฆฌ ๋ณด๊ฐ•.
  • ํ•จ์ •: ๊ณต์‹ ํŽ˜์ด์ง€ ๋ช…์‹œ ํ•œ๋„ ํ™•์ธ ํ•„์š”. ์ง€๋ช…โ†”์‹œ๋„์ฝ”๋“œ ๋งคํ•‘ ํ…Œ์ด๋ธ” ์„ ๊ตฌ์ถ•(์šฐ๋ฆฌ 89 ์ง€๋ช… ๊ธฐ์ค€).
  • OffWay ์šฉ๋„: ์ฝ˜ํ…์ธ  ์ถฉ๋ถ„์„ฑ(#21)์—์„œ ์ธ์ ‘ 50km ํ™•์žฅ ์ „ ์ž์ฒด ๋ณผ๊ฑฐ๋ฆฌ ํ™•๋Œ€ ยท ์ง€์—ญ ์ƒ์„ธ์— ๋ฌธํ™”์žฌยท์ด๋‹ฌ์˜ ํ–‰์‚ฌ.

6-2. ๋‚ ์”จ (๊ธฐ์ƒ์ฒญ) โ€” ์ฑ„ํƒ. ๋‚จ์€ ์ผ์ˆ˜๋กœ ์„ธ API ๋ฅผ ๊ฐˆ์•„ํƒ„๋‹ค

์—ฌํ–‰๊นŒ์ง€ ๋‚จ์€ ์ผ์ˆ˜์— ๋”ฐ๋ผ ๋‹ด๋‹น์ด ๊ฐˆ๋ฆฐ๋‹ค. ์‹คํ˜ธ์ถœ ํ™•์ธ(2026-08-03), ์ „๋ถ€ ๊ธฐ์กด DATA_GO_KR ํ‚ค๋กœ ๋™์ž‘.

๋‚จ์€ ์ผ์ˆ˜ API base ์ฃผ๋Š” ๊ฒƒ
0~3์ผ ๋‹จ๊ธฐ์˜ˆ๋ณด VilageFcstInfoService_2.0 ๊ธฐ์˜จยทํ•˜๋Š˜์ƒํƒœยท๊ฐ•์ˆ˜ํ™•๋ฅ 
4~10์ผ ์ค‘๊ธฐ ์œก์ƒ์˜ˆ๋ณด MidFcstInfoService ํ•˜๋Š˜์ƒํƒœยท๊ฐ•์ˆ˜ํ™•๋ฅ  (๊ธฐ์˜จ ์—†์Œ)
1~9์ผ ๊ด€๊ด‘๊ธฐํ›„์ง€์ˆ˜ TourStnInfoService1 ๊ด€๊ด‘ ์ ํ•ฉ๋„ ์ง€์ˆ˜ยท๋“ฑ๊ธ‰
11์ผ ์ด์ƒ ์—†์Œ โ€” ์˜ˆ๋ณด๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ตฌ๊ฐ„(#133 ํ‰๋…„๊ฐ’์œผ๋กœ)

โš ๏ธ VilageFcstInfoService (๊ตฌ๋ฒ„์ „)๋Š” ํ๊ธฐ๋๋‹ค. NO_OPENAPI_SERVICE_ERROR(ํ•ด๋‹น ์˜คํ”ˆAPI ์„œ๋น„์Šค๊ฐ€ ์—†๊ฑฐ๋‚˜ ํ๊ธฐ๋จ)๊ฐ€ ์˜จ๋‹ค. _2.0 ์„ ์จ์•ผ ํ•œ๋‹ค. ์Šคํ‚ค๋งˆยทํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๊ฐ™์•„ base ๋งŒ ๋‹ค๋ฅด๋‹ค. ๋‚ ์”จ๋Š” ๋ถ€๊ฐ€ ์ •๋ณด๋ผ ์‹คํŒจํ•ด๋„ ์ฝ”์Šค๊ฐ€ 200 ์œผ๋กœ ๋‚˜๊ฐ€๋Š” ํƒ“์— ๊ฒฝ๋กœ๊ฐ€ ์ฃฝ์€ ์ค„ ๋ชจ๋ฅด๊ณ  ์ง€๋ƒˆ๋‹ค(#128) โ€” E2E ๋กœ ์ ‘์ ์„ ๊ณ ์ •ํ–ˆ๋‹ค.

๋‹จ๊ธฐ์˜ˆ๋ณด VilageFcstInfoService_2.0/getVilageFcst

  • ์ž…๋ ฅ: ๊ฒฉ์ž nx/ny(์œ„๊ฒฝ๋„ ๋ณ€ํ™˜ ํ•„์š”) ยท base_date/base_time(๋ฐœํ‘œ 02ยท05ยท08ยท11ยท14ยท17ยท20ยท23์‹œ)
  • ์‹ค์ธก: 907๊ฑด ยท 121KB ยท 1.15์ดˆ. ์˜ˆ๋ณด๋Š” ์˜ค๋Š˜D+4 ๊ฐ€ ์˜ค๋˜ **์ตœ์ €๊ธฐ์˜จ(TMN)๊นŒ์ง€ ์™„์ „ํ•œ ๋‚ ์€ D+1D+3**

์ค‘๊ธฐ ์œก์ƒ์˜ˆ๋ณด MidFcstInfoService/getMidLandFcst

  • ์ž…๋ ฅ: regId(๊ด‘์—ญ 10๊ฐœ ๊ตฌ์—ญ) ยท tmFc(๋ฐœํ‘œ 06ยท18์‹œ, yyyyMMddHHmm)
  • ์‘๋‹ต์ด ํ•œ ํ–‰์— D+4~D+10 ์ด ์ปฌ๋Ÿผ์œผ๋กœ ๋“ค์–ด์˜จ๋‹ค(wf4Amยทยทยทwf10). D+7 ๊นŒ์ง€๋งŒ ์˜ค์ „/์˜คํ›„๊ฐ€ ๋‚˜๋‰˜๊ณ  D+8 ๋ถ€ํ„ฐ๋Š” ํ•˜๋ฃจ ํ•˜๋‚˜
  • ๊ตฌ์—ญ ์ฝ”๋“œ 10์ข… ์ „๋ถ€ ์‘๋‹ต ํ™•์ธ: 11B00000(์„œ์šธยท์ธ์ฒœยท๊ฒฝ๊ธฐ) 11D10000(๊ฐ•์›์˜์„œ) 11D20000(๊ฐ•์›์˜๋™) 11C10000(์ถฉ๋ถ) 11C20000(๋Œ€์ „ยท์„ธ์ข…ยท์ถฉ๋‚จ) 11F10000(์ „๋ถ) 11F20000(๊ด‘์ฃผยท์ „๋‚จ) 11H10000(๋Œ€๊ตฌยท๊ฒฝ๋ถ) 11H20000(๋ถ€์‚ฐยท์šธ์‚ฐยท๊ฒฝ๋‚จ) 11G00000(์ œ์ฃผ)
  • โš ๏ธ ๊ธฐ์˜จ(getMidTa)์€ ๋‹ค๋ฅธ ์ฝ”๋“œ ์ฒด๊ณ„๋‹ค. ์‹œ๊ตฐ ๋‹จ์œ„ ์ง€์  ์ฝ”๋“œ๋ฅผ ์“ฐ๋Š”๋ฐ, ๊ด‘์—ญ ๊ตฌ์—ญ ์ฝ”๋“œ๋ฅผ ๋„ฃ์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ์•„๋‹ˆ๋ผ resultCode 00 ์— taMin4=0 ์ด ์˜จ๋‹ค. ์‘๋‹ต์— ์ง€์ ๋ช…์ด ์—†์–ด ์ฝ”๋“œ๋ฅผ ์—ด๊ฑฐํ•ด ์ฐพ์„ ์ˆ˜๋„ ์—†๋‹ค(์ฐพ์•„๋„ ์–ด๋А ์‹œ๊ตฐ์ธ์ง€ ๋ชจ๋ฅธ๋‹ค). ์ง€์  ์ฝ”๋“œ ํ™•๋ณด ์ „๊นŒ์ง€ ์ค‘๊ธฐ ๊ธฐ์˜จ์€ ๋น„์›Œ ๋‘”๋‹ค

๊ด€๊ด‘๊ธฐํ›„์ง€์ˆ˜ TourStnInfoService1/getCityTourClmIdx1

  • ์ž…๋ ฅ: CURRENT_DATE(yyyyMMddHH) ยท HOUR(์‚ฐ์ถœ ๋ฒ”์œ„, 24) ยท DAY
  • โš ๏ธ ํฌํ„ธ์ด base ๋ฅผ TourStnInfoService11 ๋กœ ํ‘œ๊ธฐํ•˜๋‚˜ ์‹ค์ œ๋กœ๋Š” TourStnInfoService1(1 ์ด ํ•˜๋‚˜). 11 ์€ 404
  • โš ๏ธ DAY ๋Š” ๋ฉฐ์น  ๋’ค๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฉฐ์น ์น˜๋‹ค. DAY=9 ๋ฉด D+9 ํ•˜๋ฃจ๊ฐ€ ์•„๋‹ˆ๋ผ D+1~D+9 ์•„ํ™‰ ๋‚ ์ด ํ•œ๊บผ๋ฒˆ์— ์˜จ๋‹ค(totalCount ๊ฐ€ 236 ร— DAY ๋กœ ์ฆ๊ฐ€). ์˜คํ”„์…‹์œผ๋กœ ์ฐฉ๊ฐํ•ด ๋‚ ์งœ๋งˆ๋‹ค ๋ถ€๋ฅด๋ฉด ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์•„ํ™‰ ๋ฒˆ ๋ฐ›๋Š”๋‹ค
  • โš ๏ธ ์ƒํ•œ์„ ๋„˜๊ฒจ๋„ ์˜ค๋ฅ˜๊ฐ€ ์—†๋‹ค. DAY=10ยทDAY=12 ๋ชจ๋‘ D+9 ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์ค€๋‹ค. ์š”์ฒญ ๋‚ ์งœ๋กœ ๋ผ๋ฒจ์„ ๋ถ™์ด๋ฉด ์กฐ์šฉํžˆ ํ‹€๋ฆฌ๋ฏ€๋กœ ์‘๋‹ต tm ์œผ๋กœ ๊ฒ€์ฆํ•œ๋‹ค
  • DAY=0(์˜ค๋Š˜)์€ NO_DATA โ€” ์กฐํšŒ ๊ฐ€๋Šฅ ๋ฒ”์œ„๋Š” D+1~D+9
  • ์‹ค์ธก: DAY=9 ๊ธฐ์ค€ 2,124๊ฑด(9์ผ ร— 236 ์‹œ๊ตฐ๊ตฌ) ยท 347KB ยท 2.5์ดˆ. WebClient maxInMemorySize(2MB) ์•ˆ์— ๋“ค์–ด์˜จ๋‹ค
  • โš ๏ธ cityAreaId ๋Š” ๋ฒ•์ •๋™์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๋‹ค. ์šฐ๋ฆฌ region.legal_code ๋กœ ์กฐ์ธํ•˜๋ฉด 89๊ณณ ์ค‘ 51๊ณณ๋งŒ ๋งž๋Š”๋‹ค โ€” ๊ฐ•์›์€ 42xxx(ํŠน๋ณ„์ž์น˜๋„ ์ „ํ™˜ ์ „), ์ „๋ถ์€ 45xxx, ๊ด‘์ฃผ+์ „๋‚จ์€ ๋น„ํ‘œ์ค€ 12xxx ๋กœ ๋ฌถ์—ฌ ์žˆ๋‹ค. ์‹œ๊ตฐ๊ตฌ๋ช…(์‹œ๋„+์‹œ๊ตฐ๊ตฌ)์œผ๋กœ ๋งž์ถ”๋ฉด 89/89
  • ์‘๋‹ต ํ•„๋“œ: tm ยท totalCityName ยท doName(์ถ•์•ฝ ์‹œ๋„๋ช… 17์ข…) ยท cityName ยท cityAreaId ยท kmaTci ยท TCI_GRADE

6-3. ๋ฏธ์„ธ๋จผ์ง€ (์—์–ด์ฝ”๋ฆฌ์•„) โ€” ํ›„๋ณด, ์šฐ๋ฆฌ ํ‚ค๋กœ ์ง์ ‘ ํ˜ธ์ถœ

  • upstream: ์—์–ด์ฝ”๋ฆฌ์•„(ํ•œ๊ตญํ™˜๊ฒฝ๊ณต๋‹จ) ๋Œ€๊ธฐ์˜ค์—ผ์ •๋ณด. ์ธก์ •์†Œ๋ช…(ํ–‰์ •๊ตฌ์—ญ) ๊ธฐ๋ฐ˜ ์กฐํšŒ.
  • ์šฉ๋„: ์ง€์—ญ ์นด๋“œ์— ๋Œ€๊ธฐ์งˆ ๋ฑƒ์ง€. Nice-to-have.

6-4. (๊ฒ€ํ† ) ๊ณต์—ฐ/์ „์‹œยท์ž์—ฐํœด์–‘๋ฆผ โ€” ์ถ”๊ฐ€ ํ‚ค/์Šคํฌ๋ž˜ํ•‘ ํ•„์š”

  • KOPIS ๊ณต์—ฐ์˜ˆ์ˆ ํ†ตํ•ฉ์ „์‚ฐ๋ง: ๊ณต์—ฐยท์ „์‹œ(์ฒดํ—˜๊ฑฐ๋ฆฌ). ๋ณ„๋„ KOPIS ํ‚ค ๋ฐœ๊ธ‰ ํ•„์š” โ†’ ์šฐ์„ ์ˆœ์œ„ ๋‚ฎ์Œ.
  • ์ˆฒ๋‚˜๋“คe(์ž์—ฐํœด์–‘๋ฆผ, foresttrip.go.kr): 7๋Œ€ ํ˜œํƒ ๋†์ดŒ์ฒดํ—˜/์น˜์œ ๊ด€๊ด‘๊ณผ ๋งคํ•‘๋˜๋‚˜ ๊ณต์‹ API ์—†์ด ์Šคํฌ๋ž˜ํ•‘ โ†’ ๋ฐฑ์—”๋“œ ์•ˆ์ •์„ฑ ๋‚ฎ์•„ ๋ณด๋ฅ˜.

์ฐธ๊ณ : KTX/SRT ์˜ˆ๋งค โ€” ์ฑ„ํƒ ์•ˆ ํ•จ

  • ์‹œ์ค‘์— ๋„๋Š” ktx/srt ์—ฐ๋™์€ ๋น„๊ณต์‹ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(korail2-ncard/SRTrain) + ๊ฐœ์ธ ๋กœ๊ทธ์ธ ๊ณ„์ • + anti-bot ํ† ํฐ ๊ธฐ๋ฐ˜์ด๋ผ ๊ณต๊ฐœ ์„œ๋น„์Šค ๋ฐฑ์—”๋“œ์— ๋ถ€์ ํ•ฉ. ์—ด์ฐจ๋Š” ยง1-4 TAGO(KTX ํฌํ•จ)ยทยง1-5 ์ฝ”๋ ˆ์ผ ๊ณต์‹ API๋ฅผ ์œ ์ง€ํ•œ๋‹ค. (ยง4์˜ "SRT ๊ณต๊ณตAPI ์—†์Œ" ์žฌํ™•์ธ.)