Skip to Content
KPIS DSR API์†Œ๊ฐœ

KPIS DSR API

์˜์•ฝํ’ˆ ๊ณต๊ธ‰๋‚ด์—ญ ๊ฐ€๊ณต ์‹œ์Šคํ…œ v0.77.0 (Korean Pharmaceutical Information Service - Drug Supply Report API)

๊ฐœ์š”

ํ•ญ๋ชฉ๋‚ด์šฉ
๋ฒ„์ „v0.77.0
์ŠคํƒVite 7 + React 19 SPA + Express 5 API + TypeScript 5.9
UITailwind CSS 4 + shadcn/ui (Radix UI) + Lucide Icons
DBSupabase (PostgreSQL) + better-sqlite3 (์ธ์ฆ์„œ ์ €์žฅ)
ํ˜ธ์ŠคํŒ…Vercel (ํ”„๋ก ํŠธ์—”๋“œ SPA) + Oracle Cloud PM2 (Express API)
์ธ์ฆGoogle OAuth (Supabase Auth) + Basic Auth ๋Œ€์ฒด ๋ชจ๋“œ

๋„๋ฉ”์ธ

  • KPIS (์˜์•ฝํ’ˆ๊ด€๋ฆฌ์ข…ํ•ฉ์ •๋ณด์„ผํ„ฐ): ์˜์•ฝํ’ˆ ์œ ํ†ต ๋ณด๊ณ  ์˜๋ฌด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ •๋ถ€ ๊ธฐ๊ด€
  • DSR (Drug Supply Report): ์˜์•ฝํ’ˆ ๊ณต๊ธ‰๋‚ด์—ญ ๋ณด๊ณ ์„œ
  • ๊ฐ‘์ง€: ๊ณต๊ธ‰์ž ๋ณด๊ณ  ๋ฌธ์„œ (21์—ด) โ€” ๊ณต๊ธ‰์‚ฌ์—…์ž, ์ œํ’ˆ๋ช…, ํ‘œ์ค€์ฝ”๋“œ, ์ˆ˜๋Ÿ‰/๋‹จ๊ฐ€/๊ธˆ์•ก, ๊ณต๊ธ‰๊ตฌ๋ถ„
  • ์„์ง€: ์ผ๋ จ๋ฒˆํ˜ธ ๋ฌธ์„œ (3์—ด) โ€” ๊ฐ‘์ง€ ์—ฐ๋ฒˆ์— ๋งค์นญ๋˜๋Š” ์˜์•ฝํ’ˆ ์ผ๋ จ๋ฒˆํ˜ธ/RFID

์ฃผ์š” ๊ธฐ๋Šฅ

  • ์—‘์…€ ์—…๋กœ๋“œ (๊ฐ‘์ง€/์„์ง€) ๋ฐ ์ž๋™ ๋‚ ์งœ ์ถ”์ถœ
  • 5๋‹จ๊ณ„ ์ž๋™ ์ฝ”๋“œ๋งคํ•‘ (์ฝ”๋“œ๋งคํ•‘ โ†’ ๋งˆ์Šคํ„ฐ๋งค์นญ โ†’ ๋‹จ๊ฐ€์ˆ˜์ • โ†’ ๊ทœ๊ฒฉ๋ณด์ • โ†’ ๊ทœ์น™์—”์ง„)
  • 3๋‹จ๊ณ„ ์œ ํšจ์„ฑ ๊ฒ€์ฆ (ํ•„์ˆ˜๊ฐ’ โ†’ ํ˜•์‹ โ†’ ๋น„์ฆˆ๋‹ˆ์Šค)
  • KPIS API ์ž๋™ ์ œ์ถœ (MA111 ๋“ฑ๋ก โ†’ MA112 ๊ฒฐ๊ณผํ™•์ธ โ†’ MA113 ๋ฐ˜์†ก์‹ ์ฒญ โ†’ MA114 ์ƒํƒœ์กฐํšŒ)
  • ์—‘์…€ ๋‚ด๋ณด๋‚ด๊ธฐ (์ˆ˜๋™ ๋ณด๊ณ ์šฉ, ํด๋” ์ง€์ • ์ €์žฅ)
  • ๋ฐ˜์†ก ๊ด€๋ฆฌ ๋ฐ ์˜ค๋ฅ˜ ์ž๋™ํ•ด๊ฒฐ
  • ๋Œ€์‹œ๋ณด๋“œ (์›”๋ณ„ ๋ณด๊ณ  ํ˜„ํ™ฉ, KPI ์นด๋“œ, ์ฐจํŠธ)

์™ธ๋ถ€ ์—ฐ๋™

KPIS OpenAPI

KPIS OpenAPI๋Š” ์ธ์ฆ ๋ฐฉ์‹์— ๋”ฐ๋ผ ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.

๊ตฌ๋ถ„API ID์ธ์ฆ ๋ฐฉ์‹์šฉ๋„
์กฐํšŒ APIMA101~MA110API KEY (aplHbin + apiKey)ํ‘œ์ค€์ฝ”๋“œ ์กฐํšŒ, ๊ฑฐ๋ž˜์ฒ˜ ํ™•์ธ, ๋ณด๊ณ ๊ธฐ๊ฐ„ ์กฐํšŒ
๋“ฑ๋ก APIMA111~MA114JWT (client_id/client_secret) + ๊ณต๋™์ธ์ฆ์„œ๊ณต๊ธ‰๋‚ด์—ญ ๋“ฑ๋ก, ๊ฒฐ๊ณผํ™•์ธ, ๋ฐ˜์†ก์‹ ์ฒญ, ์ƒํƒœ์กฐํšŒ
  • ์กฐํšŒ API๋Š” ์‚ฌ์—…์ž๋“ฑ๋ก๋ฒˆํ˜ธ์™€ API KEY๋งŒ์œผ๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋“ฑ๋ก API๋Š” ์„œ๋ฒ„์—์„œ JWT ํ† ํฐ์„ ๋ฐœ๊ธ‰๋ฐ›๊ณ , ๊ณต๋™์ธ์ฆ์„œ๋กœ ์ „์ž์„œ๋ช…ํ•˜์—ฌ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

์ธ์ฆ ์ฒด๊ณ„

์ธ์ฆ์„ค๋ช…
Google OAuthSupabase Auth ๊ธฐ๋ฐ˜ ์‚ฌ์šฉ์ž ์ธ์ฆ (๊ธฐ๋ณธ ๋ชจ๋“œ)
Basic Auth์ธ์ฆ ์„œ๋ฒ„ ์—†์ด ์šด์˜ํ•  ๋•Œ์˜ ๋Œ€์ฒด ๋ชจ๋“œ
๊ณต๋™์ธ์ฆ์„œKPIS API ๋“ฑ๋ก ์‹œ ํ•„์š”ํ•œ ์ „์ž์„œ๋ช…์šฉ ์ธ์ฆ์„œ (DER ํฌ๋งท, AES-256 ์•”ํ˜ธํ™” ๋ณด๊ด€)

์ด์ค‘ ๋ฐฐํฌ ๊ตฌ์กฐ

๊ณ„์ธตํ”Œ๋žซํผ์—ญํ• 
ํ”„๋ก ํŠธ์—”๋“œVercelReact SPA ์ •์  ํ˜ธ์ŠคํŒ…
API ์„œ๋ฒ„Oracle Cloud PM2Express API, KPIS ํ”„๋ก์‹œ, ์ธ์ฆ์„œ ๊ด€๋ฆฌ

์ฃผ์˜: KPIS API๋Š” IP ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ์ ‘๊ทผ์„ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. API ์„œ๋ฒ„๊ฐ€ Oracle Cloud์— ๊ณ ์ • IP๋กœ ๋ฐฐํฌ๋˜์–ด์•ผ KPIS ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Vercel์—์„œ ์ง์ ‘ KPIS API๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ธฐํƒ€ ์™ธ๋ถ€ ์—ฐ๋™

์„œ๋น„์Šค์šฉ๋„
๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ API๊ณตํœด์ผ ๋ฐ์ดํ„ฐ ์ž๋™ ์ˆ˜์ง‘ (์˜์—…์ผ ๊ณ„์‚ฐ์— ํ™œ์šฉ)
SupabasePostgreSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์‚ฌ์šฉ์ž ์ธ์ฆ, ์Šคํ† ๋ฆฌ์ง€

๋ฐ์ดํ„ฐ ํ๋ฆ„

์‹œ์Šคํ…œ์˜ ์ „์ฒด ๋ฐ์ดํ„ฐ ํ๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Excel(๊ฐ‘์ง€+์„์ง€) โ†’ [์—…๋กœ๋“œ/ํŒŒ์‹ฑ] โ†’ ๋ฉ”๋ชจ๋ฆฌ + Supabase DB ์ €์žฅ โ†“ [์ž๋™์ฒ˜๋ฆฌ] ์ฝ”๋“œ๋งคํ•‘ โ†’ ๋งˆ์Šคํ„ฐ๋งค์นญ โ†’ ๋‹จ๊ฐ€์ˆ˜์ • โ†’ ๊ทœ๊ฒฉ๋ณด์ • โ†’ ๊ทœ์น™์—”์ง„ โ†“ [๊ฒ€์ฆ] ํ•„์ˆ˜๊ฐ’ โ†’ ํ˜•์‹ โ†’ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™ โ†“ [์ˆ˜๋™์ˆ˜์ •] ์‚ฌ์šฉ์ž๊ฐ€ ์˜ค๋ฅ˜/๊ฒฝ๊ณ  ํ–‰์„ ์ง์ ‘ ํŽธ์ง‘ โ†“ โ”œโ†’ [๋‚ด๋ณด๋‚ด๊ธฐ/์ˆ˜๋™๋ณด๊ณ ] ์—‘์…€ ๋‹ค์šด๋กœ๋“œ โ†’ KPIS ํฌํ„ธ ์ง์ ‘ ์—…๋กœ๋“œ โ””โ†’ [API ์ œ์ถœ/์ž๋™๋ณด๊ณ ] MA111 ๋“ฑ๋ก โ†’ MA112 ๊ฒฐ๊ณผํ™•์ธ โ†’ ๋ฐ˜์†ก ์‹œ MA113 ์žฌ์‹ ์ฒญ
  • ์—…๋กœ๋“œ๋œ ์—‘์…€์€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํŒŒ์‹ฑ๋œ ํ›„ Supabase DB์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž์˜ ํŽธ์ง‘์€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ฆ‰์‹œ ๋ฐ˜์˜๋˜๊ณ , flushCurrentDate() ํ˜ธ์ถœ ์‹œ DB์— ๋™๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.
  • ๋‚ด๋ณด๋‚ด๊ธฐ๋Š” ์ˆœ์ˆ˜ ์ฝ๊ธฐ ์ž‘์—…์œผ๋กœ DB์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • API ์ œ์ถœ ์‹œ ์ ‘์ˆ˜๋ฒˆํ˜ธ๊ฐ€ ๋ฐœ๊ธ‰๋˜์–ด ๊ฐ ํ–‰์— ์ฆ‰์‹œ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค.

๋งค๋‰ด์–ผ

Last updated on