# 라이브러리 (Library)

라이브러리는 여러 프로그램이 가져다 쓸 수 있도록 미리 만들어 둔 함수·클래스·코드 모음입니다. 개발자는 암호화, 전자서명, 네트워크 통신 같은 복잡한 기능을 처음부터 만들지 않고 검증된 라이브러리를 불러와 사용합니다.

## 자세히 알아보기

라이브러리는 프로그램에 포함되는 방식에 따라 정적 라이브러리(빌드할 때 실행 파일에 합쳐짐)와 동적 라이브러리(실행할 때 불러옴)로 나뉩니다. JavaScript의 npm, Python의 PyPI, Rust의 crates.io처럼 패키지 관리자를 통해 배포되는 경우가 대부분입니다.

'프레임워크'와 비교하면, 라이브러리는 내 코드가 필요할 때 호출하는 도구이고, 프레임워크는 전체 구조를 정해 두고 내 코드를 그 안에서 호출하는 틀이라는 차이가 있습니다.

보안 측면에서 가장 중요한 원칙은 **암호 기능을 직접 구현하지 말라**는 것입니다. 난수 생성, 키 유도, 서명 같은 기능은 사소한 실수 하나로 전체 보안이 무너질 수 있으므로 널리 감사(audit)받은 라이브러리를 쓰는 것이 기본입니다. 다만 라이브러리 자체가 공격 경로가 될 수 있어, 버전 고정과 의존성 점검이 필요합니다.

## 블록체인·암호화폐에서는

비트코인 코어는 타원곡선 secp256k1 서명을 위해 전용 라이브러리 libsecp256k1을 사용합니다. 이더리움 지갑과 dApp은 ethers.js, web3.js 같은 라이브러리로 노드와 통신하고 트랜잭션에 서명하며, 범용 암호 라이브러리로는 OpenSSL, libsodium 등이 널리 쓰입니다.

라이브러리는 **공급망 공격**의 대상이 되기도 합니다. 2018년에는 npm 패키지 event-stream에 악성 코드가 심어져 비트코인 지갑 Copay를 노렸고, 2023년 12월에는 Ledger Connect Kit 라이브러리가 변조되어 이를 쓰던 여러 dApp에서 사용자 자금을 빼가는 사고가 있었습니다. 지갑·거래소 개발에서는 의존성 잠금 파일, 서명된 릴리스 확인, 최소 권한 원칙이 중요합니다.

## 쉽게 말하면

요리할 때마다 소스를 처음부터 만드는 대신 믿을 만한 회사의 소스 병을 사서 쓰는 것과 같습니다. 편리하지만 병이 바꿔치기되지 않았는지는 확인해야 합니다.

## 예시

Python에서 해시를 계산할 때 직접 SHA-256을 구현하지 않고 표준 라이브러리 `hashlib`의 `hashlib.sha256(data).hexdigest()`를 호출하는 것이 라이브러리 사용의 전형적인 예입니다. 같은 원리로 지갑 앱은 서명 알고리즘을 직접 짜지 않고 검증된 서명 라이브러리를 호출합니다.

---
출처: https://achivx.kr/glossary/library-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC/ · ACHIVX 용어 사전 · 수정일 2026-10-20
