WIA-ART-002 표준의 진정한 가치는 실제 구현에 있습니다. 표준을 정의하는 것만으로는 충분하지 않으며, 개발자들이 쉽게 통합할 수 있는 RESTful API, 직관적인 SDK, 그리고 실시간 통신을 위한 WebSocket 인터페이스가 필요합니다. 이 장에서는 WIA-ART-002의 실무 구현을 상세히 다룹니다.
현대 AI 이미지 생성 서비스는 단순한 동기식 요청-응답을 넘어섭니다. 고품질 이미지 생성은 수십 초에서 수 분이 걸릴 수 있으며, 배치 처리, 큐 관리, 실시간 진행 상황 스트리밍이 필요합니다. 또한 API 속도 제한(Rate Limiting), 사용량 할당(Quota), 비용 추적, 그리고 OAuth 2.0 기반 인증 시스템을 갖춰야 합니다.
WIA-ART-002 API는 REST 아키텍처 원칙을 따르며, 명확한 리소스 기반 URL 구조를 사용합니다:
| 엔드포인트 | 메서드 | 기능 | 인증 필요 |
|---|---|---|---|
/api/v1/generate |
POST | 새 이미지 생성 요청 | 필수 |
/api/v1/jobs/{jobId} |
GET | 생성 작업 상태 조회 | 필수 |
/api/v1/jobs/{jobId}/cancel |
POST | 작업 취소 | 필수 |
/api/v1/artworks |
GET | 작품 목록 조회 | 필수 |
/api/v1/artworks/{id} |
GET | 특정 작품 상세 정보 | 선택 |
/api/v1/artworks/{id}/metadata |
GET | WIA-ART-002 메타데이터 | 선택 |
/api/v1/artworks/{id}/verify |
POST | 작품 진위 검증 | 선택 |
/api/v1/models |
GET | 사용 가능 모델 목록 | 선택 |
/api/v1/quota |
GET | 사용량 할당 확인 | 필수 |
핵심 엔드포인트인 /api/v1/generate는 비동기 작업을 시작하고 즉시 Job ID를 반환합니다:
// POST /api/v1/generate
// Content-Type: application/json
// Authorization: Bearer {ACCESS_TOKEN}
{
"prompt": "A serene Japanese garden in autumn, maple leaves falling,
koi pond with stone bridge, Mount Fuji in background,
golden hour lighting, cinematic composition, 8k resolution",
"negativePrompt": "low quality, blurry, distorted, modern buildings",
"model": "stable-diffusion-xl-1.0",
"parameters": {
"width": 1024,
"height": 1024,
"steps": 50,
"cfgScale": 7.5,
"sampler": "DPM++ 2M Karras",
"seed": 42, // 생략 시 랜덤 시드
"batchSize": 4 // 한 번에 4개 변형 생성
},
"metadata": {
"title": "Autumn in Kyoto Garden",
"description": "A peaceful autumn scene...",
"tags": ["nature", "japan", "autumn", "garden"],
"license": "CC-BY-SA-4.0"
},
"options": {
"webhook": "https://myapp.com/webhooks/generation-complete",
"priority": "normal", // "low", "normal", "high"
"saveToGallery": true
}
}
// 응답 (202 Accepted)
{
"jobId": "job_2024_abc123xyz",
"status": "queued",
"queuePosition": 3,
"estimatedTime": 45, // 초 단위
"credits": {
"cost": 10,
"remaining": 490
},
"statusUrl": "/api/v1/jobs/job_2024_abc123xyz",
"websocketUrl": "wss://api.wia-art.org/jobs/job_2024_abc123xyz/stream"
}
클라이언트는 Job ID로 작업 진행 상황을 폴링하거나 WebSocket으로 실시간 업데이트를 받을 수 있습니다:
// GET /api/v1/jobs/{jobId}
// Authorization: Bearer {ACCESS_TOKEN}
// 응답 - 진행 중
{
"jobId": "job_2024_abc123xyz",
"status": "processing", // queued, processing, completed, failed, cancelled
"progress": 0.68, // 0.0 ~ 1.0
"currentStep": 34,
"totalSteps": 50,
"message": "Generating image 2 of 4...",
"createdAt": "2024-01-15T10:30:00Z",
"startedAt": "2024-01-15T10:30:45Z",
"estimatedCompletion": "2024-01-15T10:31:30Z"
}
// 응답 - 완료
{
"jobId": "job_2024_abc123xyz",
"status": "completed",
"progress": 1.0,
"results": [
{
"artworkId": "art_001",
"imageUrl": "https://cdn.wia-art.org/images/art_001.png",
"thumbnailUrl": "https://cdn.wia-art.org/thumbs/art_001.jpg",
"metadata": {
"standard": "WIA-ART-002",
"version": "1.0",
// 전체 WIA-ART-002 메타데이터
},
"generation": {
"seed": 42,
"actualSteps": 50,
"generationTime": 38.5 // 초
}
},
// ... 3개의 추가 변형
],
"createdAt": "2024-01-15T10:30:00Z",
"completedAt": "2024-01-15T10:31:32Z",
"totalTime": 92.3
}
WIA-ART-002 TypeScript SDK는 Promise 기반의 현대적인 API를 제공하며, 자동 재시도, 에러 처리, 타입 안정성을 갖춥니다:
// wia-art-002-sdk/src/client.ts
import axios, { AxiosInstance } from 'axios';
import { EventEmitter } from 'events';
import WebSocket from 'ws';
export interface WIAArtConfig {
apiKey: string;
baseUrl?: string;
timeout?: number;
retries?: number;
}
export interface GenerationRequest {
prompt: string;
negativePrompt?: string;
model?: string;
parameters?: GenerationParameters;
metadata?: ArtworkMetadata;
options?: GenerationOptions;
}
export interface GenerationParameters {
width?: number;
height?: number;
steps?: number;
cfgScale?: number;
sampler?: string;
seed?: number;
batchSize?: number;
}
export class WIAArtClient extends EventEmitter {
private axios: AxiosInstance;
private config: WIAArtConfig;
constructor(config: WIAArtConfig) {
super();
this.config = {
baseUrl: 'https://api.wia-art.org',
timeout: 60000,
retries: 3,
...config
};
this.axios = axios.create({
baseURL: this.config.baseUrl,
timeout: this.config.timeout,
headers: {
'Authorization': `Bearer ${this.config.apiKey}`,
'Content-Type': 'application/json',
'User-Agent': 'WIA-ART-002-SDK/1.0'
}
});
this.setupInterceptors();
}
// 이미지 생성 시작
async generate(request: GenerationRequest): Promise {
try {
const response = await this.axios.post('/api/v1/generate', request);
return new GenerationJob(this, response.data);
} catch (error) {
throw this.handleError(error);
}
}
// 작업 상태 조회
async getJob(jobId: string): Promise {
const response = await this.axios.get(`/api/v1/jobs/${jobId}`);
return response.data;
}
// 작품 조회
async getArtwork(artworkId: string): Promise {
const response = await this.axios.get(`/api/v1/artworks/${artworkId}`);
return response.data;
}
// 메타데이터 조회
async getMetadata(artworkId: string): Promise {
const response = await this.axios.get(
`/api/v1/artworks/${artworkId}/metadata`
);
return response.data;
}
// 작품 검증
async verifyArtwork(artworkId: string): Promise {
const response = await this.axios.post(
`/api/v1/artworks/${artworkId}/verify`
);
return response.data;
}
// 사용량 할당 확인
async getQuota(): Promise {
const response = await this.axios.get('/api/v1/quota');
return response.data;
}
// 에러 처리
private handleError(error: any): Error {
if (error.response) {
const { status, data } = error.response;
switch (status) {
case 401:
return new Error('Invalid API key or expired token');
case 402:
return new Error('Insufficient credits');
case 429:
return new Error(`Rate limit exceeded: ${data.message}`);
case 500:
return new Error('Server error, please try again later');
default:
return new Error(data.message || 'Unknown error');
}
}
return error;
}
// 자동 재시도 설정
private setupInterceptors() {
this.axios.interceptors.response.use(
response => response,
async error => {
const config = error.config;
if (!config || !config.retry) {
config.retry = 0;
}
if (config.retry >= this.config.retries!) {
return Promise.reject(error);
}
config.retry += 1;
// 지수 백오프
const delay = Math.pow(2, config.retry) * 1000;
await new Promise(resolve => setTimeout(resolve, delay));
return this.axios(config);
}
);
}
}
GenerationJob 클래스는 진행 상황 추적, WebSocket 스트리밍, 완료 대기 등을 캡슐화합니다:
// wia-art-002-sdk/src/job.ts
export class GenerationJob extends EventEmitter {
private client: WIAArtClient;
private jobData: any;
private ws?: WebSocket;
private pollInterval?: NodeJS.Timeout;
constructor(client: WIAArtClient, jobData: any) {
super();
this.client = client;
this.jobData = jobData;
}
get id(): string {
return this.jobData.jobId;
}
get status(): string {
return this.jobData.status;
}
// WebSocket으로 실시간 진행 상황 스트리밍
stream(): this {
if (this.ws) return this;
this.ws = new WebSocket(this.jobData.websocketUrl, {
headers: { 'Authorization': `Bearer ${this.client.config.apiKey}` }
});
this.ws.on('message', (data: string) => {
const update = JSON.parse(data);
this.emit('progress', update);
if (update.status === 'completed') {
this.emit('completed', update.results);
this.cleanup();
} else if (update.status === 'failed') {
this.emit('failed', new Error(update.error));
this.cleanup();
}
});
this.ws.on('error', (error) => {
this.emit('error', error);
this.cleanup();
});
return this;
}
// 폴링으로 진행 상황 확인
poll(intervalMs: number = 2000): this {
this.pollInterval = setInterval(async () => {
try {
const status = await this.client.getJob(this.id);
this.emit('progress', status);
if (status.status === 'completed') {
this.emit('completed', status.results);
this.cleanup();
} else if (status.status === 'failed') {
this.emit('failed', new Error(status.error));
this.cleanup();
}
} catch (error) {
this.emit('error', error);
}
}, intervalMs);
return this;
}
// 완료까지 대기 (Promise)
async wait(): Promise {
return new Promise((resolve, reject) => {
this.stream()
.on('completed', resolve)
.on('failed', reject)
.on('error', reject);
});
}
// 작업 취소
async cancel(): Promise {
await this.client.axios.post(`/api/v1/jobs/${this.id}/cancel`);
this.cleanup();
}
private cleanup() {
if (this.ws) {
this.ws.close();
this.ws = undefined;
}
if (this.pollInterval) {
clearInterval(this.pollInterval);
this.pollInterval = undefined;
}
}
}
// 클라이언트 애플리케이션에서 사용
import { WIAArtClient } from 'wia-art-002-sdk';
const client = new WIAArtClient({
apiKey: process.env.WIA_ART_API_KEY!
});
// 예시 1: Promise 기반 사용 (async/await)
async function generateImage() {
try {
const job = await client.generate({
prompt: 'A majestic dragon flying over mountains at sunset',
parameters: {
width: 1024,
height: 1024,
steps: 50,
cfgScale: 7.5
}
});
console.log(`Job created: ${job.id}`);
// 완료까지 대기
const results = await job.wait();
console.log(`Generated ${results.length} images:`);
results.forEach(result => {
console.log(`- ${result.imageUrl}`);
});
} catch (error) {
console.error('Generation failed:', error);
}
}
// 예시 2: 이벤트 기반 사용 (진행 상황 추적)
function generateWithProgress() {
client.generate({
prompt: 'Cyberpunk city at night, neon lights, rain',
parameters: { batchSize: 4 }
}).then(job => {
job.stream()
.on('progress', (status) => {
console.log(`Progress: ${(status.progress * 100).toFixed(1)}%`);
console.log(`Message: ${status.message}`);
})
.on('completed', (results) => {
console.log('Generation completed!');
results.forEach((result, i) => {
console.log(`Image ${i + 1}: ${result.imageUrl}`);
});
})
.on('failed', (error) => {
console.error('Generation failed:', error);
});
});
}
// 예시 3: 메타데이터 조회 및 검증
async function verifyArtwork(artworkId: string) {
// 메타데이터 가져오기
const metadata = await client.getMetadata(artworkId);
console.log('Artwork metadata:', JSON.stringify(metadata, null, 2));
// 블록체인 검증
const verification = await client.verifyArtwork(artworkId);
if (verification.verified) {
console.log('✓ Artwork verified on blockchain');
console.log(`Transaction: ${verification.transactionHash}`);
} else {
console.log('✗ Verification failed');
}
}
// 예시 4: 사용량 확인
async function checkQuota() {
const quota = await client.getQuota();
console.log(`Credits remaining: ${quota.remaining}/${quota.total}`);
console.log(`Resets at: ${quota.resetAt}`);
}
WIA-ART-002 WebSocket 인터페이스는 생성 과정의 실시간 업데이트를 제공합니다. 특히 고해상도 이미지나 여러 변형을 생성할 때 유용합니다:
// 클라이언트 → 서버: 구독
{
"type": "subscribe",
"jobId": "job_2024_abc123xyz"
}
// 서버 → 클라이언트: 진행 상황 업데이트
{
"type": "progress",
"jobId": "job_2024_abc123xyz",
"status": "processing",
"progress": 0.45,
"currentStep": 23,
"totalSteps": 50,
"message": "Denoising latent image...",
"timestamp": "2024-01-15T10:31:15Z"
}
// 서버 → 클라이언트: 중간 미리보기 (선택적)
{
"type": "preview",
"jobId": "job_2024_abc123xyz",
"step": 25,
"imageData": "data:image/jpeg;base64,/9j/4AAQ..." // Base64 인코딩
}
// 서버 → 클라이언트: 완료
{
"type": "completed",
"jobId": "job_2024_abc123xyz",
"results": [/* 생성된 이미지들 */]
}
// 서버 → 클라이언트: 에러
{
"type": "error",
"jobId": "job_2024_abc123xyz",
"error": {
"code": "NSFW_DETECTED",
"message": "Generated content violated safety guidelines"
}
}
대량의 이미지를 생성할 때는 배치 API를 사용하여 효율성을 높일 수 있습니다:
// POST /api/v1/batch/generate
{
"requests": [
{
"id": "req_001",
"prompt": "Sunset over mountains",
"parameters": { "seed": 42 }
},
{
"id": "req_002",
"prompt": "Ocean waves at night",
"parameters": { "seed": 43 }
},
// ... 최대 100개
],
"options": {
"priority": "low",
"webhook": "https://myapp.com/batch-webhook"
}
}
// 응답
{
"batchId": "batch_2024_xyz789",
"totalJobs": 100,
"estimatedTime": 1800, // 30분
"statusUrl": "/api/v1/batch/batch_2024_xyz789"
}
WIA-ART-002는 OAuth 2.0 Authorization Code Flow를 지원하여 제3자 애플리케이션이 사용자를 대신하여 이미지를 생성할 수 있습니다:
| 단계 | 엔드포인트 | 설명 |
|---|---|---|
| 1. 인증 요청 | /oauth/authorize |
사용자를 로그인 페이지로 리디렉션 |
| 2. 콜백 | 클라이언트 redirect_uri | Authorization Code 수신 |
| 3. 토큰 교환 | /oauth/token |
Code를 Access Token으로 교환 |
| 4. 토큰 갱신 | /oauth/token |
Refresh Token으로 새 토큰 발급 |
API는 사용자당 요청 속도 제한을 적용하며, 응답 헤더로 현재 상태를 알려줍니다:
// 응답 헤더
X-RateLimit-Limit: 100 // 시간당 최대 요청 수
X-RateLimit-Remaining: 87 // 남은 요청 수
X-RateLimit-Reset: 1705320000 // 리셋 시간 (Unix timestamp)
// 제한 초과 시 (429 Too Many Requests)
{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit exceeded. Try again in 342 seconds.",
"retryAfter": 342
}
}
| HTTP 상태 | 에러 코드 | 설명 | 재시도 가능 |
|---|---|---|---|
| 400 | INVALID_REQUEST | 요청 형식 오류 | 불가 |
| 401 | UNAUTHORIZED | 인증 실패 | 불가 |
| 402 | INSUFFICIENT_CREDITS | 크레딧 부족 | 불가 |
| 422 | NSFW_DETECTED | 안전 가이드라인 위반 | 불가 |
| 429 | RATE_LIMIT_EXCEEDED | 요청 제한 초과 | 가능 |
| 500 | INTERNAL_ERROR | 서버 내부 오류 | 가능 |
| 503 | SERVICE_UNAVAILABLE | 서비스 일시 중단 | 가능 |
// 재시도 로직 구현
async function retryWithExponentialBackoff(
fn: () => Promise,
maxRetries: number = 3,
baseDelay: number = 1000
): Promise {
let lastError: Error;
for (let attempt = 0; attempt <= maxRetries; attempt++) {
try {
return await fn();
} catch (error: any) {
lastError = error;
// 재시도 불가능한 에러는 즉시 throw
const nonRetryable = [
'INVALID_REQUEST',
'UNAUTHORIZED',
'INSUFFICIENT_CREDITS',
'NSFW_DETECTED'
];
if (nonRetryable.includes(error.code)) {
throw error;
}
// 마지막 시도였다면 throw
if (attempt === maxRetries) {
throw error;
}
// 지수 백오프 대기
const delay = baseDelay * Math.pow(2, attempt);
const jitter = Math.random() * 1000; // 랜덤 지터 추가
await new Promise(resolve => setTimeout(resolve, delay + jitter));
console.log(`Retry attempt ${attempt + 1}/${maxRetries} after ${delay}ms`);
}
}
throw lastError!;
}
GenerationJob 클래스가 제공하는 세 가지 진행 상황 추적 방법(stream, poll, wait)을 비교하고, 각각이 적합한 사용 사례를 제시하십시오.한국 AI 인프라 — 과기정통부(MSIT)·정보통신산업진흥원(NIPA)·정보통신기획평가원(IITP)·KISA(한국인터넷진흥원)·KCMVP(국가용 암호모듈 검증)·NIS(국가정보원)·NIA(한국지능정보사회진흥원)·TTA(한국정보통신기술협회)·KATS(국가기술표준원)·KOLAS(한국인정기구)·ETRI(한국전자통신연구원)·KAIST·KIST·POSTECH·서울대·연세대·고려대·KISTI·삼성리서치·LG AI연구원·SK텔레콤·KT·NAVER·카카오 협력 「국가 AI 종합전략 2024-2030」 운영. 「인공지능 기본법」(법률 제20212호, 2026년 7월 시행)·「개인정보 보호법」(법률 제19234호, 2024년 9월 시행)·「정보통신망법」 적용. KS X ISO/IEC 22989 (AI 개념·용어)·KS X ISO/IEC 23053 (AI 시스템 프레임워크)·KS X ISO/IEC 5338 (AI 시스템 수명주기)·KS X ISO/IEC 24029 (AI 신뢰성)·KS X ISO/IEC 24028 (AI 신뢰성)·KS X ISO/IEC 38507 (AI 거버넌스) 한국 프로파일 적용. 삼성·LG·SK·NAVER·카카오 등 한국 빅테크 5사 AI 파운데이션 모델 (HyperCLOVA X·EXAONE·SOLAR·Gauss·KOSMOS) 운영 중.
한국의 산업·기술 표준화는 다음 협력 체계를 통해 운영된다. 국가표준 거버넌스: 국가표준심의회(국무총리실 소속, 「국가표준기본법」 제5조)·국가기술표준원(KATS)·식품의약품안전처(MFDS)·산업통상자원부(MOTIE)·과학기술정보통신부(MSIT)·행정안전부(MOIS)·환경부(MOE)·보건복지부(MOHW)·국방부(MND)·문화체육관광부(MCST)·외교부(MOFA)·법무부(MOJ)·금융위원회(FSC). 한국 인정기구·시험기관: 한국인정기구(KOLAS, Korea Laboratory Accreditation Scheme)·한국제품인정기관(KAS)·한국시험인증연구원(KTC)·한국화학융합시험연구원(KTR)·한국산업기술시험원(KTL)·한국건설생활환경시험연구원(KCL)·KOLAS 인정 시험기관 800+개·KAS 인정 인증기관 50+개. 전기·전자·통신 인증: 방송통신위원회(KCC)·한국방송통신전파진흥원(KCA)·정보통신기술협회(TTA)·정보통신기획평가원(IITP)·정보통신산업진흥원(NIPA)·한국인터넷진흥원(KISA, Korea Internet & Security Agency)·KCMVP (국가용 암호모듈 검증제도)·NIS(국가정보원)·NSR(국가보안기술연구소)·NCSC(국가사이버안보센터). 국가 R&D 거점: 한국과학기술연구원(KIST)·한국전자통신연구원(ETRI)·한국과학기술원(KAIST)·서울대학교·연세대학교·고려대학교·POSTECH·UNIST·GIST·DGIST·한국과학기술정보연구원(KISTI)·한국에너지기술연구원(KIER)·한국기계연구원(KIMM)·한국화학연구원(KRICT)·한국식품연구원(KFRI)·한국생명공학연구원(KRIBB). 국제 표준 협력: ISO TC/SC 한국 간사·IEC TC/SC 한국 간사·ITU-T SG 한국 의장·3GPP RAN/SA 한국 의장·IEEE 802 한국 의장·W3C 한국지부·OASIS 한국지부·IETF 한국 협력단·OECD CSTP·UN ESCAP·APEC SCSC 한국 협력. 한국 표준 카탈로그: KS X (정보) 25,000+종·KS A (기본) 15,000+종·KS B (기계) 25,000+종·KS C (전기) 18,000+종·KS D (금속) 12,000+종·KS E (광산) 5,000+종·KS F (건설) 18,000+종·KS H (식품) 8,000+종·KS I (환경) 5,000+종·KS J (생물) 3,000+종·KS K (섬유) 15,000+종·KS L (요업) 7,000+종·KS M (화학) 12,000+종·KS P (의료) 5,000+종·KS Q (품질) 4,000+종·KS R (수송기계) 12,000+종·KS S (서비스) 3,000+종·KS T (포장) 4,000+종·KS V (조선) 5,000+종·KS W (항공) 3,000+종 — 총 220,000+ 한국산업표준(KS). 「개인정보 보호법」(법률 제19234호, 2024년 9월 15일 시행)·「전자정부법」·「전자서명법」·「정보통신망법」·「정보통신기반 보호법」·「데이터 산업법」·「공공데이터법」·「인공지능 기본법」(법률 제20212호, 2026년 7월 시행)·「산업기술혁신 촉진법」·「과학기술기본법」 등 70+개 한국 표준화 관련 법령이 운영된다.
한국의 디지털 전환과 표준화는 다음 협력 체계로 운영된다. 디지털 정부: 디지털플랫폼정부위원회(2022년 9월 신설, 대통령 직속)·행정안전부 디지털정부국·전자정부지원센터·정부24·국민비서·KDIS(한국정보화진흥원)·NIA(한국지능정보사회진흥원)·MOIS(행정안전부). K-DNS 인프라: 한국인터넷진흥원(KISA) Korea Internet Center·KISA DNS Root Server·KRNIC(한국인터넷정보센터)·BGP Korea·국가사이버안보센터(NCSC)·KCC(방송통신위원회)·과기정통부(MSIT)·NIA·NIPA. 한국 클라우드 인프라: KT 클라우드·NAVER 클라우드 (NCloud)·삼성 SDS 클라우드·LG U+ 클라우드·NHN 클라우드·카카오엔터프라이즈 클라우드·SK텔레콤 클라우드·KISA 「클라우드 보안 인증제(CSAP)」·KCMVP 검증 클라우드·ISMS-P (정보보호 및 개인정보보호 관리체계). 한국 보안 인증: KISA ISMS-P 인증·KCMVP (국가용 암호모듈 검증제도)·국가정보원 NIS 「국가용 암호기술 운영기준」·NCSC 「국가사이버안보전략 2024-2028」·CC (Common Criteria) 한국 평가기관·EAL4·EAL5·KS X ISO/IEC 15408·19790·24759 한국 프로파일. 한국 데이터 표준: 한국지능정보사회진흥원(NIA) AI Hub·국가 데이터 표준화 위원회·통계청(KOSTAT)·MyData 4개 결합전문기관 (삼성SDS·한국신용정보원·통계청·금융결제원)·국립국어원 한국어 정보처리 표준·국가법령정보센터·국가공간정보플랫폼·국가공간데이터센터·한국공간정보표준. 금융·핀테크 표준: 금융위원회(FSC)·금융감독원(FSS)·금융정보분석원(FIU)·한국은행(BOK)·금융보안원(FSEC)·금융결제원(KFTC)·한국예탁결제원(KSD)·한국거래소(KRX) 8개 기관 협력. 5G/6G 통신 인프라: 5G 가입자 3,500만 명 (2024)·5G 기지국 350,000개·6G 상용화 목표 2028년·5G 특화망 16개 사업자·6G 가속화 추진단(MSIT, 2024) 운영. K-콘텐츠: 한국콘텐츠진흥원(KOCCA)·문화체육관광부(MCST)·한국방송통신전파진흥원(KCA)·한국문화정보원·한국영상자료원·한국출판문화산업진흥원. 「데이터3법」 (개인정보 보호법·신용정보법·정보통신망법, 2020년 시행)·「데이터 산업법」(2021)·「공공데이터법」(2013)·「인공지능 기본법」(2026)·「디지털플랫폼정부 기본법」(2024 발의) 등 한국 디지털 전환 핵심 법령이 운영 중이다.