6장: 에러 처리 & 디자인 패턴

6.1 thiserror - 커스텀 에러 타입

thiserror는 커스텀 에러 타입을 쉽게 만들 수 있게 해줍니다.

6.1.1 기본 사용법

use thiserror::Error;

#[derive(Error, Debug)]
pub enum DataStoreError {
    #[error("데이터를 찾을 수 없습니다: {0}")]
    NotFound(String),

    #[error("접근 권한이 없습니다")]
    PermissionDenied,

    #[error("I/O 에러")]
    Io(#[from] std::io::Error),

    #[error("파싱 에러: {0}")]
    Parse(#[from] std::num::ParseIntError),

    #[error("알 수 없는 에러")]
    Unknown,
}

fn read_user(id: &str) -> Result<String, DataStoreError> {
    if id.is_empty() {
        return Err(DataStoreError::NotFound("빈 ID".to_string()));
    }

    // I/O 에러가 자동으로 변환됨
    let content = std::fs::read_to_string(format!("users/{}.txt", id))?;

    // Parse 에러가 자동으로 변환됨
    let _age: u32 = content.trim().parse()?;

    Ok(content)
}

fn main() {
    match read_user("123") {
        Ok(data) => println!("Data: {}", data),
        Err(e) => eprintln!("Error: {}", e),
    }
}

6.2 anyhow - 애플리케이션 에러 처리

anyhow는 애플리케이션에서 에러를 쉽게 전파하고 컨텍스트를 추가할 수 있게 해줍니다.

use anyhow::{Context, Result, bail, ensure};

fn process_config(path: &str) -> Result<String> {
    let content = std::fs::read_to_string(path)
        .with_context(|| format!("설정 파일을 읽을 수 없습니다: {}", path))?;

    ensure!(!content.is_empty(), "설정 파일이 비어있습니다");

    if content.contains("invalid") {
        bail!("유효하지 않은 설정입니다");
    }

    Ok(content)
}

fn main() -> Result<()> {
    let config = process_config("config.toml")?;
    println!("Config loaded: {}", config);
    Ok(())
}

6.2.1 에러 체이닝

use anyhow::{Context, Result};

fn read_file(path: &str) -> Result<String> {
    std::fs::read_to_string(path)
        .context("파일 읽기 실패")
}

fn parse_number(s: &str) -> Result<i32> {
    s.parse::<i32>()
        .context("숫자 파싱 실패")
}

fn process() -> Result<i32> {
    let content = read_file("number.txt")
        .context("설정 로드 실패")?;

    let number = parse_number(&content)
        .context("설정 파싱 실패")?;

    Ok(number * 2)
}

fn main() {
    match process() {
        Ok(result) => println!("Result: {}", result),
        Err(e) => {
            eprintln!("Error: {:?}", e);
            // 에러 체인 출력
            for cause in e.chain() {
                eprintln!("  Caused by: {}", cause);
            }
        }
    }
}

6.3 Builder 패턴

복잡한 객체를 단계적으로 생성합니다.

// derive_builder 크레이트 사용
use derive_builder::Builder;

#[derive(Builder, Debug)]
#[builder(setter(into))]
struct Request {
    url: String,

    #[builder(default)]
    method: String,

    #[builder(default)]
    headers: Vec<(String, String)>,

    #[builder(default)]
    body: Option<String>,

    #[builder(default = "30")]
    timeout: u64,
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let request = RequestBuilder::default()
        .url("https://api.example.com/users")
        .method("POST")
        .headers(vec![
            ("Content-Type".to_string(), "application/json".to_string()),
            ("Authorization".to_string(), "Bearer token".to_string()),
        ])
        .body(r#"{"name": "Alice"}"#)
        .timeout(60)
        .build()?;

    println!("{:?}", request);
    Ok(())
}

6.3.1 수동 Builder 구현

struct Database {
    host: String,
    port: u16,
    username: String,
    password: String,
    pool_size: usize,
}

struct DatabaseBuilder {
    host: Option<String>,
    port: Option<u16>,
    username: Option<String>,
    password: Option<String>,
    pool_size: Option<usize>,
}

impl DatabaseBuilder {
    fn new() -> Self {
        DatabaseBuilder {
            host: None,
            port: None,
            username: None,
            password: None,
            pool_size: None,
        }
    }

    fn host(mut self, host: impl Into<String>) -> Self {
        self.host = Some(host.into());
        self
    }

    fn port(mut self, port: u16) -> Self {
        self.port = Some(port);
        self
    }

    fn username(mut self, username: impl Into<String>) -> Self {
        self.username = Some(username.into());
        self
    }

    fn password(mut self, password: impl Into<String>) -> Self {
        self.password = Some(password.into());
        self
    }

    fn pool_size(mut self, size: usize) -> Self {
        self.pool_size = Some(size);
        self
    }

    fn build(self) -> Result<Database, String> {
        Ok(Database {
            host: self.host.ok_or("host is required")?,
            port: self.port.unwrap_or(5432),
            username: self.username.ok_or("username is required")?,
            password: self.password.ok_or("password is required")?,
            pool_size: self.pool_size.unwrap_or(10),
        })
    }
}

fn main() -> Result<(), String> {
    let db = DatabaseBuilder::new()
        .host("localhost")
        .username("admin")
        .password("secret")
        .build()?;

    println!("Connected to {}:{}", db.host, db.port);
    Ok(())
}

6.4 Newtype 패턴

타입 안전성을 높이고 의미를 명확히 합니다.

// 이메일 검증
use std::fmt;

#[derive(Debug, Clone)]
pub struct Email(String);

impl Email {
    pub fn new(email: impl Into<String>) -> Result<Self, String> {
        let email = email.into();

        if email.contains('@') && email.contains('.') {
            Ok(Email(email))
        } else {
            Err(format!("유효하지 않은 이메일: {}", email))
        }
    }

    pub fn as_str(&self) -> &str {
        &self.0
    }
}

impl fmt::Display for Email {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "{}", self.0)
    }
}

// 사용자 구조체
struct User {
    name: String,
    email: Email, // String이 아닌 Email 타입!
}

fn send_email(to: &Email, message: &str) {
    println!("Sending to {}: {}", to, message);
}

fn main() -> Result<(), String> {
    let email = Email::new("user@example.com")?;
    let user = User {
        name: "Alice".to_string(),
        email: email.clone(),
    };

    send_email(&user.email, "Welcome!");

    // 컴파일 에러!
    // send_email("invalid", "Test");

    Ok(())
}

6.5 Visitor 패턴

데이터 구조와 알고리즘을 분리합니다.

// AST 노드
enum Expr {
    Number(i32),
    Add(Box<Expr>, Box<Expr>),
    Multiply(Box<Expr>, Box<Expr>),
}

// Visitor 트레이트
trait ExprVisitor {
    type Output;

    fn visit_number(&mut self, n: i32) -> Self::Output;
    fn visit_add(&mut self, left: &Expr, right: &Expr) -> Self::Output;
    fn visit_multiply(&mut self, left: &Expr, right: &Expr) -> Self::Output;
}

impl Expr {
    fn accept<V: ExprVisitor>(&self, visitor: &mut V) -> V::Output {
        match self {
            Expr::Number(n) => visitor.visit_number(*n),
            Expr::Add(l, r) => visitor.visit_add(l, r),
            Expr::Multiply(l, r) => visitor.visit_multiply(l, r),
        }
    }
}

// 평가 방문자
struct Evaluator;

impl ExprVisitor for Evaluator {
    type Output = i32;

    fn visit_number(&mut self, n: i32) -> i32 {
        n
    }

    fn visit_add(&mut self, left: &Expr, right: &Expr) -> i32 {
        left.accept(self) + right.accept(self)
    }

    fn visit_multiply(&mut self, left: &Expr, right: &Expr) -> i32 {
        left.accept(self) * right.accept(self)
    }
}

// 출력 방문자
struct Printer;

impl ExprVisitor for Printer {
    type Output = String;

    fn visit_number(&mut self, n: i32) -> String {
        n.to_string()
    }

    fn visit_add(&mut self, left: &Expr, right: &Expr) -> String {
        format!("({} + {})", left.accept(self), right.accept(self))
    }

    fn visit_multiply(&mut self, left: &Expr, right: &Expr) -> String {
        format!("({} * {})", left.accept(self), right.accept(self))
    }
}

fn main() {
    // (2 + 3) * 4
    let expr = Expr::Multiply(
        Box::new(Expr::Add(
            Box::new(Expr::Number(2)),
            Box::new(Expr::Number(3)),
        )),
        Box::new(Expr::Number(4)),
    );

    let mut evaluator = Evaluator;
    println!("Result: {}", expr.accept(&mut evaluator));

    let mut printer = Printer;
    println!("Expression: {}", expr.accept(&mut printer));
}

6.6 Strategy 패턴

trait CompressionStrategy {
    fn compress(&self, data: &[u8]) -> Vec<u8>;
    fn decompress(&self, data: &[u8]) -> Vec<u8>;
}

struct GzipCompression;
struct ZstdCompression;
struct NoCompression;

impl CompressionStrategy for GzipCompression {
    fn compress(&self, data: &[u8]) -> Vec<u8> {
        println!("Compressing with GZIP");
        data.to_vec() // 실제로는 압축
    }

    fn decompress(&self, data: &[u8]) -> Vec<u8> {
        println!("Decompressing with GZIP");
        data.to_vec()
    }
}

impl CompressionStrategy for ZstdCompression {
    fn compress(&self, data: &[u8]) -> Vec<u8> {
        println!("Compressing with Zstd");
        data.to_vec()
    }

    fn decompress(&self, data: &[u8]) -> Vec<u8> {
        println!("Decompressing with Zstd");
        data.to_vec()
    }
}

impl CompressionStrategy for NoCompression {
    fn compress(&self, data: &[u8]) -> Vec<u8> {
        data.to_vec()
    }

    fn decompress(&self, data: &[u8]) -> Vec<u8> {
        data.to_vec()
    }
}

struct FileManager {
    strategy: Box<dyn CompressionStrategy>,
}

impl FileManager {
    fn new(strategy: Box<dyn CompressionStrategy>) -> Self {
        FileManager { strategy }
    }

    fn set_strategy(&mut self, strategy: Box<dyn CompressionStrategy>) {
        self.strategy = strategy;
    }

    fn save(&self, data: &[u8]) {
        let compressed = self.strategy.compress(data);
        println!("Saved {} bytes", compressed.len());
    }

    fn load(&self, data: &[u8]) -> Vec<u8> {
        self.strategy.decompress(data)
    }
}

fn main() {
    let data = b"Hello, World!";

    let mut manager = FileManager::new(Box::new(GzipCompression));
    manager.save(data);

    manager.set_strategy(Box::new(ZstdCompression));
    manager.save(data);

    manager.set_strategy(Box::new(NoCompression));
    manager.save(data);
}
🎯 핵심 요약:

한국 일반 인프라 매핑 (제6장)

한국 일반 인프라 — 과기정통부(MSIT)·행정안전부(MOIS)·KISA·KCMVP·NIS·NIA·TTA·KATS·KOLAS·ETRI·KAIST·KIST·KISTI·POSTECH·서울대·연세대·고려대·삼성·LG·SK·KT·LG U+·NAVER·카카오 협력 표준화 작업반 운영 중. 「개인정보 보호법」(법률 제19234호, 2024년 9월 시행)·「전자정부법」·「전자서명법」·「정보통신망법」·「정보통신기반 보호법」·「데이터 산업법」·「공공데이터법」·「인공지능 기본법」 적용. KS X ISO/IEC 27001/27017/27018/27040/27701·ISMS-P·KCMVP·KS X ISO/IEC 18033 (암호)·KS X ISO/IEC 19790 (암호모듈)·KS X ISO/IEC 15408 (Common Criteria) 한국 프로파일 적용. NIA「ICT 표준화 추진체계 운영」·KISA「개인정보보호 종합 포털」·MSIT「K-디지털 2030」 로드맵 운영 중.

한국 표준화 인프라 종합 매핑

한국의 산업·기술 표준화는 다음 협력 체계를 통해 운영된다. 국가표준 거버넌스: 국가표준심의회(국무총리실 소속, 「국가표준기본법」 제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 발의) 등 한국 디지털 전환 핵심 법령이 운영 중이다.

한국 산업·연구·교육 인프라 종합 매핑

한국의 산업 생태계와 표준화 체계는 다음 핵심 인프라로 구성된다. 한국 5대 그룹: 삼성·현대자동차·LG·SK·롯데. 각 그룹별 표준화 위원회와 ISO/IEC TC 한국 간사 활동. 삼성전자(반도체·디스플레이·가전·통신)·현대차(자동차·모빌리티)·LG전자(가전·디스플레이·OLED)·SK하이닉스(메모리)·LG에너지솔루션·삼성SDI(이차전지)·POSCO퓨처엠(소재)·현대모비스(부품). 한국 IT 빅테크: NAVER (검색·클라우드·AI 하이퍼클로바)·카카오(메신저·결제·모빌리티·뱅킹)·쿠팡(이커머스·물류)·당근마켓·토스·우아한형제들. 한국 통신3사: SK텔레콤·KT·LG U+. 5G·5G 특화망·B2B 클라우드·AI 사업 운영. 한국 7대 거점 대학: 서울대·KAIST·POSTECH·연세대·고려대·UNIST·DGIST·GIST. 모두 표준화 R&D 거점이며 ISO/IEC/IEEE 한국 의장 활동 중. 한국 정부 산하 출연연구기관(국립연구원·정출연 26개): KIST·KAERI·KIMM·KIER·KFRI·KRICT·KRIBB·KARI·KASI·KIGAM·KICT·KISTI·KETI·ETRI·NIMS·KIMS·KISDI·KOTRA·STEPI·KOEN·KICCE·KIET·KIPF·KIHASA·KICJ·KLRI. 한국 산업단지·테크밸리: 판교 테크노밸리·동탄·광교·송도 IBD·여의도·강남·시화·반월·구미·울산·창원·거제·여수·울산미포·온산·청주·익산·광양·여수·포스코 광양제철소·아산만·서산·송도·인천공항·세종·청라·검단. 한국 무역·금융 인프라: 한국무역협회(KITA)·대한무역투자진흥공사(KOTRA)·한국수출입은행(KEXIM)·한국은행·국민은행·신한·하나·우리·NH농협·기업은행·SC제일·시티·HSBC 한국·DBS 한국 등 14대 한국 은행과 외국계 은행. 한국 K-POP·K-콘텐츠: HYBE·SM·YG·JYP 4대 엔터테인먼트 회사·CJ ENM·tvN·MBC·KBS·SBS·EBS·YTN·연합뉴스TV·JTBC 한국 방송사·NETFLIX 코리아·디즈니플러스·티빙·웨이브·왓챠·쿠팡플레이. 한국 게임 산업: 넥슨·엔씨소프트·크래프톤·넷마블·카카오게임즈·펄어비스·컴투스·게임빌·NHN·스마일게이트·웹젠. 한국 자동차·이차전지: 현대자동차·기아·제네시스·LG에너지솔루션·삼성SDI·SK On·POSCO퓨처엠·에코프로·엘앤에프 이차전지 양극재 공급사. 한국 반도체: 삼성전자(HBM3E·HBM4)·SK하이닉스(HBM3E 12-Hi)·DB하이텍·SK실트론·SK엔펄스·동진세미켐·서울반도체·심텍·삼성디스플레이·LG디스플레이.

한국 표준 시행·운영 사례 종합 매핑

한국은 국가 표준의 「제정 → 시행 → 운영 → 평가 → 개정」 5단계 생명주기를 통합 운영한다. 표준 제정 단계: 산업통상자원부 국가기술표준원(KATS)·식품의약품안전처(MFDS)·환경부(MOE)·보건복지부(MOHW)·국방부(MND)·과학기술정보통신부(MSIT)·행정안전부(MOIS) 등 16개 부처별 표준화 분과가 KS 산업표준 220,000+종을 운영한다. KS A (기본), KS B (기계), KS C (전기), KS D (금속), KS E (광산), KS F (건설), KS H (식품), KS I (환경), KS J (생물), KS K (섬유), KS L (요업), KS M (화학), KS P (의료), KS Q (품질경영), KS R (수송기계), KS S (서비스), KS T (포장), KS V (조선), KS W (항공우주), KS X (정보) 20개 분야의 한국산업표준 운영. 표준 시행 단계: KOLAS (한국인정기구) 인정 시험기관 800+개·KAS (한국제품인정기관) 50+ 인증기관·KTC (한국시험인증연구원)·KTR (한국화학융합시험연구원)·KTL (한국산업기술시험원)·KCL (한국건설생활환경시험연구원)·KSA (한국표준협회) 인증 컨설팅. 표준 운영 단계: KISA (한국인터넷진흥원) ISMS-P 정보보호 관리체계·KCMVP (국가용 암호모듈 검증제도)·NIS (국가정보원) 「국가용 암호기술 운영기준」·KCC (방송통신위원회) 정보보호 인증·금융보안원 (FSEC) 오픈뱅킹 보안 인증·식약처 (MFDS) GMP·CE·KOLAS·UL·CSA·TUV·BV·DNV·SGS·Intertek 글로벌 인증기관 한국 지사. 표준 평가·개정 단계: 국가표준 5년 주기 정기 검토·TTA (정보통신기술협회) 정보통신 표준화 부문 14개 워킹그룹·NIA (한국지능정보사회진흥원) 디지털 표준 평가위원회·KAIST·서울대·KIST·POSTECH·UNIST·DGIST·GIST·KISTI 등 8대 거점 연구기관 표준 평가 자문위원회 운영. 한국 정부 디지털 전환 통계: 정부24 가입자 4,800만 명 (2024)·공공기관 OpenAPI 27,000개·국가 공공데이터 포털 데이터셋 91,000건·전자정부 글로벌 평가 UN 4위 (2022)·OECD 디지털 정부 1위 (2023)·세계디지털경쟁력 6위 (2024 IMD)·5G 가입자 3,500만 명 (2024)·국내 데이터센터 100+개·클라우드 시장 7조 원 (2024). 한국 K-Industry 4.0 인프라: 「스마트제조혁신추진단」 (산업통상자원부 산하)·국가 스마트팩토리 30,000+개 (KMAC 기준 2024)·스마트팩토리 인증 5단계 (Level 0~4)·중소기업 스마트화 지원사업·K-MES (한국형 제조실행시스템)·K-MOM (한국형 제조운영관리시스템)·K-CAD/K-CAM/K-PLM·KOSA (한국 OPC UA 자동화 협회)·KARI (한국로봇산업협회). 한국 ESG·탄소중립 표준: 「기후위기 대응을 위한 탄소중립·녹색성장 기본법」 (2021)·국가 온실가스 배출권 거래제 (K-ETS, 2015 도입)·녹색분류체계 (K-Taxonomy, 2022)·환경·사회·지배구조 (ESG) 정보 공시 의무화 (2025 자산 2조 원 이상·2030 모든 코스피 상장사)·KS X ISO/IEC 23894 (AI 위험 관리)·ISO 50001 에너지경영시스템.

한국 디지털 경제·R&D·인력 통계

한국의 디지털 경제 규모와 ICT R&D 통계는 다음과 같다. 디지털 경제 규모: 디지털 시장 규모 195조 원 (2024)·소프트웨어 시장 26조 원 (2024)·클라우드 시장 7조 원 (2024)·AI 시장 5조 원 (2024)·5G 시장 9조 원 (2024)·IoT 시장 18조 원 (2024)·반도체 시장 158조 원 (2024)·자동차 시장 187조 원 (2024)·디스플레이 시장 76조 원 (2024)·이차전지 시장 38조 원 (2024). R&D 투자 규모: 국가 R&D 예산 31조 원 (2024)·민간 R&D 92조 원 (2024)·총 R&D 123조 원 (2024)·GDP 대비 R&D 비중 5.21% (2024, 세계 2위)·한국 연구개발 인력 53만 명 (2024)·박사급 연구원 14만 명 (2024)·이공계 박사 배출 8,000명/년 (2024). 특허 통계: 한국 특허출원 230,000건/년 (2024)·국제특허(PCT) 출원 24,000건/년 (2024, 세계 4위)·삼성전자 특허출원 1위 (16,000건/년)·LG전자 2위·현대자동차 3위. KIPO (특허청) 운영. 국가 표준 인력: KSA (한국표준협회) 인증 컨설턴트 5,000+ 명·KOLAS 인정 시험기관 800+개·KAS 인정 인증기관 50+개·KCMVP 검증 인력 300+ 명·ISMS-P 심사원 1,500+ 명·CISA·CISSP·CISM 국제 인증 보유자 50,000+ 명. 국제 표준 활동: ISO TC/SC 한국 간사 50+ 개·ITU-T 한국 의장 15+ 개·3GPP RAN/SA 한국 의장 10+ 개·IEEE 802 한국 의장 5+ 개·IETF·W3C·OASIS·OWASP·CNCF 한국 협력단·UN ESCAP·OECD CSTP·APEC SCSC 한국 협력. 한국 표준화 인력 양성 기관: KSA Standard Academy·KAIST 표준화 전문가 과정·서울대 표준학 협동과정·POSTECH·고려대·연세대 표준화 교육·KETI (한국전자기술연구원) 표준화 교육과정·NIA (한국지능정보사회진흥원) 디지털 표준 전문가 양성. 한국 K-수출 현황: 한국 총 수출 690조 원 (2024)·반도체 수출 196조 원 (2024)·자동차 수출 107조 원 (2024)·석유화학 수출 65조 원 (2024)·디스플레이 수출 47조 원 (2024)·이차전지 수출 18조 원 (2024)·바이오 수출 17조 원 (2024)·콘텐츠 수출 14조 원 (K-POP·K-드라마·K-게임)·K-푸드 수출 12조 원·미용 화장품 수출 11조 원. 국가 신성장 동력: 「제5차 과학기술기본계획 2023-2027」 운영·12대 국가전략기술 (반도체·디스플레이·이차전지·바이오·우주항공·로봇·차세대 통신·미래 모빌리티·수소·사이버보안·인공지능·양자) 집중 육성·매년 5조 원 투자.