심 (컴퓨팅)

컴퓨터 프로그래밍에서 심(shim)은 투명하게 API 호출을 가로채고 전달된 인수를 변경하거나, 작업을 직접 처리하거나, 다른 곳으로 작업을 리디렉션하는 라이브러리이다. 심은 최신 환경에서 이전 API를 지원하거나, 이전 환경에서 새로운 API를 지원하는 데 사용될 수 있다. 심은 또한 개발된 소프트웨어 플랫폼과 다른 소프트웨어 플랫폼에서 프로그램을 실행하는 데 사용될 수도 있다.

이전 API용 심은 일반적으로 API의 동작이 변경되어 이전 기능에 여전히 의존하는 이전 응용 프로그램에 호환성 문제가 발생하는 경우에 만들어진다. 이러한 경우, 이전 API는 새로운 코드 위에 얇은 호환성 계층을 통해 계속 지원될 수 있다. 새로운 API용 심은 "이전 환경의 수단만을 사용하여 새로운 API를 이전 환경으로 가져오는 라이브러리"로 정의된다.

 예시 
 웹 폴리필은 주어진 웹 브라우저에서 새로운 웹 표준을 사용할 수 없는 경우, 이전 표준과 자바스크립트를 사용하여 새로운 웹 표준을 구현한다.
 애플 컴퓨터가 오픈 트랜스포트 네트워킹 시스템을 지원했던 짧은 기간 동안 매킨토시 컴퓨터에서 애플토크를 지원했던 경우. 수천 개의 맥 프로그램이 애플토크 프로토콜을 기반으로 했다. 이 프로그램들을 지원하기 위해 애플토크는 오픈트랜스포트 "스택"으로 재구현되었고, 이후 이 새로운 라이브러리 위에 API 심으로 재구현되었다.
 마이크로소프트 윈도우 응용 프로그램 호환성 도구 키트(ACT)는 이 용어를 하위 호환 라이브러리를 의미하는 데 사용한다. 심은 잘못되거나 더 이상 사용되지 않는 기능에 의존하는 레거시 응용 프로그램에 대해 이전 버전의 윈도우 동작을 시뮬레이션하거나, 잘못 작성된 응용 프로그램이 변경되지 않은 API를 호출하는 방식을 수정하여, 예를 들어 최소 권한 사용자 계정(LUA) 버그를 수정한다.
 bind.so는 권한에 관계없이 모든 응용 프로그램이 수신 소켓에 바인딩하거나 나가는 IP 주소를 지정할 수 있게 하는 리눅스용 심 라이브러리이다. 이는 심 및 기타 라이브러리가 모든 프로그램에 로드될 수 있도록 하는 LD_PRELOAD 메커니즘을 사용한다.
 타입 터널 패턴에서 일반 인터페이스 계층은 심의 집합을 사용하여 이질적인 타입 집합을 기본 API에서 사용되는 단일 원시 타입으로 변환한다.

 같이 보기 
 어댑터 패턴
 응용 프로그램 가상화
 드라이버 래퍼
 글라이드 래퍼
 글루 코드
 스텁 (컴퓨터 과학)
 성크 (호환성 매핑)
 윈도우 온 윈도우 (WoW)
 래퍼 함수
 래퍼 라이브러리

 각주 

 외부 링크 
 Microsoft Dev-Center - Windows 8 Client and Server 2012 application Compatibility
 Microsoft TechNet - Understanding Shims

분류:API
분류:호환성 계층