소프트웨어 엔진

소프트웨어 엔진(Software engine)은 컴퓨터 프로그램의 중심 부분을 말한다. 그러나 이 개념은 문맥에 따라 두 가지의 다른 의미를 띠었다.

비유적으로서의 소프트웨어 엔진 
소프트웨어를 설명할 때 엔진이라는 용어는 개발자가 일반인에게 설명할 때 캡슐화 된 기능 블록을 나오기 위해서 만들어진 라이브러리, SDK 또는 객체라는 것을 설명하는 데 자주 사용된다.

이 용어는 종종 소프트웨어 내부와 제품 이름을 설명해야하는 마케팅 자료에 사용되며, 이 방법은 비유적이고, 마케팅을 지향한다.

컴퓨터 과학에 사용되는 현실적인 소프트웨어 엔진 
컴퓨터 과학 분야에서는 엔진이라는 용어를 사용하여 일반적인 소프트웨어 모듈(예: 위에서 언급한 라이브러리, SDK 또는 객체)보다 더 복잡한 규모의 소프트웨어 구성요소의 정신 모델을 제공한다. 소프트웨어 모듈은 다른 모듈에 의해 요청될 때까지 정적인 상태를 유지한다. 호출에 응답하여 컴퓨터의 명령 포인터가 호출된 모듈의 코드를 추적하기 시작한다. 소프트웨어 모듈은 튜링 기계로, 이 기계에 포함된 알고리즘을 기반으로 상태를 변경한다.

이와는 대조적으로, 소프트웨어 엔진의 정신 모델은 시동과 정지할 수 있는 기계식 엔진이며, 일정 시간 동안 공회전할 수 있다. 소프트웨어 엔진의 예로는 관계형 데이터베이스 엔진, 워크플로우 엔진, 추론 엔진 및 검색 엔진이 있다. 소프트웨어 엔진의 일반적인 특징은 엔진이 처리하는 실제 데이터의 모델을 제공하는 메타데이터이다. 소프트웨어 모듈은 데이터를 엔진에 전달하고, 엔진은 메타데이터 모델을 사용하여 데이터를 다른 상태로 변환한다.

소프트웨어 엔진의 또 다른 특징은 최적의 성능을 위해 소프트웨어 엔진을 튜닝하는 능력이다. 이와는 대조적으로 소프트웨어 모듈은 다시 작성해야만 "조정"할 수 있다.

데이터 과학에서 개발자는 스트리밍 엔진이나 헤비듀티 어플리케이션의 요구사항인 데이터를 변환하는 데이터 변환 엔진과 같은 데이터 서비스 엔진을 사용할 수 있다.

여러 엔진 예로는 오디오, 비디오, 이미지 헤비 프로세싱 엔진과 많은 시각적 최적화가 필요한 할리우드 영화의 전문 독점 렌더링 엔진이 있고, 바니쉬 엔진과 같은 API로 이루어진 엔진도 존재한다.

같이 보기 

 검색 엔진
 게임 엔진
 브라우저 엔진
 추론 엔진
 소프트웨어 프레임워크

각주 

컴퓨터 프로그래밍