라이브러리
A collection of reusable functions that you can call at your own will.
— 개발자가 프로그램 흐름의 고삐를 쥐고 필요에 의해 유용한 유틸리티 부품들을 직접 다이렉트로 골라 호출하는 자유로운 재사용의 정의
자주 쓰는 코드 복사 붙여넣기 하기 귀찮아서, 남이 미리 예쁘게 컴파일해서 패키지 저장소에 올려둔 검증된 알고리즘 도구 상자 훔쳐다 쓰기. 하지만 무지성으로 NPM install을 갈기다가 내 프로젝트 폴더 용량을 기가바이트급으로 부풀려 폭사시키는 무시무시한 종속성의 유령들을 동반하는 주범(...)
1. 개요
특정 유용하고 정밀한 기능들을 독립적으로 수행할 수 있도록 함수나 클래스 단위로 묶어 제공하는 코드의 집합체. 프로그램 전체의 제어권을 뒤에서 강제하는 프레임워크와 완전히 대비된다. 라이브러리(Library) 환경에서는 코드 실행의 주도권(제어권)이 전적으로 나(개발자)에게 존재한다. 개발자는 내 소스코드 흐름 속에서 날짜 계산, 텍스트 파싱, 수학 연산 등 특정한 하위 연산이 필요할 때만 라이브러리를 도구 조각처럼 '호출'해서 임의로 부려 먹은 뒤 버리게 된다.
2. 주도권의 자유와 임포트(Import)의 미학
도서관(Library)에서 책을 빌려 읽을 때, 도서관장이 독자에게 '이 책을 무조건 이 페이지 순서대로 10시까지 읽어라' 하고 감시 통제하지 않는다. 독자가 마음에 드는 책을 스스로 골라 내 침대에 누워 원하는 페이지만 임의로 발췌해 읽는 것과 같다. 라이브러리가 바로 이 자유로운 동작이다. 자바스크립트 소스 파일 최상단에 import axios from 'axios'를 한 줄 적었더라도, 이 비동기 통신 라이브러리를 클릭 시점에 쏠지, 앱 실행 시점에 쏠지, 아예 안 쓸지는 전적으로 개발자의 손가락 타자 결정에 달려 있다. 프레임워크가 강제하는 딱딱한 아키텍처적 제약 없이, 필요한 도구를 언제든 가볍게 꽂아 쓰고 더 나은 대체재로 가볍게 마이그레이션할 수 있는 압도적인 유연성을 자랑한다.
3. React는 라이브러리인가 프레임워크인가
이 주도권 싸움의 최대 화두는 단연 React이다. 모기업인 메타(메타) 공식 문서에서는 리액트를 극단적 자존심으로 'UI 라이브러리'라 소개한다. 리액트 핵심 패키지(react)는 오직 가상 DOM을 활용해 컴포넌트를 브라우저에 선언형으로 예쁘게 렌더링해 주는 한 가지 임무만을 전담하기 때문이다. 웹 브라우저 화면 이동(라우팅)을 하거나 전역 상태 관리를 하고 빌드를 치는 핵심 아키텍처 인프라들에 대해서는, 개발자가 직접 React Router나 Zustand 같은 외부 라이브러리들을 손수 골라 레고 조립하듯이 본체 코드를 짜야 한다. 그러나 이 유연한 조립 노가다에 지친 초보자들의 고통을 극복하기 위해, 최근에는 이 라이브러리를 단단하게 성벽으로 둘러싼 Next.js(Next.js) 같은 거대 프레임워크를 그 위에 얹어 쓰는 것이 실무 업계의 절대 대세로 굳어지게 되었다.1
4. 관련 밈 및 드립
4.1. NPM node_modules의 우주 블랙홀 용어
자바스크립트 프로젝트를 생성하고 NPM 라이브러리 몇 개를 설치한 뒤 디렉터리 용량을 체크해 보면, 겨우 코드 몇 줄 짰는데 백그라운드에 상속 설치된 하위 라이브러리들의 유령 폭탄 때문에 node_modules 폴더가 블랙홀 수준인 수백 메가바이트(MB)를 처묵해 컴퓨터 하드를 폭사시키는 유구한 IT 괴담이다. 전 세계 밈 커뮤니티에서는 '우주에서 가장 무거운 물체는 블랙홀이 아니라 리액트 node_modules 폴더'라며 자조 어린 물리 법칙 짤방을 만들어 실시간 공유하곤 한다.
5. 여담
- 단 11줄이 세상을 멈췄다: 2016년 한 미국 개발자가 깃허브(GitHub)에 올려 배포하던 문자열 왼쪽에 여백 패딩을 채워주는 아주 사소한 11줄짜리 NPM 라이브러리인
left-pad패키지를 빡쳐서 전격 삭제하는 사건이 터졌다. 이 사소한 부품 패키지를 물밑에서 직간접적으로 맹렬히 전사적으로 끌어안고 상속해 빌드하고 있던 리액트, 바벨 등 전 세계 60% 이상의 글로벌 IT 빌드 파이프라인 시스템이 일제히 작동을 멈추고 뻗는 'NPM 대폭사 암흑기'가 터졌다. 이 사건은 현대 전산학계에 '과도하고 난잡한 초소형 라이브러리 의존이 불러오는 연쇄 폭사 리스크'를 적나라하게 박제 경고했다. - 라이브러리는 패키지 매니저의 꽃: 전 세계 개발 생산성을 300% 비약적으로 수립한 진짜 주역은 NPM, PyPI(파이썬), Cargo(러스트), Maven(자바) 같은 글로벌 통합 패키지 저장소 네트워크이다. 남이 수개월 고뇌해 짜둔 최고의 이미지 프로세싱 알고리즘을 단 한 줄의 커맨드(
pip install ...)만으로 가져다 내 코드에 녹여 쓸 수 있는 혁명을 선사했다. - 상호 마이그레이션의 천국: 특정 JSON 파싱 라이브러리가 보안 취약점이 터지거나 속도가 느리면, 비즈니스 뼈대를 다 뜯어고칠 필요 없이 해당 패키지를 삭제하고
import구문 밑에 새 라이브러리 객체를 넣어 교체하기만 하면 끝나는 뛰어난 유동성 가벼움을 선사한다.
6. 관련 문서
각주
-
실제로 모던 프런트엔드 실무는 순수 라이브러리만 단독으로 쌩코딩하는 시대를 건너뛰어, 프레임워크가 규정하는 든든한 가이드레일 성벽 안에서 적합한 유틸리티 라이브러리들을 쇼핑하듯 플러그인해 쓰는 하이브리드 아키텍처 시대를 유구하게 질주하고 있다. ↩