이 문서는 프로그래밍 라이브러리에 대해 설명하고 있습니다. 영단어 Library에 대한 내용은 도서관 문서 참고하십시오.
1. 소프트웨어의 구성 요소 중 하나
API를 기반으로 대상 환경(플랫폼: Linux, macOS, Windows)에서 바로 실행될 수 있도록 모듈화된 프로그램 모음이다. 라이브러리는 혼자서 동작하는 완전한 프로그램이 아닌, 특정한 부분 기능만을 수행하도록 제작된, 컴파일되어 기계어의 형태로 (또는 대상 플랫폼에 따라서는 바이트코드로) 존재하는 프로그램이다. 이 자체로는 사용자가 직접 일반적인 조작으로 실행할 수 없으며, 해당 라이브러리의 기능을 직접 호출하는 프로그램을 실행하거나, 사용자가 해당 라이브러리의 기능을 실행하는 API를 사용하는 프로그램을 직접 개발하면 실행할 수 있다.- 표준 라이브러리: 특정 언어의 개발 환경에 기본적으로 포함된 것들은 대부분 표준 라이브러리라고 불린다. 기본적인 기능 수행과 더불어 디버깅, 성능 측정 등을 위한 별도의 API가 존재한다.
- 런타임 라이브러리: 프로그램이 실제 환경에서 실행되기 위해 필요한 모듈들이다. 대부분 위의 표준 라이브러리에서 기능 수행에 필요한 것들만 제공되거나, 스크립트의 실행기 등을 말한다.
많은 회사나 개인, 단체들이 돈을 받고 팔거나, 또는 자신이 사용하기 위해, 또는 순수한 잉여력으로 많은 라이브러리들을 개발하고 배포하고 있으므로 현명한 개발자라면 이것들을 잘 활용하여 개발에 필요한 시간과 노력을 절약하도록 하자.
Windows에서 자주 볼 수 있는 런타임 라이브러리의 확장자는 보통 .dll이다. Java의 경우 .jar 형태로 배포되는 경우도 있다.
1.1. 라이선스
각종 라이브러리들이 배포될 때 주로 사용되는 라이선스들이다. 어떤 라이브러리가 원하는 기능을 제공한다고 해서 바로 사용할 수는 없으며 해당 라이브러리의 라이선스가 사용 가능한 것인지 검토해 보아야 한다.라이선스를 무시하고 사용했다간 걸리면 벌금을 물거나 돈받고 팔아야 할 프로그램의 소스 코드를 공개해 버려야[1] 하는 사태가 벌어질 수도 있다.
참고: 한국 저작권 위원회 홈페이지의 각종 라이선스 비교 표.
1.1.1. 주요 라이선스
- 상용(Commercial License): 말 그대로 돈 받고 파는 것. 돈을 주고 구입해야지만 사용 권한을 얻을 수 있다. 소스 코드는 구매자에게 공개될 수도, 아닐 수도 있다. EULA라고도 한다.
- Public Domain: 원개발자가 모든 권리를 포기한 경우. 아무런 제약 없이 마음껏 사용할 수 있다.
- GPL, LGPL, AGPL: 오픈 소스 프로젝트에서 많이 사용되는 라이선스.
- 아파치 라이선스: 아파치 소프트웨어 재단에서 개발된 라이브러리들에 사용되는 라이선스.
- zlib license: GPL/LGPL보다 제약이 적은 오픈 소스 라이선스.
- MIT 허가서: 소스 코드 공개의 의무가 없는 자유로운 라이선스. 최근 들어 많이 사용되고 있다.
- BSD 라이선스: MIT 허가서와 같이 자유로운 라이선스이며 조항의 범위를 선택할 수 있다. BSD-3-clause 등으로 표기되는 것이 그 예.
1.2. 프로그래밍 언어별 유용한 라이브러리
1.2.1. C
- OpenGL: 현재 제일 널리 통용되는 그래픽 라이브러리다.
- Mantle: AMD와 DICE가 만들었던 그래픽 API. Vulkan의 전신이다.
- Vulkan: Mantle 기반으로 개발된, OpenGL의 차세대 그래픽 라이브러리다.
- libgit2: Git의 기능들을 라이브러리 형태로 사용할 수 있게 해주는 라이브러리다.
1.2.2. C++
- 표준 라이브러리: C++ 언어의 범용적 활용을 위해 제정된 표준. 웬만한 컴파일러라면 표준 라이브러리는 구현하고 있다.
- MFC: 윈도우 환경에서 동작하는 GUI 프로그램을 개발하기 위한 라이브러리. Visual Studio를 설치한다면 기본적으로 포함되어 있다.
- Qt: 리눅스, OS X, 윈도 및 모바일 운영 체제에서 사용 가능한 GUI 라이브러리.
- DirectX: 윈도우 환경에서 미디어(특히 게임)에 특화된 기능을 제공하는 라이브러리. 특히 3D 그래픽 처리를 위한 최하위의 파이프라인을 구성 가능하다. 대부분의 윈도우 기반 게임 엔진은 기본적으로 DirectX를 기반으로 제작되어 있다.
- Boost: C++의 생산성을 극한까지 끌어올려 주는 템플릿 라이브러리. 개발진의 대부분이 C++ 표준 위원회에 속해있는지라 사실상 STL의 테스트베드라고 보아도 좋다. tuple, thread, any 등의 일부 boost 라이브러리가 STL에 포함되었다.
1.2.3. Objective-C/ Swift
1.2.4. Python
- NumPy: 파이썬을 이용해 다양한 수학 계산을 할 수 있도록 해준다.
- SymPy: NumPy가 수치 해석에 더 적합하다면, SymPy는 기호 해석에 더 적합한 방식이다. 대부분의 경우에는 NumPy와 SciPy의 조합으로 해결이 가능하지만, SymPy까지 사용하면 더 효율적이고 수월한 계산이 가능하다
- Pandas: 데이터 분석 라이브러리.
- matplotlib: 데이터 시각화 라이브러리.
- SciPy: 과학 계산에 많이 쓰이는 계산기법 및 알고리즘 탑재.
- PyTorch: 딥 러닝 라이브러리.
- MLX: 딥 러닝 라이브러리.
- HuggingFace: 머신 러닝 라이브러리.
1.2.5. Java
- Lombok: 자동으로 생성자 및 getter/setter 메소드를 추가해 주는 라이브러리.
- JSTL: JSP 표준 태그 라이브러리.
- Gson: 구글에서 개발한 JSON 라이브러리.
- Jackson: JSON 라이브러리. JSON뿐 아니라 XML, CSV, YAML 형식도 지원된다.
- LWJGL: 오픈 소스 게임 개발 라이브러리. OpenGL을 Java로 사용할 수 있게 해준다. 사용하는 프로그램으로는 마인크래프트가 유명하다(JOML도 쓰인다).
- JOML: 자바 OpenGL 수학 라이브러리. 3D 벡터와 메트릭스 등을 연산할 수 있게 해준다. LWJGL이 3.0이 되며 벡터 등이 빠지게 되어 이게 필요해졌다.
1.2.6. JavaScript
- jQuery: 자바스크립트 라이브러리 중 가장 인지도가 높다.
- React: 페이스북에서 만든 라이브러리. UI 개발에 사용된다.
- Jindo[2]: 네이버에서 만든 라이브러리. 스마트에디터에서 쓰인다.[3]
- axios: 크로스 플랫폼 HTTP 클라이언트 라이브러리.
1.2.7. Haskell
- http2: HTTP/2 라이브러리.
- pandoc: 마크업 포맷 간 변환 라이브러리.
- network: 로우 레벨 네트워킹 인터페이스 라이브러리.
- skylighting: 문법 강조 라이브러리.
- aeson: JSON 파싱, 인코딩 라이브러리.
1.3. 다중 언어 지원 라이브러리
인터페이스만 구현하면 되는 그래픽 처리 라이브러리가 많고, 언어 난이도 특성상 파이썬 관련 자료가 많은 경우가 많다. 다만 퍼포먼스 때문에 내부 구현은 C/C++로 구현하고 인터페이스만 파이썬이나 기타 언어를 내 주는 경우가 대부분.
- OpenCV: 2차원 그래픽 처리 라이브러리. C++뿐만 아니라 C#, Python도 지원한다. 다만 관련 예제는 쓰기 쉬운 Python 예제가 많다.
- OpenCL: GPGPU를 사용할 수 있는 라이브러리. 다른 라이브러리에 포함되어 들어가는 경우도 많다.
- TensorFlow: 딥 러닝 라이브러리[4]
1.4. 관련 문서
2. 가상 폴더
자주 사용하는 문서, 사진, 음악, 동영상 등의 폴더들을 한데 묶어서 관리하는 용도로 쓰이는 가상 폴더.소프트웨어의 구성 요소 중 하나인 라이브러리가 설치해야 되는 프로그램인 것과 달리, 이쪽은 그냥 컴퓨터에 저장되어 있는 기본 기능으로 없다면 새로 만들어내는 것도 가능하다.[5]
이리저리 흩어져 있는 것들을 한데 묶어 보여준다는 점에서 즐겨찾기 기능과 유사하지만, 즐겨찾기는 지워져도 원본이 남는 것과 달리 라이브러리는 지워버리면 원본도 같이 삭제되니까 주의가 필요하다.