프로그램 실행 흐름 중 특정 지점에 미리 정의된 작업을 삽입 또는 실행할 수 있게 만드는 개념입니다. 이는 코드나 시스템의 실행 과정에서 특정 이벤트가 발생했을 때, 추가적인 작업이 진행될 수 있도록 트리거를 설정하는 것을 의미합니다. 이를 통해 기본 흐름을 수정하지 않고 동작을 확장하거나 특정 이미지가 발생할 때 자동으로 동작을 제어하는 것이 가능합니다.
이를 이용해 시스템 호출, 함수 호출 중간에 특정 작업을 추가할 수 있고, 보안 점검을 위한 모니터링처럼 실행 중인 프로그램을 수정하지 않고도 행동을 변경할 수 있습니다.
Hooking의 기본 단위입니다. 프로그램 실행 흐름 중에서 특정 시점에 실행되는 함수나 명령어를 말합니다. 시스템이 미리 정의된 이벤트를 인식한 경우, 이 지점에서 특정 코드를 실행할 수 있도록 하는 주체는 Hook입니다. 운영체제, 애플리케이션, 클라우드 배포 과정에도 사용되며 다양한 시점에 자동으로 추가 작업을 할 수 있게 도와줍니다.
클라우드 서비스인 AWS CodeDeploy에서는 AppSpec 파일을 사용해서 배포 프로세스를 제어하는데, 이 과정에서 hooks은 애플리케이션 배포 중 특정 단계에 실행되는 스크립트를 정의하는데 사용됩니다.
이 스크립트를 이용하여 배포 파이프라인에서 특정 지점에 추가 작업을 삽입해 배포 전에 시스템을 준비하거나, 배포 후에 서비스를 시작하는 등 자동화 작업을 수행할 수 있습니다.
AppSpec 파일에서의 Hook 예시
hooks:
AfterInstall:
- location: scripts/install_dependencies.sh
timeout: 300
runas: root
위 작업은 배포를 하며 실행되는 스크립트로서 필요한 의존성 패키지 설치나 기타 설정 작업을 수행합니다.
이렇게 Hook을 통해 자동으로 작업함으로써 개발자가 수동으로 의존성 패키지를 설치해줘야 하는 작업을 생략할 수 있습니다.
AWS CodeDeploy처럼 배포 자동화 서비스에서 Hook은 필수적인 개념으로 사용되며 이런 작업을 통해 여러 작업을 쉽게 제어하고 자동화할 수 있게 됩니다.
이처럼 Hooking과 Hook은 프로그램의 실행 흐름 중에 특정 작업을 삽입하여 프로그램의 동작을 확장하거나 제어할 수 있게 해 주는 중요한 개념입니다.
[참고]