macOS 맥북 빨간 버튼 클릭 시 앱 완전 종료 자동화 설정 방법

Windows 환경에서 브라우저를 사용할 때는 창을 닫고 다시 실행하면 설정된 특정 페이지 또는 페이지 모음 열기가 정상적으로 작동합니다. 하지만 macOS에서는 빨간색 닫기 버튼을 눌러도 앱이 백그라운드에 프로세스로 남아 있기 때문에, 다시 실행했을 때 시작 페이지가 아닌 빈 새 탭만 하나 열리는 현상이 발생하여 업무 흐름에 불편을 초래합니다.

macOS 운영체제는 Windows와 달리 창의 왼쪽 상단에 위치한 신호등 버튼 중 닫기 동작을 하는 빨간색 버튼을 눌러도 프로세스가 완전히 종료되지 않고 Dock에 상주하며 백그라운드에서 실행 상태를 유지하는 경우가 많습니다. 이는 시스템 리소스를 지속적으로 점유하며 사용자가 Command + Q 단축키를 별도로 입력해야 해 꽤나 번거롭다고 느낄 수 있습니다. macOS 단축키 알아보기

특히 Google Chrome이나 Safari와 같은 브라우저 사용 시 시작 페이지들을 자동으로 열리도록 설정한 경우 앱이 완전하게 종료 되지 않으면 해당 페이지들이 시작이 되지 않기 때문에 꽤나 불편할 수 있는데 이러한 불편함을 해소하기 위해 macOS용 강력한 자동화 도구인 Hammerspoon을 활용하면 Windows 환경처럼 마지막 창을 닫을 때 앱이 즉시 종료되도록 구성할 수 있습니다.

본문은 아래 튜토리얼 환경에서 comeinsidebox.com에 의해 직접 작성되었으며, 다른 환경과 기타 외부 요인 등에 의해 설명과 다른 결과가 나타날 수 있으니 참고 자료로만 활용합니다.

튜토리얼 환경: macOS Tahoe 26.4.1 (Apple Silicon), Hammerspoon

빨간 버튼으로 바로 종료 되지 않는 이유

macOS 운영체제는 Windows와 달리 창의 왼쪽 상단에 위치한 신호등 버튼 중 닫기 동작을 하는 빨간색 버튼을 눌러도 프로세스가 완전히 종료되지 않고 Dock에 상주하며 백그라운드에서 실행 상태를 유지하는 경우가 많습니다. 이는 시스템 리소스를 지속적으로 점유하며 사용자가 Command + Q 단축키를 별도로 입력해야 해 꽤나 번거롭다고 느낄 수 있습니다.

이러한 동작 방식은 macOS의 설계 철학에서 비롯된다고 볼 수 있는데요. Apple은 앱을 문서 중심으로 설계했기 때문에 창은 단순히 문서를 보여주는 화면일 뿐이고, 앱 자체는 별개의 존재로 구분합니다. 즉, 창을 닫는 것은 문서를 닫는 행위이지 앱을 종료하는 행위가 아닙니다. 반면 Windows는 창과 앱을 동일한 개념으로 설계하여 창을 닫으면 앱도 함께 종료되는 방식이 기본입니다.

Apple 입장에서는 앱을 백그라운드에 유지하는 것이 오히려 장점으로, 다시 열 때 빠르게 복원할 수 있고 macOS에는 백그라운드 앱의 리소스를 자동으로 회수하는 App Nap 기능도 있어 실제 리소스 점유는 생각보다 적습니다. 다만 필자와 같이 Windows 환경에 익숙한 사용자라면 의도치 않게 앱이 계속 실행 중인 상태가 불편하게 느껴질 수 있고, 특히 브라우저처럼 재실행 시 시작 페이지가 열리도록 하고 싶은 경우 이러한 동작 방식의 이질감이 더욱 크게 느껴질 수 있습니다.

macOS 맥북에서 MAC 맥 주소 확인하는 방법

Hammerspoon 스크립트를 이용한 자동 종료 설정

Hammerspoon이 제공하는 윈도우 필터 기능을 활용하면 특정 앱을 지정하여 마지막 창이 닫히는 순간을 정확히 감지할 수 있습니다. 쉽게 말해 macOS에서 앱의 창 상태를 실시간으로 감시하여 창이 하나도 남지 않은 시점에 해당 프로세스를 자동으로 종료하는 스크립트를 적용하면 창이 Dock에 머물지 않고 바로 종료되도록 처리할 수 있습니다.

참고: 이 방식은 macOS의 시스템을 제어할 수 있는 자동화 도구인 Hammerspoon을 사용하는 것으로 macOS에 Hammerspoon이 설치되어 있어야 합니다. 자세한 내용은 Hammerspoon 설치 절차를 정리한 문서를 참고합니다.

Google Chrome 전용 자동 종료 설정

가장 빈번하게 사용되는 Google Chrome에만 이 기능을 우선 적용해 볼 수 있습니다. 이를 통해 Google Chrome을 빨간버튼으로 종료한 뒤 다시 시작하면 시작 페이지가 항상 열리게 할 수 있습니다.

Open-Config
Open Config

상단 메뉴막대에 위치한 Hammerspoon 아이콘Hammerspoon 아이콘을 마우스로 클릭해 메뉴 패널을 확장 후 Open Config 를 선택하면 기본 설정 파일인 init.lua 파일을 기본 편집기로 열 수 있습니다. 해당 편집기에 아래 코드를 복사하여 붙여넣기 한 뒤 저장합니다.

local chromeFilter = hs.window.filter.new('Google Chrome')
chromeFilter:subscribe(hs.window.filter.windowDestroyed, function(window, appName)
    local chrome = hs.application.get('Google Chrome')
    if chrome and #chrome:allWindows() == 0 then
        chrome:kill()
    end
end)
Reload-Config
Reload Config

이어 Hammerspoon 메뉴 바 아이콘에서 Reload Config를 클릭하여 설정을 반영합니다. 이제 Google Chrome의 마지막 창을 닫으면 앱이 자동으로 종료됩니다.

macOS 맥북에서 날짜 형식 변경하는 방법

여러 앱에 일괄 적용하는 확장 설정

다음 구조를 사용하면 특정 단일 앱이 아닌 동일한 문제가 발생하는 다른 앱들까지 한꺼번에 관리할 수 있습니다.

local appsToQuit = {
    'Google Chrome',
    '앱2',
    '앱3'
}

for _, appName in ipairs(appsToQuit) do
    local filter = hs.window.filter.new(appName)
    filter:subscribe(hs.window.filter.windowDestroyed, function()
        local app = hs.application.get(appName)
        if app and #app:allWindows() == 0 then
            app:kill()
        end
    end)
end

위 스크립트의 appsToQuit 배열에 감시할 앱 앱2, 앱3과 같이 이름을 나열합니다. 이 목록을 기준으로 아래 반복문이 각 앱마다 개별 윈도우 필터를 생성합니다.

  • hs.window.filter.new(appName)으로 앱별 윈도우 감시 필터를 등록하고, windowDestroyed 이벤트를 구독합니다. 이 이벤트는 해당 앱의 창이 하나 닫힐 때마다 발생합니다.
  • 이벤트가 발생하면 hs.application.get(appName)으로 앱 프로세스를 가져온 뒤 allWindows()로 현재 열려 있는 창의 수를 확인합니다. 창이 0개인 경우에만 kill()을 호출하여 앱을 종료하므로, 여러 창을 띄워 사용하는 중에는 영향을 주지 않습니다.
  • 앱 이름은 macOS에 등록된 정확한 명칭을 입력해야 합니다. 예를 들어 Chrome이 아닌 Google Chrome처럼 전체 이름을 사용해야 하며, 오탈자가 있으면 필터가 등록되지 않아 기능이 동작하지 않습니다. macOS에서 특정 앱 이름과 Bundle ID 확인하는 방법 알아보기

FAQ

특정 앱에서만 이 기능을 끄고 싶을 때는 어떻게 하나요.

위 첨부된 스크립트의 appsToQuit 배열에서 해당 앱 이름을 삭제한 뒤 Reload Config를 클릭하면 즉시 제외됩니다. 특정 조건에 따라 동적으로 제어하고 싶은 경우에는 아래와 같은 방식을 활용할 수 있습니다.

  • 특정 시간대에만 종료되도록 하려면 콜백 함수 내에서 os.date로 현재 시각을 확인하여 조건을 추가합니다.
  • 특정 앱은 유지하되 나머지만 종료하려면 배열 대신 개별 필터로 분리하여 각각 다른 조건을 설정합니다.
  • 일시적으로 기능을 끄고 싶은 경우에는 해당 앱 이름 앞에 --를 붙여 주석 처리한 뒤 Reload Config를 적용하면 코드를 삭제하지 않고도 비활성화할 수 있습니다.

Hammerspoon 외에 다른 도구로도 가능한가요.

Keyboard Maestro나 BetterTouchTool에서도 윈도우 닫기 이벤트를 트리거로 하여 동일한 동작을 구현할 수 있습니다. 각 도구의 특징은 다음과 같습니다.

  • Keyboard MaestroGUI 기반으로 설정이 직관적이지만 유료 라이선스가 필요합니다.
  • BetterTouchTool은 트랙패드 제스처 등 다양한 입력 장치 제어에 특화되어 있으며 마찬가지로 유료입니다.
  • Hammerspoon은 무료이며 Lua 스크립트를 통해 가장 세밀한 제어가 가능하고, 시스템 이벤트 감시 측면에서 세 도구 중 가장 낮은 수준의 접근이 가능합니다.

시스템 성능에 영향을 주지는 않나요.

hs.window.filter는 컴퓨터 리소스를 매우 적게 사용하도록 설계되어 있어 일반적인 환경에서는 체감할 수 있는 성능 저하가 거의 없습니다. 다만 아래 상황에서는 주의가 필요합니다.

  • 감시 대상 앱을 지나치게 많이 등록하면 이벤트 처리 빈도가 높아져 미미하지만 부하가 발생할 수 있습니다.
  • Hammerspoon 자체가 여러 복잡한 스크립트를 동시에 실행하는 경우 전체적인 응답 속도에 영향을 줄 수 있으므로, 불필요한 스크립트는 정리해 두는 것이 좋습니다.

스크립트 적용 후 앱이 종료되지 않아요.

앱 이름이 정확하지 않은 경우가 가장 흔한 원인입니다. 메뉴 바 아이콘에서 Console을 선택하여 에러 메시지를 먼저 확인합니다.

  • Chrome이 아닌 Google Chrome처럼 macOS에 등록된 전체 이름을 사용해야 합니다. 활성 상태 보기에서 해당 앱의 프로세스 이름을 직접 확인하는 것이 가장 확실합니다.
  • Reload Config를 빠뜨린 경우에도 기능이 동작하지 않습니다. 스크립트를 수정할 때마다 반드시 적용해야 합니다.
  • 손쉬운 사용 권한이 누락된 경우에도 윈도우 이벤트를 감지하지 못할 수 있습니다. 시스템 설정에서 Hammerspoon의 권한을 다시 확인합니다.

Finder를 종료하면 데스크탑 아이콘이 사라져요.

Finder는 macOS에서 파일 관리와 데스크탑 렌더링을 동시에 담당하는 쉘Shell 역할을 겸하기 때문에 종료 시 데스크탑 아이콘이 함께 사라집니다. appsToQuit 배열에서 Finder는 반드시 제외해야 합니다.

노란색 미니멀화 버튼을 눌렀을 때도 종료되나요.

미니멀화 버튼을 누르면 창이 Dock으로 축소될 뿐 닫히는 것이 아니므로 windowDestroyed 이벤트가 발생하지 않습니다. 이 스크립트는 빨간색 닫기 버튼으로 창을 완전히 닫을 때만 동작하며, 미니멀화된 창은 allWindows() 카운트에 포함되어 종료 조건을 충족하지 않습니다.

여러 프로필을 사용하는 Chrome에서도 정상 동작하나요.

Chrome에서 여러 프로필을 사용하는 경우 각 프로필은 별도의 창으로 동작하지만 모두 동일한 Google Chrome 프로세스에 속합니다. 따라서 한 프로필 창만 남은 상태에서 그 창을 닫으면 종료 조건을 충족하여 앱이 종료됩니다. 여러 프로필 창을 동시에 열어 사용하는 경우에는 마지막 창을 닫는 시점까지 종료되지 않으므로 정상적으로 동작합니다.

macOS에서 DNS 서버 변경하기

마치며

macOS 환경에서 브라우저의 시작 페이지 설정이 무용지물이 되는 문제는 단순한 설정 변경으로는 해결이 불가능합니다. 하지만 Hammerspoon과 같은 자동화 도구를 활용하면 운영체제의 동작 방식을 사용자 입맛에 맞게 수정하여 생산성을 크게 높일 수 있습니다.

Windows에서 macOS로 넘어오거나 필자와 같이 동시에 사용하는 경우 위와 같이 이번 설정을 통해 가장 큰 이질감 하나를 해소할 수 있기를 바랍니다. 추가적인 자동화가 필요하다면 Lua 스크립트를 통해 더욱 다양한 기능을 구현할 수 있습니다.

macOS의 독특한 앱 관리 방식은 멀티태스킹에 유리할 수 있지만, 윈도우 환경에 익숙하거나 미니멀한 시스템 환경을 선호하는 사용자에게는 군더더기로 느껴질 수 있습니다. Hammerspoon을 이용한 이번 자동화 설정은 사소하지만 매일 반복되는 불필요한 단축키 입력을 줄여주는 효과적인 튜닝입니다.

최근에는 RaycastAlfred와 같은 런처와 결합하여 더욱 고도화된 워크플로우를 구축하는 것이 트렌드입니다. 이 스크립트를 시작으로 자신만의 맞춤형 macOS 환경을 구축해 보시기 바랍니다.

관련 글

댓글로 남기기 어려운 내용은 Mail로 문의 하실 수 있습니다. 해당 글과 연관 된 내용은 여기를 클릭하거나 터치해 현재 페이지의 주소를 복사 후 함께 전달하시면 보다 정확한 답을 얻을 수 있습니다.

댓글 남기기