사용자 설명서
FrontierStack
데스크톱 판
Apache, 데이터베이스, 메일, 보안 등 1,000개 이상의 서비스를 Mac과 플릿 전체에서 설치, 실행, 모니터링합니다. AI 관리자가 조타를 맡습니다.
목차
제I부
FrontierStack이 무엇인지, 어떤 방식으로 동작하는지, 그리고 Mac에서 실행하기까지의 과정을 소개합니다.
제1장
소개
Apple이 없앤 서버 제어판을 Mac 한 대부터 플릿 전체까지 아우르도록 새로 만들었습니다. 서버를 실제로 살펴보고 고칠 수 있는 AI가 이를 움직입니다.
Apple이 macOS Server.app을 단종하면서 Mac 사용자는 웹 사이트와 서비스를 클릭만으로 간단히 운영하던 방법을 잃었습니다. FrontierStack은 그 방법을 되살리고 훨씬 더 나아갑니다. Apache, PHP, MySQL, PostgreSQL, Nginx를 비롯한 천 개가 넘는 서비스를 눈앞의 Mac과 연결한 모든 서버에서 설치, 제어, 보안, 모니터링하며, 도구를 사용하는 AI 관리자에게 운영을 맡길 수 있습니다.
이 매뉴얼은 데스크톱 앱의 완전한 참조 문서입니다. iPhone 및 iPad 앱은 별도의 모바일 매뉴얼에서 다룹니다. 이 첫 장은 처음부터 끝까지 읽고, 그 후에는 필요한 부분을 골라 읽으십시오.
1.1FrontierStack이란
FrontierStack은 네이티브 macOS 애플리케이션입니다. 웹 패널도 아니고, 계속 돌봐야 하는 컨테이너도 아닙니다. Homebrew 포뮬러, launchd 및 systemd 유닛, Apache 및 Nginx 구성, 인증서, 방화벽, SSH 등 각 시스템에 이미 갖춰진 도구를 사용해 실제 머신의 실제 서비스를 관리합니다. FrontierStack은 다음 세 가지를 동시에 제공합니다.
- 제어판. 검증, 실시간 상태, 원클릭 수정 기능과 함께 서비스를 설치, 시작, 중지, 구성합니다. 현대화된 macOS Server 대체품입니다.
- 모니터링 및 알림 시스템. 지속적인 상태 점검이 서비스, 사이트, 인증서, 디스크, 플릿 전체를 감시하고, 문제의 첫 징후를 선택한 채널로 메시지를 보내 알립니다.
- AI 관리자. 안전장치를 갖추고 도구를 사용하는 어시스턴트로, 사용자의 환경을 실시간으로 정확하게 파악합니다. 무엇이 고장 났는지 진단하고, 승인할 수정안을 제안하고, 로컬 또는 플릿 전체에서 실행하며, 실제로 운영하는 서비스에 맞춰 앱을 재구성할 수 있습니다.
1.2AI 우선 설계
대부분의 앱은 채팅 창을 옆에 덧붙이는 데 그칩니다. FrontierStack은 반대로 만들어졌습니다. AI는 사용자가 쓰는 것과 같은 제어 기능을 다루는 일급 운영자입니다. AI는 로그 읽기, 진단 실행, 서비스 재시작, 인증서 발급, 파일 쓰기 등 감사되는 고정된 도구 세트를 통해서만 동작하므로, AI가 하는 모든 일은 사용자가 직접 할 수 있는 일이며, 시스템을 변경하는 모든 작업은 먼저 사용자에게 보여 주고 승인을 받습니다.
다음 세 가지 원칙 덕분에 운영 서버를 맡길 만큼 안전합니다.
- 기본적으로 읽기 전용. 처음 상태의 어시스턴트는 볼 수만 있고 손댈 수는 없습니다. 변경과 스크립트는 명시적인 토글로만 허용되며, 변경을 가하는 모든 작업은 실행 전에 승인 카드를 표시합니다.
- 비밀 값은 모델에 절대 전달되지 않습니다. 암호와 API 토큰은 로컬
.env보관함에 저장됩니다. 스크립트는 이름으로 참조하고, 앱이 실행 시점에 로컬 또는 SSH를 통해 실제 값을 주입합니다. 클라우드 모델은 이름만 볼 뿐 값은 결코 보지 못합니다. 로그와 파일은 전송 전에 비밀 값이 가려집니다. - AI는 직접 선택합니다. 클라우드 모델이나 로컬 모델(Ollama, LM Studio)을 지정할 수 있습니다. Claude Code나 Cursor처럼 이미 구독 중인 도구에서 MCP로 조작하면 토큰당 종량 요금이 전혀 발생하지 않습니다.
1.3대상 사용자
FrontierStack은 Mac에서 서버를 운영하는, 또는 운영하려는 모든 사람에게 적합합니다.
- MAMP나 XAMPP 대신 깔끔한 로컬 스택을 원하는 개발자.
- Mac mini에서 POS, CRM, 전자상거래, 메일, 헬프데스크를 자체 호스팅하는 소규모 기업.
- macOS Server를 실행하는 오래된 Xserve나 Mac mini를 원격으로 관리하며 계속 활용하려는 관리자.
- 종량제 SaaS에서 자체 호스팅으로 옮기려는 사람, 또는 Mac, Linux 머신, BSD 서버, Raspberry Pi로 이루어진 플릿을 하나의 윈도우에서 운영하려는 사람.
1.4핵심 개념과 용어
이 매뉴얼 전체에서 반복되는 용어가 몇 가지 있습니다. 여기서 한 번 정리해 둡니다.
| 용어 | 의미 |
|---|---|
| 서비스 | FrontierStack이 설치, 실행, 모니터링할 수 있는 모든 것입니다. Apache, 데이터베이스, 메일 서버, 컨테이너, 라우터 연동 등이 해당합니다. 전체 목록이 카탈로그입니다(6장). |
| 패널 | 사이드바에서 열 수 있는, 서비스나 도구 하나를 위한 앱의 화면입니다. |
| 헬퍼 | 매번 암호를 묻지 않고 관리자 작업을 수행하는 작은 권한 있는 도구(SMAppService 데몬)입니다. 선택 사항이며, 처음 실행할 때 설치합니다. |
| 위치 | Mac이 현재 네트워크상 어디에 있는지(집, 사무실, 외부)를 나타냅니다. 위치를 사용하면 알림과 연결 가능성 판단이 네트워크를 인식하게 됩니다(8장). |
| 연결된 서버 | FrontierStack이 진단과 스크립트를 실행할 수 있도록 SSH로 연결한 다른 머신입니다. 이들 전체가 플릿입니다. |
| AI 관리자 | 도구를 사용하는 내장 어시스턴트입니다. AI 하네스라고도 합니다. 13장에서 자세히 다룹니다. |
| MCP | Model Context Protocol. 외부 AI 도구(Claude Code, Cursor)가 같은 안전장치가 적용된 도구를 통해 FrontierStack을 조작할 수 있게 해 주는 개방형 인터페이스입니다(14장). |
| 비밀 값 / 보관함 | 로컬 .env 저장소에 이름을 붙여 저장한 자격 증명입니다. 스크립트는 $NAME으로 참조하며, 값은 Mac에 남습니다. |
1.5이 매뉴얼의 구성
이 매뉴얼은 작업의 흐름을 따릅니다.
- 제1부 — 시작하기: 설치, 처음 실행, 인터페이스 둘러보기.
- 제2부 — 서비스 운영: 웹 스택, 데이터베이스, 전체 카탈로그, 사이트 및 도메인.
- 제3부 — 플릿, 네트워크 및 보안: 서버 연결, 네트워크와 경계 보안, 보안 강화, 모니터링 및 알림.
- 제4부 — 자동화 및 AI: 스크립트와 일정, AI 관리자 전체, MCP, AI 스택.
- 제5부 — 비즈니스 및 참조: 업종별 솔루션, 설정, 단축키, 라이선스, 문제 해결.
처음 사용한다면 2장, 설치 및 처음 실행으로 계속 진행하십시오. AI만 알고 싶다면 13장으로 바로 건너뛰어도 되지만, 그곳의 안전 모델은 위의 개념을 전제로 합니다.
제2장
설치 및 첫 실행
처음 다운로드한 순간부터 동작하는 스택까지 — macOS가 요구하는 권한, 관리 작업을 수월하게 해 주는 선택형 헬퍼, 그리고 기존 MAMP, XAMPP 또는 Server.app 구성을 옮겨 오는 방법을 안내합니다.
FrontierStack은 다른 Mac 앱과 똑같이 설치합니다 — /Applications로 드래그한 다음 여십시오. 그다음은 사용자가 정합니다. macOS가 원래 표시하는 작업별 암호 입력만으로 모든 것을 실행할 수도 있고, 몇 가지 권한을 한 번만 허용하여 다시는 묻지 않게 할 수도 있습니다. 이 장에서는 첫 실행 전체를 차례대로 살펴본 다음, 기존 로컬 스택을 마이그레이션하여 사이트와 데이터베이스를 그대로 유지하는 방법을 설명합니다.
2.1시스템 요구 사항
FrontierStack은 서명된 네이티브 macOS 애플리케이션입니다. 다음이 필요합니다.
| 요구 사항 | 세부 정보 |
|---|---|
| macOS | macOS 13(Ventura) 이상. 선택 사항인 헬퍼는 macOS 13 이상의 API인 SMAppService를 사용합니다. |
| 아키텍처 | Apple silicon 또는 Intel. 앱은 Apple silicon에서는 /opt/homebrew(Intel에서는 /usr/local)의 Homebrew 스택을 관리합니다. |
| Homebrew | 권장하지만 앱 실행에 필수는 아닙니다. 대부분의 서비스는 Homebrew formula로 설치되며, FrontierStack이 Homebrew를 대신 설치해 줄 수 있습니다(아래 참조). |
| 관리자 계정 | Mac의 관리자 계정. 서비스를 설치하고 시스템 구성을 편집하려면 관리자 권한이 필요합니다 — 선택 사항인 헬퍼를 통하거나, macOS가 작업마다 표시하는 암호 입력을 통해 얻습니다. |
이 목록에 특별한 것은 없습니다. 최신 macOS를 실행할 수 있을 만큼 새로운 Mac이라면 FrontierStack을 실행할 수 있습니다.
2.2다운로드와 첫 실행
앱을 다운로드하고 FrontierStack.app을 /Applications 폴더로 옮긴 다음 이중 클릭하십시오. 앱은 Enfour, Inc.(Apple Developer 팀 6Y87KNMALP)가 서명하고 공증을 받았으므로, macOS는 확인되지 않은 개발자 경고 없이 앱을 엽니다.
- FrontierStack을 여십시오. 메인 윈도우가 나타나며 왼쪽에는 서비스 사이드바, 가운데에는 상태 개요가 표시됩니다 — 1장에서 본 레이아웃입니다.
- 아직 Homebrew가 없으면 Homebrew가 필요한 패널에 그 사실이 표시되고 설치를 제안합니다. 지금 설치해도 되고 나중에 설치해도 됩니다.
- FrontierStack은 한 번에 하나의 인스턴스만 실행되도록 합니다. 이미 열려 있는 상태에서 다시 실행하면 두 번째 사본이 시작되지 않고 기존 윈도우가 앞으로 나올 뿐입니다. 이렇게 하면 두 윈도우가 같은 서비스와 구성 파일을 두고 충돌하지 않습니다.
첫 실행에서는 시스템에 아무것도 변경하지 않습니다. 앱은 설치된 항목을 읽고 현재 상태를 보여 줄 뿐이며, 사용자가 요청하기 전에는 아무것도 시작, 중지 또는 재구성하지 않습니다.
2.3설정 지원
FrontierStack을 처음 열면 수백 개의 서비스가 나열된 사이드바에 바로 들어가는 대신 짧은 설정 지원을 제안합니다. 7페이지로 구성되어 있으며, 구성이 아니라 사용자에 대해 묻고, 묻는 내용 중 영구적인 것은 없습니다 — 모든 답변은 앱이 무엇을 먼저 보여 주고 제안할지만 결정합니다. 언제든지 중단할 수 있으며 서버 또는 기기 추가 ▸ 설정 지원에서 다시 열 수 있습니다.
| 페이지 | 묻는 내용 |
|---|---|
| 목표 | 비즈니스 운영, 개발, 서버 관리, 클라이언트 관리, 서비스 셀프 호스팅, 가정 네트워크 관리. 여러 개를 선택해도 됩니다. Mac에서 기존 MAMP 방식의 구성이 발견되면 마이그레이션 경로가 미리 선택됩니다. |
| 환경 | 서버 관리 경험, 구성을 사용하는 인원 수, 관리하는 기기 수 — Mac 한 대부터 250대 초과까지. |
| 스택 | Apache, Nginx, PHP, Node.js, Python, MySQL, PostgreSQL, MongoDB, Redis, Git 등과, 없는 항목의 설치 제안. |
| AI | AI 관리자가 이미 비용을 지불하고 있는 AI 구독을 사용할지, API 키나 로컬 모델을 사용할지. |
| 검토 | 무엇이 설치되고 무엇이 제안만 되는지를 실행 전에 보여 줍니다. |
| 백업 | 이 Mac에 매시간 버전별 설정 기록을 보관할지(기본적으로 켜짐), 그리고 선택적으로 iCloud Drive나 Dropbox처럼 다른 곳과 동기화되는 폴더에 매일 사본을 보관할지 — 고정 항목, 셋업, 위치, 환경설정, Apache/PHP 구성이 OS 업그레이드나 초기화 후에도 유지되도록 합니다. |
| 라이선스 | 현재 상황: 활성 라이선스가 있는지, 또는 라이선스 없이 사용할 수 있는 것은 무엇인지 — 이미 가지고 있는 라이선스 코드를 붙여넣는 필드도 있습니다. |
완료하면 한 단계가 더 열립니다. 화면을 가득 채운 Services Manager로, 답변에 맞는 섹션이 이미 열려 있고 그 안의 모든 항목은 꺼져 있습니다. 사이드바에서 원하는 항목을 켜고 계속을 선택하십시오. 건너뛰기를 선택하거나 아무것도 켜지 않고 계속을 선택하면, 대신 권장 항목이 모두 켜집니다. 어느 쪽이든 AI 관리자와 AI 모델은 켜진 상태로 유지되며, AI 관리자에게는 이 단계가 닫힌 뒤에야 브리핑이 전달됩니다.
마지막 페이지는 라이선스에 관한 것이며, 판매를 위한 관문이 아니라 솔직한 안내입니다. FrontierStack은 라이선스 없이도 작동합니다 — 이 Mac을 모니터링하고, 서버를 연결하고, AI 관리자를 사용하고, 모든 진단 결과를 볼 수 있습니다. 방금 만든 계획 중 라이선스가 필요한 기능은 하나, 마이그레이션 실행뿐입니다. 스택을 옮기면 데이터베이스, 사이트, 구성을 대상에 복사하고 그곳에서 실행되는 것을 바꾸므로 라이선스가 필요합니다. 라이선스가 없어도 FrontierStack은 원본을 감지하고, 찾은 사이트와 데이터베이스를 나열하고, 마이그레이션이 무엇을 옮기게 될지 정확히 보여 줍니다 — AI 관리자도 전체 계획을 작성해 줍니다. 실제로 옮기는 작업만 제한되며, Migration 패널은 조용히 실패하는 대신 버튼에 그 사실을 표시합니다.
컨테이너, 백업 대상, 모니터링은 의도적으로 스택 페이지에서 설치하지 않습니다. 설정 지원이 사용자 대신 내려서는 안 되는 결정이 필요하므로, 대신 계획에 포함됩니다.
2.4권한 있는 헬퍼 — 그리고 macOS가 요청하는 권한
서비스를 시작 및 중지하고 시스템 구성(Apache, Nginx, MySQL, DNS, 방화벽)을 편집하는 것은 권한이 필요한 작업입니다. 기본적으로 FrontierStack은 각 작업을 표준 macOS 인증 대화상자를 통해 수행하므로, 매번 암호를 입력해야 합니다. 안전하지만 금방 번거로워집니다.
선택 사항인 헬퍼가 이 번거로움을 없애 줍니다. 헬퍼는 작은 권한 있는 도구 — SMAppService 데몬 — 로, 앱이 macOS에 등록하여 매번 암호를 다시 입력하지 않고도 관리자 작업을 수행할 수 있게 합니다. 헬퍼는 사용자가 직접 의도적으로 설치합니다. 사이드바 하단의 설치 항목을 사용하거나, 작업에 처음 헬퍼가 필요할 때 표시되는 안내를 수락하십시오.
- 사이드바 하단의 헬퍼 행에서 설치를 클릭하십시오.
- macOS가 로그인 항목 & 확장 프로그램 승인을 표시합니다(또는 시스템 설정 ▸ 일반 ▸ 로그인 항목에서 백그라운드 항목을 활성화하도록 요청합니다). 승인하십시오 — 이것은 macOS가 데몬 실행을 허용할지 묻는 것이지, 앱이 무언가를 무시하는 것이 아닙니다.
- 사이드바 행이 바뀌어 헬퍼가 등록되어 실행 중임을 표시합니다. 이제부터 서비스 시작/중지와 구성 편집이 작업별 암호 입력 없이 진행됩니다.
헬퍼는 언제든지 제거할 수 있으며, 제거하면 FrontierStack은 작업별 관리자 암호 입력으로 돌아갑니다. 두 모드 모두 작동합니다 — 헬퍼는 순전히 편의를 위한 것입니다.
6Y87KNMALP)이 서명했으며, 그렇기 때문에 애초에 SMAppService 데몬으로 등록될 수 있습니다. 헬퍼는 앱이 지시하는 권한 있는 작업만 실행합니다. 선택 사항이며, 사용자가 의도적으로 설치하고, 제거할 수 있습니다. AI 관리자 및 모든 원격 작업과 마찬가지로 사용자가 켜기 전까지는 꺼져 있습니다. 전체 신뢰 모델은 10장을 참조하십시오.2.5Homebrew 설치
카탈로그의 대부분 — 웹 서버, 데이터베이스, 캐시, 메일, 수십 가지 CLI 도구 — 은 Homebrew formula로 설치됩니다. Homebrew는 FrontierStack이 이러한 서비스를 가져오고 업데이트하는 데 사용하는 패키지 관리자이므로, Mac에 아직 없다면 일찍 설치하는 것이 좋습니다.
사이드바에서 Homebrew 패널을 여십시오. Homebrew가 없으면 패널에 "Homebrew가 설치되어 있지 않습니다. 이 앱이 서비스를 설치하는 데 사용하는 패키지 관리자입니다,"라는 메시지와 함께 Homebrew 받기… 버튼이 표시됩니다. 설치는 앱의 인앱 콘솔에서 실행됩니다. 공식 Homebrew 설치 프로그램을 실행하며, 설치 프로그램에 관리자 권한이 필요한 시점에 사용자가 직접 콘솔에 암호를 입력합니다. FrontierStack은 암호를 가로채거나 저장하지 않습니다 — 이 입력 요청은 Homebrew 자체의 것입니다.
Homebrew가 설치되면 패널은 완전한 패키지 관리자가 됩니다. 설치된 formula와 cask를 버전과 함께 보여 주는 검색 가능한 표, formula 또는 cask 설치 필드, 남은 업데이트 수를 보여 주는 모두 업데이트 버튼, 행별 업데이트 / 제거 작업이 있습니다. AI 관리자도 install_homebrew 및 install_package 도구로 같은 흐름을 진행할 수 있으며, 이때도 사용자가 암호를 입력하는 인앱 콘솔을 거칩니다.

2.6Command-Line PATH 패널
FrontierStack은 셸과 같은 방식으로 경로를 찾아 설치된 도구를 감지합니다. 가끔 설치한 도구(pip, pipx, virtualenv 또는 비표준 접두사로 설치한 것)가 앱이 보는 PATH에 없어서 도구가 없다고 보고되는 경우가 있습니다. Command-Line PATH 패널이 이를 해결합니다.
- 셸 프로필(예:
~/.zprofile)을 선택하십시오. 추가한 디렉터리는 해당 파일의 명확하게 표시된 관리 블록에 기록되고 PATH 앞에 추가됩니다 — 변경 사항을 적용하려면 새 터미널을 여십시오. - 추가할 디렉터리에서는 경로를 입력하거나 선택…으로 경로를 추가할 수 있으며, 맨 위 항목이 가장 먼저 검색됩니다. 현재 PATH(유효)는 로그인 셸의 PATH를 보여 주며, 앱이 관리하는 항목에는 태그가 붙습니다.
- PATH Doctor는 도구가 감지되지 않는 이유를 진단합니다. 명령(예:
mlx_lm.server,gcloud)을 입력하면 앱이 찾는지, 셸에서만 찾는지, 아예 설치되지 않았는지를 보고하며 — 앱이 놓치고 있는 디렉터리는 원클릭 관리 PATH에 추가로 추가할 수 있습니다.
2.7Install Wizard
처음부터 시작한다면 사이드바의 Install Wizard가 작동하는 스택을 갖추는 가장 빠른 방법입니다. 대상 용도 — WordPress/PHP, 풀스택 JS, Python/Django, Rails, 정적 사이트, 데이터베이스, 리버스 프록시 — 를 선택하면 위저드가 그 목표에 권장되는 구성 요소(웹 서버, 데이터베이스, 캐시)를 미리 선택합니다. 원하는 대로 선택을 조정하면 모든 것을 Homebrew로 설치합니다.
같은 패널에는 네이티브 Apache + MySQL + PHP 스택의 상태가 한눈에 표시되며, Mac에 이미 있는 올인원 번들 — XAMPP, MAMP, AMPPS, Local — 도 감지합니다. 번들을 찾으면 병렬 스택을 설치하는 대신 Migrate Setups로 안내하므로, 모든 것을 두 개씩 실행하게 되는 일이 없습니다.
2.8기존 스택 마이그레이션
이미 MAMP, XAMPP 또는 Apple의 Server.app에서 로컬로 사이트를 실행하고 있다면 다시 구축할 필요가 없습니다. Migrate Setups 패널이 이러한 스택을 감지하고, 그 구성 요소 — 웹 파일, MySQL 데이터베이스, PHP 설정, 각 사이트를 정의하는 Apache 가상 호스트 — 를 FrontierStack의 네이티브 Homebrew 스택으로 가져옵니다.
- Migrate Setups를 여십시오. 설치된 원본 — MAMP / MAMP Pro, XAMPP, Apple Server — 을 검색하고 찾은 것을 보고합니다. 사이트, 데이터베이스, PHP 감지 여부입니다. (AI 관리자의
detect_migration_sources도구도 같은 읽기 전용 검색을 실행합니다.) - 가져올 사이트 목록을 검토하십시오. 각 후보에는 서버 이름과 수신 포트가 표시되며, 깔끔하게 가져올 수 없는 항목은 이유와 함께 건너뜀 아래에 표시됩니다.
- 설정의 경우 모든 설정 가져오기 작업이 원본의
php.ini,my.cnf,nginx.conf를 대응하는 Homebrew 구성 위에 복사합니다. 각 파일의.pre-mamp.bak백업이 보관되므로 비교하거나 되돌릴 수 있습니다. - 선택 항목 가져오기를 선택하여 마이그레이션을 실행하십시오. 필요한 Homebrew 서비스를 설치하고, 웹 파일을 복사하고, MySQL 데이터베이스를 마이그레이션하고, 가상 호스트를 가져오는 동안 진행 상황이 패널에 실시간으로 표시됩니다.
- 완료 후 검토하십시오. 원본 구성은 이전 도구의 경로와 포트(예: MAMP의
extension_dir,datadir,socket또는 포트8889)를 참조하는 경우가 많으므로, 가져온 설정을 사용하기 전에 확인하십시오.
AI 관리자는 run_migration으로 이 과정을 처음부터 끝까지 진행할 수 있지만, 원본을 감지하고 사용자에게 확인한 후에만 — 그리고 변경이 활성화된 경우에만 가능합니다.
.pre-mamp.bak 백업은 구성 파일만 대상으로 하며 데이터베이스는 포함하지 않습니다.
2.9데이터 저장 위치
FrontierStack은 자체 상태를 예측 가능한 표준 위치에 보관하므로, 앱이 무엇을 건드리는지 항상 알 수 있고 백업할 수 있습니다.
| 항목 | 위치 |
|---|---|
| 앱 설정 & 데이터 | ~/Library/Application Support/FrontierStack/ |
| 비밀 값 & 토큰 | macOS 키체인의 jp.co.enfour.frontierstack 서비스 |
| 앱이 관리하는 Apache 구성 | /opt/homebrew/etc/httpd/frontierstack/ — 앱이 소유하는 전용 디렉터리로, 직접 편집한 Apache 구성과 분리되어 있습니다 |
| 앱 로그 | ~/Library/Logs/FrontierStack/ |
앱의 Apache 구성을 별도의 frontierstack/ 디렉터리에 보관하므로, FrontierStack은 사용자가 직접 관리하는 구성을 덮어쓰지 않고 안전하게 가상 호스트를 관리할 수 있습니다. 번들 식별자는 jp.co.enfour.frontierstack입니다(헬퍼와 DDNS 구성 요소는 .helper 및 .ddns 접미사를 사용합니다).
앱을 설치하고, 헬퍼 사용 여부를 정하고, Homebrew를 갖추고, 기존 스택을 마이그레이션했다면 이제 실제로 사용할 준비가 되었습니다. 3장, 인터페이스에서는 사이드바, 패널, 검색, 메뉴 막대, 그리고 매일 사용하게 될 컨트롤 등 윈도우를 자세히 둘러봅니다.
제3장
인터페이스
하나의 윈도우에 천 개의 서비스. 이 장은 안내 투어입니다. 사이드바, 패널, 플로팅 팔레트, 검색, 도움말, 그리고 앱이 작업을 방해하지 않도록 하는 세심한 장치들을 살펴봅니다.
FrontierStack은 매우 다양한 서비스를 관리하지만, 이를 하나의 익숙한 macOS 윈도우로 보여 줍니다. 왼쪽에는 항목을 나열한 사이드바, 가운데에는 선택한 항목의 화면, 그리고 도구 막대에는 언제나 쓸 수 있는 도구가 한 줄로 놓여 있습니다. 이 레이아웃을 한 번만 익혀 두면 이 책에 나오는 모든 패널이 — Apache부터 Cloudflare 영역까지 — 예상한 바로 그 자리에 있습니다. 이 장에서는 인터페이스를 처음부터 끝까지 살펴봅니다. 그래야 이 매뉴얼의 나머지 부분에서 “사이트 패널을 여십시오”라고만 해도 여는 방법을 이미 알고 있다고 믿을 수 있기 때문입니다.
3.1메인 윈도우
윈도우는 세 영역으로 이루어진 표준 macOS NavigationSplitView입니다. 왼쪽에는 서비스 사이드바가 있습니다. 보기로 선택한 모든 서비스와 도구를 카테고리별로 묶어 스크롤하고 접을 수 있는 목록입니다. 가운데에는 활성 패널이 있습니다. 사이드바에서 선택한 항목의 화면으로, 자체 헤더, 탭, 컨트롤을 갖추고 있습니다. 위쪽을 가로지르는 것은 도구 막대이며, 그 버튼은 어느 패널에 있든 항상 사용할 수 있습니다.
도구 막대에는 오른쪽부터 왼쪽으로 다음이 있습니다. 검색(돋보기, ⌘F로도 열 수 있음), AI 어시스턴트(요술 지팡이, 플로팅 명령 팔레트를 엶), 현재 작업 디렉터리에서 터미널을 여는 Shell 버튼, macOS가 라이트 모드일 때도 다크 모드를 강제로 적용하는 다크 모드 토글, 그리고 선택한 패널을 띄울 수 있을 때는 이를 팔레트로 분리하는 분리 버튼입니다. 셋업에 저장하지 않은 변경 사항이 있으면 주황색 저장 안 됨 메뉴도 여기에 나타납니다. KeyRotate가 설치되어 있으면 열쇠 꾸러미 모양의 버튼이 맨 왼쪽에 별도의 그룹으로 놓입니다. 이 버튼은 KeyRotate를 열거나 앞으로 가져옵니다.
사이드바의 너비는 자유롭게 정할 수 있습니다. 구분선을 드래그하면 FrontierStack이 실행할 때마다 그 너비를 기억합니다. 앱을 다시 열면 마지막으로 선택한 패널이 복원되므로, 중단했던 곳으로 바로 돌아갑니다.
사이드바 그룹은 여러 사이트나 회사에 걸친 사이드바를 정리해 줍니다. 고정된 서버, 기기, Cloudflare 영역, Wi-Fi 네트워크 또는 클러스터를 오른쪽 클릭하여 그룹(“오사카 사무소”, “Acme Corp”)에 할당하십시오. 그러면 사이드바 맨 위의 그룹 행으로 세트를 전환할 수 있으며, 활성 그룹의 항목과 그룹에 속하지 않은 모든 항목이 표시됩니다. 그룹 지정은 선택 사항이며, 그룹에 속하지 않은 항목은 항상 표시됩니다. 활성 상태가 아닌 그룹에 빨간 숫자가 표시되면 그 안에 숨겨진 무언가에 문제가 있다는 경고입니다. 위치에 연결된 그룹은 해당 네트워크에 도착하면 스스로 활성화됩니다. iPhone 앱의 플릿 탭에도 같은 폴더가 그대로 반영됩니다.

3.2서비스 사이드바
사이드바는 두 단계로 구성됩니다. 맨 위에는 개요가 있습니다. 앱에 내장된 도구들로, 로컬 상태, 상태 페이지, 알림, 지출 및 청구, 도메인, 로그, 인증서, 메모, 스크립트, 셋업, 설정 등이 있습니다. 그 아래에는 서비스 카테고리마다 하나씩 섹션이 있습니다. 웹 서버, 데이터베이스, 캐싱, 메일, 네트워킹, 보안 도구, 컨테이너, AI 등 수십 가지가 있으며, 각 섹션에는 카탈로그(6장)에서 표시하기로 선택한 서비스가 나열됩니다. 각 섹션 헤더는 클릭하여 접을 수 있는 갈매기표이며, 앱은 어떤 그룹을 접어 두었는지 기억합니다.
각 서비스 행은 실행 중일 때 상태 점을 표시합니다. 서비스를 오른쪽 클릭하면 두 가지 빠른 동작을 쓸 수 있습니다. 섹션 맨 위에 고정은 자주 다루는 서비스를 카테고리의 맨 위에 둡니다. 숨기기는 서비스를 사이드바에서 제거합니다. 숨겨도 아무것도 제거되지 않습니다. 서비스는 계속 실행되고 검색으로 여전히 찾아갈 수 있으며, 단지 목록을 어지럽히지 않을 뿐입니다.
카테고리 아래에는 앱의 다른 곳에서 고정한 항목을 위한 섹션이 추가됩니다. 연결된 서버(각각 어떤 서비스를 실행하는지 보여 주는 작은 카테고리 아이콘이 붙음), 모니터링 중인 Wi-Fi 네트워크, Cloudflare 영역, Kubernetes 클러스터입니다. 사이드바 맨 위의 필터 필드에 입력하면 모든 섹션을 한꺼번에 좁힐 수 있습니다.
3.3프리셋과 셋업
사이드바에 무엇이 표시될지는 두 가지 기능이 결정합니다. 메뉴 막대의 프리셋 메뉴는 하나의 사용 사례 전체를 한 번에 불러오는 빠른 방법입니다. 기본 — 다음 용도의 서비스 표시… 섹션은 사이드바를 특정 시나리오(웹 스택, 메일 서버, 쇼핑몰)에 맞게 선별된 세트로 바꾸고, 현재 보기에 추가…는 이미 있는 것 위에 그룹을 하나 더 얹습니다. 모두 보기는 모든 것을 표시합니다. 무언가를 찾을 수 없을 때 쓰는 탈출구입니다.
셋업은 한 걸음 더 나아갑니다. 셋업은 작업 화면 전체에 이름을 붙인 스냅샷입니다. 어떤 서비스가 숨겨져 있고 어떤 서비스가 고정되어 있는지, 그리고 어떤 플로팅 팔레트가 어디에 열려 있는지까지 담습니다. 프리셋 ▸ 현재 상태를 셋업으로 저장…(또는 셋업 패널)에서 저장한 다음, 프리셋 메뉴 맨 위에서 셋업을 전환하십시오. 활성 셋업에는 체크 표시가 붙습니다. 윈도우를 옮기는 동안 팔레트 배치가 활성 셋업에 자동으로 저장되므로, 셋업은 언제나 실제 작업 방식을 그대로 반영합니다. 표시할 서비스를 바꾸면 셋업이 변경됨 상태가 되고, 도구 막대에 업데이트, 새로 저장, 되돌리기가 있는 주황색 저장 안 됨 배지가 나타납니다.
셋업은 위치에 연결할 수도 있습니다(8장). “사무실” 셋업을 사무실 네트워크에 연결해 두면, 도착했을 때 FrontierStack이 자동으로 그 셋업으로 전환합니다. 지금 있는 곳에 맞는 서비스와 팔레트가 준비됩니다.
3.4플로팅 팔레트와 미니 팔레트
다른 곳에서 작업하는 동안 어떤 화면 하나를 계속 띄워 두고 싶을 때가 있습니다. 모니터 형식의 패널은 어느 것이든 플로팅 팔레트로 분리할 수 있습니다. 플로팅 팔레트는 macOS NSPanel 기반의 작고 항상 위에 있는 유틸리티 윈도우로, 메인 윈도우와 다른 앱 위에 머뭅니다. 도구 막대의 분리 버튼을 사용하십시오(맨 앞의 팔레트를 닫으려면 ⌘⌥⇧W). 로컬 상태, 컨테이너, 클라우드 서버, Wi-Fi 분석기 등을 모두 띄울 수 있습니다.
더 가볍게 쓰고 싶다면 미니 팔레트가 있습니다. 전체 패널 대신 한눈에 볼 수 있는 간결한 요약입니다. 미니 팔레트는 로컬 상태, Cloudflare 영역, Wi-Fi, 프린터, 라우터 및 네트워크, 컨테이너, 스크립트, 메시지 전송, AWS용이 있습니다. 각 미니 팔레트 행에는 세부 정보가 필요할 때 메인 윈도우에서 해당 패널을 여는 버튼이 있습니다. 열려 있는 팔레트는 셋업의 일부이므로, 저장된 보기를 불러오면 플로팅 윈도우가 배치해 둔 그대로 복원됩니다.
3.5명령 및 AI 팔레트
도구 막대의 요술 지팡이 버튼은 AI 어시스턴트 팔레트를 엽니다. 무엇이든 물어볼 수 있는 입력 필드 하나(“사이트가 왜 다운됐지?”, “MySQL 튜닝”, “내가 쓰는 것만 보여 줘”)가 있는, 드래그할 수 있고 항상 위에 있는 NSPanel입니다. 13장에서 다루는 AI 관리자와 같은 것으로, 무엇을 하든 그 옆에 둘 수 있는 플로팅 윈도우로 꺼내 놓은 것입니다. 다른 플로팅 팔레트와 마찬가지로 메인 윈도우 위에 머물지만, 다른 팔레트와 달리 대답하고, 해결책을 제안하며, 승인을 받으면 직접 실행합니다. 자체 대화 기록과 변경을 가하는 모든 동작에 대한 승인 카드를 갖추고 있어, 여러분이 허락하기 전에는 아무것도 실행되지 않습니다.
3.6메뉴 막대 항목
FrontierStack은 macOS 메뉴 막대에 작은 항목을 둘 수 있습니다(메뉴 막대에 표시 토글). 윈도우 전체를 앞으로 가져오지 않고 작업하는 가장 빠른 방법입니다. 여기에서 시작 그룹을 시작하거나 중지하고, 핵심 서버(Apache, Nginx, PHP-FPM, MySQL, Postgres) 중 하나 또는 실행 중인 모든 것을 한꺼번에 재시작하고, 상태를 새로 고치고, 앱을 열거나 종료할 수 있습니다. 백그라운드만은 앱을 종료하되 백그라운드 서비스(MCP, CLI, 페어링된 기기, 모니터)는 계속 실행합니다. 필요하면 먼저 백그라운드 서비스를 켭니다. FrontierStack 아이콘은 이제 백그라운드 서비스가 제공하는 형태로 메뉴 막대에 남으며, FrontierStack 열기와 FrontierStack 종료가 있습니다. 여기서 종료하면 다음에 FrontierStack을 열거나 다시 로그인할 때까지 백그라운드 서비스가 중지됩니다. 백그라운드 실행이 유휴 상태로 종료된 뒤에도 아이콘은 남습니다. 로그인 시 실행 설정은 설정 › 일반에 있습니다.
Localhost 사이트 섹션에는 Localhost 패널의 모든 사이트가 이름별로 나열됩니다. 실행 중이면 채워진 원, 중지되어 있으면 빈 원으로 표시되며, 무엇이 사이트를 제공하는지와 그 버전(예: Apache 2.4.62 · PHP 8.3.14 또는 PHP 8.4.5)도 함께 표시됩니다. 각 사이트의 하위 메뉴에서 사이트를 시작, 중지, 재시작하거나 열 수 있습니다. 시작하고 브라우저에서 열기는 서버가 수신 대기할 때까지 기다린 다음 페이지를 엽니다.
3.7앱 내 검색
검색(돋보기, ⌘F)은 무엇에든 가장 빨리 도달하는 방법입니다. “서비스, 도구 및 동작 검색…”에 입력을 시작하면 입력하는 대로 팔레트가 패널, 도구, 서비스, 동작을 찾아 줍니다. 사이드바에서 숨긴 서비스도 포함됩니다. 결과를 선택하면 앱이 곧바로 그곳으로 이동합니다. 시맨틱 모드를 사용하면 정확한 이름 대신 의미(“IP 차단”, “디스크 공간 확보”)로 검색할 수 있으므로, FrontierStack이 그 기능을 무엇이라고 부르는지 몰라도 찾을 수 있습니다.
3.8도움말 윈도우
⌘?로 도움말을 열면 전용 FrontierStack 도움말 윈도우가 나타납니다. 앱의 구성을 그대로 따라 정리된, 진짜 책과 같은 앱 내 문서입니다. 도움말은 읽기만 하는 것이 아닙니다. 페이지에는 앱에서 열기 링크가 있습니다. 링크를 클릭하면 FrontierStack이 메인 윈도우를 바로 그 패널이나 서비스로 이동시킵니다. 도움말 윈도우는 그 옆에 열린 채로 남으므로, 절차를 읽으면서 단계별로 따라 할 수 있습니다. 많은 패널의 헤더에는 해당 주제의 도움말을 여는 작은 도움말 버튼이 있습니다.
3.9메모 패널
메모는 자격 증명, 운영 절차서(런북), 서비스별 지침을 보관하는 개인 공간입니다. 각 메모에는 제목, 서비스 태그, 본문이 있으며, 전체가 일반 파일이 아니라 macOS 키체인에 암호화되어 저장됩니다. 가장 중요한 특징은 메모별 잠금입니다. 모든 메모에는 AI 관리자와 공유 토글이 있으며 기본값은 꺼짐입니다. 메모가 잠겨 있는 동안에는 AI가 말 그대로 그 메모를 읽을 수 없습니다. 어시스턴트가 해당 자격 증명이나 절차를 사용하기를 원할 때만 메모 잠금을 해제하십시오. 그러면 메모가 AI의 list_notes에 나타나고 필요할 때 읽을 수 있게 됩니다.
3.10상태 페이지
상태 페이지 패널은 로컬 상태와 같은 가동/중단 데이터로 만든 정적 index.html을 게시하므로, 고객이나 동료가 앱에 접근하지 않고도 무엇이 실행 중인지 볼 수 있습니다. 대상 위치를 선택하십시오. Apache 사이트 중 하나의 DocumentRoot 안에 있는 폴더를 선택하면 /status/ 같은 경로로 제공됩니다. 그런 다음 페이지 제목을 정하고 항목 세부 정보 포함 여부를 결정하십시오(공개 페이지에서는 세부 정보 줄을 끄십시오. 내부 호스트와 포트가 드러날 수 있습니다). 페이지는 설정한 간격마다 다시 생성되며, 지금 생성으로 즉시 생성할 수도 있습니다. 제공 방식에서 Apache 또는 내장 서버(원하는 포트에서 localhost나 LAN으로 제공하는 번들 정적 파일 서버)를 선택하고, 실행으로 로그인 시 또는 시스템 시작 시 그 서버를 계속 실행하게 하면 앱을 닫은 뒤에도 페이지가 유지됩니다. 서버 섹션에는 모니터가 있는 고정된 서버를 나열할 수 있으며, 앱이 닫혀 있는 동안에도 실시간으로 유지됩니다. 인터넷 접근은 지속적인 경로(Cloudflare Tunnel, Tailscale, Dynamic DNS를 사용한 라우터 포트 포워딩)를 제공합니다. 자세한 내용은 11장을 참조하십시오.
3.11로컬 상태와 위치 한눈에 보기
두 개의 개요 패널이 일상적인 사용의 중심이 되며, 각각 별도의 장에서 자세히 다룹니다. 로컬 상태는 “모든 것이 정상인가?”에 답하는 보드입니다. 모니터링 중인 모든 서비스, 기기, 하위 시스템을 UP 또는 DOWN 상태와 한 줄 요약으로 보여 줍니다. 각 항목의 패널에서 중요 항목으로 표시하면 보드에 추가되며, 이 보드는 플로팅 팔레트와 미니 팔레트로도 쓸 수 있습니다. 상태 점검, 임계값, 알림을 구동하는 방식 등 전체 내용은 11장에서 다룹니다.
위치는 지금 Mac이 네트워크상 어디에 있는지 — 집, 사무실, VPN 연결 중 — 를 Wi-Fi 네트워크나 서브넷으로 판별하여 앱에 알려 줍니다. 위치 덕분에 모니터링이 네트워크를 인식합니다. 인식되지 않는 곳에 있는 동안 앱은 여러분을 외출 중으로 간주하고 위치 범위의 점검을 일시 중지하므로, 카페나 호텔 네트워크에서 잘못된 경보가 울리는 일이 없습니다. 위에서 본 것처럼 위치는 셋업과도 연결됩니다. 위치 정의, 알림과 도달 가능성의 범위 지정, 플릿 등 전체 모델은 8장에서 다룹니다.
레이아웃을 익혔으니 이제 실제로 활용할 준비가 되었습니다. 매뉴얼의 다음 부에서는 4장, 웹 스택부터 시작하여 패널 자체를 하나씩 열어 봅니다.
제II부
눈앞의 Mac에서 웹 스택, 데이터베이스, 서비스 카탈로그, 그리고 사이트를 운영합니다.
제4장
웹 스택
Apache 또는 Nginx, 사이트마다 필요한 PHP 버전, 가상 호스트, 신뢰할 수 있는 로컬 HTTPS와 DNS — 웹 스택 전체를 설정 파일을 직접 고치지 않고 하나의 윈도우에서 제어합니다.
웹 서버는 대부분의 셀프 호스팅 환경에서 핵심이므로, FrontierStack은 웹 서버를 가장 중요한 요소로 다룹니다. Apache 패널은 Homebrew Apache를 설치, 시작, 검증하고 구성합니다. PHP, Localhost, Certificates, DNS 패널이 더해져 완전한 개발 및 호스팅 스택을 이루며 — 모든 변경은 검증을 거치므로 오타 하나로 사이트가 조용히 다운되는 일은 없습니다.
이 장에서는 지금 사용 중인 Mac에서 웹 사이트를 만들고 운영하는 패널을 다룹니다. 이 스택을 실제 도메인과 공용 인터넷에 연결하는 방법은 7장에서, 프로덕션용으로 보안을 강화하는 방법은 10장에서 설명합니다.
4.1Apache 패널
사이드바에서 Apache 패널을 열면 웹 서버의 상태(버전, 실행 여부, 수신 대기 중인 포트)를 한눈에 볼 수 있습니다. 상단의 버튼은 매일 사용하는 제어 기능인 시작, 중지, 재시작, 구성 검증입니다. 검증은 apachectl -t(실제 구문 검사)를 실행하고 결과를 마지막 결과에 표시하므로, 다시 로드하기 전에 변경 사항이 올바른지 확인할 수 있습니다.
FrontierStack은 macOS 시스템 Apache 대신 Homebrew Apache를 권장합니다. Homebrew 서버는 /opt/homebrew(Intel Mac에서는 /usr/local) 아래에 있으며, brew services를 통해 사용자 권한으로 실행되므로 작업할 때마다 root 암호를 묻지 않고, System Integrity Protection의 제한도 받지 않습니다 — 따라서 최신 mod_php가 문제없이 로드되고 스택 전체가 하나의 툴체인에 머뭅니다. /etc/apache2 아래의 시스템 Apache는 OS 업데이트 시 초기화되며, Apple이 번들로 제공하는 libphp에 묶이게 됩니다. Homebrew Apache가 설치되어 있지 않으면 패널에서 Homebrew Apache 설치…를 클릭 한 번으로 실행할 수 있습니다.
Homebrew 빌드, 레거시 로컬 빌드, 원격 서버의 빌드 등 여러 Apache 빌드를 함께 사용하는 경우, 바이너리 선택기(Homebrew Apache 추가 / 로컬 빌드 추가… 참조)로 각각을 등록하고 전환할 수 있으며, 각 빌드의 버전과 포트가 함께 표시됩니다.
/opt/homebrew/etc/httpd/frontierstack/에 있으며, httpd.conf의 IncludeOptional로 불러옵니다. 앱의 가상 호스트, MIME 유형, 관리형 include를 이곳에 모아 두므로 직접 작성한 httpd.conf는 깔끔하게 유지되고, FrontierStack이 무엇을 추가했는지 언제든 구분할 수 있습니다.4.2모듈, 포트, 관리형 구성
Apache 패널 아래쪽에는 가장 자주 편집하는 구성 부분이 파일이 아닌 컨트롤 형태로 제공됩니다.
| 섹션 | 기능 |
|---|---|
| 포트 | HTTP 및 SSL 수신 대기 포트(기본값 80과 443)를 설정합니다. Nginx가 80/443을 사용 중이면 Apache를 다른 포트로 옮기십시오. 적용을 누르면 Listen 지시어를 다시 쓰고 다시 로드합니다. |
| Apache 모듈(모듈…) | 로드된 모듈을 나열하고 활성화하거나 비활성화합니다. 사용하지 않는 모듈을 비활성화하는 것이 가장 간단한 보안 강화 방법입니다. |
| PHP 모듈 | Apache가 웹 사이트용으로 로드할 mod_php(libphp.so)의 버전을 선택합니다 — 다음 섹션을 참조하십시오. |
| WebDAV | 공유 폴더에 mod_dav를 활성화하고, 선택적으로 Basic 인증 사용자를 설정해 관리형 include에 기록합니다. |
| MIME 유형 편집… | FrontierStack이 관리하는 MIME 파일에서 AddType 매핑을 추가하거나 제거하며, 배포판의 mime.types는 건드리지 않습니다. |
컨트롤로 제공되지 않는 항목은 구성 행의 관리형 구성 편집…(FrontierStack include)과 httpd.conf 편집…(주 파일)으로 직접 편집할 수 있습니다. 저장할 때마다 apachectl -t로 검증하고, 정상적으로(graceful) 다시 로드하며, 새 구성을 해석할 수 없으면 롤백합니다 — 따라서 잘못된 편집은 실행 중인 서버를 망가뜨리기 전에 걸러집니다.
httpd.conf를 직접 편집하는 것은 강력하지만 보호 장치가 없습니다. 앱은 구문 오류가 있으면 검증 후 롤백하지만, 구문은 올바르더라도 문서 루트가 잘못된 위치를 가리키는 구성은 여전히 파일을 노출할 수 있습니다. FrontierStack 자체의 추가 사항에는 관리형 include를 사용하고, 큰 변경을 할 때는 사본을 보관하십시오.모듈을 켜고 끄면 해당 LoadModule 줄을 다시 쓰고 재검증합니다. 변경 후 httpd -t가 실패하면 — 대표적인 예가 proxy 없이 proxy_fcgi를 활성화하는 경우로, 이제 앱이 자동으로 활성화해 줍니다 — 모듈 윈도우가 오류를 표시하고 조용히 닫히지 않습니다. 오류를 수정하거나 그래도 저장을 선택하십시오. Apache가 멈춰서 시작되지 않을 때(이미 로드된 서비스나, sudo brew services로 인해 일부 httpd 경로의 소유자가 root가 된 경우에 발생하는 전형적인 Homebrew 오류 Bootstrap failed: 5: Input/output error), 패널의 복구 및 재설정 섹션에서 단계별로 강도가 높아지는 세 가지 해결책을 제공합니다. 깨끗하게 재시작(사용자 및 시스템 launchd 도메인 양쪽에서 httpd를 중지한 다음 한 번 시작), 구성을 기본값으로 재설정(httpd.conf를 백업하고 Homebrew 기본 구성을 복원), 제거 후 재설치(root 소유 경로를 정리하고 formula를 재설치)입니다. 모두 앱 내 콘솔에서 실행되므로 sudo 프롬프트와 출력을 확인할 수 있습니다. Apache에 서비스 워치독의 keep-alive도 켜져 있으면 워치독이 httpd를 스스로 재시작할 수 있습니다 — 정상적인 동작이지만, 수동 복구와 충돌한다면 일시 중지하십시오.
4.3PHP 버전 선택
PHP 패널을 열어 Mac에 설치된 PHP 런타임을 관리합니다. Homebrew에서는 여러 메이저 버전(예: [email protected]부터 최신 릴리스까지)을 나란히 설치할 수 있으며, FrontierStack은 이를 하나의 전역 설치가 아니라 전환해 가며 사용하는 버전 묶음으로 다룹니다.
버전 ▸ 버전 추가…는 기존 버전과 나란히 다른 버전을 설치합니다 — 어떤 것도 교체되지 않으며, 사용 중인 버전도 바뀌지 않습니다. 목록은 두 부분으로 나뉩니다. Homebrew 자체 릴리스는 업스트림에서 아직 지원하는 버전입니다. 그 아래에는 지원 종료(EOL) 빌드 — PHP 8.0부터 5.6까지 — 가 있으며, 이들은 PHP에서 더 이상 패치하지 않고 Homebrew에서도 제외된 버전입니다. FrontierStack은 이 버전들을 커뮤니티 shivammathur/php tap에서 가져오며, tap에서 설치한다는 것은 해당 tap의 코드를 실행한다는 뜻이므로 각 버전마다 먼저 확인을 요청합니다. 지원 종료 PHP는 자신의 컴퓨터에서 레거시 사이트를 테스트하거나 유지 관리하는 용도로만 사용하고, 절대로 공용 인터넷에 노출하지 마십시오.
선택할 수 있는 항목은 두 가지입니다.
- Apache 모듈. Apache 패널의 PHP 모듈 섹션에 있는 웹 사이트용으로 로드 선택기에서 Apache가 로드할
libphp.so의 버전을 선택합니다. 변경하면 관리형 구성을 다시 쓰고 Apache를 다시 로드합니다. - 사이트별 PHP. 로컬 개발 서버(아래의 Localhost 패널)에는 설치된 모든 버전을 나열하는 자체 PHP 버전 선택기가 있어, 컴퓨터의 다른 부분이 사용하는 버전을 바꾸지 않고도 한 프로젝트는 구버전 PHP로, 다른 프로젝트는 최신 버전으로 실행할 수 있습니다. 레거시 앱과 새 앱을 동시에 문제없이 운영하는 일반적인 방법입니다. 이 설정은 두 가지 로컬 런타임, 즉 PHP 내장 서버와 Apache 런타임 모두에 적용됩니다.
mod_php로 서비스하는 Apache에는 한 가지 주의할 점이 있습니다. 해당 버전의 keg에libphp.so가 포함되어 있어야만 사용할 수 있으며, 선택한 버전에 없으면 편집기가 알려 줍니다. 그런 경우 해당 사이트를 내장 서버에서 실행하거나 PHP-FPM으로 서비스하십시오.
런타임 상태 패널은 PHP와 함께 Python, Node.js, Java, Go, Rust, Ruby, Perl, .NET까지 더 넓은 범위를 보여 주며, 자체 점검 기능으로 누락되었거나 지원이 종료된 런타임을 문제가 생기기 전에 알려 줍니다.
런타임 섹션에는 프런트엔드 작업을 위한 React 패널도 있습니다. 새 앱(Vite, TanStack Start 또는 Next.js)의 기본 구조를 생성하고, 임의의 React 프로젝트를 지정할 수 있으며, 용도별로 정리된 엄선된 보조 라이브러리 목록을 제공합니다 — 상태 관리(Zustand, Jotai, Redux Toolkit), 데이터 페칭 및 서버 상태(TanStack Query — 예전 이름은 React Query — 와 SWR), 풀스택 프레임워크(TanStack Start, Next.js), 라우팅, 유효성 검사(ArkType, Zod), 폼, 인증(Clerk). 각 행에는 문서, 선택한 프로젝트에서 이미 사용 중인지 여부, 해당 프로젝트에 클릭 한 번으로 실행하는 npm install이 표시됩니다.
4.4사이트와 가상 호스트
Apache 패널의 웹 사이트 목록에서 가상 호스트를 관리합니다. 각 행에는 사이트 이름, 바인드 주소와 포트(예: :8080), 실시간 상태를 나타내는 실행 중 토글이 표시됩니다. 버튼으로 사이트 추가…, 편집, 복제, 비활성화, 서버로 푸시…(가상 호스트를 연결된 서버로 복사), 브라우저에서 사이트 열기를 할 수 있습니다. 사이트 가져오기…와 다음에서 복사…는 MAMP, XAMPP, Apple의 Server.app 또는 다른 Apache에서 기존 가상 호스트를 가져오며, 기본적으로 localhost에 바인드됩니다.
사이트를 추가하거나 편집할 때는 가상 호스트에 필요한 필수 항목을 설정합니다. ServerName(도메인), 문서 루트(선택…으로 폴더 지정), 바인드 주소와 포트입니다. 사이트를 활성화하면 실시간 상태 점과 함께 목록에 나타납니다. FrontierStack은 관리형 트리 아래의 .conf 파일에 가상 호스트를 기록하고, 검증한 뒤 다시 로드합니다. 가상 호스트, 인증서, Cloudflare DNS 레코드를 한꺼번에 만들려면 새 사이트 + DNS…를 사용하십시오 — 7장에서 설명하는 원스톱 마법사입니다.
127.0.0.1에 바인드하면 내 Mac에서만 접근할 수 있습니다 — 작업 중인 사이트에 가장 안전한 기본값입니다. 다른 컴퓨터에서 접근해야 할 때만 바인드 주소를 0.0.0.0 또는 LAN IP로 바꾸십시오.4.5사이트용 TLS 인증서
Certificates 패널은 사이트에 자물쇠 아이콘을 표시해 주는 인증서를 발급하고 관리합니다. 용도에 따라 세 가지 방법을 제공합니다.
| 방법 | 용도 |
|---|---|
| mkcert(인증서 받기(mkcert)) | 신뢰할 수 있는 로컬 HTTPS. mkcert는 Mac이 신뢰하는 로컬 인증 기관을 설치하므로 https://myapp.test가 브라우저 경고 없이 동작합니다 — 개발에 이상적입니다. 먼저 mkcert 설치로 설정하십시오. |
| Let’s Encrypt (ACME) | acme.sh 또는 certbot을 통해 실제 도메인용으로 브라우저가 신뢰하는 공개 인증서를 발급합니다. webroot(도메인이 이미 HTTP를 서비스하는 경우) 또는 Cloudflare를 통한 DNS-01(인바운드 HTTP 불필요) 방식으로 발급합니다. 지금 모두 갱신과 갱신 cron으로 최신 상태를 유지합니다. |
| 자체 서명 인증서 생성 | 브라우저 경고를 감수할 수 있는 내부용 또는 테스트용의 간단한 인증서입니다. |
발급한 후에는 Apache에 배포로 인증서를 사이트의 가상 호스트에 연결합니다. 만료 모니터링 섹션은 인증서(및 감시로 추가한 도메인)를 감시하고 만료되기 훨씬 전에 알림을 보냅니다 — HSTS와 최신 암호화 정책을 포함한 더 깊은 보안 강화 내용은 10장에서 다룹니다.
4.6이 Mac과 연결된 서버의 인증서 업데이트
설치된 인증서의 모든 인증서에는 발급자와 남은 일수가 표시됩니다. 행의 업데이트…는 인증서를 그 자리에서 갱신하며, 해당 인증서에 맞는 방법만 제공합니다. 자체 서명 재발급(기본적으로 같은 개인 키 사용, 최대 397일), certbot으로 갱신 또는 acme.sh(클라이언트 자체의 배포 훅이 실행됨), mkcert로 갱신, 또는 다른 곳에서 구입한 인증서의 경우 파일에서 교체…입니다. 이전 파일은 새 파일 옆에 .bak로 보관되며, 같은 단계에서 웹 서버를 다시 로드할 수 있습니다.
연결된 서버가 있으면 패널 상단에 호스트 선택기가 나타납니다. 서버를 선택하면 패널이 SSH를 통해 해당 서버의 인증서를 읽어 옵니다. Let’s Encrypt 계보, acme.sh, /etc/ssl, 그리고 nginx, Apache, Caddy, HAProxy 인증서 폴더가 대상입니다. 개인 키가 옆에 있는 인증서만 나열됩니다. 업데이트와 생성…도 그곳에서 동작하며, 변경은 서버에 저장된 sudo 암호를 사용해 root로 실행되므로 암호가 없으면 서버는 읽기 전용으로 표시됩니다.
설치된 인증서는 이 Mac과 연결된 서버 모두에서 자동으로 감시되므로, 별도 설정 없이 알림이 만료 전에 경고합니다. 각 행의 종 아이콘으로 감시를 켜거나 끌 수 있으며, 처음 발견했을 때 이미 만료된 인증서는 제외됩니다.
CF_TOKEN 보관함 비밀 값으로 저장되어 실행 시에 주입되며, 클라우드 AI로 전송되지 않습니다.4.7.htaccess 편집기
디렉터리별 Apache 규칙 — 재작성, 리디렉션, 접근 제어 — 은 .htaccess 파일에 있으며, FrontierStack은 줄 번호와 구문 점검 기능을 갖춘 전용 편집기를 제공합니다. 사이트 루트 사용으로 사이트 문서 루트의 .htaccess를 열거나 사용자 지정 경로를 지정하십시오. 레시피 삽입은 흔히 쓰이는 올바른 스니펫(프런트 컨트롤러 재작성, HTTPS 강제 블록)을 넣어 주므로 기억에 의존하지 않고 동작하는 규칙에서 시작할 수 있으며, 편집기는 저장하기 전에 명백한 문제를 표시합니다. PHP 라우터 내보내기…는 .htaccess 재작성 규칙을 PHP 내장 개발 서버용 라우터 파일로 변환합니다 — 사이트를 Localhost 패널로 옮길 때 유용합니다.
4.8Nginx와 리버스 프록시
FrontierStack은 Nginx를 대체 웹 서버로, 또는 앱 앞단의 리버스 프록시로 관리합니다. 둘 다 설치되어 있으면 도메인 보기에서 사이트를 서버별로 묶어 Apache 가상 호스트와 Nginx server 블록을 나란히 보여 주며, 각 Nginx server 블록의 listen 포트, root, TLS 상태를 읽어 옵니다. 리버스 프록시는 높은 번호의 포트에서 HTTP로 동작하는 애플리케이션(Node, .NET 또는 Python 서비스)을 앞단에서 받아 주는 표준 패턴입니다. Nginx가 443에서 TLS를 종료하고 앱으로 전달합니다. Apache와 Nginx는 둘 다 기본적으로 80/443을 사용하려 하므로, 함께 실행한다면 Apache 패널의 포트 섹션에서 한쪽을 다른 포트로 옮기십시오.
4.9Localhost, DNS, 개발 스택
로컬 환경을 완성하는 패널이 세 가지 더 있습니다.
- Localhost — 임시 로컬 개발 서버 관리자입니다. 새 로컬 서버를 추가하고, 런타임(PHP, Python/Django, Node/Vite…)과 폴더를 선택한 다음, 포트와 선택적인
ServerName을 설정하고 시작하십시오 — 서버별 환경 전역 변수와 .test 리졸버가 있어myapp.test가 로컬에서 해석됩니다. 빈 포트 도우미와 localhost를 점유한 프로세스 중지 작업으로 흔히 발생하는 충돌을 해결할 수 있습니다. Tailscale에서도 서비스를 체크하면 다른 Tailscale 기기에서 이 Mac의 tailnet 주소와 같은 포트로 서버에 접근할 수 있습니다 — 서버는 여전히 localhost에서만 수신 대기하고 FrontierStack이 tailnet 연결을 서버로 전달하므로, LAN에서는 접근할 수 없습니다. Django 서버의 경우 Tailscale 호스트 허용…이 변경 내용을 보여 준 뒤 프로젝트의ALLOWED_HOSTS에 tailnet 주소를 추가합니다(설정이 환경 변수로 구성된 경우에는 추가할 줄을 알려 줍니다). AI 관리자(및 MCP를 통한 에이전트)도debug_share작업serve로 같은 방식으로 폴더를 시작할 수 있습니다. 응답에는 localhost 호스트와 포트, 요청한 경우 Tailscale URL이 포함되므로 에이전트가 사이트가 실행 중인 위치를 보고할 수 있습니다. - DNS — 로컬 이름 해석과 권한 있는(authoritative) 호스팅입니다.
dnsmasq,unbound또는nsd를 실행하고, 영역 파일을 가져오거나 내보내며, 레코드가 바뀌면 리졸버 캐시를 비워 Mac이 오래된 응답을 반환하지 않게 합니다. - LAMP / DevStacks — 원클릭 스택입니다. LAMP 패널은 서로 맞춰진 구성 요소 세트를 함께 설치하고 시작하는 프리셋(셋업 선택)을 제공합니다(설치 및 시작, 모두 시작, 모두 중지). DevStacks는 프로젝트 폴더의 프레임워크를 감지하고 실행에 필요한 명령과 npm 스크립트를 보여 줍니다.
Localhost 개요는 실행 중인 모든 로컬 서버를 나란히 보여 주므로, 터미널 윈도우를 잔뜩 띄워 놓고 일일이 지켜볼 필요 없이 여러 사이트를 동시에 실행할 수 있습니다.
4.10사이트를 온라인에 공개하고 에이전트에게 맡기기
모든 로컬 서버의 세부 정보에는 인터넷 접근 상자가 있습니다. Cloudflare 호스트 이름을 선택하고 내 영역 중 하나에 속한 이름(예: demo.example.com)을 입력하면, FrontierStack이 라우트와 DNS 레코드를 추가하고 cloudflared를 시스템 서비스로 실행하므로 앱을 닫아도, 재부팅한 후에도 주소가 유지됩니다. 첫 사이트에서는 관리자 암호를 한 번 묻습니다. 이후 사이트는 같은 터널을 공유하며 각자 고유한 호스트 이름을 가집니다. 다른 선택지로 임시 링크(trycloudflare.com)와 Tailscale Funnel이 있습니다. Vite와 Django는 보통 알 수 없는 호스트 이름을 거부하므로, Cloudflare 라우트는 대신 localhost를 전달하여 별도 수정 없이 동작하게 합니다.
같은 지구본 버튼이 Apache ▸ 웹 사이트 행(터널이 ServerName으로 Apache에 사이트를 요청)과 카탈로그 서비스, Docker 컨테이너, Vagrant 박스, Spin 앱에도 있습니다.
호스팅 환경설정…(Localhost 패널과 설정 ▸ 웹 사이트 및 호스팅에 있음)에서는 새 사이트를 어디에 둘지 지정합니다. 이 Mac, Apache 사이트, 내 서버 중 하나, here.now, Hostinger, Vercel 또는 ChatGPT Sites 중에서 고를 수 있고, 원한다면 사이트 종류별로 다른 위치를 지정할 수도 있습니다. 또한 새 사이트 이름에 사용할 도메인, 사이트를 만들 폴더, 누가 사이트를 빌드할지, 빌더가 따를 디자인 스킬(SKILL.md가 들어 있는 폴더)도 여기서 지정합니다.
그런 다음 AI 관리자에게 사이트를 요청하십시오(“빵집용 원페이지 사이트, 따뜻한 색감, 영업시간과 지도 포함”). AI 관리자는 한 번에 폴더를 만들고, 사이트 설정이 담긴 .env(암호는 절대 넣지 않음), BRIEF.md, 빌더용 규칙을 담은 AGENTS.md, .claude/skills의 디자인 스킬을 작성하고, 서버를 시작하고, 공개 주소를 부여하고, 첫 git 커밋을 만듭니다. 그런 다음 페이지를 직접 빌드하거나, 격리된 Sandcastle 컨테이너에서 실행되는 Claude Code 또는 Codex에게 작업을 넘깁니다. 이들이 작업을 마치면 파일이 폴더로 다시 복사되고 알림이 표시됩니다. MCP로 연결된 외부 에이전트도 같은 셋업을 요청하고 전달받은 폴더에서 빌드할 수 있습니다.
vhost_create는 가상 호스트를 만들고, reload_webserver는 Apache 또는 Nginx를 테스트한 뒤 정상적으로 다시 로드하며, issue_certificate는 Let’s Encrypt 인증서를 발급받습니다. 이들은 변경을 가하는 도구이므로 각각 승인 카드를 표시하고 변경 허용이 활성화되어 있어야 합니다 — AI는 사용자가 이 패널에서 하는 일을 똑같이 수행할 뿐이며, 허용되지 않은 일은 하지 않습니다.제5장
데이터베이스 및 데이터
MySQL, PostgreSQL, Redis 등을 하나의 윈도우에서 운영하고, AI가 사이트의 데이터베이스를 점검하고 수정하게 하며, 모든 데이터를 백업하고 검증하여 언제든 복원할 수 있도록 유지합니다.
웹 스택의 품질은 그 아래에 있는 데이터에 달려 있습니다. FrontierStack은 데이터베이스를 일급 서비스로 다룹니다. 데이터베이스를 설치하고 실행하며, 내용을 살펴보고, AI 관리자가 일상 언어로 사이트의 데이터베이스를 점검하고 복구할 수 있게 합니다. 그리고 대부분의 구성에서 빠뜨리는 부분 — 실제로 복원할 수 있는 검증된 일정에 따라 모든 것을 백업합니다. 이 장에서는 관계형 엔진, 인메모리 캐시, 새로운 벡터 및 분석 저장소, 그리고 이 모두를 보호하는 백업 체계를 다룹니다.
5.1MySQL / MariaDB 패널
사이드바의 Databases 섹션에서 MySQL을 여십시오. 서버가 없으면 이 패널이 Homebrew로 설치한 다음, 예전에 Server.app이 제공하던 제어 기능을 보여 줍니다. Start, Stop과 실시간 상태 표시등, 수신 포트(기본값 3306), 그리고 서버에 있는 데이터베이스 목록입니다. MySQL과 호환되는 대체 포크인 MariaDB도 같은 방식으로 관리되며, 패널은 설치된 쪽을 자동으로 인식합니다.
로컬 개발에는 의도적인 규칙이 하나 있습니다. 로컬 root 계정에는 암호가 없습니다. 이는 MAMP/XAMPP의 관례이며, 원클릭 설정과 AI의 SQL 도구가 자격 증명 입력 없이 작동하는 이유이기도 합니다. Mac의 MySQL은 127.0.0.1에서만 수신하고 해당 기기에서만 접근할 수 있으므로 안전합니다. 데이터베이스에 다른 곳에서 접근해야 하는 순간 — 암호가 설정된 계정이나 연결된 서버의 데이터베이스 — 아래에서 설명하는 비밀 값 보관함으로 전환합니다.

root는 사용 중인 Mac에서 localhost에 바인딩된 MySQL에만 해당합니다. 이는 개발 편의를 위한 것이며, 네트워크에서 연결을 받는 서버에 권장하는 방식이 아닙니다. 프로덕션 데이터베이스에는 실제 암호를 설정하고 보관함에 저장합니다.5.2Database Ops와 SQL 실행
Database Ops 패널에서는 데이터베이스가 더 이상 블랙박스가 아닙니다. Replication 섹션은 구성된 서버가 MySQL 복제본인지 PostgreSQL 스탠바이인지 감지하고 지연을 표시합니다. MySQL은 SHOW REPLICA STATUS(IO 및 SQL 스레드, Seconds_Behind_Source)를 읽고, PostgreSQL은 pg_is_in_recovery()와 재생 타임스탬프를 사용합니다. 복제가 중지되거나 지연이 임계값을 넘으면 설정한 채널로 알림을 보냅니다. 이것이 Database Slave 모니터링 프리셋의 기반입니다.
데이터를 점검하거나 수정할 때를 위해 AI 관리자에는 run_sql 도구가 있습니다. “이 주문들의 합계가 왜 틀리게 표시됩니까?”, “원본보다 오래된 중복 사용자를 삭제하십시오”처럼 일상 언어로 요청하면, 로컬 서버에 SQL을 실행하고 결과를 표로 보여 줍니다. MAMP의 Claude 통합과 비슷합니다. 문은 데이터를 변경할 수 있으므로 run_sql에는 변경 허용이 필요합니다. 읽기 전용 쿼리는 어시스턴트를 켜는 즉시 작동합니다. 기본적으로 암호 없는 로컬 root를 사용하며 설계상 로컬 전용입니다.
5.3암호가 설정된 데이터베이스와 원격 데이터베이스
로컬 root 지름길은 네트워크가 시작되는 지점에서 정확히 멈춥니다. 암호가 필요한 데이터베이스나 원격 서버 또는 연결된 서버에 있는 데이터베이스의 경우, 암호를 프롬프트나 도구에 붙여넣지 않습니다. 대신 AI 관리자의 Script secrets (.env) 막대에 이름이 붙은 비밀 값(DB_PASSWORD 또는 MYSQL_PWD)으로 한 번 추가합니다. 그러면 어시스턴트가 run_script를 통해 mysql 클라이언트를 실행하면서 값을 $DB_PASSWORD로 참조하고, 지정한 서버에 SSH로 실행합니다. 실제 값은 Mac에 남아 실행 시점에 주입되며, 클라우드 모델은 이름만 볼 뿐 비밀 값은 보지 못합니다.
.env 보관함에 추가하고 $NAME으로 참조하십시오. 값은 실행 시점에 로컬 또는 SSH를 통해 주입되며 AI로 전송되지 않습니다. 이는 FrontierStack 전체에서 사용하는 것과 같은 보관함 모델입니다. 13장을 참조하십시오.5.4PostgreSQL
고급 SQL, 풍부한 JSON, 전문 검색 또는 GIS가 필요한 프로젝트에는 Postgres를 여십시오. 이 패널은 PostgreSQL(기본 포트 5432)을 설치하고 실행하며, MySQL과 나란히 같은 시작/중지/상태 제어를 제공합니다. 애플리케이션이나 프레임워크가 PostgreSQL을 요구하면 PostgreSQL을 선택하고, 그렇지 않으면 MySQL/MariaDB가 손쉬운 기본 선택입니다. 두 엔진 모두 뒤에서 설명할 백업 작업과 AI 도구의 일급 대상이며, PostgreSQL은 아래의 여러 특수 저장소의 기반이기도 합니다 — 임베딩용 pgvector, 시계열용 TimescaleDB, Postgres 데이터베이스 위에 즉시 REST API를 제공하는 PostgREST.
5.5Supabase: 로컬 스택, 호스팅 프로젝트, Supabase MCP
Supabase 패널은 세 가지 수준에서 작동합니다. 로컬에서는 supabase CLI를 구동합니다. 프로젝트 폴더를 선택하고, 전체 스택(Postgres, Auth, Storage, Realtime, PostgREST, Edge Functions, Studio)을 Docker에서 Start하고, 서비스 URL과 키를 복사하고, 마이그레이션을 실행하고, SQL 콘솔을 열거나, 로컬 데이터베이스를 Database Ops 백업 작업으로 등록할 수 있습니다. 호스팅 프로젝트의 경우 Supabase 개인 액세스 토큰(Account ▸ Access Tokens)을 Supabase — connection에 저장하십시오. 그러면 FrontierStack이 각 프로젝트의 상태를 표시하고, 프로젝트당 최대 30분에 한 번 Supabase의 보안 및 성능 어드바이저를 실행합니다. 프로젝트 ref를 나열하면 해당 프로젝트만 감시합니다. Alert me when this needs attention을 켜면 프로젝트가 비정상이거나 보안 어드바이저가 ERROR 수준의 결과(예: 행 수준 보안이 없는 공개 테이블)를 보고할 때 알림을 받습니다.
AI Access (Supabase MCP)는 AI 관리자를 Supabase의 공식 MCP 서버에 연결합니다. hosted 대상은 같은 토큰을 사용합니다. 프로젝트 ref를 입력하면 하나의 프로젝트로 제한되고, Allow writes를 끈 상태로 두면 읽기 전용 모드가 유지되며(Supabase는 모든 쿼리를 읽기 전용 Postgres 사용자로 실행하고 무언가를 변경하는 도구를 숨깁니다), 원하는 도구 그룹만 선택하십시오. local 대상은 스택 자체의 /mcp 엔드포인트이며, 보통 http://127.0.0.1:54321/mcp입니다. “내 Supabase 프로젝트에서 RLS가 없는 테이블은 무엇입니까?” 또는 “지난 1시간 동안의 인증 오류를 보여 주십시오”처럼 질문하십시오. 읽기는 바로 실행되며, 마이그레이션, 배포, 프로젝트 변경에는 Allow changes가 필요하고 항상 승인 카드가 표시됩니다. Other MCP clients는 Claude, Cursor 및 유사한 앱용으로 미리 만들어진 구성을 복사하고, MCP Servers에 읽기 전용 Supabase 항목을 추가할 수 있습니다.
5.6Redis와 기타 캐시
세션, 큐, 속도 제한, 핫 패스 캐싱에는 보통 관계형 테이블보다 인메모리 저장소가 적합합니다. FrontierStack은 Caching 카탈로그의 두 가지 표준을 실행합니다. Redis Streams의 기반이기도 한 인메모리 키-값 저장소 Redis(포트 6379)와, 단순한 분산 캐시용 Memcached(포트 11211)입니다. 다른 서비스와 마찬가지로 설치, 시작, 모니터링하십시오. 대부분의 CMS 및 프레임워크 배포는 Redis를 MySQL 또는 PostgreSQL과 함께 사용합니다. 서비스 카탈로그(6장)에 모든 선택지가 나와 있습니다.
5.7벡터 및 분석 데이터베이스
새로운 두 계열의 저장소는 각각 별도의 카탈로그 카테고리를 갖습니다. 벡터 데이터베이스는 검색 증강 생성(RAG)과 시맨틱 검색을 위한 임베딩을 저장합니다. AI 스택(15장)은 이를 통해 모델이 사용자의 문서에 접근할 수 있게 합니다. 분석 데이터베이스는 트랜잭션 읽기/쓰기가 아니라 대규모 데이터 세트에 대한 빠른 집계를 위해 만들어진 컬럼형 또는 시계열 엔진입니다.
| 엔진 | 종류 | 포트 |
|---|---|---|
| MySQL / MariaDB | 관계형 | 3306 |
| PostgreSQL | 관계형 | 5432 |
| Redis | 인메모리 캐시 / 스트림 | 6379 |
| Memcached | 인메모리 캐시 | 11211 |
| Qdrant | 벡터(RAG / 임베딩) | 6333 |
| Chroma | 벡터(임베딩) | 8000 |
| Weaviate | 벡터(하이브리드 검색) | 8080 |
| Milvus | 벡터(분산) | 19530 |
| pgvector | 벡터(Postgres 확장) | 5432 |
| ClickHouse | 컬럼형 OLAP 분석 | 8123 |
| InfluxDB | 시계열 | 8086 |
| TimescaleDB | 시계열(Postgres 확장) | 5432 |
| Apache Druid | 실시간 OLAP | 8888 |
순수하게 프로세스 내부에서 벡터 검색을 하려면 FAISS(라이브러리, 포트 없음)도 있습니다. 프레임워크가 요구하는 엔진을 선택하십시오. 각 패널은 같은 카탈로그 체계를 통해 엔진을 설치하고 실행합니다.
pgvector는 이를 기존 PostgreSQL 안에서 처리하며, Qdrant, Chroma, Weaviate, Milvus는 더 큰 컬렉션을 위한 전용 저장소입니다.5.8데이터 파이프라인 & ETL
이러한 저장소 사이에서 데이터를 옮기고 재구성하는 일은 그 자체로 하나의 분야입니다. Data Pipelines & ETL 카탈로그 카테고리는 이를 개요 수준에서 다룹니다. 수백 개의 커넥터로 추출·적재를 수행하는 Airbyte와 Meltano, SQL 기반 변환과 모델링을 위한 dbt, 그리고 작업 일정을 관리하는 Dagster, Prefect, Kestra 같은 오케스트레이터가 있습니다. 이들은 완전한 플랫폼입니다. FrontierStack은 이를 설치·실행하고 웹 UI를 제공하지만, 파이프라인 로직은 각 도구 안에 있습니다. 프로그래밍 방식의 데이터 파이프라인 DAG를 위해서는 Workflow Orchestration 카테고리에 Apache Airflow도 있습니다.
5.9백업: 덤프, 개요 패널, CCC
검증된 백업이 없는 데이터베이스는 언젠가 일어날 장애입니다. FrontierStack은 이 문제에 두 방향으로 접근합니다. Database Ops에서 서버별로 검증된 덤프 일정을 정의합니다. 이름, 엔진(MySQL 또는 PostgreSQL), 호스트, 포트, 사용자, 데이터베이스(비워 두면 전체), 백업 디렉터리를 지정합니다. 기한이 된 작업은 앱이 열려 있는 동안 자동으로 실행되며, Run Now로 즉시 실행할 수 있습니다. 각 실행은 단순한 덤프 이상입니다 — mysqldump는 일관된 InnoDB 스냅숏을 위해 --single-transaction으로 실행되고, 이어서 Verify가 gzip 무결성과 덤프가 완료 표시로 끝나는지(잘리거나 절반만 쓰인 파일을 잡아냄)를 확인하고, .md5 사이드카 파일을 쓰고, 보존 개수에 맞춰 순환한 다음, 키 기반 SSH로 결과를 외부 저장소에 rsync합니다.
AI 관리자는 같은 작업을 도구로 제공합니다. db_dump는 데이터베이스를 대상의 .sql 파일로 덤프하고(mysqldump 또는 pg_dump 사용), backup_now는 구성, 사이트 또는 데이터 폴더의 타임스탬프가 붙은 tar.gz를 만듭니다. 둘 다 변경을 가하는 도구이므로 승인과 변경 허용이 필요하며, DB 암호는 붙여넣은 값이 아니라 $NAME 보관함 비밀 값을 참조합니다.
Backups 개요 패널은 모든 체계를 한데 모아 오래된 백업을 한눈에 알아볼 수 있게 합니다. Time Machine 상태, Carbon Copy Cloner 작업, 앱이 관리하는 Apache 구성 스냅숏, Git의 구성 버전 기록, 예약된 자동 내보내기가 표시됩니다. Carbon Copy Cloner 패널은 CCC의 ccc 명령줄 도구를 통해 작업과 기록을 읽고, 필요할 때 작업을 Run할 수 있게 합니다. Time Machine과 CCC는 모두 알림 엔진에 연결됩니다 — 임계값 안에 실행되지 않은 백업이나 실패한 CCC 작업이 있으면 설정한 채널로 알림을 보냅니다(11장).
앱 자체의 설정도 보호됩니다. 사이드바의 고정 항목과 숨긴 서비스, 저장된 셋업, 네트워크 Locations는 macOS 환경설정에만 두지 않고 앱 지원 폴더의 JSON 파일에 보관됩니다. 모든 Git 스냅숏에 환경설정 사본과 함께 포함되며, 환경설정의 시간별 섀도 사본 덕분에 환경설정 파일이 지워져도 다음 실행 시 자동으로 복구됩니다. Config version history의 Restore App Settings…를 사용하면 최신 스냅숏에서 수동으로 복원할 수 있습니다.
5.10복원 — 그리고 복원 안전성
백업은 복원하기 위해 존재하며, 위험한 쪽은 복원입니다. AI의 restore 도구는 .tar.gz 아카이브를 추출하거나 .sql 덤프를 데이터베이스로 가져옵니다. 덤프를 가져오면 운영 중인 데이터베이스를 덮어쓰고 아카이브를 추출하면 파일을 그 자리에서 덮어쓰므로, restore는 변경을 가하며 파괴적일 수 있는 도구입니다. 항상 변경 허용 상태에서 명시적 승인이 필요하며, SQL 가져오기는 DB 암호를 $NAME 보관함 비밀 값으로 참조합니다.
.sql 덤프를 가져오면 대상 데이터베이스의 현재 내용이 교체되며, 자동으로 되돌릴 방법은 없습니다. 복원하기 전에 항상 현재 상태의 덤프를 새로 만들어(db_dump 또는 Run Now) 되돌릴 수 있게 하고, 올바른 데이터베이스와 올바른 서버를 가리키고 있는지 확인하십시오 — 실수로 프로덕션을 가리키고 있지 않은지 말입니다.5.11손상된 데이터베이스 복구
데이터베이스가 단순히 중단된 것보다 더 나쁜 상황도 있습니다 — 시작되지 않거나 테이블이 손상된 경우입니다. FrontierStack은 AI 관리자(13장)에게 직접 손으로 사용할 것과 같은 도구를, 평소와 같은 승인 카드 뒤에 제공합니다. mysql_check_tables와 pg_check_tables는 mysqlcheck / pg_amcheck를 실행해 손상되거나 크래시된 테이블을 찾습니다. repair를 켜면 먼저 mysqldump/pg_dump 백업을 만든 다음 복구(--auto-repair / REINDEX)하므로 수정 사항을 되돌릴 수 있습니다. mysql_service_control과 pg_service_control은 systemd, launchd, Homebrew 또는 service(8)를 통해 로컬이나 SSH로 서버를 시작, 중지, 재시작하거나 상태를 확인합니다.
어려운 경우를 위해 안내형 스킬인 “Recover Broken MySQL”과 “Recover Broken PostgreSQL”이 있습니다. 이 스킬은 전체 런북을 단계별로 진행합니다. 오류 로그를 읽고, 결함을 진단하고, 읽을 수 있는 모든 데이터를 덤프하고, 새 데이터 디렉터리에 다시 구축하고, 손상된 테이블을 복구하거나 다시 만든 다음, 재시작합니다 — 기존 데이터 디렉터리는 삭제하지 않고 항상 이름을 바꿔 콜드 백업으로 남겨 두며, 파괴적인 단계마다 사전에 확인합니다. 원격 호스트에서 가장 빠르게 시작하는 방법은 서버 패널의 데이터베이스 행에 있는 빨간색 Emergency 버튼입니다. 해당 호스트에 맞는 복구 스킬이 미리 로드된 상태로 어시스턴트가 열립니다.
5.12ORM과 앱 네이티브 도구: Drizzle과 Convex
마지막으로, 애플리케이션이 스키마를 정의하는 곳에서 바로 작동하는 두 가지 도구가 있습니다. Drizzle ORM 패널은 Drizzle 프로젝트(테이블, 마이그레이션, 백엔드 방언)를 감지하고 drizzle-kit 작업을 대신 실행합니다 — 스키마에서 SQL을 Generate하고, Migrate하고, 스키마를 직접 Push하고, 기존 데이터베이스를 Pull(인트로스펙션)하며, Drizzle Studio를 열어 데이터를 살펴볼 수 있습니다. Convex 패널은 데이터베이스가 내장된 반응형 백엔드인 Convex를 관리합니다. npx convex dev를 실행해 함수를 감시하고 푸시하거나, Docker에서 자체 호스팅 백엔드를 구동할 수 있습니다. 둘 다 Node.js가 필요하며, 없으면 패널이 Homebrew로 설치합니다. 이 도구들은 애플리케이션 자체의 데이터 계층을 다루며, 그 아래에 기록되는 내용은 여전히 앞에서 설명한 덤프와 백업이 보호합니다.
제6장
서비스 카탈로그
FrontierStack이 설치, 실행, 모니터링할 수 있는 모든 서비스를 카테고리별로 소개합니다.
FrontierStack은 114개 카테고리에 걸친 1795개 이상의 서비스 카탈로그를 제공합니다. 모든 항목은 앱에서 검색, 설치, 시작, 설정, 모니터링할 수 있으며, AI 관리자는 그중 어느 것이든 다룰 수 있습니다. 이 장은 현장 안내서입니다. 각 카테고리와 그 안의 서비스, 그리고 모든 서비스의 한 줄 설명을 담았습니다. 서비스 설명은 앱의 레이블과 일치하도록 영어로 두었습니다.
각 서비스에는 웹사이트의 frontierstack.app/services/에 포트, 기본 웹 UI, Homebrew 포뮬러를 담은 전용 페이지도 있습니다.
6.1Overview
Local Health
built-in tool
Status Page
built-in tool
Alerts
built-in tool
Sites
built-in tool
Logs
built-in tool
Certificates
built-in tool
Tools
built-in tool
Scripts & Cron
built-in tool
Startup Items
built-in tool
Homebrew
built-in tool
Messaging Gateways
built-in tool
Notifications
built-in tool
Apple Services
built-in tool
Terminal Style
built-in tool
Setups
built-in tool
Paired Devices
built-in tool
Licences
built-in tool
Settings
built-in tool
6.2Setup & Migration
Migrate Setups
built-in tool
Apple Server Migration
built-in tool
Site Transfer
built-in tool
Install Wizard
built-in tool
6.3Locations & Places
Locations
built-in tool
Places
built-in tool
Device Discovery
built-in tool
Data Map
built-in tool
NAVER Maps API (네이버 지도)
Naver map, geocoding & directions APIs (via NAVER Cloud) (web UI)
Kakao Maps & Local API (카카오맵 / 로컬)
Kakao map SDK + Local address / keyword search API (web UI)
TMAP API (T map, TMAP Mobility / SK open API)
TMAP routing, geocoding & POI APIs (SK) (web UI)
VWorld (브이월드, 국토교통부 공간정보 오픈플랫폼)
Korean government spatial data & base maps (MOLIT) (web UI)
Juso road-name address API (도로명주소 API, 행정안전부)
Official Korean road-name address search API (web UI)
6.4Fleet & Remote
Remote Tools
built-in tool
Fleet Run
built-in tool
Remote KVM
built-in tool
GL.iNet KVM
built-in tool
Git Server
built-in tool
Remote Control & Lock
built-in tool
Server Clone
built-in tool
Headless Setup
built-in tool
Print Production
built-in tool
Screens
Polished VNC client for Mac & iOS (Edovia)
Cockpit
Browser console for Linux servers and Raspberry Pi (port 9090, web UI)
Windows Admin Center
Browser-based management for Windows Server fleets (port 443, web UI)
PiKVM
Open-source KVM-over-IP (Raspberry Pi) (port 443, web UI)
JetKVM
Compact, low-cost KVM-over-IP device (port 80, web UI)
TinyPilot
KVM-over-IP appliance (web UI) (port 443, web UI)
NanoKVM
Sipeed open KVM-over-IP (RISC-V) (port 80, web UI)
GL.iNet Comet (GL-RM1)
Compact KVM-over-IP with a browser console (port 80, web UI)
GL.iNet Comet Pro (GL-RM10)
KVM-over-IP with a built-in smart power plug (port 80, web UI)
Raritan Dominion KX
Enterprise KVM-over-IP switch (web UI) (port 443, web UI)
ATEN KVM over IP
KVM-over-IP switches & dongles (web UI) (port 443, web UI)
Jump Desktop
Fast, secure remote desktop (RDP/VNC/Fluid)
RustDesk
Open-source remote desktop with optional self-host relay (port 21115, web UI)
MeshCentral
Self-hosted web RMM and remote control (port 443, web UI)
Apache Guacamole
Clientless RDP, VNC and SSH gateway (port 8080, web UI)
Windows Remote Desktop
RDP access to Windows machines (port 3389)
WinRM / PowerShell Remoting
Remote command channel for Windows servers (port 5986)
Tactical RMM
Open-source RMM for Windows-focused fleets (port 443, web UI)
AnyDesk
Cross-platform remote desktop
ServerBuddy
Native Mac console for Linux servers
ITmanager.net
Mobile and desktop server administration service (web UI)
CloudRay
Hosted Bash automation, scheduling and fleet execution (web UI)
CtrlOps
Local-first AI, SSH and Linux server management
Level RMM
Browser RMM with peer-to-peer remote access (web UI)
6.5Networking
Traffic
built-in tool
Router & Network
built-in tool
Power over Ethernet
built-in tool
UniFi
built-in tool
SFTP
built-in tool
WebDAV
built-in tool
Time Capsule
built-in tool
Internet Health
built-in tool
Service Scan
built-in tool
Wi-Fi Analyser
built-in tool
BIND 9 (named)
Authoritative/recursive DNS server (port 53)
netboot.xyz
Network-boot OS installers via PXE/iPXE (port 3000, web UI)
mosh
Roaming, lag-tolerant remote shell (SSH bootstrap + UDP)
SSH3
SSH over QUIC/HTTP3 — faster handshakes, hidden behind a secret URL
Zeroconf / Bonjour
Zero-configuration service discovery (mDNS/DNS-SD) (port 5353)
6.6VPN
VPN
built-in tool
ZeroTier Controller
built-in tool
Tailnet
built-in tool
ZeroTier
Zero Trust SD-WAN / virtual networks — agent + API
NetBird
Open-source Zero Trust networking (self-hostable)
Twingate
Zero Trust remote access (VPN replacement)
CloudConnexa
OpenVPN's cloud-delivered VPN / ZTNA (formerly OpenVPN Cloud) (web UI)
Netmaker
Fast WireGuard mesh networks (self-hosted)
WireGuard
Modern, fast VPN — host your own, or the mesh base layer (port 51820)
OpenVPN
The classic open-source SSL/TLS VPN (port 1194)
Intego Privacy Protection (VPN)
Intego's commercial VPN — a Private Internet Access-based client for Mac
Proton VPN
Privacy VPN (WireGuard/OpenVPN, Secure Core, kill switch)
Headscale
Self-hosted Tailscale control server (open-source) (port 8080, brew: headscale)
Nebula
Lightweight overlay mesh (Slack/Defined Networking)
OpenZiti
Zero-trust overlay fabric with SDKs (self-hosted)
Firezone
WireGuard-based zero-trust access gateway
tinc
Classic self-routing mesh VPN (open-source)
n2n
Peer-to-peer layer-2 VPN over a supernode (ntop)
innernet
WireGuard mesh with CIDR-based access (tonari)
strongSwan
IKEv2/IPsec VPN server (port 500)
wg-easy
WireGuard VPN with a simple web UI (port 51821, web UI)
TP-Link LightLink VPN
TP-Link remote-access VPN — managed via the Navi Desktop app
Tailscale
WireGuard mesh VPN (brew: tailscale)
Tunnelblick
Free OpenVPN client for macOS
6.7Routers & Firewalls
macOS Firewall
built-in tool
OPNsense
Open-source firewall/router OS (REST API) (port 443, web UI)
pfSense
FreeBSD firewall/router OS (REST via package) (port 443, web UI)
PoE Switch (RFC 3621)
Managed PoE switch — port power, budget & cycling over SNMP (port 161, web UI)
MikroTik (RouterOS)
RouterOS devices — REST API (v7+) (port 443, web UI)
UniFi
Ubiquiti Cloud Gateway / Dream Machine + Network controller (port 443, web UI)
UniFi OS Server
Self-hosted UniFi OS — run the full stack on your own Mac or Linux box (port 11443, web UI)
Peplink
SD-WAN routers with multi-WAN failover/bonding (port 443, web UI)
Cradlepoint
Cellular/5G edge routers (NCOS + NetCloud) (port 443, web UI)
OpenWrt
Open-source router firmware (LuCI / ubus) (port 80, web UI)
Firewalla
Home/SMB security router (cloud MSP API)
IPFire
Hardened open-source Linux firewall (web UI) (port 444, web UI)
VyOS
Linux network OS — unified CLI + HTTPS API (port 443, web UI)
Untangle / Arista NG Firewall
Debian network gateway — web admin (commercial) (port 443, web UI)
Sophos Firewall
Next-gen firewall appliance — web UI + API (commercial) (port 4444, web UI)
FortiGate
Fortinet next-gen firewall — REST API (commercial) (port 443, web UI)
Palo Alto Networks
PAN-OS next-gen firewall — XML/REST API (commercial) (port 443, web UI)
Cisco Secure Firewall
Cisco NGFW (Firepower/ASA) — FMC/FDM API (commercial) (port 443, web UI)
WatchGuard Firebox
Fireware firewall appliance — web UI + Cloud API (commercial) (port 8080, web UI)
UFW (Uncomplicated Firewall)
Easy iptables/nftables host firewall for Linux servers (manage over SSH)
6.8Web Servers
Apache
built-in tool
Nginx
built-in tool
Vercel
built-in tool
Railway
built-in tool
Vite
built-in tool
Localhost
built-in tool
Caddy
Automatic-HTTPS web server / reverse proxy (port 80, brew: caddy)
Laravel Herd
One-click PHP dev environment (Mac app) (port 80)
Apache Tomcat
Java servlet/JSP application server (port 8080, web UI, brew: tomcat)
Puma
Threaded Rack/HTTP server — the default app server for Rails (port 3000)
Microsoft IIS
Windows web server and application platform (port 80, web UI)
OpenLiteSpeed
High-performance web server with web admin UI (port 7080, web UI)
Angular CLI
Scaffold, serve & build Angular apps (port 4200, web UI)
6.9DNS
Dynamic DNS
built-in tool
DNS
built-in tool
Domain Registrars
built-in tool
AdGuard Home
Network-wide ad/tracker-blocking DNS (self-hosted) (port 3000, web UI)
Pi-hole
Network-wide ad/tracker-blocking DNS sinkhole (port 80, web UI)
Nebula Sync
Sync configuration across Pi-hole instances
Kea DHCP
ISC's modern DHCPv4/DHCPv6 server (REST + DB back-ends) (port 8000)
ISC DHCP
Classic ISC dhcpd (EOL — migrate to Kea)
Dnsmasq
Lightweight DNS forwarder + DHCP + TFTP (port 53, brew: dnsmasq)
udhcpd (BusyBox)
Tiny DHCP server (BusyBox / embedded)
DNSimple
Managed DNS + domain registrar — live zone/record management (web UI)
Infoblox NIOS (DDI)
Enterprise DNS / DHCP / IPAM appliance (DDI) (port 443, web UI)
Windows Server DHCP
DHCP Server role on Windows Server
NHN Cloud DNS Plus
NHN Cloud anycast authoritative DNS + GSLB (web UI)
DNSEver (디엔에스에버)
Korean managed, free and dynamic DNS hosting (web UI)
DNSZi (DNS지기)
Free Korean DNS hosting (nsN.dnszi.com) (web UI)
6.10Runtimes
Runtime Health
built-in tool
PHP
built-in tool
Python
built-in tool
Node.js
built-in tool
React
built-in tool
Java
built-in tool
Go
built-in tool
Rust
built-in tool
Ruby
built-in tool
Perl
built-in tool
.NET
built-in tool
Supabase Edge Functions
Deno serverless functions on the edge (port 54321)
code-server
VS Code in the browser (self-hosted) (port 8080, web UI, brew: code-server)
Next.js
React framework served by a Node process (SSR/SSG) (port 3000)
SvelteKit (Svelte)
Svelte app framework served by a Node process (SSR/SSG) (port 3000)
Nuxt (Vue)
Vue framework served by a Node process (SSR/SSG) (port 3000)
Astro
Content-first framework — zero JS by default; popular headless-WordPress front end (port 4321)
Solid (SolidJS)
Fine-grained reactive UI framework — SolidStart serves it as a Node process (port 3000)
Tailwind CSS
Utility-first CSS — standalone build CLI (no Node)
.NET (ASP.NET Core)
Run ASP.NET Core & Blazor apps (Kestrel) (port 5000)
Wasmtime
Bytecode Alliance WebAssembly runtime (WASI)
Wasmer
WebAssembly runtime with a package registry
WasmEdge
Lightweight WASM runtime for cloud/edge & AI (CNCF)
wasmCloud
Distributed WebAssembly platform (CNCF) (port 4222, web UI)
Fermyon Spin
Serverless WebAssembly apps & HTTP microservices (port 3000)
6.11Databases
Database Health
built-in tool
MySQL
built-in tool
MySQL Clusters
built-in tool
Postgres
built-in tool
Database Ops
built-in tool
Cloud SQL
built-in tool
Drizzle ORM
built-in tool
Prisma
built-in tool
Airtable
built-in tool
Convex
built-in tool
Supabase
built-in tool
MongoDB
Document (NoSQL) database (port 27017, brew: mongodb-community)
Microsoft SQL Server
Microsoft relational database for Windows and Linux (port 1433)
Oracle Database
Enterprise relational database (port 1521, web UI)
CockroachDB
Distributed SQL database (port 26257, web UI)
Apache Cassandra
Distributed wide-column database (port 9042, brew: cassandra)
ScyllaDB
High-performance Cassandra-compatible database (port 9042)
Neo4j
Graph database with Cypher query language (port 7474, web UI, brew: neo4j)
Apache CouchDB
Document database with HTTP API and sync (port 5984, web UI, brew: couchdb)
Couchbase Server
Distributed document, key-value and search database (port 8091, web UI)
PlanetScale
Hosted MySQL with database branching (cloud API) (port 3306)
Neon
Serverless Postgres — autoscaling & branching (cloud API) (port 5432)
Turso
Distributed SQLite (libSQL) at the edge (cloud API) (port 8080)
PostgREST
Instant REST API over a PostgreSQL database (port 3000)
PocketBase
Open-source backend in one file (SQLite + auth + realtime) (port 8090, web UI)
Firebase
Google's backend-as-a-service — Firestore, Auth, Storage, Functions (cloud) (port 4000, web UI)
Patroni
HA PostgreSQL — automatic failover (port 8008, web UI)
6.12Vector Databases
Vector Databases
built-in tool
Qdrant
Fast vector DB for embeddings & RAG (self-hosted) (port 6333, web UI)
Chroma
Developer-friendly embedding database (self-hosted) (port 8000)
Weaviate
Vector DB with built-in vectorizers & hybrid search (self-hosted) (port 8080)
Milvus
Scalable, distributed vector database (self-hosted) (port 19530)
pgvector
Vector search inside PostgreSQL (extension) (port 5432)
FAISS
Fast in-process vector similarity search (library)
6.13Analytics Databases
InfluxDB
Time-series database for metrics and IoT (port 8086, web UI, brew: influxdb)
DuckDB
In-process OLAP database — the SQLite of analytics
ClickHouse
Columnar OLAP database for fast analytics (port 8123)
Apache Druid
Real-time analytics database (OLAP) (port 8888, web UI)
TimescaleDB
Time-series database (PostgreSQL extension) (port 5432)
6.14Data Pipelines & ETL
Airbyte
Open-source ELT with 300+ connectors (self-hosted / cloud) (port 8000, web UI)
Meltano
Open-source ELT built on Singer taps & targets (CLI) (port 5000, web UI)
dbt
SQL-based data transformation & modeling (self-hosted / cloud) (port 8080, web UI)
Dagster
Asset-oriented data orchestrator (self-hosted / cloud) (port 3000, web UI)
Prefect
Modern Python workflow orchestration (self-hosted / cloud) (port 4200, web UI)
Kestra
Event-driven orchestration & scheduling, YAML flows (self-hosted) (port 8080, web UI)
Redpanda Connect (Benthos)
Declarative stream-processing & connectors (self-hosted CLI) (port 4195)
NATS JetStream Pipelines
Persistent streams & consumers for event pipelines (self-hosted) (port 8222, brew: nats-server)
6.15Caching
Redis
In-memory key-value store (port 6379, brew: redis)
Memcached
Distributed memory cache (port 11211, brew: memcached)
6.16Search
Elasticsearch
Search & analytics engine (Elastic) (port 9200, web UI, brew: elasticsearch-full)
Meilisearch
Fast, typo-tolerant search engine (port 7700, web UI, brew: meilisearch)
OpenSearch
Search & analytics engine (port 9200, web UI, brew: opensearch)
Photon
Self-hosted OpenStreetMap geocoder (search-as-you-type) (port 2322)
6.17Backup
Backups
built-in tool
Time Machine
built-in tool
Carbon Copy Cloner
built-in tool
Synology Active Backup for Business
Centralized backup for PCs, servers, VMs & SaaS (Synology) (port 5001, web UI)
Databasus
Self-hosted database backup & point-in-time recovery (web UI)
Restic
Fast, encrypted, deduplicated backups
rclone
Sync & mount 70+ cloud storages
Dropbox (Backup Target)
Use Dropbox as an encrypted off-site backup destination (restic / rclone)
Veeam Backup & Replication
Enterprise VM, server and cloud backup (port 9392, web UI)
BorgBackup
Deduplicating encrypted backups over SSH
Kopia
Encrypted snapshots to cloud or local storage (port 51515, web UI)
Duplicati
Web UI backups to cloud storage (port 8200, web UI)
6.18Storage & NAS
iCloud+
built-in tool
Xsan
built-in tool
Supabase Storage
S3-compatible object storage from Supabase (port 54321, web UI)
Nextcloud
Files, sync, office & app platform (port 80, web UI)
Syncthing
Peer-to-peer continuous file sync (port 8384, web UI, brew: syncthing)
TrueNAS
ZFS NAS OS — pools, snapshots, replication (self-hosted) (port 443, web UI)
ZimaOS / CasaOS
Personal-cloud NAS OS for ZimaCube / ZimaBoard (self-hosted) (port 80, web UI)
Synology DSM
Synology NAS appliance (DSM) (port 5001, web UI)
QNAP QTS
QNAP NAS appliance (QTS/QuTS hero) (port 8080, web UI)
UGREEN NAS
UGREEN NASync / UGOS Pro appliance health, storage, containers, services and logs through a linked remote helper (port 443, web UI)
Beelink NAS
Beelink ME mini / ME Pro NAS hardware (Windows, TrueNAS, Unraid, OMV, Proxmox)
Ceph
Distributed object/block/file storage cluster (self-hosted) (port 8443, web UI)
GlusterFS
Scale-out network filesystem (self-hosted)
iSCSI (SAN)
Block storage over TCP/IP — initiator & target (port 3260) (port 3260)
NVMe / NVMe-oF
NVMe SSDs & NVMe-over-Fabrics targets (TCP/RDMA/FC) (port 4420)
Fibre Channel (SAN)
FC SAN fabric — HBA ports, WWNs, multipath
RDMA / RoCE / iWARP
Remote Direct Memory Access fabrics — RoCE & iWARP
InfiniBand Fabric
InfiniBand HCA/fabric — ports, SM, port-error counters
NVIDIA NVLink
GPU-to-GPU interconnect — per-link state & bandwidth
NVIDIA NVSwitch
NVLink switch fabric — Fabric Manager service
Liqid (Composable)
Composable PCIe/CXL fabric — pool & attach GPUs/NVMe (web UI)
GigaIO FabreX
PCIe/CXL memory fabric — composable GPU pooling (web UI)
WEKA
Parallel filesystem for AI/HPC (GPUDirect) (port 14000, web UI)
ownCloud
Self-hosted file sync & share (port 80, web UI)
Seafile
File sync & share with client-side encryption (self-hosted) (port 8000, web UI)
Resilio Sync
P2P file sync (BitTorrent-based) (port 8888, web UI)
Dropbox
Cloud file sync & share (app + API) (web UI)
Samba
SMB file sharing (+ Time Machine) (port 445, brew: samba)
Netatalk
AFP file sharing for legacy Macs and Xserve estates (port 548)
File Browser
Web file manager for a directory (port 8080, web UI)
Filestash
Web file manager for S3/SFTP/FTP/WebDAV/… (port 8334, web UI)
Unraid
NAS/server OS — storage array, VMs & Docker (port 80, web UI)
Box
Secure content, collaboration and governed agent workflows (SaaS) (web UI)
6.19Object Storage & S3-Compatible
MinIO
S3-compatible object storage (port 9000, web UI, brew: minio)
SeaweedFS
Fast distributed object/file store (self-hosted) (port 8888, web UI)
Garage
Lightweight self-hosted S3 object store (Deuxfleurs) (port 3900)
Ceph RGW (RADOS Gateway)
S3/Swift object gateway on a Ceph cluster (self-hosted) (port 7480)
OpenStack Swift
Highly-available object store (OpenStack, self-hosted) (port 8080)
Cloudflare R2
S3-compatible object storage with zero egress fees (cloud) (web UI)
Backblaze B2
Low-cost cloud object storage, S3-compatible (cloud) (web UI)
Wasabi
Hot cloud object storage, S3-compatible, no egress fees (cloud) (web UI)
RustFS
High-performance S3-compatible object storage (Rust) (port 9000, web UI)
6.20Mail
Mail Server
built-in tool
Message Delivery
built-in tool
Proton
Encrypted mail, VPN, drive & passwords (cloud) (port 1025, web UI)
HEY
37signals hosted email & calendar (Imbox, Screener, Paper Trail) (web UI)
Rspamd
Fast spam-filtering system (self-hosted) (port 11334, web UI)
Apache SpamAssassin
Rule-based spam classifier (self-hosted) (port 783)
MailScanner
Email security framework / gateway (self-hosted)
Proxmox Mail Gateway
Anti-spam/AV email gateway appliance (self-hosted) (port 8006, web UI)
mailcow
Dockerized full mail-server suite (self-hosted) (port 443, web UI)
Modoboa
Mail hosting & management platform (self-hosted) (port 443, web UI)
OpenDKIM
DKIM signing & verification milter (self-hosted) (port 8891)
OpenDMARC
DMARC policy filter & reporting (self-hosted) (port 8893)
Postfix
SMTP mail transfer agent (port 25)
Dovecot
IMAP/POP3 mail delivery server (port 143)
Stalwart Mail Server
All-in-one secure mail server (SMTP/IMAP/JMAP) (port 8080, web UI)
Maddy Mail Server
Composable single-binary mail server (SMTP/IMAP)
Inbox Zero
Open-source AI email assistant (self-hosted) (port 3000, web UI)
Hiworks (하이웍스, Gabia)
Gabia groupware — mail, approvals, SMS, HR (web UI)
Mailplug (메일플러그)
Korean business email hosting (web UI)
6.21Mailing Lists
Mailing Lists
built-in tool
Mailchimp
Hosted email marketing & audiences (cloud) (web UI)
Brevo
Email/SMS marketing + transactional (cloud) (web UI)
MailerLite
Simple newsletter & subscriber lists (cloud) (web UI)
Klaviyo
E-commerce email/SMS & segmentation (cloud) (web UI)
Campaign Monitor
Designer-friendly email campaigns (cloud) (web UI)
Mailgun
Developer transactional email + lists (cloud) (web UI)
SendGrid
Twilio's email API & marketing lists (cloud) (web UI)
Amazon SES
AWS low-cost bulk/transactional email (cloud) (web UI)
Postmark
Fast, reliable transactional email (cloud) (web UI)
Resend
Developer-first transactional email API (cloud) (web UI)
MailPace
Fast, privacy-friendly transactional email (cloud) (web UI)
Nylas
Email/calendar/contacts API platform (cloud) (web UI)
Listmonk
Self-hosted high-performance newsletter manager (port 9000, web UI)
Mautic
Self-hosted marketing automation (port 80, web UI)
Mailtrain
Self-hosted Node.js newsletter app (port 3000, web UI)
Postal
Self-hosted full mail/delivery platform (port 5000, web UI)
NHN Cloud Notification — Email
NHN Cloud transactional email (web UI)
Stibee (스티비)
Korean email newsletter platform (web UI)
6.22Email Deliverability & Reputation
Email Delivery
built-in tool
DMARC Aggregate Reporting
Collect & parse DMARC RUA reports (self-hosted: parsedmarc)
BIMI
Brand logo in the inbox via DNS + VMC (standard)
MTA-STS & TLS-RPT
Enforce SMTP TLS and get TLS failure reports (standard)
GlockApps
Inbox-placement & spam-filter testing (cloud) (web UI)
MXToolbox
DNS, blacklist & email health lookups (cloud) (web UI)
Google Postmaster Tools
Gmail sender reputation & spam-rate data (cloud) (web UI)
Mailhardener
All-in-one email-security monitoring & reporting (cloud) (web UI)
EasyDMARC
DMARC management & deliverability platform (cloud) (web UI)
dmarcian
DMARC reporting & deployment platform (cloud) (web UI)
6.23Message Queues & Streaming
Queue Operations
built-in tool
Supabase Realtime
Postgres change streams over WebSockets (port 54321, web UI)
NATS
High-performance messaging + JetStream (self-hosted) (port 4222, brew: nats-server)
Apache Kafka
Distributed event streaming (self-hosted) (port 9092, brew: kafka)
AKHQ
Web administration and observability console for Kafka (port 8080, web UI)
Apache ZooKeeper
Distributed coordination, quorum and leader election (port 2181, brew: zookeeper)
Redpanda
Kafka-compatible streaming, no JVM/ZooKeeper (port 9092)
Apache Pulsar
Distributed pub-sub & queuing with tiered storage (port 6650)
Apache RocketMQ
Low-latency distributed messaging (ordered, transactional) (port 10911)
Redis Streams
Lightweight log/stream with consumer groups (Redis) (port 6379, brew: redis)
Celery
Distributed task queue for Python (workers + broker) (web UI)
RabbitMQ
AMQP message broker with queue monitoring and optional MQTT (port 5672, web UI, brew: rabbitmq)
6.24Push Services
APNs
built-in tool
ntfy
Self-hostable pub-sub push (HTTP) (port 80, web UI, brew: ntfy)
Gotify
Self-hosted push server + Android app (port 80, web UI)
OneSignal
Hosted multi-channel push (cloud) (web UI)
Firebase (FCM)
Google's cross-platform push (cloud) (web UI)
Airship
Enterprise customer-engagement push (cloud) (web UI)
Matrix Notifications
Push via the Matrix chat protocol (web UI)
Synapse
Self-hosted Matrix homeserver (port 8008, brew: matrix-synapse)
Element
Flagship Matrix chat client
UnifiedPush
Open push standard (Google-free) (web UI)
PushDeer
Open-source, no-app-fuss push (web UI)
Pushover
Simple paid push to iOS/Android/desktop (web UI)
Apprise
One CLI/library → 80+ push services
NHN Cloud Notification — Push
NHN Cloud mobile push notifications (web UI)
6.25Chat & Collaboration
Discord
Community chat & voice (cloud) (web UI)
Slack
Team chat & workflows (cloud) (web UI)
Buzz
Group chat for humans + AI agents (Block; cloud or self-hosted) (web UI)
Matrix (Synapse + Element)
Open, federated chat — self-hosted (Docker) (port 8008, web UI)
Mattermost
Open-source Slack alternative (self-hosted) (port 8065, web UI)
Rocket.Chat
Open-source team chat platform (self-hosted) (port 3000, web UI)
Zulip
Threaded team chat (self-hosted or cloud) (port 80, web UI)
Ergo (IRCd)
Modern single-binary IRC server (IRCv3, built-in services) (port 6667)
InspIRCd
Modular C++ IRC server (self-hosted) (port 6667)
UnrealIRCd
Popular full-featured IRC server (self-hosted) (port 6667)
Solanum (IRCd)
The IRCd that runs Libera.Chat (charybdis fork) (port 6667)
ZNC (IRC bouncer)
IRC bouncer — stay connected, replay history (port 6697, web UI)
The Lounge
Self-hosted web IRC client (always-on) (port 9000, web UI)
KiwiIRC
Web IRC client + gateway (self-hosted) (port 7778, web UI)
Atheme (IRC services)
NickServ/ChanServ services for TS6 IRCds
Anope (IRC services)
IRC services (NickServ/ChanServ) for many IRCds
Libera.Chat
Public IRC network (FOSS communities) — connect, not self-host (port 6697)
Open OSCAR Server
Self-hostable AIM/ICQ (OSCAR) server — run your own AIM (port 5190)
AIM OSCAR Server
Alternative OSCAR server — make your own AIM chat network (port 5190)
Telegram
Cloud messaging with a powerful Bot API (cloud) (web UI)
TeamSpeak
Low-latency voice server (self-hosted) (port 9987)
Mumble
Open-source low-latency voice (self-hosted) (port 64738)
Jitsi Meet
Open-source video conferencing (self-hosted) (port 8443, web UI)
SimpleX Chat
Private messenger with no user IDs (self-hostable relays)
Session
Onion-routed private messenger (no phone number)
Prosody
Lightweight XMPP (Messages) server (port 5222, brew: prosody)
Sendbird
Chat, voice & video APIs for apps (Korean-founded) (web UI)
NAVER WORKS / LINE WORKS (네이버웍스)
Business messenger & groupware (LINE WORKS in Japan) (web UI)
NHN Dooray! (두레이)
NHN collaboration — projects, mail, messenger (web UI)
JANDI (잔디)
Korean team messenger (incoming webhooks) (web UI)
Flow (플로우)
Korean project & team collaboration (web UI)
Swit (스윗)
Korean-founded chat + task collaboration (web UI)
KakaoWork (카카오워크)
Kakao business messenger with bot API (web UI)
6.26SMS & iMessage Gateways
Gammu (gammu-smsd)
Send/receive SMS via a GSM modem (self-hosted)
Kannel
Open-source SMS/WAP gateway (self-hosted) (port 13013)
ModemManager
Linux modem daemon — SMS via mmcli (self-hosted)
SMS Gateway for Android
Turn an Android phone into an SMS HTTP API (self-hosted) (web UI)
SMSSync
Android SMS↔webhook relay (self-hosted)
Android + Tasker
DIY SMS gateway via Tasker automation (self-hosted)
Home Assistant SMS
SMS notify/receive in Home Assistant (Gammu)
AirMessage
Self-hosted iMessage bridge — server on this Mac (port 1359)
BlueBubbles
Self-hosted iMessage bridge — server on this Mac (web UI)
Aligo (알리고)
Korean SMS / LMS / MMS + KakaoTalk sending API (web UI)
NHN Cloud Notification — SMS
NHN Cloud SMS / LMS sending (web UI)
Bizppurio (비즈뿌리오)
Daou Tech business SMS & KakaoTalk API (web UI)
Ppurio (뿌리오)
Daou Tech SMS / KakaoTalk sending (web UI)
Munjanara (문자나라)
Legacy Korean SMS sending (plain-HTTP API) (web UI)
SureM (슈어엠)
Korean SMS & KakaoTalk sending (SureM) (web UI)
Solapi (솔라피, CoolSMS)
Korean SMS / LMS / MMS + KakaoTalk sending API (web UI)
6.27Business Messaging
KakaoTalk AlimTalk
Kakao business notification templates — Korea (cloud) (web UI)
LINE Official Account
Customer messaging & loyalty on LINE (web UI)
WhatsApp Business Platform
WhatsApp business messaging — templates, catalogues (live) (web UI)
WeChat Official Account
WeChat business account — China (broadcasts, menus, mini-programs) (web UI)
Zalo Official Account
Zalo business account — Vietnam (broadcasts & chat) (web UI)
KakaoTalk Channel
Kakao business channel — Korea (friend broadcasts & chat) (web UI)
Viber Business Messages
Branded business messages on Viber (web UI)
Facebook Messenger
Messenger business messaging (Meta) (web UI)
Instagram Messaging
Instagram DM API for business (Meta) (web UI)
Apple Messages for Business
Store↔customer chat inside iMessage (web UI)
RCS Business Messaging
Branded rich business messaging (SMS successor) (web UI)
Attentive
SMS & email marketing for retail/DTC (web UI)
Postscript
SMS marketing for Shopify stores (web UI)
Omnisend
Email & SMS marketing automation (e-commerce) (web UI)
SimpleTexting
Business SMS/MMS marketing & two-way texting (web UI)
ManyChat
Chat marketing bots — Instagram/Messenger/WhatsApp (live) (web UI)
Respond.io
Omnichannel customer-conversation inbox (web UI)
Gupshup
Conversational messaging API (WhatsApp & more) (web UI)
WATI
WhatsApp Business team inbox & broadcasts (web UI)
Charles
Conversational commerce on WhatsApp (web UI)
Trengo
Multichannel team inbox for customer chat (web UI)
Intercom
Customer messaging & proactive marketing (live) (web UI)
Gorgias
E-commerce helpdesk with chat & proactive messages (web UI)
NHN Cloud Notification — KakaoTalk Bizmessage
NHN Cloud KakaoTalk AlimTalk / FriendTalk (web UI)
BizM (비즈엠)
KakaoTalk AlimTalk / FriendTalk sending (BizM) (web UI)
Lunasoft / Luna M (루나소프트)
KakaoTalk business messaging (Luna M) (web UI)
BizGo by Infobank (비즈고 / 인포뱅크 OMNI)
Infobank SMS, AlimTalk, RCS & Naver TalkTalk API (web UI)
6.28Calendars
Calendar Discovery
built-in tool
Calendar Health
built-in tool
Event Server Monitoring
built-in tool
ICS Feeds
built-in tool
Radicale
Lightweight CalDAV/CardDAV server (port 5232, web UI)
Baïkal
PHP CalDAV/CardDAV server (SabreDAV) (port 80, web UI)
Nextcloud Calendar
Calendar app on a Nextcloud server (web UI)
DAViCal
PHP/PostgreSQL CalDAV server (port 80, web UI)
SOGo
Groupware (CalDAV/CardDAV/ActiveSync) (port 20000, web UI)
Apple Calendar Server
Migrate the old macOS Server CalDAV (port 8443)
Google Calendar
Hosted calendar (CalDAV / API) (web UI)
Outlook Calendar
Microsoft 365 calendar (Graph API) (web UI)
Calendly
Hosted scheduling / booking links (web UI)
Cal.com
Open-source scheduling (self-hostable) (web UI)
6.29Identity & Accounts
Accounts
built-in tool
Open Directory
Apple's built-in LDAP / Kerberos directory (port 389)
Dropbox Business
Team management & audit-log APIs for Dropbox Business (cloud) (web UI)
Keycloak
Open-source identity & access management (SSO) (port 8080, web UI)
FreeIPA
Open-source identity management (LDAP/Kerberos, self-hosted) (port 443, web UI)
Authentik
Self-hosted identity provider (Docker) (port 9000, web UI)
Okta
Workforce identity & SSO — live API health (web UI)
Microsoft Entra ID
Azure AD — cloud identity & SSO (Graph health) (web UI)
Google Workspace
Google's identity & productivity suite (Admin SDK) (web UI)
AD FS
Active Directory Federation Services (on-prem SSO)
Authenticate.com
Identity verification & KYC API (cloud) (web UI)
Univention Corporate Server
Open IAM, SSO, directory and application platform (port 443, web UI)
6.30Customer Identity
WorkOS
B2B auth — SSO, Directory Sync, AuthKit (live) (web UI)
Auth0
Hosted authentication platform (Okta) (web UI)
Clerk
Hosted auth & user management for web apps (cloud) (web UI)
Supabase Auth
Auth from the Supabase stack (cloud or local) (port 54321, web UI)
Better Auth
Framework-agnostic auth library for TypeScript apps
FusionAuth
Self-hostable CIAM / auth server (OAuth2/OIDC/SAML) (port 9011, web UI)
Ory Kratos
Headless identity & user management (self-hosted) (port 4433)
Ory Hydra
OAuth2 & OpenID Connect provider (self-hosted) (port 4444)
Zitadel
Self-hostable identity platform (OIDC/SAML, multi-tenant) (port 8080, web UI)
Authelia
SSO + 2FA auth gateway for your services (port 9091, web UI)
NAVER Login (네이버 로그인)
Sign in with Naver (OAuth 2.0) (web UI)
Kakao Login (카카오 로그인)
Sign in with Kakao (OAuth 2.0) (web UI)
6.31Decentralized Identity
Hyperledger Aries (ACA-Py)
Issue/verify Verifiable Credentials over DIDComm (self-hosted)
walt.id
Open-source SSI stack — issuer, verifier & identity wallet (web UI)
Veramo
JS/TS framework for DIDs & Verifiable Credentials
6.32Version Control
Git
built-in tool
Gitea
Lightweight self-hosted Git service (port 3000, web UI, brew: gitea)
Forgejo
Community fork of Gitea (Codeberg) (port 3000, web UI, brew: forgejo)
GitHub
Live account, repository, PR/review/issue, notification, API quota and recent release-asset download dashboard (cloud) (web UI)
Cursor Origin (Early Beta)
Cursor's Git forge — live repositories and pull requests (cloud, Early Beta) (web UI)
GitLab
Full DevOps platform — GitLab.com, Dedicated or self-managed (Linux, Docker, Kubernetes, GET) (port 443, web UI)
GitHub Enterprise
Self-hosted / managed GitHub for organizations (port 443, web UI)
Bitbucket
Atlassian Git hosting — Cloud or self-hosted (Data Center) (port 443, web UI)
Codeberg
Free community Git hosting (Forgejo, nonprofit) (port 443, web UI)
SourceHut
Lightweight, email-driven Git suite (cloud or self-hosted) (port 443, web UI)
AWS CodeCommit
Managed private Git repositories on AWS (API) (port 443, web UI)
Pierre
Fast code review & collaboration on Git (cloud) (web UI)
Graphite
Stacked-PR code review on top of GitHub (cloud + CLI) (web UI)
Phabricator / Phorge
Self-hosted code review & repos (now maintained as Phorge) (port 443, web UI)
SourceForge
Open-source project hosting & downloads (cloud) (port 443, web UI)
Google Code (archive)
Defunct — read-only archive for migrating old projects (web UI)
Subversion (SVN)
Apache Subversion — centralized version control (self-hosted) (port 3690)
Jujutsu (jj)
Git-compatible VCS with a simpler, more powerful model
gh-dash
Terminal dashboard for GitHub PRs & issues (gh extension)
code.storage
Code hosting / storage platform (cloud) — see code.storage (web UI)
Entire
Code collaboration platform (cloud) — see entire.io (web UI)
Gitea Actions Runner
CI runner for Gitea/Forgejo Actions
Webhook (git-deploy)
Push-to-deploy via webhooks (port 9000, brew: webhook)
6.33CI/CD
Woodpecker CI
Lightweight container-native CI (port 8000, web UI)
GitHub Actions
CI/CD in GitHub — live build & deploy monitor (cloud) (web UI)
CodeRabbit
AI code reviewer for pull requests (cloud + CLI/IDE) (web UI)
GitLab CI/CD
Pipelines built into GitLab — GitLab.com, Dedicated or self-managed (web UI)
CircleCI
Cloud CI/CD with fast parallelism (cloud) (web UI)
Depot
Remote build acceleration — Docker & GitHub Actions runners (cloud) (web UI)
Bitbucket Pipelines
CI/CD built into Bitbucket Cloud (cloud) (web UI)
Travis CI
Hosted CI for open source & teams (cloud) (web UI)
Buildkite
Hybrid CI — your agents, their dashboard (cloud) (web UI)
Jenkins
The classic self-hosted automation server (port 8080, web UI, brew: jenkins-lts)
Drone CI
Container-native CI server (self-hosted) (port 80, web UI)
Concourse
Pipeline-centric CI with reproducible builds (self-hosted) (port 8080, web UI)
TeamCity
JetBrains CI/CD server (self-hosted or cloud) (port 8111, web UI)
GoCD
Open-source CI/CD with value-stream pipelines (self-hosted) (port 8153, web UI)
Argo CD
GitOps continuous delivery for Kubernetes (self-hosted) (port 8080, web UI)
Flux CD
GitOps toolkit for Kubernetes (self-hosted)
Spinnaker
Multi-cloud continuous delivery (self-hosted) (port 9000, web UI)
Azure DevOps
Azure Pipelines, Repos, Boards & Artifacts (cloud) (web UI)
Buildkite Agent
Self-hosted runner for Buildkite pipelines
Jenkins Agent
Build node that connects to a Jenkins controller
GitHub Actions Runner
Self-hosted runner for GitHub Actions
Blacksmith
Managed high-performance CI runners for GitHub Actions (cloud) (web UI)
GitLab Runner
Self-hosted runner for GitLab CI/CD (works on this Mac) (brew: gitlab-runner)
6.34Build & Compile
Build & Render Farm
built-in tool
Workbox
Google's service-worker libraries for PWAs
Vite PWA Plugin
Zero-config PWA for Vite (vite-plugin-pwa)
Next.js PWA
PWA/service-worker support for Next.js
Nuxt PWA Module
PWA module for Nuxt (@vite-pwa/nuxt)
Xcode Build / Xcode Cloud
Apple's build system (xcodebuild) + Xcode Cloud CI
Bazel
Fast, scalable multi-language build system (Google)
Tuist
Xcode project generation & build optimization
Buck2
Meta's fast, hermetic multi-language build system
CMake
Cross-platform build-system generator (C/C++)
Ninja
Small, very fast build backend
Meson
Fast, user-friendly build system (Ninja backend)
Gradle
JVM/Android build automation with build cache
Apache Maven
Java build & dependency management
distcc
Distribute C/C++ compiles across machines
Icecream (icecc)
Distributed compiler with central scheduler
Bazel Remote Execution
Run Bazel actions on a remote farm (RBE)
BuildGrid
Open-source Remote Execution API server (self-hosted)
Incredibuild
Commercial distributed build acceleration
ccache
Compiler cache for C/C++ rebuilds
sccache
Shared compiler cache (C/C++/Rust) with cloud backends
Bazel Remote Cache
Shared HTTP/gRPC cache for Bazel (self-hosted) (port 8080)
Tuist Cache
Binary caching for Xcode builds (Tuist)
6.35Internal Developer Portals
Backstage
Spotify's open-source developer portal framework (self-hosted) (port 7007, web UI)
Port
No-code internal developer portal (cloud) (web UI)
Cortex
Service catalogue with scorecards & maturity (cloud) (web UI)
OpsLevel
Service maturity & ownership portal (cloud) (web UI)
Humanitec
Platform orchestrator for internal platforms (cloud + agent) (web UI)
Score
Open workload spec for portable deployments (CLI)
Roadie
Managed (hosted) Backstage (cloud) (web UI)
Kakao Developers (카카오 디벨로퍼스)
Kakao app keys for Login, Maps, Local & messaging APIs (web UI)
6.36Infrastructure as Code
Terraform
HashiCorp's declarative infrastructure as code (CLI)
OpenTofu
Open-source, community fork of Terraform (CLI)
Pulumi
Infrastructure as code in real languages (CLI / cloud)
Ansible
Agentless configuration management & automation (CLI)
Chef
Policy-as-code configuration management (Progress Chef)
Puppet
Declarative configuration management at scale (Perforce)
Salt
Event-driven remote execution & config management (CLI)
Packer
Build identical machine images for any platform (CLI)
AWS CloudFormation
Native AWS infrastructure as code (templates / CLI) (web UI)
AWS CDK
Define AWS infra in code, synth to CloudFormation (CLI)
AttuneOps
Reusable multi-step SSH and WinRM automation blueprints (web UI)
6.37API Testing & Synthetic Monitoring
Postman
API platform — build, test, mock & monitor (app / cloud) (web UI)
Bruno
Open-source, offline, git-friendly API client (app / CLI)
Insomnia
API client for REST, GraphQL & gRPC (app)
Grafana k6
Developer-centric load & performance testing (CLI)
Artillery
Load testing & smoke tests for APIs and services (CLI)
Checkly
Monitoring-as-code — API checks & browser synthetics (cloud + CLI) (web UI)
Changedetection.io
Website change detection & notifications (port 5000, web UI)
6.38Proxies & Load Balancers
Reverse Proxy
built-in tool
Debug Share
built-in tool
ProxySQL
High-performance MySQL proxy (port 6033, brew: proxysql)
MySQL Router
Routing for MySQL InnoDB Cluster (port 6446)
Nginx Proxy Manager
Web-UI reverse proxy (Docker) (port 81, web UI)
keepalived
VRRP virtual IP failover + LVS load balancing
6.39Proxy Gateways
HAProxy
TCP/HTTP load balancer & proxy (brew: haproxy)
Traefik
Container-native reverse proxy & LB (port 8080, web UI, brew: traefik)
Squid
Caching forward proxy (HTTP/HTTPS/FTP) (port 3128, brew: squid)
3proxy
Tiny multi-protocol proxy (HTTP/SOCKS) (port 3128)
Tinyproxy
Lightweight HTTP/HTTPS forward proxy (port 8888, brew: tinyproxy)
6.40CDN & Edge
Cloudflare
built-in tool
Akamai
Enterprise CDN, security & edge compute (cloud) (web UI)
Fastly
Real-time CDN with VCL/Compute edge (cloud) (web UI)
Imperva
WAF-first CDN & DDoS protection (cloud) (web UI)
Amazon CloudFront
AWS CDN tied to S3/EC2 origins (cloud) (web UI)
Google Cloud CDN
GCP CDN on global load balancing (cloud) (web UI)
Azure Front Door
Microsoft's global entry point: CDN + WAF + LB (cloud) (web UI)
NHN Cloud CDN
NHN Cloud content delivery network (web UI)
NAVER Cloud Global Edge (CDN)
NAVER Cloud CDN / edge (successor to CDN+) (web UI)
CDNetworks (씨디네트웍스)
Korean-founded global CDN & web security (web UI)
6.41Hosting
here.now
built-in tool
Hostinger
built-in tool
DigitalOcean
built-in tool
Vultr
built-in tool
Linode (Akamai)
built-in tool
Hetzner
built-in tool
Sakura Cloud
built-in tool
ConoHa
built-in tool
Cloudways
built-in tool
SiteGround
built-in tool
WP Engine
built-in tool
Kinsta
built-in tool
Pressable
built-in tool
Contabo
built-in tool
Cloud Servers
built-in tool
Abacus SuperComputer
Always-on Ubuntu VM from Abacus.AI (2 vCPU / 8 GB, SSH + root) (web UI)
Fly.io
Deploy apps as microVMs on Fly's global edge (cloud CLI)
Coolify
Self-hosted PaaS (Heroku/Netlify/Vercel alt.) (port 8000, web UI)
Dokploy
Open-source deployment platform (PaaS) (port 3000, web UI)
CapRover
Self-hosted PaaS on Docker Swarm (port 3000, web UI)
Kamal
Deploy containers to your own servers over SSH (37signals)
Dokku
Minimal self-hosted PaaS (git push deploy)
V2 Cloud
Managed cloud desktops, servers and isolated AI workspaces (web UI)
Zenlayer
Edge cloud compute and global networking (web UI)
cPanel & WHM
Commercial web-hosting server control panel (port 2087, web UI)
NAVER Cloud Platform (네이버 클라우드)
Naver's public cloud — servers, Global DNS, Object Storage (Korea) (web UI)
NHN Cloud (ex-TOAST)
NHN's public cloud (ex-TOAST) — OpenStack IaaS + app services (web UI)
KT Cloud (kt cloud, ex-ucloud biz)
KT's public cloud (ex-ucloud biz) (web UI)
KakaoCloud (카카오클라우드, ex-KIC)
Kakao Enterprise public cloud — VMs, Kubernetes, DNS, storage (web UI)
Samsung Cloud Platform (SCP, Samsung SDS)
Samsung SDS enterprise & public-sector cloud (web UI)
Gabia Cloud (가비아 클라우드 / g클라우드)
Gabia's IaaS cloud (CSAP public-sector zone) (web UI)
LG U+ Cloud (U+ 클라우드)
LG U+ enterprise IDC & cloud (web UI)
iwinv (아이윈브, Smileserv)
Budget Korean cloud, VPS & web hosting with an HMAC-signed API (web UI)
Cafe24 Hosting (카페24 호스팅)
Mass-market Korean web, WordPress & domain hosting (web UI)
Dothome (닷홈)
Free and low-cost Korean shared web hosting (web UI)
6.42AWS Control
S3 Buckets
built-in tool
EC2 Instances
built-in tool
Lightsail
built-in tool
CloudFront/CDN
built-in tool
Route 53 DNS
built-in tool
RDS Databases
built-in tool
DynamoDB
built-in tool
CloudWatch Logs
built-in tool
SNS Topics
built-in tool
Billing Alerts
built-in tool
IAM Key Warnings
built-in tool
6.43AI / LLMs
AI Administrator
built-in tool
AI Models
built-in tool
Spend & Billing
built-in tool
Ollama
built-in tool
LM Studio
built-in tool
Skill Manager
built-in tool
Open WebUI
built-in tool
RAG Manager
built-in tool
Firecrawl
built-in tool
Crawl4AI
built-in tool
Apify
built-in tool
Playwright
built-in tool
Browserbase
built-in tool
Vane (Perplexica)
Self-hosted AI answer engine — the open-source Perplexity alternative (port 3000, web UI)
MLX
Apple-silicon model serving via MLX — CLI server or the oMLX menu-bar app (port 8080)
TurboFieldfare
Gemma 4 26B-A4B on Apple Silicon in ~2 GB of RAM (port 8080)
Cerebras
Very fast hosted inference on wafer-scale hardware (web UI)
MLX (Apple)
Apple's ML framework for Apple Silicon
vLLM
High-throughput LLM inference server (OpenAI-compatible) (port 8000)
llama.cpp Server
Lightweight local LLM server (OpenAI-compatible) (port 8080)
Mojo (Modular MAX)
Modular's AI language + MAX inference server (OpenAI-compatible) (port 8000)
LocalAI
Self-hosted, OpenAI-compatible inference server (port 8080, web UI)
Jan
Private, offline AI desktop app (OpenAI-compatible) (port 1337)
PrivateGPT
Ask questions of your documents, 100% offline (RAG) (port 8001, web UI)
IBM watsonx.ai
IBM's enterprise AI platform — Granite + third-party models (cloud/on-prem) (web UI)
Mem0
Memory layer for AI agents — self-hosted (Docker) or cloud (port 8888, web UI)
CrewAI (open source)
Multi-agent crews — Python framework + CLI (local)
Open Computer
Virtual OS for AI agents — QEMU VM per agent (Mintplex Labs) (web UI)
LiteLLM
Proxy/gateway for 100+ LLM APIs (OpenAI-compatible) (port 4000, web UI)
Tetrate Agent Router
Hosted LLM router — one OpenAI-compatible API (cloud) (web UI)
AnythingLLM
All-in-one self-hosted RAG chat app (port 3001, web UI)
Hugging Face
Model hub, Inference API & local tooling (web UI)
ChatLLM Teams
Abacus.AI's multi-model team chat & agent workspace (cloud) (web UI)
LibreChat
Self-hosted multi-provider AI chat UI (port 3080, web UI)
NotebookLM
Google's source-grounded research notebook (cloud) (web UI)
Open Notebook
Open-source, self-hosted NotebookLM alternative (port 8502, web UI)
OpenCode
Open-source AI coding agent (terminal)
Dyad
Local open-source AI app builder (desktop)
Papago Translation (NAVER Cloud)
Naver Papago machine translation (NAVER Cloud) (web UI)
CLOVA OCR (NAVER Cloud)
NAVER CLOVA OCR — general, template & document OCR (web UI)
FriendliAI (프렌들리AI)
Seoul-founded LLM inference cloud (hosts LG EXAONE) (web UI)
CLOVA Studio (HyperCLOVA X)
Naver HyperCLOVA X LLM API (OpenAI-compatible) (web UI)
Upstage (Solar)
Korean Solar LLMs + document AI (OpenAI-compatible) (web UI)
6.44AI Clusters
Exo Cluster
built-in tool
GPU Fabric
built-in tool
Petals
BitTorrent-style distributed inference of big models
Distributed Llama
Tensor-parallel Llama across cheap nodes (root + workers) (port 9998)
Slurm
HPC workload manager / job scheduler (port 6817)
Ray
Distributed compute for AI (training/serving/tuning) (port 8265, web UI)
Apache Spark
Distributed big-data processing engine (port 8080, web UI)
Dask
Parallel computing for Python (scales pandas/NumPy) (port 8787, web UI)
JupyterLab
Interactive notebooks for data & AI (Python) (port 8888, web UI)
Run:ai
GPU orchestration & fractional GPUs on Kubernetes (NVIDIA) (web UI)
NVIDIA Base Command Manager
GPU/HPC cluster provisioning & management (ex-Bright) (port 8081, web UI)
6.45Agent Platforms
Agent Operations
built-in tool
Runtimes
built-in tool
Activity
built-in tool
Routing & Integrations
built-in tool
Work
built-in tool
OpenClaw
built-in tool
Hermes
built-in tool
Odysseus
built-in tool
DeerFlow
built-in tool
CoWork OS
built-in tool
OpenAI Codex Runtime
built-in tool
Amp
built-in tool
DeepSeek Harness (Alpha)
built-in tool
Claude Code CLI
built-in tool
Gemini CLI
built-in tool
Factory Droid
built-in tool
OpenCode
built-in tool
Goose
built-in tool
LangGraph Platform
built-in tool
CrewAI Enterprise
built-in tool
Microsoft AutoGen
built-in tool
Genspark
built-in tool
Agent Zero
built-in tool
NVIDIA NemoClaw
built-in tool
OpenHuman
built-in tool
Apple Intelligence
built-in tool
Sandcastle
Orchestrate sandboxed coding agents (isolated containers)
SuperAGI
Open-source autonomous-agent framework (self-hosted) (port 3000, web UI)
OpenHands (OpenDevin)
Open-source autonomous AI software engineer (self-hosted) (port 3000, web UI)
E2B
Secure cloud sandboxes for AI agents (spin up / clone / kill) (web UI)
Browserbase
Headless browser infrastructure for AI agents (cloud sessions) (web UI)
Manus
Autonomous general AI agent (cloud API) (web UI)
Devin
Cognition's AI software engineer (cloud API) (web UI)
GitHub Copilot
AI pair programmer — live org seat/usage monitor (web UI)
OpenAI Operator
OpenAI's browser-using agent (cloud) (web UI)
Hyperagent
Airtable's fleet-of-agents platform (cloud) (web UI)
Herdr
Agent multiplexer — tmux for AI coding agents (terminal)
ChatGPT Work Sites
OpenAI's work agent + published Sites/web apps (alpha) (web UI)
Lakebed
Agent-native runtime for full-stack TypeScript capsules (alpha) (port 3000, web UI)
6.46FinOps & Cloud Cost
Infracost
Cost estimates for Terraform, in CI (self-hosted CLI / cloud)
OpenCost
CNCF open-source Kubernetes cost monitoring (self-hosted) (port 9003, web UI)
Kubecost
Kubernetes cost visibility & optimization (self-hosted / cloud) (port 9090, web UI)
CloudZero
Cloud cost intelligence & unit economics (cloud) (web UI)
Vantage
Multi-cloud cost reporting & optimization (cloud) (web UI)
Finout
No-agent FinOps platform with unified cost (cloud) (web UI)
CloudHealth
Multi-cloud cost & governance (VMware/Broadcom, cloud) (web UI)
AWS Cost Explorer
Native AWS cost analysis & forecasting (API) (web UI)
GCP Cloud Billing
Google Cloud billing reports, budgets & BigQuery export (API) (web UI)
Azure Cost Management
Native Azure (and AWS) cost analysis & budgets (API) (web UI)
6.47Containers
Containers
built-in tool
Kubernetes Clusters
built-in tool
Docker
built-in tool
OrbStack
built-in tool
Vagrant
built-in tool
Kamal
built-in tool
Proxmox VE
Open-source virtualization — KVM VMs + LXC containers (port 8006, web UI)
VMware vSphere
Enterprise virtualization — ESXi hypervisor + vCenter (port 443, web UI)
Microsoft Hyper-V
Windows Server hypervisor (Type-1)
XCP-ng
Open-source Xen hypervisor (XenServer alternative) (port 443, web UI)
Nutanix
HCI platform — AHV hypervisor + Prism management (port 9440, web UI)
Scale Computing HyperCore
SC//HyperCore HCI appliance (HC3) — REST API on :443 (port 443, web UI)
VergeOS
Verge.io — integrated virtualization, storage and networking (port 443, web UI)
HPE Morpheus
Hybrid-cloud management & orchestration (REST API) (port 443, web UI)
Platform9
Managed Kubernetes / private cloud (SaaS control plane) (port 443, web UI)
Azure Local
Azure Stack HCI successor — monitored via Azure ARM, no local API (web UI)
OpenShift Virtualization
Run VMs alongside containers on OpenShift (KubeVirt) (web UI)
OpenStack
Open-source private-cloud IaaS platform (web UI)
VMware vMotion
Live-migrate running VMs between ESXi hosts
Proxmox VE Live Migration
Live-migrate KVM VMs across Proxmox cluster nodes
Hyper-V Live Migration
Move running Hyper-V VMs between hosts with no downtime
Watchtower
Auto-update running Docker containers
Podman
Daemonless, Docker-compatible containers
Apple Container
Apple's native `container` tool — Linux containers in per-container VMs
Lima
Linux virtual machines (container machines) on macOS
Colima
Container runtimes on macOS via Lima (Docker/containerd/k8s)
OrbStack
Fast Docker & Linux machines for macOS
Kubernetes
The container orchestrator (kubectl) (port 6443)
Helm
The Kubernetes package manager (charts)
Dev Containers (VS Code)
Reproducible dev environments in a container
K3s
Lightweight certified Kubernetes (self-hosted) (port 6443)
minikube
Local single-node Kubernetes for development
kind
Kubernetes IN Docker — disposable clusters
k3d
k3s in Docker — lightweight multi-node clusters
k0s
Zero-friction single-binary Kubernetes (port 6443)
MicroK8s
Canonical's low-ops Kubernetes (snap) (port 16443)
RKE2
Rancher's security-focused Kubernetes (Gov-grade) (port 6443)
Talos Linux
API-managed immutable OS purpose-built for Kubernetes (port 50000)
kubeadm
The official cluster bootstrapper (vanilla K8s) (port 6443)
OpenShift / OKD
Red Hat's enterprise Kubernetes platform (port 6443, web UI)
Rancher Desktop
Desktop Kubernetes + container runtime for Mac
nerdctl
Docker-compatible CLI for containerd
Docker Swarm
Docker-native clustering (docker swarm / stack) (port 2377)
Portainer
Web UI for Docker & Kubernetes (self-hosted) (port 9443, web UI)
Rancher
Multi-cluster Kubernetes management (self-hosted) (port 443, web UI)
Nomad
HashiCorp workload orchestrator (self-hosted) (port 4646, web UI)
6.48Service Mesh (Kubernetes)
Istio
Envoy-based service mesh for Kubernetes
Linkerd
Lightweight, fast CNCF service mesh
Consul Connect
HashiCorp Consul service mesh & discovery (port 8500, web UI)
Cilium Service Mesh
eBPF-based, sidecarless service mesh & CNI
Kuma
Universal service mesh (Kong, CNCF) (port 5681, web UI)
Gloo Mesh
Istio-based multi-cluster service mesh (solo.io)
NGINX Service Mesh
Lightweight service mesh on NGINX/NGINX Plus (F5)
AWS App Mesh
Managed Envoy service mesh on AWS (ECS/EKS/EC2)
Kong Gateway
Cloud-native API gateway on Envoy/Nginx (self-hosted / cloud) (port 8001)
Tyk
Open-source API gateway & management (self-hosted / cloud) (port 8080, web UI)
Apache APISIX
Dynamic, high-performance API gateway (self-hosted) (port 9180, web UI)
Envoy Gateway
Gateway API management plane for Envoy Proxy (self-hosted)
6.49Apps & CMS
WordPress
built-in tool
WordPress Sites
built-in tool
RevenueCat
built-in tool
Drupal
built-in tool
Joomla
built-in tool
Statamic
built-in tool
Grav
built-in tool
Kirby
built-in tool
Craft CMS
built-in tool
ClassicPress
WordPress fork without the block editor (web UI)
Backdrop CMS
Drupal 7 fork for small-to-medium sites (web UI)
Bedrock (Roots)
Composer-managed WordPress boilerplate
Trellis (Roots)
Ansible server provisioning for WordPress
WordPress Playground
WordPress running in WebAssembly — no server needed (port 9400, web UI)
Ghost
Modern publishing & newsletter platform (port 2368, web UI)
Webflow
Visual website builder & hosted CMS (cloud) (web UI)
Framer
Design-first website builder with hosted CMS (cloud) (web UI)
imweb (아임웹)
Korean website & online-store builder with hosting (cloud) (web UI)
Instatic
Self-hosted visual CMS with an AI page editor (open-source) (port 3001, web UI)
inblog
Korean SEO-focused blog builder with a REST API (web UI)
Oopy (우피)
Turns Notion pages into hosted websites (Korea) (web UI)
6.50Knowledge & Memory
Knowledge Folder
built-in tool
Knowledge Notes
built-in tool
GraphRAG
Graph-based retrieval-augmented generation (Microsoft)
Graphify
Turn a codebase into a queryable knowledge graph (AI coding-assistant skill)
Khoj
Self-hosted AI second brain — chat with your notes, docs and the web (port 42110, web UI)
Logseq
Local-first outliner & PKM (Markdown/Org)
Notion
All-in-one workspace — docs, wikis, databases (cloud)
DokuWiki
Flat-file PHP wiki — the closest macOS Server “Wiki” replacement (port 80, web UI)
MediaWiki
The wiki engine behind Wikipedia (PHP/MySQL) (port 80, web UI)
Wiki.js
Modern self-hosted wiki (Node.js) (port 3000, web UI)
BookStack
Self-hosted docs/wiki organised as books (PHP) (port 6875, web UI)
Outline
Self-hosted team knowledge base (real-time) (port 3000, web UI)
Trilium Notes
Hierarchical personal notes (self-hosted server + app) (port 8080, web UI)
Zotero
Reference & research manager (app + API)
Readwise
Highlights sync & read-later (cloud API)
Memos
Lightweight, privacy-first notes/memo hub (port 5230, web UI)
Linkding
Minimal, fast self-hosted bookmark manager (port 9090, web UI)
Karakeep
AI bookmark/read-it-later (formerly Hoarder) (port 3000, web UI)
Wallabag
Self-hosted read-it-later (Pocket alternative) (port 80, web UI)
Docmost
Open-source collaborative wiki & docs (Confluence/Notion alt.) (port 3000, web UI)
AFFiNE
Docs + whiteboard + database (Notion/Miro alt.) (port 3010, web UI)
AppFlowy
Open-source Notion alternative (docs/boards/DBs) (web UI)
Joplin Server
Sync server for Joplin notes (E2EE) (port 22300, web UI)
Shiori
Simple self-hosted bookmark manager (Go) (port 8080, web UI)
SurfSense
Self-hosted NotebookLM/Perplexity alternative (port 3000, web UI)
6.51E-Commerce
Store Health
built-in tool
Sales Channels
built-in tool
Square
built-in tool
WooCommerce
WordPress e-commerce plugin (PHP) (web UI)
Adobe Commerce (Magento)
Enterprise PHP commerce platform (port 80, web UI)
Shopware
Symfony-based commerce platform (PHP) (port 80, web UI)
Saleor
GraphQL-first headless commerce (Python) (port 8000, web UI)
Medusa
Node.js headless commerce engine (port 9000, web UI)
Vendure
Node.js/GraphQL headless commerce (port 3000, web UI)
Stripe
Payments & checkout API (cloud) (web UI)
PayPal
Online payments & checkout (cloud) (web UI)
DOKU
Indonesian payment gateway (cards, e-wallets, VA, QRIS) (web UI)
Mollie
European payments (iDEAL, cards, SEPA) (cloud) (web UI)
Paddle
Merchant-of-record for software sales (cloud) (web UI)
Lemon Squeezy
Digital-products storefront & MoR (legacy — moving to Stripe) (web UI)
Braintree
PayPal's card/wallet gateway (GraphQL API) (cloud) (web UI)
PAY.JP
Japanese card payments API (cloud) (web UI)
KOMOJU
Japanese multi-method payments (konbini, cards, wallets) (web UI)
Adyen
Enterprise payments platform (webhook/report-driven) (web UI)
Wise
Multi-currency business account & payouts (cloud) (web UI)
GMO Payment Gateway
Japan's largest PSP (per-order API; no list API) (web UI)
Shopify
Hosted commerce platform & channel (cloud) (web UI)
Amazon
Amazon marketplace selling channel (cloud) (web UI)
FedEx
Shipping rates, labels & tracking (cloud) (web UI)
UPS
Shipping rates, labels & tracking (cloud) (web UI)
DHL
Shipping rates, labels & tracking (cloud) (web UI)
eBay Seller Hub
eBay marketplace selling channel (cloud) (web UI)
Etsy
Handmade/vintage & POD marketplace (cloud) (web UI)
Walmart Marketplace
Walmart marketplace selling channel (cloud) (web UI)
Sixshop (식스샵)
Korean online-store builder (no public API) (web UI)
NHN Commerce godomall (고도몰)
NHN Commerce hosted e-commerce builder (고도몰) (web UI)
KakaoPay (카카오페이)
KakaoPay online & subscription payments (web UI)
Naver Pay (네이버페이)
Naver Pay merchant payments & settlement API (web UI)
NicePay (나이스페이)
NicePay PG — cards, transfers, virtual accounts (web UI)
NHN KCP (NHN한국사이버결제)
NHN KCP payment gateway (web UI)
KG Inicis (KG이니시스)
KG Inicis payment gateway (INIAPI) (web UI)
Bootpay (부트페이)
Bootpay PG aggregator + commerce API (web UI)
Payple (페이플)
Payple card & bank billing PG (web UI)
Hecto Financial (헥토파이낸셜, ex-Settlebank)
Hecto Financial (ex-Settlebank) payment gateway (web UI)
Steppay (스텝페이)
Korean subscription & recurring-billing platform (web UI)
PayApp (페이앱)
PayApp small-merchant payment links (web UI)
KICC EasyPay (한국정보통신 이지페이)
KICC EasyPay online payment gateway (web UI)
Danal (다날)
Danal payments (cards, mobile billing) (web UI)
Smartro (스마트로)
Smartro payment gateway (no public key API) (web UI)
KG Mobilians (KG모빌리언스)
KG Mobilians mobile-phone billing (web UI)
Cafe24 (카페24)
Korea's largest shop builder — Admin API for orders & products (web UI)
Naver SmartStore Commerce API (네이버 커머스API)
Naver SmartStore seller API — orders, products, claims (web UI)
Coupang Wing (쿠팡 윙)
Coupang marketplace seller API — orders & shipments (web UI)
11st Open API (11번가)
11st marketplace seller API (web UI)
Gmarket / Auction ESM+ (지마켓·옥션)
Gmarket & Auction seller API (ESM Trading API) (web UI)
MakeShop (메이크샵)
Korean shop builder with an Open API (web UI)
NHN Commerce shopby (샵바이)
NHN Commerce headless commerce (shopby) (web UI)
Lotte ON (롯데온)
Lotte ON marketplace seller API (web UI)
SSG.COM Open API (SSG닷컴)
SSG.COM marketplace seller API (web UI)
Kakao Shopping / KakaoTalk Store (카카오톡 스토어)
KakaoTalk Store seller centre (web UI)
Toss Shopping (토스쇼핑)
Toss Shopping seller API (web UI)
Zigzag / Kakao Style (지그재그)
Zigzag / Kakao Style seller GraphQL API (web UI)
Toss Payments (토스페이먼츠)
Toss Payments — Korean payment gateway (web UI)
PortOne (포트원, ex-Iamport)
PortOne — one API across Korean payment gateways (web UI)
6.52QR & Link Management
QR & Link Health
built-in tool
BL.INK
Enterprise link management (cloud) (web UI)
Bitly
Links, QR codes, analytics (cloud) (web UI)
Rebrandly
Branded short domains (cloud) (web UI)
Short.io
Teams, custom domains (cloud) (web UI)
Dub.co
Modern marketing links & QR (open-source core) (web UI)
QR Code Generator PRO
Dynamic QR codes (cloud) (web UI)
Beaconstac (Uniqode)
QR analytics & management (cloud) (web UI)
Flowcode
Marketing QR dashboards (cloud) (web UI)
Scanova
QR campaign management (cloud) (web UI)
QR TIGER
Dynamic QR management (cloud) (web UI)
GS1 Digital Link
Own your product-QR resolver (self-host or SaaS) (web UI)
6.53Student Information Systems
PowerSchool SIS
K-12 student information system (cloud) (web UI)
PowerSchool Attendance
Attendance tracking within PowerSchool (cloud) (web UI)
Blackbaud SIS
Independent/private-school SIS (cloud) (web UI)
FACTS SIS
Private/faith-based school SIS (cloud) (web UI)
Infinite Campus
K-12 SIS & state reporting (cloud) (web UI)
Veracross
All-in-one independent-school platform (cloud) (web UI)
openSIS
Open-source student information system (self-hosted) (web UI)
RosarioSIS
Open-source SIS (PHP/PostgreSQL, self-hosted) (web UI)
SchoolPass
Attendance, dismissal & safety (cloud) (web UI)
RFID/NFC Attendance
Tap-card attendance with RFID/NFC readers (self-hosted) (web UI)
6.54Learning Management
Canvas LMS
Instructure Canvas — courses, assignments, grading (web UI)
Blackboard Learn
Higher-ed LMS (cloud) (web UI)
Schoology
K-12 LMS by PowerSchool (cloud) (web UI)
Google Classroom
Google's classroom & assignment tool (cloud) (web UI)
Moodle
Open-source LMS (self-hosted, PHP) (web UI)
Open edX
MOOC-scale open LMS (self-hosted) (web UI)
ILIAS
Open-source LMS (self-hosted, PHP) (web UI)
BigBlueButton
Open-source virtual classroom (self-hosted) (web UI)
Zoom
Video meetings & online classes (app)
Google Meet
Google's video meetings (cloud) (web UI)
ExamSoft
Secure exam delivery & analytics (cloud) (web UI)
ProctorU
Online exam proctoring (cloud) (web UI)
TAO Testing
Open-source assessment platform (self-hosted) (web UI)
6.55Digital Library
EBSCOhost
Research databases & e-journals (cloud) (web UI)
ProQuest
Dissertations, e-journals & databases (cloud) (web UI)
JSTOR
Academic journals & books archive (cloud) (web UI)
Koha
Open-source integrated library system (self-hosted) (web UI)
DSpace
Open-source institutional repository (self-hosted) (web UI)
Greenstone
Open-source digital-library builder (self-hosted) (web UI)
6.56Campus & School Ops
aSc Timetables
School timetable generator (desktop)
Mimosa Scheduling
Timetabling / scheduling software (desktop)
FET Timetabling
Open-source automatic timetabling (self-hosted/desktop)
Slate Admissions
Admissions & enrolment CRM (cloud) (web UI)
OpenApply
Admissions & enrolment for K-12 (cloud) (web UI)
Finalsite Enrolment
School websites & enrolment (cloud) (web UI)
FACTS Tuition Management
Tuition billing & payment plans (cloud) (web UI)
Flywire Education Payments
Cross-border tuition payments (cloud) (web UI)
StarRez
Student housing & residential life (cloud) (web UI)
eRezLife
Residence life & housing management (cloud) (web UI)
Ellucian Banner
Higher-ed ERP / student system (cloud or self-hosted) (web UI)
Workday Student
Cloud ERP for higher education (cloud) (web UI)
ParentSquare
School-home communication (cloud) (web UI)
Remind
Teacher-family messaging (cloud) (web UI)
Asset Panda
Asset & device tracking (cloud) (web UI)
Incident IQ
K-12 IT helpdesk & asset management (cloud) (web UI)
ClassLink
Education SSO & rostering (cloud) (web UI)
6.57Sourcing & Suppliers
AliExpress
Global supplier marketplace for drop-shipping (cloud) (web UI)
Alibaba
B2B wholesale sourcing (cloud) (web UI)
CJdropshipping
Sourcing + warehousing + fulfilment (cloud) (web UI)
Spocket
US/EU-supplier drop-ship marketplace (cloud) (web UI)
Zendrop
Drop-ship sourcing & auto-fulfillment (cloud) (web UI)
SaleHoo
Vetted supplier directory (cloud) (web UI)
DSers
AliExpress order automation (official) (cloud) (web UI)
6.58Print-on-Demand
Printful
Print-on-demand & fulfilment (cloud) (web UI)
Printify
Print-on-demand marketplace (cloud) (web UI)
Gelato
Global/local print-on-demand network (cloud) (web UI)
Gooten
Print-on-demand fulfilment platform (cloud) (web UI)
6.59Shipping & Fulfilment
Drop-shipping Health
built-in tool
AfterShip
Universal shipment tracking across 1,000+ carriers (cloud) (web UI)
ShipStation
Multi-channel order & label management (cloud) (web UI)
Easyship
Global shipping rates, duties & labels (cloud) (web UI)
Shippo
Multi-carrier rates, labels & tracking API (cloud) (web UI)
Pirate Ship
Free, discounted USPS/UPS labels (cloud) (web UI)
6.60Inventory Sync
SkuVault
Warehouse & inventory management (cloud) (web UI)
Cin7
Inventory & order management (cloud) (web UI)
Zoho Inventory
Multi-channel inventory & order management (cloud) (web UI)
Katana Cloud Inventory
Manufacturing & inventory control (cloud) (web UI)
zaiko Robot
Japanese multi-store stock sync — Rakuten, Yahoo!, Amazon, carts, POS (cloud) (web UI)
Sabangnet (사방넷)
Korean multi-marketplace order & product hub (web UI)
PlayAuto (플레이오토)
Korean multi-marketplace order management (OMS) (web UI)
6.61Profit Analytics
Triple Whale
E-commerce profit & attribution dashboard (cloud) (web UI)
Lifetimely
P&L and LTV analytics for Shopify (cloud) (web UI)
BeProfit
Profit & expense tracking dashboard (cloud) (web UI)
6.62Mesh Networking
RNS Nodes
built-in tool
Reticulum
Cryptography-based mesh networking stack (any medium)
Nomad Network (NomadNet)
Resilient comms over Reticulum (pages, files, messaging)
Sideband
LXMF messaging app over Reticulum (desktop/mobile)
Meshtastic
LoRa mesh radio for text & location (off-grid)
RNode LoRa Devices
Open LoRa radio interface for Reticulum (flash & configure)
Yggdrasil
Self-arranging encrypted IPv6 mesh (experimental)
cjdns / Hyperboria
Encrypted IPv6 mesh routing (source-routed)
B.A.T.M.A.N.-adv
Layer-2 community Wi-Fi mesh routing (Linux)
OLSR (olsrd)
Optimized Link State Routing for MANETs
Babel (babeld)
Robust distance-vector mesh routing protocol
Briar
P2P messaging over Tor, Wi-Fi & Bluetooth
AREDN
Amateur-radio high-speed mesh (ham licence)
qaul
Internet-independent P2P mesh messaging app
Serval Mesh
Off-grid mesh comms (Serval Project)
Ratspeak
Private, account-free mesh messaging (Reticulum-based)
6.63Anonymity Networks
Tor
Onion-routing anonymity network (client/relay/bridge/onion service) (port 9050, brew: tor)
I2P
Garlic-routed network — router, tunnels, eepsites, messaging (port 7070, web UI)
6.64Secrets & Vaults
Vault Links
built-in tool
Bitwarden
Password manager — cloud or official self-host (web UI)
Vaultwarden
Self-hosted Bitwarden-compatible server (Docker) (port 8222, web UI)
HashiCorp Vault
Secrets, PKI & dynamic credentials (self-hosted) (port 8200, web UI)
Step CA
Your own private certificate authority (self-hosted) (port 8443)
Let's Encrypt
Free TLS certificates via ACME — health & renewal monitor
Infisical
Open-source secrets for app configs (cloud or self-hosted) (port 8080, web UI)
Doppler
Hosted secrets & config manager (cloud) (web UI)
1Password SCIM Bridge
Automated 1Password user provisioning (self-hosted bridge) (port 3002)
1Password
Password manager with developer secrets API (cloud) (web UI)
Keeper Security
Password manager & Secrets Manager (cloud API) (web UI)
6.65Monitoring
Unified Health History
HTTP/HTTPS, TCP, Ping, SIP, local processes, remote helpers and service APIs feed the same one-minute health board, response-time history, rolling uptime and transition log
Network-aware checks
Scope local targets to a saved network identity (router MAC, subnet and Wi-Fi identity); they pause outside that network without requesting the Mac's or phone's location
Private mobile widgets
Overview, multi-server, multi-service and single-service focus widgets, plus Lock Screen overview widgets; only sanitized health names and states enter the App Group
Cloud API monitoring
GitHub account/repository/Actions health, API quota and release-asset downloads; Anthropic and GitHub Copilot account monitoring; broad SaaS API metrics and thresholds
Disk Health
built-in tool
Service Guardian
built-in tool
Grafana
Dashboards for any data source (self-hosted) (port 3000, web UI, brew: grafana)
Prometheus
Time-series metrics & alerting (self-hosted) (port 9090, web UI, brew: prometheus)
Alertmanager
Route and deduplicate Prometheus alerts (self-hosted) (port 9093, web UI)
Node Exporter
Unix host metrics for Prometheus (self-hosted) (port 9100, web UI, brew: node_exporter)
Windows Exporter
Windows host metrics for Prometheus (remote) (port 9182, web UI)
Zabbix
Enterprise monitoring — agents, SNMP, triggers (self-hosted) (port 8080, web UI)
Nagios Core
The classic check-based monitor (self-hosted) (port 80, web UI)
Checkmk
Auto-discovering IT monitoring (self-hosted) (port 8080, web UI)
Paessler PRTG
Network, server and infrastructure monitoring (Windows or hosted) (port 443, web UI)
Healthchecks.io
Cron & heartbeat monitoring (cloud or self-hosted) (web UI)
Datadog
Hosted metrics, logs, traces and synthetics (SaaS) (web UI)
AppSignal
Application errors, performance, uptime and deploys (SaaS) (web UI)
New Relic
Hosted APM, infrastructure and logs (SaaS) (web UI)
Sentry
Error tracking and performance monitoring (web UI)
Honeycomb
Observability for high-cardinality events and traces (web UI)
Dynatrace
Enterprise observability and AIOps platform (web UI)
Matomo
Full-featured self-hosted web analytics (port 80, web UI)
Plausible
Lightweight, privacy-first analytics (port 8000, web UI)
Umami
Simple, privacy-focused analytics (Node) (port 3000, web UI)
GoAccess
Real-time access-log analyser (CLI/HTML)
Netdata
Real-time system metrics dashboard (port 19999, web UI, brew: netdata)
Uptime Kuma
Self-hosted uptime monitor (port 3001, web UI)
Scrutiny
S.M.A.R.T. drive health dashboard (port 8080, web UI)
Glances
Cross-platform system monitor (web/API) (port 61208, web UI)
Beszel
Lightweight server monitoring hub + agents (port 8090, web UI)
Speedtest Tracker
Scheduled internet speed tests + history (port 80, web UI)
UptimeRobot
Cloud uptime/SSL monitoring with status pages (web UI)
NUT (Network UPS Tools)
UPS monitoring server (upsd) for many devices (port 3493)
Homepage
Self-hosted services dashboard (gethomepage.dev) (port 3000, web UI)
PeaNUT
Modern web dashboard for NUT UPS servers (port 8080, web UI)
NinjaOne
Endpoint monitoring, patching and automation (SaaS RMM) (web UI)
Atera
RMM, patching, ticketing and automation (SaaS) (web UI)
Site24x7
Infrastructure, application, network and experience monitoring (SaaS) (web UI)
ManageEngine Applications Manager
Application, server, VM and capacity monitoring (port 8443, web UI)
ManageEngine OpManager Nexus
Unified network, server and IT operations management (port 8060, web UI)
Pulseway
Mobile-first RMM, patching and endpoint automation (web UI)
FirstWave NMIS
Open network fault, performance and configuration monitoring (port 8042, web UI)
N-able N-central
Unified endpoint management, RMM and patching (port 443, web UI)
Netreo
Full-stack infrastructure and business-service observability (port 443, web UI)
Pandora FMS
Infrastructure, application, log and synthetic monitoring (port 80, web UI)
Atatus
APM, logs, infrastructure and real-user monitoring (SaaS) (web UI)
Infraon IMS
Unified infrastructure, network and configuration monitoring (port 443, web UI)
Naverisk RMM & PSA
Cross-platform RMM, service desk and PSA (web UI)
Server Density
Hosted server, service and container monitoring (web UI)
WhaTap (와탭)
Korean SaaS APM, server, Kubernetes & DB monitoring (web UI)
JENNIFER APM (제니퍼, JenniferSoft)
Self-hosted Korean APM (JenniferSoft) (web UI)
Scouter (open-source APM)
Korean-origin open-source APM (web UI)
6.66Security Tools
Security
built-in tool
Malware Audit
built-in tool
Security Audit
built-in tool
EDR Fleet
built-in tool
Fail2ban
Bans IPs after suspicious activity (intrusion prevention) (brew: fail2ban)
Suricata
High-performance IDS/IPS engine (self-hosted)
Snort
The classic network IDS (self-hosted)
CrowdSec
Behavioural detection + IP blocking (crowd-sourced) (port 8080, brew: crowdsec)
OSSEC
Host-based IDS: log, file-integrity & rootkit monitoring
LuLu
Free open-source outbound firewall (macOS app)
Burp Suite
Web app security testing — intercepting proxy & scanner (macOS app) (port 8080)
Vibe Proxy
AI-assisted web security testing & intercepting proxy
Yakit
Open-source web security testing platform & MITM (macOS app)
Strix
AI-assisted penetration testing from the local CLI
Fuzzilli
Coverage-guided JavaScript engine fuzzer (reviewed local binaries)
OWASP ZAP
Open-source web-app security scanner (DAST) — spider, active scan, proxy (port 8080)
Intego NetBarrier
Intego's two-way Mac firewall (NetBarrier X9 / Intego ONE)
Little Snitch
Commercial network monitor & firewall (macOS app)
Murus
GUI front-end for the macOS pf firewall (app)
Radio Silence
Lightweight macOS outbound firewall (app)
Vallum
Per-app outbound firewall & throttle (app)
Hands Off!
Per-app network + disk access control (app)
NetBarrier
Two-way macOS firewall (Intego, app)
ClamAV
Open-source antivirus engine (self-hosted) (brew: clamav)
YARA
Pattern-matching engine for malware (self-hosted)
AbuseIPDB
Crowd-sourced IP reputation / blocklist (cloud API) (web UI)
Phishing Catcher
Catch phishing domains from CT logs (self-hosted)
URLhaus
Malware-URL feed & lookup API (cloud · abuse.ch) (web UI)
OpenPhish
Live phishing-URL feed (cloud) (web UI)
MISP
Threat-intelligence sharing platform (self-hosted) (port 443, web UI)
CAPE Sandbox
Malware sandbox w/ config extraction (self-hosted) (port 8000, web UI)
Cuckoo Sandbox
Automated malware-analysis sandbox (self-hosted) (port 8090, web UI)
YARA-X
YARA rewritten in Rust — faster CLI scanner (self-hosted)
Volatility 3
Memory-forensics framework (self-hosted)
capa
Detect capabilities in executables (self-hosted)
oletools
Analyse malicious Office docs / OLE (self-hosted)
radare2
Reverse-engineering framework / disassembler (self-hosted)
binwalk
Firmware / embedded-file carving & analysis (self-hosted)
Nuclei
Template-based vulnerability scanner (self-hosted CLI)
OpenCTI
Cyber threat-intelligence platform (self-hosted) (port 8080, web UI)
TheHive
Security incident-response platform (self-hosted) (port 9000, web UI)
Cortex
Observable analysers & responders engine (self-hosted) (port 9001, web UI)
IntelOwl
OSINT / threat-intel analysis platform (self-hosted) (port 443, web UI)
AlienVault OTX
Open Threat Exchange IOC feed (cloud) (web UI)
GRR Rapid Response
Remote live-forensics / IR framework (self-hosted) (port 8000, web UI)
OpenEDR
Open-source endpoint detection & response (self-hosted) (web UI)
Santa
macOS binary allowlisting / blocklisting (self-hosted)
KnockKnock
Reveal persistently installed Mac software (self-hosted)
BlockBlock
Monitor & block persistence in real time (self-hosted)
ThreatLocker
Zero Trust app allowlisting & endpoint control (agent + cloud portal)
OPSWAT MetaDefender
Multi-engine malware scanning & file CDR (self-hosted / API) (port 8008, web UI)
osquery
Query your endpoint like a database (agent)
Fleet
Self-hosted osquery fleet manager (web UI + API) (port 8080, web UI)
Velociraptor
Endpoint visibility & DFIR hunting (self-hosted) (port 8889, web UI)
Zeek
Network security monitor / traffic analysis (self-hosted)
OpenVAS / Greenbone
Vulnerability scanning (self-hosted) (port 9392, web UI)
CrowdStrike Falcon
Cloud-native EDR/XDR (macOS sensor + API)
SentinelOne
Autonomous EDR/XDR (macOS agent + API)
Microsoft Defender for Endpoint
Microsoft EDR for macOS (agent + Graph API)
Sophos Central
Endpoint protection / MDR (macOS agent + API)
Bitdefender GravityZone
Endpoint protection / EDR (macOS agent + API)
Malwarebytes
Anti-malware (macOS app; business via Nebula API)
Huntress
Managed EDR/MDR for SMB & MSPs (agent + API)
Jamf Protect
Mac-native endpoint security (agent + API)
LimaCharlie
API-first SecOps cloud / EDR (agent + API)
Airlock Digital
Application allowlisting & execution control (agent + API)
Admin By Request
Endpoint privilege management / just-in-time admin (agent + API)
CyberArk EPM
Endpoint Privilege Manager (agent + API)
BeyondTrust EPM
Endpoint Privilege Management for Mac (agent + API)
AutoElevate (CyberFOX)
MSP privilege elevation & local-admin control (agent + API)
VirusTotal
Multi-engine file/URL reputation (API)
Cloudmersive
Virus-scan & content-protection API (cloud / self-host)
Hybrid Analysis
Malware sandbox (Falcon Sandbox) — API
Kolide
Device trust & posture (osquery-based agent + API)
AdGuard
Ad/tracker blocker app + AdGuard DNS & VPN (commercial)
CyberChef
The cyber-Swiss-army-knife for data (web UI)
Cloudbric WAF+ (Penta Security, 펜타시큐리티)
Penta Security cloud WAF, DDoS & bot protection (web UI)
6.67SIEM & Security Data
SIEM Overview
built-in tool
Wazuh
Open-source SIEM & XDR (self-hosted) (port 443, web UI)
Security Onion
NSM + SIEM + IDS Linux distro (self-hosted) (port 443, web UI)
Graylog
Centralized log management (self-hosted) (port 9000, web UI)
Splunk
Enterprise log search, SIEM and observability (port 8000, web UI)
Elastic Security
Elastic SIEM, XDR and cloud-security analytics (hybrid) (port 5601, web UI)
Microsoft Sentinel
Cloud-native SIEM and SOAR on Microsoft Azure (web UI)
Google Security Operations
Google SecOps SIEM and SOAR (formerly Chronicle) (web UI)
IBM QRadar SIEM
Enterprise SIEM for events, flows and offenses (hybrid) (port 443, web UI)
Sumo Logic Cloud SIEM
Cloud SIEM, detections and security analytics (web UI)
Rapid7 InsightIDR
Cloud SIEM with user behavior and incident detection (web UI)
LogRhythm SIEM
Enterprise SIEM, analytics and response platform (port 443, web UI)
Devo
Cloud-native security analytics and SIEM (web UI)
FortiSIEM
Fortinet SIEM for infrastructure and security events (port 443, web UI)
OpenText ArcSight
Enterprise SIEM and security operations platform (port 8443, web UI)
VirtualMetric DataStream
Security-data pipeline for collection, normalization and routing (port 443, web UI)
Cribl Stream
Vendor-neutral telemetry pipeline and security-data router (port 9000, web UI)
Logstash
ELK's ingest & transform pipeline (self-hosted) (port 9600, brew: logstash-full)
Vector
High-performance logs, metrics and security-data pipeline (port 8686, brew: vector)
Fluent Bit
Lightweight telemetry collector and forwarder (port 2020, brew: fluent-bit)
Fluentd
Plugin-rich log collector and routing layer (port 24224)
NXLog
Cross-platform Windows and Linux log collection
syslog-ng
Flexible syslog collection, filtering and forwarding (brew: syslog-ng)
OpenTelemetry Collector
Vendor-neutral telemetry collector and processor
6.68Secrets Scanning & Supply Chain Security
Snyk
Developer security — code, deps, containers & IaC (cloud + CLI) (web UI)
Dependabot
Automated dependency-update & security PRs (GitHub) (web UI)
Renovate
Automated dependency updates, any platform (self-hosted / app)
Trivy
All-in-one vuln, secret, IaC & SBOM scanner (self-hosted CLI)
Grype
Fast vulnerability scanner for images & SBOMs (self-hosted CLI)
Syft
Generate SBOMs from images & filesystems (self-hosted CLI)
Cosign
Sign & verify container images and artifacts (self-hosted CLI)
Sigstore
Keyless signing ecosystem — Cosign, Fulcio, Rekor (self-hosted / public)
Chainguard
Minimal, low/zero-CVE container images (cloud + chainctl) (web UI)
Socket
Proactive dependency / supply-chain attack detection (cloud + CLI) (web UI)
GitGuardian
Secrets detection across code & CI (cloud + ggshield CLI) (web UI)
Gitleaks
Open-source secrets scanner for git repos (self-hosted CLI)
TruffleHog
Find & VERIFY leaked secrets across code, git history, cloud & CI (self-hosted CLI)
OSV-Scanner
Dependency vulnerability scanner backed by OSV.dev (self-hosted CLI)
Lynis
Host security auditing & hardening for Unix/Linux/macOS (self-hosted CLI)
Semgrep Supply Chain
SAST + reachable-dependency (SCA) scanning (self-hosted CLI / cloud)
6.69Policy, Compliance & Governance
Vanta
Automated compliance — SOC 2, ISO 27001, HIPAA, GDPR (cloud) (web UI)
Drata
Continuous compliance automation & audit readiness (cloud) (web UI)
Secureframe
Compliance automation across 40+ frameworks (cloud) (web UI)
Sprinto
Compliance automation for fast-moving teams (cloud) (web UI)
Thoropass
Compliance + audit in one (formerly Laika, cloud) (web UI)
Hyperproof
Compliance operations & evidence management (cloud) (web UI)
OneTrust
Privacy, GRC & data governance suite (cloud) (web UI)
LogicGate Risk Cloud
No-code GRC & risk workflow platform (cloud) (web UI)
AuditBoard
Connected risk, audit & compliance platform (cloud) (web UI)
Eramba
Open-source GRC platform (self-hosted) (port 443, web UI)
SimpleRisk
Open-source risk management (self-hosted) (port 443, web UI)
OpenGRC
Open-source governance, risk & compliance (self-hosted) (port 8080, web UI)
OpenControl
Compliance-as-code documentation toolkit (self-hosted CLI)
Open Policy Agent (OPA)
General-purpose policy engine, Rego (self-hosted CLI) (port 8181)
Conftest
Test config files against OPA/Rego policies (CLI)
OPA Gatekeeper
OPA policy admission controller for Kubernetes (self-hosted)
Kyverno
Kubernetes-native policy engine, no new language (self-hosted)
HashiCorp Sentinel
Policy as code for the HashiCorp stack (CLI)
Checkov
Static policy scanning for IaC (self-hosted CLI)
Prowler
Open-source multi-cloud security & compliance scanner (CLI)
Scout Suite
Multi-cloud security-auditing tool (CLI)
CloudQuery
Cloud asset inventory as SQL (self-hosted CLI)
Steampipe
Query cloud APIs with SQL + compliance mods (CLI)
Cloud Custodian
Rules engine for cloud governance & remediation (CLI)
AWS Config
Native AWS resource configuration & compliance (API) (web UI)
AWS Security Hub
Aggregated AWS security findings & standards (API) (web UI)
OpenFGA
Open-source fine-grained authorization (Zanzibar-style, self-hosted) (port 8080)
Authzed / SpiceDB
Zanzibar-style permissions database (self-hosted / cloud) (port 50051)
Permify
Open-source fine-grained authorization service (self-hosted) (port 3476)
Aserto / Topaz
Authorization built on OPA + Zanzibar (self-hosted / cloud) (port 8383)
immudb
Immutable, cryptographically-verifiable database / audit log (self-hosted) (port 3322)
Securiti
Data privacy, security & governance platform (cloud) (web UI)
BigID
Data discovery, privacy & governance at scale (cloud) (web UI)
DataGrail
Privacy platform — DSR & data mapping automation (cloud) (web UI)
Transcend
Privacy & data-rights automation, incl. AI governance (cloud) (web UI)
MineOS
Data-governance & privacy operations platform (cloud) (web UI)
Osano
Consent management & privacy compliance (cloud) (web UI)
OpenMetadata
Open-source metadata, catalogue & lineage platform (self-hosted) (port 8585, web UI)
DataHub
Open-source metadata platform & data catalogue (self-hosted) (port 9002, web UI)
Amundsen
Open-source data discovery & metadata engine (self-hosted) (port 5000, web UI)
Apache Atlas
Metadata & governance for the Hadoop/data ecosystem (self-hosted) (port 21000, web UI)
Microsoft Purview
Data governance, compliance, retention & eDiscovery (cloud) (web UI)
Google Vault
Retention, legal hold & eDiscovery for Google Workspace (cloud) (web UI)
Smarsh
Communications capture, archiving & supervision (cloud) (web UI)
Logikcull
Self-service eDiscovery & legal hold (cloud, Reveal) (web UI)
Everlaw
Cloud litigation & eDiscovery platform (cloud) (web UI)
6.70MDM & Device Management
Apple Business Manager
built-in tool
Kandji
Apple MDM + endpoint security & compliance (agent + API)
Mosyle
Apple MDM + endpoint security (agent + API)
Jamf Pro
Apple MDM — device management & compliance (agent + API)
Microsoft Intune
Cross-platform MDM/MAM in Microsoft 365 (cloud + Graph API)
Addigy
Cloud Apple MDM for MSPs & IT teams (agent + API)
SimpleMDM
Straightforward Apple MDM with a clean REST API (cloud)
JumpCloud
Cloud directory + cross-platform MDM & SSO (agent + API)
Fleet (Apple MDM)
Open-source MDM + osquery for cross-platform device ops (self-hosted) (port 8080, web UI)
Munki
Open-source macOS software deployment (self-hosted)
MicroMDM
Open-source, self-hosted Apple MDM server — the Profile Manager replacement (port 8080)
NanoMDM
Minimal, scalable open-source Apple MDM server (port 9000)
AutoPkg
Automated macOS software packaging (CLI)
baramundi Management Suite
Modular UEM, patching, inventory and endpoint automation (port 443, web UI)
6.71Logging & Observability
Kibana
ELK's search & dashboard UI (self-hosted) (port 5601, web UI, brew: kibana-full)
Loki
Grafana's log store — like Prometheus, for logs (self-hosted) (port 3100, brew: loki)
Elastic Cloud
Hosted Elasticsearch, Kibana and observability (web UI)
Dozzle
Live Docker container log viewer (port 8080, web UI)
6.72Incident Management & On-Call
PagerDuty
On-call scheduling & incident response (cloud API) (web UI)
Opsgenie
Alerting & on-call by Atlassian (cloud API) (web UI)
incident.io
Slack-native incident response & on-call (cloud API) (web UI)
Rootly
Slack-native incident management (cloud API) (web UI)
6.73Status Pages
Statuspage
Atlassian's hosted status pages (cloud API) (web UI)
Better Stack
Uptime monitoring, incidents & status pages (cloud API) (web UI)
Gatus
Automated health checks + status page (port 8080, web UI)
6.74Mining
Mining Rigs
built-in tool
Braiins OS+
Open ASIC firmware (Antminer) — autotuning + API (port 4028, web UI)
Hive OS
Cloud mining fleet OS & dashboard (web UI)
Awesome Miner
Windows-based mining management for large fleets (web UI)
LuxOS / Foreman
ASIC firmware (LuxOS) & Foreman fleet management (port 4028, web UI)
6.75ML Workbench
MLflow
ML experiment tracking & model registry (self-hosted) (port 5000, web UI)
pandas
The standard Python DataFrame library
Polars
Fast multicore DataFrame library (Rust core)
scikit-learn
Classic machine-learning library for Python
XGBoost
Gradient-boosted decision trees (high-accuracy tabular ML)
PyTorch
Deep-learning framework (GPU/MPS accelerated)
Kaggle
Datasets, notebooks & competitions (CLI)
Kubeflow
ML toolkit & pipelines on Kubernetes (web UI)
ClearML
Experiment tracking, orchestration & MLOps (self-hostable) (port 8080, web UI)
Weights & Biases (Local)
Self-hosted experiment tracking & dashboards (port 8080, web UI)
DVC Studio
Data/model version control + experiment dashboard (web UI)
6.76AI Governance & Safety
Langfuse
Open-source LLM observability & tracing (self-hosted / cloud) (port 3000, web UI)
Helicone
LLM observability & gateway — logs, costs, caching (self-hosted / cloud) (web UI)
Arize Phoenix
Open-source LLM tracing & evaluation (self-hosted) (port 6006, web UI)
OpenLLMetry
OpenTelemetry instrumentation for LLM apps (SDK)
Promptfoo
Prompt/RAG testing, evals & LLM red-teaming (self-hosted CLI)
Ragas
Evaluation framework for RAG pipelines (Python)
Guardrails AI
Input/output validation guardrails for LLMs (Python)
NeMo Guardrails
Programmable guardrails for LLM conversations (NVIDIA, Python)
Lakera Guard
Real-time GenAI security — prompt-injection firewall (cloud / self-host) (web UI)
Protect AI
AI/ML security — model scanning & ML supply chain (cloud + OSS) (web UI)
garak
LLM vulnerability scanner / red-teaming (self-hosted CLI)
TruLens
Evaluation & tracking for LLM apps — feedback functions (Python) (web UI)
WhyLabs
AI observability & data/LLM monitoring (cloud + whylogs) (web UI)
Fiddler AI
AI observability & model monitoring with explainability (cloud) (web UI)
Credo AI
AI governance, risk & compliance platform (cloud) (web UI)
Holistic AI
AI governance, risk & audit platform (cloud + OSS) (web UI)
6.77GPU Infrastructure
NVIDIA DCGM
NVIDIA Data Center GPU Manager — telemetry & health (port 5555)
DCGM Exporter
Export NVIDIA GPU metrics to Prometheus (port 9400)
Backend.AI (Lablup, 래블업)
Lablup's GPU / AI-infrastructure orchestration platform (web UI)
6.78Speech AI
Handy
Free local push-to-talk speech-to-text (Whisper)
Wispr Flow
AI voice dictation that types into any app
Voicebox
Open-source local voice-to-text for macOS
Scriberr
Self-hosted audio transcription app (WhisperX) with speaker diarization (port 8080, web UI)
Whisper
OpenAI's speech-to-text model (Python)
Whisper.cpp
Fast C/C++ Whisper inference (CPU/Metal)
Faster Whisper
CTranslate2 Whisper — up to 4× faster
Coqui TTS
Open-source text-to-speech & voice cloning (port 5002, web UI)
Piper TTS
Fast, local neural text-to-speech
VibeVoice
Microsoft's long-form, multi-speaker TTS
Kokoro TTS
Small, fast, high-quality open-weight TTS (82M)
Meetily
Local AI meeting notetaker (desktop app)
CLOVA Speech (NAVER Cloud)
NAVER CLOVA long-form speech recognition (web UI)
CLOVA Voice / CLOVA Dubbing TTS (NAVER Cloud)
NAVER CLOVA Voice premium Korean/English TTS (web UI)
6.79Image & Video AI
ComfyUI
Node-graph Stable Diffusion / video workflows (port 8188, web UI)
AUTOMATIC1111 WebUI
Stable Diffusion web UI (txt2img/img2img) (port 7860, web UI)
Tesseract OCR
Open-source OCR engine — images/PDF scans to text (CLI)
InvokeAI
Pro Stable Diffusion studio (Unified Canvas) (port 9090, web UI)
Fooocus
Simplest Stable Diffusion — type a prompt, get art (port 7865, web UI)
AutoShorts
Local video → 9:16 short-clip finder (desktop)
Opus Clip
AI viral-clip generator (cloud SaaS + API) (web UI)
Twelve Labs (트웰브랩스)
Korean-founded video-understanding AI (Marengo, Pegasus) (web UI)
6.80MCP
MCP Servers
built-in tool
Fleet Skill
built-in tool
MCP Server
built-in tool
6.81Self-Hosted Apps
PhotoPrism
AI-powered photo library (port 2342, web UI)
ResourceSpace
Open-source digital asset management (self-hosted) (port 80, web UI)
Pimcore
Open-source PIM / DAM / CMS platform (self-hosted) (port 80, web UI)
Paperless-ngx
Scan, OCR & archive documents (port 8000, web UI)
Paperless-AI
AI auto-tagging & chat for Paperless-ngx (port 3000, web UI)
FreshRSS
Self-hosted RSS reader (PHP) (port 80, web UI)
Miniflux
Minimalist RSS reader (Go) (port 8080, web UI, brew: miniflux)
Mixpost
Self-hosted social media scheduling (port 80, web UI)
Mealie
Self-hosted recipe manager & meal planner (port 9000, web UI)
Tandoor
Recipe manager & meal planner (port 8080, web UI)
Grocy
Groceries & household ERP (port 80, web UI)
Dashy
Feature-rich homelab dashboard (port 4000, web UI)
Heimdall
Simple application start page (port 80, web UI)
Homer
Static, fast services dashboard (YAML) (port 8080, web UI)
6.82Web3
The Graph
built-in tool
Foundry
Fast Solidity toolkit (forge/cast/anvil) (port 8545)
Anvil
Local Ethereum testnet (Foundry) (port 8545)
Solidity
Smart-contract compiler (solc)
Hardhat
Ethereum dev environment (Node.js) (port 8545)
Ganache
Personal Ethereum blockchain (dev) (port 8545)
IPFS
Distributed file system (Kubo) (port 5001, web UI, brew: ipfs)
Ceramic
Decentralized data network (ComposeDB) (port 7007)
6.83Crypto
Bitcoin Core
Full Bitcoin node (bitcoind) (port 8332)
Ethereum Node
go-ethereum (geth) execution node (port 8545)
BTCPay Server
Self-hosted Bitcoin payment processor (port 23000, web UI)
XMRig
Monero (RandomX) CPU/GPU miner
6.84RPC Services
Alchemy
built-in tool
Infura
built-in tool
6.85Tools
Apache Tika
Content detection & text/metadata extraction (port 9998)
Gotenberg
Stateless API to convert documents to PDF (port 3000)
LanguageTool
Self-hosted grammar & style checker (offline Grammarly alternative) (port 8081)
LibreTranslate
Self-hosted machine-translation API (offline DeepL/Google Translate alternative) (port 5000, web UI)
SearXNG
Private metasearch engine (self-hosted) (port 8080, web UI)
Stirling-PDF
Self-hosted PDF toolbox (merge/split/OCR…) (port 8080, web UI)
IT-Tools
Handy developer/IT utilities in one page (port 80, web UI)
Excalidraw
Virtual hand-drawn whiteboard (port 80, web UI)
Penpot
Open-source design & prototyping (Figma alt.) (port 9001, web UI)
Whoogle Search
Private, ad-free Google results proxy (port 5000, web UI)
HTML Anything
Agentic HTML editor driven by your local AI CLI (port 3000, web UI)
Harper
Offline, Rust grammar checker (LanguageTool alt.)
Public Data Portal (공공데이터포털, data.go.kr)
Korean government open-data portal (one service key) (web UI)
NTS Business Registration Status API (국세청 사업자등록 상태조회)
NTS check: is a Korean business number active or closed (web UI)
6.86Home Automation
Apple Home
built-in tool
Power Control
built-in tool
Nori / SuperNori AI
AI family hub display + proactive family AI agent (cloud + device) (web UI)
Home Assistant
Open-source home automation hub (port 8123, web UI)
Music Assistant
Self-hosted music library + multi-room player server (Home Assistant companion) (port 8095, web UI)
Node-RED
Flow-based automation wiring (port 1880, web UI, brew: node-red)
Homebridge
Bridge non-HomeKit devices to Apple Home (port 8581, web UI)
ESPHome
Firmware for ESP IoT devices (Home Assistant) (port 6052, web UI)
openHAB
Vendor-neutral automation platform (port 8080, web UI)
6.87Cameras
motionEye
Web frontend for motion (DIY NVR) (port 8765, web UI)
RTSP Cameras
Any RTSP-streaming IP camera (port 554)
ONVIF Cameras
Standards-based camera discovery & control (port 80, web UI)
go2rtc
Camera stream restreamer (RTSP/WebRTC/HLS) (port 1984, web UI)
Tapo Cameras
TP-Link Tapo Wi-Fi cameras (RTSP/ONVIF) (port 554)
Frigate
NVR with real-time object detection (port 5000, web UI)
Scrypted
High-performance camera hub (port 11080, web UI)
Shinobi
Open-source video management (CCTV) (port 8080, web UI)
ZoneMinder
Full-featured CCTV / video surveillance (port 8095, web UI)
Agent DVR
Cross-platform NVR with AI detection (self-hosted) (port 8090, web UI)
Blue Iris
Powerful Windows NVR (run on a Windows host) (port 81, web UI)
6.88IoT
SwitchBot
built-in tool
Zigbee
built-in tool
Zigbee2MQTT
Bridge Zigbee devices to MQTT (no vendor hub) (port 8080, web UI)
Z-Wave (Z-Wave JS UI)
Control Z-Wave devices via MQTT + web UI (port 8091, web UI)
Matter
Commission & control Matter devices (port 5580)
Thread
Low-power mesh for Matter devices
OpenThread Border Router
Run your own Thread border router (self-hosted)
Bluetooth (BLE)
BLE sensors & trackers
Bluetooth Beacons
iBeacon / Eddystone proximity beacons (BLE)
TP-Link Kasa & Tapo
Kasa & Tapo plugs/bulbs/strips + the kasa CLI
Amazon Alexa
Voice assistant ecosystem
Google Home
Google Home / Nest ecosystem
HomePod
Apple smart speaker & Home hub (AirPlay 2 / Matter / Thread)
6.89MQTT Brokers
MQTT Message Bus
built-in tool
Sidekiq
Background jobs for Ruby (threaded workers on Redis)
Mosquitto
Eclipse MQTT broker (port 1883, brew: mosquitto)
EMQX
Scalable, clustered MQTT broker (port 1883, web UI, brew: emqx)
HiveMQ
Enterprise MQTT broker (Java) (port 1883, web UI)
6.90POS Systems
Toast POS
Restaurant POS platform (cloud) (web UI)
Lightspeed
Retail & hospitality POS (cloud) (web UI)
Floranext
All-in-one florist software — POS, e-commerce & orders (cloud) (web UI)
Toss Place (토스플레이스)
Toss Place POS — store orders & payments API (web UI)
6.91CRM & Loyalty
Salesforce
The enterprise CRM (cloud) (web UI)
HubSpot
CRM + marketing/sales hubs (cloud) (web UI)
Zoho CRM
Affordable full-suite CRM (cloud) (web UI)
SuiteCRM
Self-hosted open-source CRM (PHP) (port 80, web UI)
EspoCRM
Lightweight self-hosted CRM (PHP) (port 80, web UI)
Odoo CRM
CRM inside the open-source ERP (Python) (port 8069, web UI)
Pipedrive
Sales-pipeline-first CRM (cloud) (web UI)
Square Loyalty
Points & rewards on Square (cloud) (web UI)
Loyalzoo
Digital loyalty for independents (cloud) (web UI)
Thanx
Guest engagement & loyalty for restaurants (web UI)
Punchh
Enterprise restaurant loyalty (PAR, cloud) (web UI)
VoucherVault
Self-hosted vouchers, gift cards & loyalty (port 8000, web UI)
6.92Helpdesk & Ticketing
Zammad
Open-source helpdesk & ticketing (self-hosted) (port 8080, web UI)
osTicket
Classic open-source support ticket system (PHP/MySQL) (port 80, web UI)
Freshdesk
Cloud helpdesk / customer support (API) (web UI)
Channel Talk (채널톡 / Channel.io)
Korean customer chat, CRM & helpdesk (web UI)
Happytalk (해피톡)
Korean chat-based customer support (web UI)
6.93IT Assets
GLPI
Asset inventory & ITSM with CMDB (PHP/MySQL) (port 80, web UI)
Snipe-IT
Open-source IT asset management (PHP/MySQL) (port 80, web UI)
AssetTiger
Cloud asset tracking with barcodes (API) (web UI)
Lansweeper
IT asset discovery & inventory (cloud/on-prem API) (web UI)
Workwize
Global IT equipment lifecycle & logistics (cloud API) (web UI)
6.94Project Management
Jira
Issue tracking & agile project management (cloud API) (web UI)
Linear
Fast issue tracking for product teams (cloud, GraphQL API) (web UI)
Taiga
Open-source agile project management (self-hosted) (port 80, web UI)
OpenProject
Open-source PM with Gantt & roadmaps (self-hosted) (port 80, web UI)
Plane
Open-source Jira alternative (self-hosted) (port 80, web UI)
Leantime
Open-source PM for non-project managers (PHP/MySQL) (port 80, web UI)
Basecamp
Project management & team collaboration (cloud API) (web UI)
monday.com
Work OS — boards, projects & workflows (cloud API) (web UI)
Vikunja
Self-hosted to-do / task manager (port 3456, web UI)
Planka
Realtime kanban board (Trello alternative) (port 1337, web UI)
Kimai
Self-hosted time tracking (port 8001, web UI)
Focalboard
Self-hosted project boards (Trello/Notion alt.) (port 8000, web UI)
6.95PMS
Channel Manager
built-in tool
SuiteOp
built-in tool
Symplehost
AI property management for short-term rentals (cloud) (web UI)
Breezeway
Property operations & services for STRs (cloud) (web UI)
Operto
Smart-lock & guest-experience automation for STRs (cloud) (web UI)
PriceLabs
Dynamic pricing & revenue management for STRs (cloud) (web UI)
Beyond
Dynamic pricing, insights & direct booking for STRs (cloud) (web UI)
Wheelhouse
Dynamic pricing & market analytics for STRs (cloud) (web UI)
AirDNA
Short-term-rental market data & analytics (cloud) (web UI)
RankBreeze
Airbnb listing optimization & rank tracking (cloud) (web UI)
Truvi
Direct-booking website builder for STRs (cloud) (web UI)
Hostaway
Short-term-rental PMS & channel manager (cloud API) (web UI)
Guesty
STR property-management platform (Open API) (web UI)
OwnerRez
Vacation-rental PMS for owners & small managers (v2 API) (web UI)
Lodgify
Direct-booking website builder + channel manager (web UI)
Uplisting
STR PMS / channel manager (invite-only API) (web UI)
Streamline VRS
Enterprise vacation-rental management (partner-gated API) (web UI)
RemoteLock
Cloud access control for smart locks (REST API) (web UI)
Minut
Noise & occupancy sensors for rentals (Enterprise API) (web UI)
NoiseAware
Noise monitoring for rentals (partner-provisioned API) (web UI)
Hospitable
Guest-messaging automation & STR management (cloud) (web UI)
Hostfully
STR property-management platform & digital guidebooks (cloud) (web UI)
Boostly
SMS marketing & direct-booking growth for STRs (cloud) (web UI)
Cloudbeds
Hotel PMS, booking engine & channel manager (cloud) (web UI)
Beds24
PMS & channel manager with a deep API (cloud) (web UI)
AirHost
Japanese STR PMS & channel manager (cloud) (web UI)
HappyGuest
Digital guest directory & concierge for hospitality (cloud) (web UI)
Alexa Smart Properties
Managed Alexa for hotels & senior living (cloud) (web UI)
QloApps
Open-source hotel reservation system (port 80, web UI)
HotelDruid
Hotel/B&B management & bookings (port 80, web UI)
OpenHotel PMS
Open property-management system (web UI)
BookStack
Wiki/docs for SOPs & property info (port 80, web UI)
Easy!Appointments
Open-source appointment scheduling (port 80, web UI)
Turno
Vacation-rental cleaning & turnover scheduling (cloud) (web UI)
Rentals (Laravel)
Custom Laravel vacation-rental app (port 80, web UI)
6.96Meeting Rooms & Desk Booking
Skedda
Desk & space booking (cloud API) (web UI)
Robin
Room scheduling & desk booking (cloud API) (web UI)
Envoy Workplace
Workplace, visitor & desk management (cloud API) (web UI)
YAROOMS
Meeting room & desk booking (cloud API) (web UI)
OfficeSpace
Space management & desk/room booking (cloud API) (web UI)
Condeco (Eptura)
Enterprise room & desk booking (cloud API) (web UI)
DeskFlex
Desk & room reservation system (cloud API) (web UI)
Matrix Booking
Room, desk & resource booking (cloud API) (web UI)
6.97Coworking & Shared Spaces
OfficeRnD
Coworking & flex-space management (cloud API) (web UI)
Nexudus
Coworking management & white-label platform (cloud API) (web UI)
Optix
App-first coworking management (cloud API) (web UI)
Cobot
Coworking space management (cloud API) (web UI)
6.98Facilities & Maintenance
IBM Maximo
Enterprise asset management & CMMS (cloud/self-managed API) (web UI)
FMX
Facilities management & maintenance (cloud API) (web UI)
Archibus
IWMS — facilities, real estate & assets (API) (web UI)
6.99Accounting & ERP
Money Forward Cloud
Japanese cloud accounting & back office (cloud) (web UI)
freee
Japanese cloud accounting & HR (cloud) (web UI)
Xero
Cloud accounting for small business (cloud) (web UI)
ERPNext
Open-source ERP — accounting, inventory, HR (self-hosted) (port 8080, web UI)
Odoo
Open-source ERP suite — self-hosted (Python + PostgreSQL) (port 8069, web UI)
QuickBooks
Intuit cloud accounting (cloud) (web UI)
Plaid
Bank account linking & financial data (cloud API)
Expensify
Expense & receipt management (cloud API) (web UI)
Firefly III
Self-hosted personal finance manager (port 8080, web UI)
Actual Budget
Fast local-first envelope budgeting (port 5006, web UI)
Ghostfolio
Open-source wealth/investment tracker (port 3333, web UI)
Invoice Ninja
Self-hosted invoicing & payments (port 80, web UI)
Maybe
Open-source personal finance / net worth (port 3000, web UI)
Popbill (팝빌)
E-tax invoices, cash receipts, fax & messaging API (web UI)
Barobill (바로빌)
E-tax invoices, Hometax & bank data (SOAP API) (web UI)
Sendbill (센드빌)
Korean e-tax invoice API (web UI)
Bolta (볼타)
E-tax invoice SaaS with a REST API (web UI)
CODEF (코드에프)
Korean financial & public-data aggregation API (web UI)
Hyphen API Market (하이픈)
Korean financial & public-document data API market (web UI)
Douzone Bizon (더존) — Amaranth 10 / WEHAGO / Smart A
Korean ERP & groupware (Amaranth, WEHAGO) (web UI)
6.100E-Signature
Docusign eSignature
The market-leading e-signature platform (cloud API) (web UI)
Adobe Acrobat Sign
Adobe's e-signature service (cloud API) (web UI)
Dropbox Sign
E-signature API, formerly HelloSign (cloud) (web UI)
PandaDoc
Proposals, quotes & contracts with e-signature (cloud API) (web UI)
SignNow
Business e-signature from airSlate (cloud API) (web UI)
Zoho Sign
E-signature in the Zoho suite (cloud API) (web UI)
BoldSign
E-signature API from Syncfusion (cloud) (web UI)
SignWell
Simple e-signature with a straightforward API (cloud) (web UI)
Yousign
European eIDAS e-signature, simple to qualified (cloud API) (web UI)
Skribble
Swiss/EU qualified e-signatures — eIDAS & ZertES (cloud API) (web UI)
GMO Sign (GMOサイン)
Japanese e-contracts from GMO GlobalSign (cloud API) (web UI)
CloudSign (クラウドサイン)
Japanese e-contract service from Bengo4.com (cloud API) (web UI)
freee Sign (freeeサイン)
Japanese e-contracts from freee, ex-NINJA SIGN (cloud) (web UI)
Modusign (모두싸인)
Korean e-signature & e-contract platform (cloud API) (web UI)
eformsign (이폼사인)
Korean e-forms & e-contracts from Forcs (cloud API) (web UI)
DocuSeal
Open-source document signing (self-hosted or cloud) (port 3060, web UI)
Documenso
Open-source DocuSign alternative (self-hosted or cloud) (port 3000, web UI)
OpenSign
Open-source e-signature (self-hosted or cloud) (web UI)
6.101Healthcare
OpenEMR
Open-source EHR & practice management (PHP/MySQL) (port 80, web UI)
OpenMRS
Open-source medical record platform (Java) (port 8080, web UI)
GNU Health
Hospital & health information system (Python/Tryton) (port 8000, web UI)
LibreHealth
Open-source EHR / toolkit (PHP/MySQL) (port 80, web UI)
Orthanc
Lightweight DICOM server / PACS (REST API) (port 8042, web UI)
OpenDolphin
Open-source EHR / electronic karte (Japan) (port 8080, web UI)
ORCA
Japan Medical Association receipt/billing system (port 8000, web UI)
6.102Automation & Workflows
Automatio.ai
AI no-code web automation & scraping (cloud) (web UI)
Zite
AI app & workflow builder (cloud) (web UI)
AppSheet
Google no-code app builder from a spreadsheet/DB (cloud) (web UI)
Make (Integromat)
Visual scenario automation + AI agents — 3,000+ apps (cloud) (web UI)
Zapier
Cloud iPaaS — connect 7,000+ apps (cloud) (web UI)
n8n
Source-available workflow automation (self-hosted) (port 5678, web UI)
Pipedream
Developer-first workflow automation (cloud) (web UI)
Power Automate
Microsoft cloud + desktop automation (cloud) (web UI)
Activepieces
Open-source no-code automation (self-hosted) (port 8080, web UI)
Windmill
Scripts → workflows & internal apps (self-hosted) (port 8000, web UI)
Huginn
Self-hosted agents that watch & act (self-hosted) (port 3000, web UI)
Flowise
Drag-and-drop LLM app builder (self-hosted) (port 3000, web UI)
Langflow
Visual builder for LLM/agent flows (self-hosted) (port 7860, web UI)
Dify
Open-source LLMOps / AI app platform (self-hosted) (port 80, web UI)
Elgato Stream Deck
Hardware macro keypad with LCD keys
Touch Portal
Turn a phone/tablet into a macro deck (no extra hardware)
Bitfocus Companion
Open-source control surface for larger automation workflows (port 8000, web UI)
X-keys
Programmable keypads for NOCs & operations
Matric
Phone macro deck with live metric tiles
QMK / VIA
Open keyboard firmware + live key remapping
6.103Workflow Orchestration
Temporal
Durable execution platform for reliable workflows (port 8233, web UI)
Restate
Durable execution for resilient services (single binary) (port 9070, web UI)
Apache Airflow
Programmatic data-pipeline orchestration (DAGs) (port 8080, web UI)
6.104HRIS Integration
Unified.to (HRIS API)
Unified API across HRIS providers (web UI)
Apideck (HRIS API)
Unified HRIS API & integration platform (web UI)
Truto
Unified API for HRIS & more (cloud) (web UI)
Bindbee
Unified HRIS / employment API (cloud) (web UI)
flex (플렉스)
Korean all-in-one HR (people, attendance, payroll) (web UI)
Shiftee (시프티)
Korean shift scheduling & attendance (web UI)
Saramin (사람인)
Korean job-postings API (Saramin) (web UI)
Wanted (원티드)
Korean recruiting platform API (Wanted) (web UI)
6.105VoIP & Telephony
Asterisk
The open-source PBX engine (self-hosted) (port 5060, brew: asterisk)
FreePBX
Web GUI distro on Asterisk (self-hosted, Linux) (port 80, web UI)
FreeSWITCH
Carrier-grade softswitch (self-hosted) (port 5060)
FusionPBX
Multi-tenant web GUI on FreeSWITCH (self-hosted) (port 443, web UI)
Issabel PBX
Unified-communications distro on Asterisk (self-hosted) (port 443, web UI)
Kamailio
High-performance SIP server/proxy (self-hosted) (port 5060)
OpenSIPS
SIP proxy/router for large platforms (self-hosted) (port 5060)
PBXact
Sangoma's commercial PBX (appliance/cloud) (port 80, web UI)
Plivo
Voice & SMS API platform (cloud) (web UI)
Telnyx
Carrier-grade voice, SIP trunking & numbers (cloud) (web UI)
Bird (MessageBird)
Omnichannel CPaaS — SMS, voice, WhatsApp (cloud) (web UI)
Sinch
Global SMS, voice & verification CPaaS (cloud) (web UI)
Twilio Voice
Programmable voice calls & TwiML (cloud) (web UI)
VitalPBX
Modern Asterisk-based PBX distro (self-hosted) (port 443, web UI)
Vonage APIs
Voice, SMS & video APIs (cloud, ex-Nexmo) (web UI)
Wazo Platform
API-first open telecom platform (self-hosted) (port 443, web UI)
Yate
Flexible telephony engine — SIP/H.323/SS7 (self-hosted) (port 5060)
3CX
Commercial software PBX (self-hosted or hosted) (port 443, web UI)
6.106Contact Centre & IVR
Twilio Studio
Drag-and-drop IVR & call-flow builder (cloud) (web UI)
Twilio Flex
Programmable contact centre (cloud) (web UI)
Amazon Connect
AWS cloud contact centre (cloud) (web UI)
Genesys Cloud
Enterprise CX platform — Architect IVR (cloud) (web UI)
Five9
CCaaS with strong outbound dialing (cloud) (web UI)
Talkdesk
AI-forward cloud contact centre (cloud) (web UI)
RingCentral Contact Center
CCaaS on the RingCentral platform (cloud) (web UI)
8x8 Contact Center
UCaaS + CCaaS in one platform (cloud) (web UI)
Vonage Contact Center
Salesforce-centric contact centre (cloud) (web UI)
Dialpad Ai Contact Center
AI-native contact centre & real-time coaching (cloud) (web UI)
Aircall
Lightweight cloud call centre for teams (cloud) (web UI)
CloudTalk
Cloud calling for support & sales (cloud) (web UI)
GoTo Connect
Phone system + contact centre (cloud) (web UI)
Zoom Contact Center
Omnichannel CC on the Zoom platform (cloud) (web UI)
Freshdesk Contact Center
Freshworks phone channel (ex-Freshcaller, cloud) (web UI)
Zendesk Talk
Voice channel inside Zendesk Support (cloud) (web UI)
Intermedia Contact Center
CCaaS bundled with Intermedia Unite (cloud) (web UI)
6.107SEO & Marketing
Analytics
built-in tool
IndexNow Manager
built-in tool
Cloudflare Analytics
Privacy-first web & edge analytics (cloud) (web UI)
Ahrefs
Backlinks, keywords & rank tracking (cloud) (web UI)
Google Search Console
Search performance, indexing & sitemaps (cloud) (web UI)
Google Analytics
GA4 web & app analytics (cloud) (web UI)
PageSpeed Insights / CrUX
Core Web Vitals & Lighthouse scores per URL (cloud) (web UI)
Plausible Analytics
Privacy-first, self-hostable web analytics (port 8000, web UI)
Umami
Simple, self-hosted, privacy-focused analytics (port 3000, web UI)
Matomo
Full GA-style analytics, self-hosted (web UI)
GoatCounter
Minimal, open-source web analytics (port 8081, web UI)
PostHog
Self-hostable product analytics suite (port 8000, web UI)
Bing Webmaster Tools
Bing search performance & URL submission (cloud) (web UI)
Yandex Webmaster
Yandex search performance & indexing (cloud) (web UI)
Semrush
Keywords, competitors & site audit (cloud) (web UI)
Moz
Domain Authority & backlinks (cloud) (web UI)
Majestic
Backlink index — Trust & Citation Flow (cloud) (web UI)
DataForSEO
SERP, keyword & backlink data API (cloud) (web UI)
SerpApi
Real-time SERP scraping API (cloud) (web UI)
Yahoo! JAPAN Ads & Search
Japan's #2 search/ads ecosystem (cloud) (web UI)
Ptengine
Analytics + heatmaps, popular in Japan (web UI)
KARTE
Real-time user/CX analytics (PLAID, JP) (web UI)
AdEbis (アドエビス)
Ad attribution & marketing analytics (JP) (web UI)
Naver Search Advisor
Naver's Search Console (KR) — IndexNow partner (web UI)
Naver Analytics
Naver's free web analytics (KR) (web UI)
Beusable
Heatmap & UX analytics (KR) (web UI)
Airbridge
Mobile attribution & analytics (AB180, KR) (web UI)
adbrix
Mobile attribution & analytics (IGAWorks, KR) (web UI)
Google Lighthouse
Audit performance, PWA, SEO & accessibility
Shlink
Self-hosted URL shortener with REST API & analytics (port 8080, web UI)
YOURLS
Your Own URL Shortener (PHP) (port 80, web UI)
Kutt
Modern open-source URL shortener (port 3000, web UI)
Polr
Minimalist self-hosted link shortener (Laravel) (port 80, web UI)
Dub.co
Open-source link management for marketing teams (port 8888, web UI)
Nahpet
Self-hosted URL shortener with custom domains & analytics (port 3000, web UI)
Flink (URL Shortener)
Self-hosted shortener that keeps the path after the alias (port 8080, web UI)
Chhoto URL
Tiny, fast self-hosted URL shortener (Rust) (port 4567, web UI)
NAVER Search API (네이버 검색 API, Naver Developers)
Naver blog / news / shop / local search API (web UI)
Naver Search Ad (네이버 검색광고)
Naver keyword-ad account, bizmoney balance & stats API (web UI)
Kakao Moment (카카오모먼트)
Kakao display-ad platform API (web UI)
Kakao Keyword Ad (카카오 키워드광고)
Kakao / Daum keyword-ad API (web UI)
Mobon (모비온)
Korean retargeting ad network (web UI)
ACE Counter (에이스카운터)
Korean web analytics (ACE Counter) (web UI)
Daum Webmaster Tools (Daum 웹마스터도구)
Daum/Kakao site registration & search insights (web UI)
6.108Conversion Rate Optimization
Optimizely
Enterprise A/B testing & experimentation (cloud) (web UI)
VWO
A/B testing, heatmaps, surveys (cloud) (web UI)
AB Tasty
Personalization & experimentation (cloud) (web UI)
Statsig
Modern experimentation & feature flags (cloud, API) (web UI)
GrowthBook
Self-hosted A/B testing & feature flags (open-source) (port 3100, web UI)
Mixpanel
Product analytics & funnels (cloud) (web UI)
Amplitude
Product analytics & journeys (cloud) (web UI)
Hotjar
Heatmaps & session recording (cloud) (web UI)
Microsoft Clarity
Free heatmaps & session recording (cloud) (web UI)
FullStory
Digital experience & session replay (cloud) (web UI)
Lucky Orange
Heatmaps, recordings, live chat (cloud) (web UI)
Mouseflow
Session replay & heatmaps (cloud) (web UI)
Heap
Autocapture funnels & journeys (cloud) (web UI)
Contentsquare
Experience analytics & journeys (cloud) (web UI)
UserVoice
Product feedback & feature requests (cloud) (web UI)
Canny
Feature-request boards (cloud, API) (web UI)
Survicate
Website & in-product surveys (cloud) (web UI)
Qualtrics
Experience-management surveys (cloud) (web UI)
LaunchDarkly
Enterprise feature-flag management (cloud, API) (web UI)
Unleash
Self-hosted feature-flag management (open-source) (port 4242, web UI)
Hackle (핵클)
Korean A/B testing & feature flags (web UI)
Groobee (그루비)
Korean personalisation & on-site marketing (web UI)
6.109Social Media
Buffer
Social media scheduling & publishing (cloud API) (web UI)
Postiz
Open-source, self-hosted social media scheduler (port 5000, web UI)
Postly
AI-powered social media publishing platform (web UI)
Post Planner
Content discovery & social scheduling (web UI)
Postcron
Multi-platform social media scheduler (web UI)
Publer
Social media scheduling & analytics (web UI)
Hootsuite
Social media management suite (cloud API) (web UI)
Later
Visual social scheduling (Instagram-first, cloud API) (web UI)
Metricool
Social analytics, scheduling & ads (cloud API) (web UI)
SocialPilot
Social scheduling for teams & agencies (cloud API) (web UI)
Mastodon
Self-hosted federated microblogging (ActivityPub) (web UI)
strfry
Fast C++ Nostr relay (single binary, one-click Docker) (port 7777)
nostr-rs-relay
Rust Nostr relay on SQLite (one-click Docker) (port 8080)
Nostream
TypeScript Nostr relay — Postgres, paid relays (Docker Compose) (port 8008)
HAVEN
Personal Nostr relay suite + Blossom media (Docker Compose) (port 3355, web UI)
Blossom Server
Nostr media/blob server — images & files (one-click Docker) (port 3000, web UI)
Pixelfed
Federated photo sharing (Instagram alt.) (port 80, web UI)
Lemmy
Federated link aggregator (Reddit alt.) (port 8536, web UI)
Misskey
Federated microblogging (rich Mastodon alt.) (port 3000, web UI)
NAVER BAND (밴드)
Naver group community app (BAND) (web UI)
6.110Media Servers
MediaMTX
RTSP/RTMP/HLS/WebRTC/SRT media server (port 8554, brew: mediamtx)
SRS
Simple Realtime Server — RTMP/WebRTC/SRT (port 1935, web UI)
Owncast
Self-hosted live streaming + chat (port 8080, web UI)
Restreamer
Restream one input to many platforms (port 8080, web UI)
Icecast
Audio streaming server (net radio) (port 8000, web UI, brew: icecast)
AzuraCast
Complete self-hosted radio station (port 80, web UI)
Jellyfin
Free home media server (Plex alternative) (port 8096, web UI, brew: jellyfin)
Plex Media Server
Popular home media server (port 32400, web UI)
Emby
Media server with live TV/DVR (port 8096, web UI)
PeerTube
Federated, P2P video platform (ActivityPub) (port 9000, web UI)
Navidrome
Self-hosted music server (Subsonic-compatible) (port 4533, web UI)
Audiobookshelf
Self-hosted audiobook & podcast server (port 13378, web UI)
Tvheadend
TV streaming server & DVR (DVB/IPTV) (port 9981, web UI)
TSDuck
MPEG transport-stream toolkit (CLI)
Wowza Streaming Engine
Commercial streaming server (RTMP/SRT/HLS) (port 8088, web UI)
Immich
Self-hosted photo & video backup (Google Photos alt.) (port 2283, web UI)
Channels DVR Server
Whole-home DVR for live TV & streaming (self-hosted) (port 8089, web UI)
Jellyseerr
Media request manager (Jellyfin/Plex/Emby) (port 5055, web UI)
Bazarr
Automatic subtitles for Sonarr/Radarr (port 6767, web UI)
Tdarr
Distributed media transcoding/health automation (port 8265, web UI)
Komga
Comics & manga server (self-hosted) (port 25600, web UI)
Kavita
Fast ebook/comic/manga server (port 5000, web UI)
RomM
Self-hosted ROM manager & player (port 8080, web UI)
Overseerr
Media request manager for Plex (port 5055, web UI)
Ombi
Media request system (Plex/Emby/Jellyfin) (port 3579, web UI)
Airsonic-Advanced
Self-hosted music streaming (Subsonic API) (port 4040, web UI)
Calibre-Web
Web reader/manager for a Calibre ebook library (port 8083, web UI)
Tautulli
Plex monitoring, history & stats (port 8181, web UI)
6.111Download Automation
qBittorrent
Open-source BitTorrent client with Web UI (self-hosted) (port 8080, web UI)
Transmission
Lightweight BitTorrent client + daemon (self-hosted) (port 9091, web UI)
SABnzbd
Usenet (NZB) downloader with Web UI (self-hosted) (port 8080, web UI, brew: sabnzbd)
NZBGet
Lightweight, efficient Usenet downloader (self-hosted) (port 6789, web UI)
Sonarr
Automated TV series management (self-hosted) (port 8989, web UI)
Radarr
Automated movie management (self-hosted) (port 7878, web UI)
Lidarr
Automated music collection management (self-hosted) (port 8686, web UI)
Readarr
Automated book & audiobook management (self-hosted) (port 8787, web UI)
Prowlarr
Indexer manager for the *arr stack (port 9696, web UI)
Tube Archivist
Self-hosted YouTube archive (index + watch) (port 8000, web UI)
Pinchflat
Self-hosted YouTube media downloader/archiver (port 8945, web UI)
6.112AV & Stage
Show Network
built-in tool
Generators
built-in tool
AV Feeds
built-in tool
Dante (Audinate)
Audio-over-IP networking (AoIP)
Q-SYS
QSC's AV processing & control platform (port 1710, web UI)
QLC+
Open-source DMX lighting control (port 9999, web UI)
grandMA3
MA Lighting console / onPC show control
grandMA2
MA Lighting grandMA2 console / onPC
Depence²
Real-time 3D previz & show control (Syncronorm)
PixMob
Crowd LED wearables for stadium light shows
Xylobands
RF-controlled LED wristbands for events
OBS Studio
Live production, streaming & recording (port 4455)
NDI
Video-over-IP for production (NDI) (port 5959)
Resolume Arena / Avenue
VJ / media-server software (port 8080, web UI)
MadMapper
Projection mapping & LED control
Liquidsoap
Scriptable radio/audio stream engine
MPV
Scriptable media player (CLI)
Kodi
Media centre with JSON-RPC remote (port 8080, web UI)
VLC
Player with HTTP/telnet remote interfaces (port 8080, web UI)
Yodeck
Cloud digital signage (Pi players) (web UI)
Screenly / Anthias
Digital signage — cloud or open source (port 80, web UI)
Google Cast / YouTube Cast
Chromecast casting & control (port 8009)
ArKaos GrandVJ / XT
Live VJ mixing & video mapping
ArKaos MediaMaster (ChamSys)
Stage media server for lighting desks
Syphon
GPU frame sharing between Mac apps
SRT (tools)
Secure Reliable Transport for live video (port 9710)
WebRTC (WHIP/WHEP)
Sub-second video in any browser (port 8889)
AirServer
Turn this Mac into an AirPlay/Cast/Miracast receiver
Reflector
AirPlay/Cast screen receiver (Squirrels)
Chrome Remote Desktop
Free remote control of this Mac (web UI)
rekordbox
AlphaTheta (Pioneer DJ) library & performance software
PRO DJ LINK
Pioneer/AlphaTheta CDJ & DJM network (UDP 50000–50002)
Engine DJ (Denon StageLinQ)
Denon DJ / Engine DJ — StageLinQ network
Ableton Live / Link
DAW + Ableton Link tempo sync
Beat Link Trigger
Pro DJ Link → MIDI / OSC / Ableton Link bridge
ShowKontrol (TCNet)
TC Supply — TCNet timecode & DJ data for lighting/video
Spout
GPU texture sharing between Windows apps (Syphon's Windows twin)
QLab
Figure 53 — theatre & show playback (audio, video, lighting, OSC) (port 53000)
Millumin
Mac media server for theatre, dance & installations
VDMX
Vidvox — modular VJ software for macOS
disguise (d3)
Media server & show-control platform (designer / rx / gx)
PIXERA
AV Stumpfl media server
WATCHOUT
Dataton multi-display show control
Hippotizer
Green Hippo media servers
OLA (Open Lighting Architecture)
Open-source DMX/Art-Net/sACN/RDM server (olad) (port 9090, web UI)
sACNView
Free sACN (E1.31) monitor & test tool
ENTTEC DMX gateways
Ethernet → DMX nodes (ODE, Storm, DIN Ethergate, Octo)
Protokol
Hexler — OSC, MIDI & gamepad monitor
TouchOSC
Hexler — OSC/MIDI control surfaces
RTP-MIDI (Network MIDI)
MIDI over Ethernet/Wi-Fi (AppleMIDI)
WLED
ESP32/ESP8266 LED controller firmware (port 80, web UI)
Falcon Player (FPP)
Show player for pixel & SPI LED controllers (port 80, web UI)
Advatek PixLite
Art-Net/sACN → SPI pixel controllers
NovaStar / COEX
LED wall processors & receiving cards
Brompton Tessera
LED wall processors (SX40, S8, M2)
Colorlight
LED controllers & receiving cards
MADRIX 5
LED lighting control & pixel mapping
Lightjams
Real-time interactive DMX/LED lighting
Riverside.fm
Remote podcast & video recording studio (cloud) (web UI)
6.113Render Farm
AWS Deadline / Deadline 10
Render farm queue manager (VFX/3D)
OpenCue
Open-source render manager (self-hosted)
Qube!
Commercial render farm / job manager (PipelineFX)
6.114Tracking & Telematics
Traccar
Open-source GPS tracking server (self-hosted) (port 8082, web UI)
OwnTracks
Private self-hosted location tracking (MQTT/HTTP) (port 8083, web UI)
TeslaMate
Self-hosted Tesla data logger (Docker) (port 4000, web UI)
Samsara
Fleet telematics platform (cloud API) (web UI)
Geotab
Fleet telematics (MyGeotab API) (web UI)
Fleetio
Fleet maintenance management (cloud API) (web UI)
Onfleet
Last-mile delivery management (cloud API) (web UI)
Bouncie
Connected-car OBD tracker (cloud API) (web UI)
AutoPi
Programmable vehicle IoT dongle (cloud API) (web UI)
flespi
Telematics IoT gateway & MQTT broker (cloud API) (web UI)
제7장
사이트, 도메인 및 웹
Mac의 가상 호스트부터 등록 기관, DNS, CDN, 검색 엔진까지 — 도메인이 실제로 정상인지 알려 주는 하나의 패널과, 그렇지 않을 때 이를 고치는 도구 모음입니다.
제대로 동작하는 웹사이트는 Apache가 실행되고 있다는 것만으로 완성되지 않습니다. 도메인이 해석되어야 하고, 인증서가 유효해야 하며, 올바른 머신이 응답해야 하고, 그 앞에 CDN이 있어야 하며, 검색 엔진이 사이트의 존재를 알아야 합니다. FrontierStack은 이 모든 것을 사이트 패널과 몇 가지 보조 도구에 모아, 등록 기관, DNS, TLS, CDN, 호스트, SEO로 이어지는 전체 체인을 한 윈도우에서 확인하고 고칠 수 있게 합니다. 이 장에서는 스택 위의 웹 영역을 다룹니다. 가상 호스트와 인증서 자체는 4장을 참조하십시오.
7.1사이트 패널과 도메인 상태
사이드바에서 사이트를 여십시오. 맨 위에는 도메인 상태 섹션이 있습니다. 이 섹션은 FrontierStack이 알고 있는 모든 호스트 이름을 모아 보여 주는 실시간 대시보드로, 직접 정의한 로컬 Apache 및 Nginx 가상 호스트, 연결된 서버의 가상 호스트, 토큰에 포함된 모든 Cloudflare 영역, 등록 기관 모니터에 있는 모든 도메인이 포함됩니다. 각 도메인은 상태 배지가 붙은 한 행으로 표시됩니다. 행의 확인이나 머리글의 모두 확인을 누르면 앱이 도메인을 처음부터 끝까지 점검하고 배지를 녹색 또는 주황색으로 표시합니다.
이 대시보드의 목적은 이 도메인이 실제로 서비스되고 있는가, 그리고 어디에서 서비스되고 있는가?라는 한 가지 질문에 확실하게 답하는 것입니다. 점검은 공용 인터넷을 대상으로 실행되므로(실제 DNS 조회, 실제 HTTP 요청, 실제 TLS 핸드셰이크), 로컬 설정 점검으로는 결코 발견할 수 없는 장애를 잡아냅니다. 잘못된 IP를 가리키는 레코드, 만료된 인증서, “pending” 상태에 머물러 있는 Cloudflare 영역, 해석은 되지만 502를 반환하는 사이트 등이 그 예입니다.
| 점검 항목 | 측정 방법 | 문제가 있을 때의 모습 |
|---|---|---|
| DNS | 호스트 이름에 대한 실제 리졸버 조회(host/dig)와 반환된 IP. | 레코드가 없거나, 내 서버가 아닌 주소. |
| HTTP | 상태 코드를 기록하는 실시간 요청(curl -w %{http_code}). | 200–399 범위를 벗어난 모든 응답(404, 502, 리디렉션 루프 등). |
| SSL / TLS | TLS 핸드셰이크로 인증서 만료일을 읽습니다(openssl s_client → x509 -enddate). 배지에는 남은 일수가 표시됩니다. | 만료됨, 곧 만료됨, 또는 이름 불일치. |
| HTTP/3 | 서버가 Alt-Svc 헤더로 HTTP/3를 알리면 청록색 배지가 표시됩니다. Apache에는 자체 HTTP/3 기능이 없으므로, Apache 사이트에서 이 배지를 얻는 일반적인 방법은 해당 도메인의 Cloudflare 영역 패널에 있는 HTTP/3 토글입니다(브라우저는 엣지와 QUIC으로 통신하고 오리진은 h1/h2를 유지합니다). HTTP/3는 UDP 443을 사용한다는 점을 기억하십시오. TCP만 허용하는 방화벽에서는 브라우저가 아무 표시 없이 HTTP/2로 대체합니다. | h3를 제공할 것으로 예상한 사이트에 배지가 없음. 엣지 설정이 꺼져 있거나 UDP 443이 차단된 경우입니다. |
| Cloudflare | 토큰으로 가져온 영역 상태와 플랜. 예: active · Pro. | 등록 기관에서 네임서버를 변경하지 않아 “pending” 상태인 영역. |
| 서비스 호스트 | 응답한 IP와 Server 헤더로 판단합니다. | 원격 서버를 예상했는데 “This Mac (Apache)”로 표시되거나, “Cloudflare”가 오리진을 가리고 있는 경우. |
7.2사이트별 Search Console, Analytics, Ahrefs
도메인 상태의 각 행에는 상태 배지 아래에 Search Console, GA4, Ahrefs 세 개의 칩이 있는 짧은 줄이 있습니다. 회색은 해당 사이트에 그 서비스가 설정되지 않았음을, 녹색은 서비스가 켜져 있고 문제가 없음을, 노란색은 살펴볼 만한 사항이 있음을, 주황색은 알림도 발생시키는 문제가 있음을 뜻합니다. 칩 위에 포인터를 올리면 발견된 내용을 볼 수 있고, 클릭하면 해당 서비스의 패널이 열립니다. 이 줄은 각 제공업체의 콘솔을 복제하지 않습니다. 사이트마다 두 가지 질문, 즉 서비스가 켜져 있는가, 그리고 소유자가 알아야 할 사항이 있는가에 답합니다.
점검 항목은 연결한 서비스에 따라 늘어납니다.
- 키가 전혀 없으면 FrontierStack은 실제 홈페이지,
robots.txt, 도메인의 TXT 레코드를 읽습니다. Google Analytics와 Tag Manager 태그, Ahrefs Web Analytics 스크립트, Google과 Ahrefs의 인증 토큰을 찾아냅니다. 홈페이지에noindex가 있거나(meta 태그 또는X-Robots-Tag헤더),robots.txt가 사이트 전체에서 Googlebot, AhrefsBot, AhrefsSiteAudit를 차단하면 경고합니다. 오래된 Universal Analytics(UA-) 태그도 더 이상 데이터를 수집하지 않으므로 지적합니다. - Google에 로그인하면(Search Console 패널의 Sign in with Google 또는 서비스 계정 키) 각 사이트를 Search Console 속성과 대응시킵니다. 그런 다음 FrontierStack은 다음을 점검합니다.
- 해당 속성에 대한 소유권 인증이 아직 유효한지
- 제출한 사이트맵에 오류가 보고되는지
- 홈페이지에 대한 Google URL 검사 결과: 가져올 수 있었는지, robots.txt나 noindex로 차단되는지, 색인이 생성되었는지
- 검색 노출수가 전주 대비 급감했는지
- Cloudflare 토큰이 있으면 영역의 방화벽 이벤트를 읽어, 지난 하루 동안 WAF, 속도 제한, 봇 규칙에 의해 차단된 Googlebot, AhrefsBot, AhrefsSiteAudit 요청을 찾고 원인이 된 규칙을 알려 줍니다. Google과 Ahrefs 자체 네트워크에서 온 요청만 집계합니다. Googlebot을 사칭하는 가짜 봇을 Cloudflare가 차단하는 것은 정상적인 동작이므로 보고하지 않습니다.
모든 항목은 6시간마다, 그리고 확인이나 모두 확인을 누를 때마다 다시 점검됩니다. 문제는 사이트와 서비스별로 하나씩 Search & Analytics 그룹 아래의 알림으로 전송되므로, 문제가 해결되면 복구 알림이 전송됩니다. Ahrefs 문제는 실제로 Ahrefs를 사용하는 사이트에서만 발생시킵니다. 사용하지 않는 크롤러를 차단하는 것은 결함이 아니라 선택이기 때문입니다.
7.3ChatGPT Sites: 모니터링, 내 도메인 사용, 자체 호스팅
ChatGPT Sites 섹션은 FrontierStack 안에서 이 섹션이 나타나는 모든 곳에서 하나의 공유 레지스트리를 사용합니다. 공개 name.openai.chatgpt.site URL을 붙여넣으면 다른 사이트와 마찬가지로 도메인 상태, SEO, 알림에 추가됩니다. 워크스페이스 전용 또는 소유자 전용 Site를 비공개로 표시하면 외부 점검이 일시 중지됩니다. 그 로그인 페이지는 서비스 중단이 아니기 때문입니다.
Import or Move는 소유자가 승인한 두 가지 경로를 제공합니다. Use my domain은 Site를 ChatGPT에 그대로 둡니다. 먼저 Site의 ChatGPT 설정에서 도메인을 추가한 다음, ChatGPT가 제공하는 DNS 레코드를 그대로 복사하십시오. FrontierStack은 모든 레코드가 선택한 Cloudflare 영역에 속하는지 검증한 뒤 DNS 전용으로 게시합니다. 다른 DNS 제공업체를 사용한다면 그곳에 레코드를 추가하고 Save Domain을 사용하십시오. 두 경로 모두 원래의 Sites 주소와 사용자 지정 도메인을 레지스트리에 유지합니다. DNS가 전파된 후 ChatGPT로 돌아가 도메인 상태를 새로 고치십시오.
Self-host는 Site의 로컬 프로젝트 폴더에서 시작합니다. FrontierStack은 .openai/hosting.json과 package.json을 읽어 프레임워크와 빌드 완료된 출력 폴더를 식별하고, D1/R2 바인딩과 예시 환경 변수의 이름을 보여 준 뒤, 검토한 웹 출력을 관리되는 Apache 도메인으로 복사합니다. 가져오기 도구는 패키지 스크립트를 실행하지 않고, 비밀 값을 읽지 않으며, 링크와 소스 관리 메타데이터를 건너뛰고, 복사량을 50,000개 파일 또는 5 GB로 제한하며, 교체에 실패하면 되돌릴 수 있도록 스테이징 폴더를 사용합니다. 먼저 프로젝트를 빌드한 다음 dist, build, out, public 또는 index.html이 들어 있는 다른 폴더를 가져오십시오.
7.4도메인 소유권 증명
제공업체는 소유자만 만들 수 있는 DNS TXT 레코드를 게시하도록 요청하여 도메인이 내 것인지 확인합니다. ACME의 DNS-01 챌린지와 같은 DNS 기반 증명 방식이지만, 레코드 형식은 제공업체마다 다릅니다. 도메인 상태 행의 Verify 버튼은 이러한 형식을 한곳에 모아 둡니다. 서비스(Google(Search Console / Workspace), Microsoft 365, Meta, Apple Business Manager, Atlassian, OpenAI, Stripe, GitHub 조직 또는 사용자 지정 레코드)를 선택하고 제공업체 콘솔의 토큰을 붙여넣으면, FrontierStack이 TXT 레코드를 해당 도메인의 Cloudflare 영역에 바로 게시합니다. 도메인이 내 Cloudflare 토큰에 포함되어 있지 않으면, 대신 DNS 호스트에 추가할 정확한 레코드를 알려 줍니다. 토큰만 입력하면 자동으로 완성됩니다(Google의 경우 abc123을 붙여넣으면 레코드가 google-site-verification=abc123이 됩니다).
시트에는 apex에 이미 게시된 인증 레코드도 표시되므로, 이 도메인이 현재 누구에게 증명되어 있는지 빠르게 점검할 수 있습니다. Check DNS는 공용 DNS(1.1.1.1)에서 새 레코드를 조회하므로, 제공업체 쪽에서 “Verify”를 누르기 전에 증명이 보이는지 확인할 수 있습니다.
인증서의 경우 Let's Encrypt 서비스 패널(Security & Secrets 카테고리)이 또 다른 종류의 도메인 증명을 상시 점검합니다. ACME API, Let's Encrypt 상태 페이지, 도메인의 실제 인증서를 감시하며, ACME 클라이언트는 30일이 남았을 때 갱신하므로 인증서가 갱신 기한을 넘기면 알림을 보냅니다. 이를 통해 망가진 certbot/acme.sh 자동화를 방문자가 만료 경고를 보기 몇 주 전에 잡아낼 수 있습니다.
7.5AI SEO와 “Fix My Site”
도메인 행의 배지 중 두 개는 단순한 진단 표시가 아니라, 문제를 AI 관리자에게 넘기는 버튼입니다. Fix My Site는 망가졌거나 이상하게 동작하는 사이트를 받아 정해진 절차대로 어시스턴트를 실행합니다. Host 헤더를 붙여 로컬에서 사이트에 curl을 실행하여 장애를 재현하고, 관련 로그를 읽고, Apache, PHP, 데이터베이스가 실행 중인지 확인한 다음, 가장 가능성이 높은 근본 원인 하나와 구체적인 다음 단계를 제시합니다. Allow changes가 꺼져 있으면 조언만 하고, 켜져 있으면 되돌릴 수 있는 수정(서비스 재시작, 설정 파일의 잘못된 값 수정, 데이터베이스 복구)을 적용할 수 있습니다. 전형적인 흰 화면, “Error establishing a database connection”, 망가진 고유 링크, 유지 관리 모드에서 빠져나오지 못하는 문제를 처리하는 WordPress 전용 변형도 있습니다.
SEO 작업은 기기 내에서 읽기 전용 감사를 실행합니다. 어시스턴트가 홈페이지, robots.txt, 사이트맵을 가져와 사이트를 100점 만점으로 채점하고 짧은 보고서(제목, 메타 설명, 머리글, 크롤링 가능성, 구조화된 데이터)를 작성합니다. 결과는 SEO 보고서 시트로 열리므로 발견 사항을 읽고 조치할 수 있습니다.
7.6원클릭 CMS 설치(Apps & CMS)
WordPress에는 새 사이트를 설치하는 일과 이미 있는 사이트를 운영하는 일을 모두 맡는 단일 패널이 있으며, 이 Mac과 모든 플릿 서버에서 사용할 수 있습니다. 이 통합은 중요합니다. 예전 설치 패널은 This Mac에만 쓸 수 있었지만, 이 패널의 모든 작업은 선택한 호스트에서 WP-CLI로 실행되므로 원격 서버도 새 설치의 대상으로 동등하게 다룰 수 있습니다. 패널 하단의 Install a new WordPress site는 선택한 호스트에 WordPress를 다운로드하고, wp-config.php를 작성하고, 데이터베이스를 만든 다음, 지정한 관리자 계정으로 설정을 완료합니다. Mac에서 업로드되는 것은 없으며, 해당 경로에 이미 설치본이 있으면 덮어쓰지 않고 거부합니다. 새 폴더를 서비스하려면 여전히 가상 호스트가 필요합니다. 로컬 사이트라면 사이트 패널에서, 원격이라면 서버 자체의 웹 서버에서 만드십시오. CMS 설치는 그 수명의 첫날일 뿐이며, 이후의 일도 같은 패널이 맡습니다. 호스트(This Mac 또는 플릿 서버)를 선택하고 일반적인 웹 루트 아래에서 wp-config.php를 검색하면, 그 머신의 모든 WordPress 설치본이 코어, 플러그인, 테마 버전 및 대기 중인 업데이트와 함께 표시됩니다. Update all은 무엇이든 건드리기 전에 데이터베이스를 내보냅니다. 잘못된 플러그인 업데이트는 복구할 수 있지만 잃어버린 데이터베이스는 복구할 수 없기 때문입니다. Check integrity는 코어 파일을 WordPress.org가 게시하는 체크섬과 비교하므로, 변조되었거나 백도어가 심어진 설치본을 찾는 가장 빠른 방법입니다. 무료 WPScan 토큰을 추가하면 설치된 플러그인과 코어를 취약점 데이터베이스와 대조하여, 수정 사항이 게시되지 않은 항목을 표시합니다. 멀티사이트 네트워크는 하위 사이트를 나열합니다. 각 사이트에는 Add a plugin 목록도 있습니다. 예약, 커머스, 메일 전송, 백업, 캐싱, 보안을 다루는 엄선된 카탈로그로, 로컬이든 원격이든 해당 사이트에 바로 설치되며 설치 후 활성화하는 옵션도 있습니다. 이 목록은 의도적으로 WordPress.org 디렉터리를 그대로 옮겨 오지 않았습니다. 모든 항목은 고장 나면 눈에 띄게 실패하거나, FrontierStack이 이미 다른 곳에서 모니터링하는 결과물을 만들어 내며, 각 항목에는 실행 후 앱이 무엇을 알려 줄 수 있는지가 적혀 있습니다. 따라서 설치했다고 해서 존재하지 않는 모니터링이 있는 것처럼 보이는 일은 없습니다. 사이트에 이미 있는 항목은 두 번 제안되지 않고 설치됨으로 표시되며, WordPress.org 슬러그가 없는 프리미엄 플러그인은 대신 자체 페이지로 연결됩니다. 아직 WordPress 사이트가 없거나 WP-CLI가 없는 호스트에서도 카탈로그는 회색으로 비활성화되어 선택할 수 없는 상태로 표시되므로, 빈 패널 대신 어떤 항목이 제공될지 미리 볼 수 있습니다. 나머지 작업은 원래라면 SSH 세션과 가물가물한 명령이 필요한 일들입니다. 잠긴 관리자 계정의 암호 재설정, 사이트를 다른 도메인으로 옮기는 search-replace(WP-CLI는 직렬화된 PHP 안에 묻힌 URL까지 다시 쓰지만, 단순 SQL 치환은 이를 손상시킵니다. 따라서 항상 먼저 시험 실행하십시오), 스테이징으로 사이트 복제, 데이터베이스 내보내기 및 최적화가 그것입니다. 복제는 파일을 복사하고, 복사본에 별도의 데이터베이스를 주고, 그 안의 URL을 다시 쓰고, 검색 엔진의 색인을 막도록 설정하므로, 스테이징이 프로덕션에 쓰거나 검색 순위에서 프로덕션을 앞지르는 일은 결코 없습니다. 모든 작업은 SSH를 통해 WP-CLI로 실행되며, WP-CLI가 없는 호스트에는 패널이 설치를 제안합니다. 사이트를 고정하면 대기 중인 업데이트, 무결성 점검 실패, 새 취약점을 알림으로 알려 줍니다.
WordPress가 자체 머신이 아닌 관리형 호스팅에 있다면, 호스팅 패널에서도 이제 해당 사이트를 나열합니다. WP Engine, Kinsta, Cloudways, Pressable은 각각 API를 통해 설치본(환경, 기본 도메인, 상태)을 가져오며, 이는 VPS 인스턴스와 함께 Cloud Servers로 집계되므로 하나의 인벤토리로 운영 중인 모든 것을 파악할 수 있습니다. 이들은 머신이 아니라 사이트이므로 전원 제어는 없습니다.
Apps & CMS 섹션은 그 밖의 자체 호스팅 CMS를 Apache/PHP/MySQL 스택에 한 번의 흐름으로 설치하며, 각 CMS에는 전용 패널이 있습니다: Drupal, Joomla, Statamic, Grav, Kirby, Craft CMS, FreshRSS. 설치 프로그램은 앱을 다운로드하고(Composer 기반인 Statamic과 Craft는 composer create-project를 실행), 문서 루트에 압축을 풀고, 데이터베이스가 필요한 앱(Drupal, Joomla, Craft)의 경우 데이터베이스와 사용자를 만들고 앱이 기대하는 위치에 설정을 작성합니다. 플랫 파일 CMS(Grav, Kirby, Statamic)는 데이터베이스가 전혀 필요하지 않습니다. 그런 다음 계정을 만들 수 있도록 앱의 설정 페이지나 관리 페이지(/admin, /panel, /cp, /admin/install…)를 열고, 그동안 FrontierStack이 가상 호스트, PHP, 신뢰할 수 있는 HTTPS를 구성합니다. 설치 폴더로는 Apache가 이미 관리하는 사이트를 선택하거나(메뉴에서 도메인, 문서 루트, 포트가 미리 채워집니다), Choose…로 비어 있는 새 폴더를 선택할 수 있습니다. 새 폴더에는 대응하는 Apache 가상 호스트가 생성되고, 도메인이 기존 사이트라면 업데이트됩니다. 설치가 제대로 동작하지 않으면 위에서 설명한 Fix My Site (AI)로 디버깅하십시오.
FreshRSS는 작업을 끝까지 마무리하는 예외입니다. FreshRSS는 자체 호스팅 RSS 및 Atom 리더로, 위의 CMS와 달리 설정 마법사가 전혀 남지 않습니다. 패널에서 계정 이름과 암호를 지정하면 설치 프로그램이 릴리스를 다운로드하고, 데이터베이스를 만들고, FreshRSS 자체의 명령줄 설치 프로그램을 실행하여 설정을 작성하고 스키마를 구축한 다음, 그 계정을 만들고, p/를 가리키는 가상 호스트를 등록합니다. 이 폴더는 FreshRSS가 실제로 서비스하는 하위 폴더이며, 나머지 코드는 원래 있어야 할 웹 루트 바깥에 남겨 둡니다. 그러면 브라우저는 설치의 첫 단계가 아니라 동작하는 리더의 로그인 화면에서 열립니다. API가 Google Reader와 호환되므로, 외부에 공개하면 Reeder나 NetNewsWire 같은 모바일 클라이언트가 동기화할 수 있습니다. 이 때문에 이 책의 다른 곳에서 다루는 HTTPS 및 원격 접근 작업과 자연스럽게 짝을 이룹니다.
7.7도메인 등록 기관 모니터
사이트 패널은 도메인이 오늘 동작하는지를 알려 주고, Domain Registrars 패널(DNS 카테고리)은 앞으로도 계속 동작할지를 알려 줍니다. 도메인을 추가하면 FrontierStack이 세 가지를 일정에 따라 감시하고, 그중 하나라도 어긋나면 알림을 발생시킵니다.
- 만료 — 등록 종료일, 등록 기관, 네임서버를 RDAP로 가져옵니다(
whois로 대체 가능). 등록 기관에 관계없이 모든 도메인에서 동작합니다. - DNS — 도메인이 여전히 해석되는지 확인합니다(
dig). - SSL — 인증서 만료일을
openssl로 직접 확인합니다.
만료일이 알림 기간 안에 들어오거나, 이미 지났거나, 자동 갱신이 꺼져 있으면 갱신 경고가 발생합니다. 지원되는 등록 기관에서는 패널이 API로 도메인 목록과 자동 갱신 상태를 가져올 수 있습니다. GoDaddy, Porkbun, Gandi, Value Domain, Route 53(AWS CLI 사용), Cloudflare(Cloudflare 토큰 재사용. Cloudflare Registrar는 계정 소유 cfat_ 토큰을 받지 않으므로 사용자 API 토큰이 필요합니다)가 해당합니다. 쓸 만한 목록 API가 없는 등록 기관(Namecheap, Squarespace, Onamae, Muumuu Domain)은 직접 추가하십시오. 이 경우에도 RDAP로 계속 모니터링합니다.
7.13.1도메인 업체: 등록 기관 가동 상태
Cloudflare 영역만으로는 등록을 누가 보유하고 있는지 알 수 없습니다. FrontierStack은 고정된 각 영역을 RDAP로 조회하여 등록 기관과 실제 네임서버를 영역 패널의 Domain Company 섹션에 표시합니다. Cloudflare 패널에서 각 영역의 줄은 예를 들어 active · Pro · registered at GoDaddy처럼 표시됩니다. 도메인 뒤에 있는 모든 등록 기관과 DNS 호스트(GoDaddy, Namecheap, Porkbun, Gandi, Squarespace, DNSimple, Route 53, Value Domain, Onamae, Name.com, Hover, Dynadot, IONOS, OVHcloud, Sakura, 그리고 Cloudflare 자체)를 5분마다 세 가지 신호로 점검합니다.
- 공식 상태 — 업체의 상태 페이지(Statuspage 또는 Instatus JSON, AWS Route 53은 RSS). 페이지에 나열되어 있다면 도메인, DNS, 이메일, 호스팅, SSL, 웹사이트 빌더 등 각 서비스도 포함합니다.
- 도달 가능성 — 웹사이트와 API 호스트가 응답하는지.
- 네임서버 — 여전히 해당 업체에 위임된 도메인에 대해 네임서버가 응답하는지.
사이드바에서 영역 옆에 노란색 건물 아이콘이 있으면 등록 기관이나 DNS 호스트의 성능이 저하되었다는 뜻이고, 빨간색이면 중단되었다는 뜻입니다. 업체를 고정하면(영역 패널, 영역의 컨텍스트 메뉴 또는 Domain Registrars의 Domain Companies 목록에서) 전용 사이드바 행이 생기며, 중단 시 점이 깜박입니다. 업체가 중단되면 Domain company 알림이 발생합니다. 상태 페이지가 없는 업체는 도달 가능성만으로 판단하며, 이 Mac이 어느 업체에도 도달할 수 없으면 거짓 장애 대신 offline으로 보고합니다.
7.13.2도메인을 Cloudflare로 옮기기
Cloudflare 토큰이 설정되어 있으면, 등록 기관에 API가 있는 경우 두 가지 이전을 클릭 한 번으로 할 수 있습니다.
- DNS만 — 아직 Cloudflare에 없는 도메인은 Domain Registrars의 Add to Cloudflare DNS…로 영역을 만들고, 현재 공개 레코드를 복사해 넣고, 고정합니다. 레코드를 검토한 다음 영역의 Domain Company 섹션에서 Switch Nameservers를 사용하십시오. FrontierStack이 GoDaddy, Porkbun, Gandi, DNSimple 또는 Route 53에 Cloudflare의 네임서버 두 개를 설정하고, Cloudflare에 활성화를 다시 확인하도록 요청합니다. 다른 등록 기관의 경우 복사할 네임서버 두 개를 보여 줍니다.
- 등록 자체 — Transfer to Cloudflare…는 도메인의 현재 상태를 읽는 체크리스트를 엽니다. Cloudflare에서 DNS 활성화, 60일 잠금 기간 경과, 이전 잠금 해제(GoDaddy, DNSimple, Route 53은 Unlock 사용), 인증 코드(Route 53이나 Gandi에서 가져오거나 DNSimple이 이메일로 발송)를 확인합니다. 마지막 단계에서는 Cloudflare의 이전 페이지가 열리며, 그곳에서 확인하고 1년 갱신 비용을 결제합니다. Cloudflare에는 이전을 시작하는 API가 없습니다.
domain 도구로 같은 작업을 할 수 있습니다: check(읽기 전용), suggest(키워드나 사업 설명으로 사용 가능한 이름을 찾음), register이며, 마지막 것은 명시적인 확인을 거쳐야 실행됩니다. Porkbun 또는 Namecheap 키가 없으면 확인과 추천에 GoDaddy 공개 검색을 사용합니다. 이 검색은 키가 필요 없지만 가격을 알려 주지 않으며 구입도 할 수 없습니다. 등록 시에는 저장된 등록 기관 자격 증명과 한 번만 입력하면 되는 등록자 연락처 프로필을 재사용합니다.7.8Cloudflare: 영역, DNS, 캐시, 터널, 보호
Cloudflare 패널에서는 API 토큰을 붙여넣고 사이드바에 표시할 영역을 선택합니다. Pin to sidebar로 고정한 각 영역은 별도의 패널이 되며, 그 영역의 Cloudflare/DNS/HTTP/SSL 상태, DDoS 및 봇 보호, WAF 규칙, Workers, CDN 분석, 개발 모드, 캐시 삭제(전체, URL 목록 또는 접두사 기준)를 제공합니다. 토큰의 범위는 신중하게 정하십시오. 읽기 전용 토큰으로 영역을 나열할 수는 있지만, DNS 편집, 인증서 DNS-01 검증, Dev Mode, 캐시 삭제, 영역 생성에는 각각 별도의 권한이 필요하며, 완전히 새로운 영역을 만들려면 계정 수준의 Zone · Zone · Edit 권한이 필요합니다. Create Token… 버튼은 앱이 사용하는 모든 권한이 미리 채워진 Cloudflare 토큰 양식을 엽니다(선택 사항인 계정 수준 영역 생성 행만 직접 추가해야 합니다). Test Token 버튼은 실제 API를 점검하여 토큰에 이러한 기능 중 무엇이 있고 무엇이 없는지 정확히 나열합니다(읽기는 직접 실행하고, 쓰기는 일부러 잘못된 요청으로 점검하므로 아무것도 변경되지 않습니다). Dashboard 버튼은 현재 영역의 Cloudflare 웹 콘솔로 바로 연결합니다.
고정된 영역에 경고가 표시되거나 HTTP 점검이 응답을 멈추면, 패널의 Diagnose 버튼이 색깔 점만 남기는 대신 원인을 찾아냅니다. 서비스 경로의 각 계층을 순서대로 점검합니다. Cloudflare에서의 영역 상태, 공개 네임서버, DNS 해석, 엣지를 통한 HTTPS(Cloudflare의 52x 오류 해석: 521 오리진 중단, 522 시간 초과, 524 앱이나 데이터베이스 멈춤, 525/526 오리진 TLS), 오리진 서버의 80번 및 443번 포트 직접 점검, 그리고 마지막으로 FrontierStack이 알고 있는 해당 도메인의 서비스 머신입니다. 그 머신이 이 Mac이면 로컬 웹 서버를, 연결된 서버라면 호스트 내 모니터의 서비스 상태를 확인합니다(중지된 mysql이 보고서에 바로 드러납니다). 공개 경로가 망가졌을 때는 플릿 전체도 살펴봅니다. 어떤 연결된 서버가 동작 중인지, 어떤 서버가 오리진 IP를 바인딩하고 있는지, 어떤 서버가 이미 이 도메인의 가상 호스트를 서비스하는지 확인하므로, 오프라인이 되면서 사이트의 정문 IP까지 함께 가져간 호스트를 이를 대신할 수 있는 서버와 함께 바로 지목합니다. 각 계층은 통과/실패로 표시되며, 마지막에는 어느 계층이 망가졌고 어떻게 해야 하는지를 쉬운 말로 정리한 결론이 나옵니다.
Cloudflare는 앱 곳곳에 등장합니다. AI의 dns_record 도구는 관리하는 영역에 레코드를 쓰고 기존 레코드를 그 자리에서 업데이트하며, 하위 도메인을 proxied(주황색 구름)와 DNS-only 사이에서 전환하는 일도 포함합니다. issue_certificate는 Cloudflare DNS-01로 검증할 수 있고, email_auth_dns는 SPF/DMARC를 대신 게시할 수 있습니다(13장 참조). 같은 계정은 로컬 사이트를 공개하기 위한 Cloudflare DDNS와 Cloudflare Tunnel에도 사용되며, 둘 다 9장에서 다룹니다.
7.13.3사이트가 공격받을 때: Under Attack 모드
고정된 모든 영역의 패널 맨 위에는 공격받는 중 버튼이 있습니다. 이 버튼은 영역을 Cloudflare의 Under Attack 모드(보안 수준 under_attack)로 전환합니다. 모든 방문자는 오리진에 도달하기 전에 몇 초간 브라우저 검사를 받게 되며, 이것으로 대부분의 요청 폭주를 막을 수 있습니다. 켜기 전에 확인을 거치는데, 켜져 있는 동안에는 JavaScript를 실행할 수 없는 모든 것 — API 클라이언트, 웹훅, 모바일 앱, 가동 시간 모니터 — 도 함께 차단되기 때문입니다. 같은 명령이 사이드바에서 영역을 오른쪽 클릭했을 때의 메뉴(공격받는 중…)와 Cloudflare Zones 미니 팔레트에도 있으므로, 패널을 찾아다니지 않고도 바로 실행할 수 있습니다. 이 모드인 영역은 사이드바에 빨간 방패, 팔레트에 ATTACK 배지로 표시됩니다. 해제를 누르면 확인 없이 모드가 꺼지고, 영역의 이전 보안 수준이 복원됩니다(FrontierStack 밖에서 모드를 켠 경우에는 medium). 토큰에는 Zone · Zone Settings · Edit 권한이 필요합니다. AI 관리자도 cloudflare_dev_mode action=under_attack으로 같은 작업을 할 수 있습니다.
7.13.4Email Routing과 Email Service
영역 패널의 이메일 섹션에는 Email Routing이 켜져 있고 준비되었는지, 라우팅 규칙과 catch-all, 아직 확인되지 않은 대상 주소(확인될 때까지 그 주소로 전달된 메일은 버려집니다), 실패 항목을 강조한 최근 7일간의 Email Service 이벤트, 영역의 MX 대상이 표시됩니다. 메일 호스트 이름이 주황색 구름(프록시) 상태이면 경고도 표시합니다. Cloudflare 프록시는 웹 트래픽만 전달하므로 프록시된 호스트로의 SMTP와 IMAP은 실패합니다 — DNS 전용으로 설정하십시오. 이메일 전송 모니터에도 이에 대응하는 Cloudflare Email Service 섹션이 있으며, 같은 토큰으로 읽은 모든 고정된 영역을 나열합니다. 토큰에는 Zone · Email Routing Rules · Read 권한(대상 주소를 보려면 Account · Email Routing Addresses · Read도)이 필요합니다. AI는 cloudflare_dev_mode action=email_status로 같은 정보를 읽습니다.
7.13.5Core Web Vitals
영역 패널의 Core Web Vitals 섹션은 Cloudflare의 무료 Web Analytics를 바탕으로, 봇을 제외한 실제 방문자가 최근 7일간 경험한 내용을 보고합니다:
| 지표 | 측정 대상 | 양호 |
|---|---|---|
| LCP | Largest Contentful Paint — 주요 콘텐츠가 나타나는 시점 | ≤ 2.5 s |
| INP | Interaction to Next Paint — 페이지가 입력에 반응하는 속도 | ≤ 200 ms |
| CLS | Cumulative Layout Shift — 레이아웃이 얼마나 흔들리는지 | ≤ 0.1 |
| FCP · TTFB | 첫 렌더링과 서버 응답 시간(참고용으로 표시) | — |
각 값은 75번째 백분위수이며, “양호”였던 페이지 로드의 비율과 녹색·주황색·빨간색 등급이 함께 표시됩니다. 사이트에서 Web Analytics가 켜져 있어야 하며, 토큰에는 Account · Account Analytics · Read 권한이 필요합니다 — 이제 토큰 생성… 버튼에 미리 채워져 있습니다. AI: cloudflare_dev_mode action=web_vitals.
7.13.6속도 제한 및 WAF 규칙
영역 패널의 규칙 섹션은 영역의 속도 제한 규칙과 사용자 정의 WAF 규칙을 나열하며, 각 규칙의 동작, 한도(예: “차단, IP당 10초에 20회 초과 요청”), 표현식을 보여 줍니다. 스위치로 규칙을 끄고 켭니다. 편집으로 이름, 표현식, 동작, 한도를 변경합니다. … 메뉴에는 이전 버전으로 되돌리기 — FrontierStack은 마지막 편집 이전 버전을 보관합니다 — 와 앱에서 되돌릴 수 없는 규칙 삭제가 있습니다. 변경 사항은 적용하는 즉시 Cloudflare에 반영되며, Cloudflare가 구문을 분석할 수 없는 표현식은 아무것도 변경하지 않고 거부합니다.
주황색 경고에 주의하십시오. 호스트 이름 조건이 없는 규칙은 웹사이트뿐 아니라 영역의 모든 호스트 이름에 적용됩니다. /djs/ 같은 URL 경로에 일치하는 규칙은 경로에 같은 세그먼트가 들어 있는 미디어나 이미지 호스트에도 일치하므로, 한 페이지를 불러오던 방문자가 이미지를 받는 도중 오류 1015(HTTP 429)로 차단될 수 있습니다 — 속도 제한은 캐시보다 먼저 실행되므로 캐시된 이미지도 소용이 없습니다. 편집기에는 표현식을 (http.host ne "host") and (…)로 감싸는 원클릭 <host> 제외 버튼이 있습니다.
새 규칙…은 속도 제한, 사용자 정의 WAF 규칙, 캐시 규칙(정해진 시간 동안 캐시하거나 캐시를 우회), 리디렉션을 만듭니다. 경로만 받는 대신 호스트 이름(경로 접두사는 선택 사항)을 묻기 때문에, 새 규칙이 모르는 사이에 모든 호스트를 덮는 일이 없습니다. 직접 작성한 표현식에도 같은 경고가 표시됩니다. 관리형 WAF, URL 재작성, 요청/응답 헤더 규칙은 영역에 있으면 목록에 표시됩니다. 이 규칙들은 켜고 끄기, 이름 변경, 삭제가 가능하지만 매개변수(캐시 TTL, 리디렉션 대상, 헤더)는 편집할 수 없고 표시만 됩니다 — 변경하려면 규칙을 다시 만드십시오.
규칙 종류마다 별도의 토큰 권한 — Zone WAF, Cache Rules, Single Redirect, Transform Rules — 이 필요하며, 보려면 Read, 변경하려면 Edit 권한이 있어야 합니다. 빠진 권한은 패널에 표시됩니다. Cloudflare에서 규칙 보기는 대시보드를 엽니다. AI: cloudflare_dev_mode action=rules는 규칙을 나열하고, action=rule_create는 규칙을 추가하며, action=rule_update는 규칙을 변경합니다(각각 변경 허용과 사용자의 확인이 필요합니다). AI는 규칙을 비활성화할 수는 있지만 삭제할 수는 없습니다.
7.13.7보안 이벤트와 Bot Fight Mode
영역 패널의 보안 이벤트 섹션은 최근 24시간 동안 Cloudflare가 영역에서 차단하거나 챌린지하거나 기록한 내용을 출처(속도 제한, 사용자 정의 규칙, 관리형 규칙, DDoS, 브라우저 무결성 검사…), 규칙, 호스트 이름별로 묶어 보여 줍니다. 사용자 정의 규칙과 속도 제한 규칙의 ID는 이름으로 표시됩니다. 주황색 삼각형은 주 사이트가 아닌 호스트 이름에서 방문자가 차단되었다는 뜻입니다 — 대개 페이지용으로 만든 규칙에 미디어나 이미지 호스트가 걸린 경우입니다. 이미지가 사라지거나 방문자가 오류 1015 또는 429를 보고하면 여기서부터 확인한 다음 규칙에서 해당 규칙을 수정하십시오.
목록 아래의 Bot Fight Mode는 Cloudflare의 무료 봇 챌린지를 표시하고 전환합니다. 켜기 전에 확인을 거칩니다: 정상적인 봇, 피드, 웹훅, 모니터까지 차단할 수 있으며, 무료 플랜에서는 규칙으로 이들을 예외 처리할 수 없기 때문입니다. Zone · Analytics · Read 권한이 필요합니다. AI: action=security_events 및 action=bot_fight.
7.13.8호스트 이름별 캐시
영역 패널의 호스트 이름별 캐시 섹션은 최근 24시간 동안 각 호스트 이름의 요청 수와 캐시 가능한 요청 중 Cloudflare 캐시에서 제공된 비율(HTML과 API 응답은 제외)을 보여 주며, 캐시에서 제공되지 않은 상위 파일도 함께 표시합니다. 영역 전체 적중률로는 전혀 캐시되지 않는 이미지 호스트가 가려지지만, 이 섹션에서는 드러납니다. 100%에 크게 못 미치는 호스트는 대개 캐시 규칙이 없거나, 오리진이 Set-Cookie 또는 Cache-Control: no-store를 보내거나, 요청이 캐시에 도달하기 전에 규칙이 차단하고 있는 경우입니다. AI: action=cache_hosts.
7.13.9Workers
계정 패널의 Workers 섹션은 모든 Worker를 그 Worker를 가리키는 라우트, 최근 하루의 요청 수, 오류 수, 99번째 백분위수 CPU 시간과 함께 나열하고, 플랜에 공시된 허용량 — Workers Paid는 월 1,000만 요청, Free는 하루 100,000 요청 — 대비 사용량을 막대로 보여 줍니다. 막대는 70%에서 주황색, 90%에서 빨간색으로 바뀝니다. Account · Workers Scripts · Read, Workers Routes · Read, Account Analytics · Read 권한이 필요하며, 모두 토큰 생성…에 미리 채워져 있습니다. AI: action=workers.
7.13.10플랜 및 알림
계정 패널의 플랜 및 알림 섹션은 계정의 구독(플랜, 가격, 상태, 갱신일)과 알림 정책을 나열하며, 알림 정책이 하나도 없으면 경고합니다 — 그런 경우 장애, 만료가 다가오는 인증서, Workers 사용량을 알려 줄 수단이 없기 때문입니다. 이 섹션은 읽기 전용이며, 청구와 알림은 대시보드를 엽니다. Account · Billing · Read(미리 채워짐)와 Account · Notifications · Read 권한이 필요하며, 후자는 토큰 템플릿 단축 방법이 없어 직접 추가해야 합니다. AI: action=plan_usage.
7.13.11Turnstile 위젯
Turnstile은 가입, 로그인, 문의 양식을 위한 Cloudflare의 무료 CAPTCHA 대체 서비스입니다. Cloudflare 패널의 Turnstile 섹션은 위젯을 나열하며, 각 위젯에 사이트 키 복사 버튼이 있습니다. 새 위젯…은 이름, 최대 10개의 호스트 이름, 모드(Managed(권장), Non-interactive, Invisible)를 묻습니다. 위젯의 비밀 값은 한 번만 표시됩니다: 복사하거나 스크립트 비밀 값에 저장을 눌러 스크립트에서 쓸 수 있도록 $TURNSTILE_SECRET_<NAME>으로 저장하십시오. 사이트 키는 페이지에 넣고, 비밀 값은 서버에 둡니다. 서버는 Cloudflare의 siteverify 엔드포인트로 각 방문자의 토큰을 확인합니다. 위젯 삭제…는 각 행의 메뉴에 있습니다.
cfat_)을 거부합니다. Account · Turnstile · Edit 권한이 있는 사용자 토큰이 필요합니다. 이제 토큰 테스트가 이 권한과 그 밖의 선택적 계정 수준 권한을 검사하고, 네트워크 실패나 Cloudflare 5xx를 잘못된 토큰과 구별하며, 여러 계정용 토큰이 어느 계정에 대해 동작하는지 알려 줍니다.7.13.12이름 있는 터널: 상태, 알림, Access
이름 있는 터널의 각 행(9장 참조)에는 상태 줄이 있습니다: Cloudflare가 보는 커넥터 상태 — healthy, degraded, down, inactive — 와, 이 Mac이 실행하는 터널이라면 로컬 포트가 응답하는지 여부입니다. 터널이 정상이어도 뒤의 서비스가 중지되어 있으면 결국 실패하기 때문입니다. 종 아이콘을 누르면 해당 터널이나 그 서비스가 다운될 때 알림을 받도록 설정됩니다(알림 그룹 네트워크 및 라우팅). 보호…는 호스트 이름 앞에 Cloudflare Access 로그인을 둡니다: 이메일 주소 및/또는 @domains를 나열하고 로그인 유지 기간(1시간~30일)을 선택하면, 방문자는 이메일로 받은 일회용 PIN이나 사용 중인 ID 제공업체를 통해 로그인합니다. FrontierStack은 재사용 가능한 허용 정책과 자체 호스팅 Access 애플리케이션을 만듭니다. 보호된 터널에는 파란 자물쇠가 표시되며, Access 제거로 보호를 해제합니다. Access를 쓰려면 계정에서 Zero Trust를 한 번 설정해야 하며(무료 플랜으로 사용자 50명까지), Account · Access: Apps and Policies · Edit 권한이 필요합니다.
7.13.13Cloudflare MCP를 통한 AI 접근
AI 접근(Cloudflare MCP) 섹션을 사용하면 AI 관리자가 이미 저장한 토큰으로 mcp.cloudflare.com의 Cloudflare 공식 MCP 서버를 이용할 수 있습니다 — FrontierStack에 패널이 없는 제품(WAF 규칙, Workers, R2, KV, D1, Access)에 유용합니다. AI 관리자가 Cloudflare MCP 사용을 켜고 연결 테스트를 누르십시오. 기본 상태에서는 읽기 전용이어서, AI는 Cloudflare 문서와 전체 API 사양을 검색할 수 있습니다. 기본적으로 꺼져 있는 API 호출 허용(execute)을 켜면 AI가 실제 API에 대해 JavaScript를 실행할 수 있으며, 매 실행에 변경 허용과 사용자의 승인이 필요합니다. FrontierStack에 연결된 MCP 클라이언트는 hosted_mcp 도구에 provider=cloudflare를 지정해 같은 서버에 접근합니다(13장의 도구 표 참조). 다른 MCP 클라이언트 ▸ 구성 복사는 Claude, Cursor 등의 앱을 위한 토큰 없는 항목을 제공하며, 이런 앱은 OAuth로 직접 Cloudflare에 로그인합니다.
mcp.cloudflare.com에만 전송되며, AI에게는 절대 표시되지 않습니다. 응답에 포함된 자격 증명 값(터널 토큰, Turnstile 비밀 값)은 가려집니다. execute를 켜면 AI는 토큰이 허용하는 모든 작업을 할 수 있으므로, 토큰 권한은 최소한으로 유지하십시오.7.13.14Cloudflare 개발자 도구
Cloudflare 패널의 개발자 도구 섹션은 Cloudflare의 에이전트 설정 가이드에 따라 Cloudflare 자체 도구를 설치합니다. 설치는 앱 내 콘솔에서 npm으로 Cloudflare CLI(cf, 베타)를 추가하며, 필요하면 먼저 Homebrew로 Node를 추가합니다. 로그인…은 cf auth login을 실행하고 브라우저를 열어 계정을 승인하게 합니다(저장된 API 토큰은 사용하지 않습니다). Claude Code 플러그인 행은 cloudflare/skills 마켓플레이스를 추가하고 cloudflare 플러그인을 설치합니다. 이 플러그인에는 Cloudflare의 스킬과 함께 API, 문서, 바인딩, 빌드, 관측성 MCP 서버가 들어 있습니다. 서드파티 플러그인 코드를 설치하는 것이므로, 설치 후 Claude Code에서 /reload-plugins를 실행하십시오. 이 Mac에 Claude Code가 있어야 합니다.
7.9호스팅 제공업체
운영하는 모든 것이 Mac에 있는 것은 아닙니다. 호스팅 카테고리는 VPS와 관리형 제공업체를 같은 윈도우로 가져옵니다. VPS 제공업체 — DigitalOcean, Vultr, Linode, Hetzner, Sakura 등 — 는 API 토큰으로 서버를 제공합니다: 토큰을 붙여 넣으면 패널이 각 서버를 플랜, 위치, 상태, IP와 함께 나열하고, 확인을 거쳐 서버를 켜고 끄거나 재시작할 수 있게 합니다. 대시보드형 제공업체는 토큰을 저장하고 제어판, 문서, 가입 페이지로 가는 빠른 링크를 표시합니다. Hostinger는 한층 더 나아갑니다: hPanel ▸ Account ▸ API에서 발급한 API 토큰으로 패널이 VPS를 나열하고 전원을 제어하며, VPS 스냅숏을 만들고(Hostinger는 VPS당 하나만 보관하므로 새 스냅숏이 기존 것을 대체합니다), 만료일이 포함된 보유 도메인 목록과 호스팅 웹사이트를 보여 줍니다. 또한 AI 관리자가 dns_record(provider=hostinger)로 DNS 레코드를 읽고 설정할 수 있습니다. AI 접근(Hostinger MCP) 섹션은 같은 토큰으로 AI를 Hostinger 공식 MCP 서버에 연결합니다 — 쓰기 허용을 켜기 전까지는 읽기 도구만 사용할 수 있습니다. 어느 경우든 자격 증명은 키체인에 보관되며, SSH로 접근할 수 있는 서버는 플릿의 일부가 됩니다(8장). ConoHa는 컨트롤 패널 API 페이지의 세 값(API 사용자, 그 암호, 테넌트 ID)으로 로그인하여 VPS 3.0(또는 이전 2.0) 서버를 나열하고 전원을 제어하며, ConoHa DNS 영역을 다루는 DNS 섹션을 추가합니다. 레코드는 여기서 추가, 편집, 삭제하거나 AI가 dns_record(provider=conoha)로 처리하게 할 수 있습니다. ConoHa DNS는 ConoHa 고객에게 무료이며, 자체 DNS API가 없는 Onamae.com에 등록한 도메인을 API로 관리하는 일반적인 위치입니다.
7.10IndexNow: 검색 엔진에 즉시 제출
페이지가 바뀌었을 때 크롤러가 알아차리기를 기다릴 필요가 없습니다. IndexNow Manager(SEO 및 마케팅)는 참여 검색 엔진 — Bing, Yandex, Seznam, Naver 등 — 에 즉시 알립니다. 관리 중인 사이트 하나를 고르고 키 파일 설치를 누르면, FrontierStack이 사이트의 문서 루트에 <key>.txt 파일을 기록하여 검색 엔진이 키 소유를 확인할 수 있게 합니다. 확인은 파일이 제공되고 있는지 검사합니다. 그런 다음 URL 하나를 제출하거나, 대기 중 대기열을 한꺼번에 보내거나, 사이트맵에서 URL을 공급할 수 있으며, 일정에 따라 자동 제출할 수도 있습니다. 모든 제출은 api.indexnow.org로 전송되고, 여기서 모든 참여 검색 엔진으로 전달됩니다. URL의 호스트는 선택한 사이트 및 그 키와 일치해야 합니다.
gsc_verify_domain 및 index_site 도구로 Search Console에서 도메인을 확인하고 사이트맵을 제출하며, Google에 로그인되어 있으면 손댈 필요 없이 진행됩니다. 도메인 상태의 각 행에 있는 색인 버튼은 두 경로를 한 번에 실행합니다.7.11OpenSEO와 DataForSEO: 나만의 SEO 도구 모음
OpenSEO(SEO 및 마케팅)는 Semrush와 Ahrefs를 대체하는 오픈 소스 도구로 — 키워드 조사, 순위 추적, 경쟁사 분석, 백링크, 사이트 감사, AI 가시성 — MCP 서버를 갖추고 있어 AI 에이전트도 같은 데이터를 사용할 수 있습니다. 패널은 한 가지 질문으로 시작합니다: 어디에서 실행합니까?
- 호스팅 — app.openseo.so. 무료로 사용해 볼 수 있으며, 프로젝트를 후원하려면 월 $10입니다. SEO 데이터는 OpenSEO 크레딧(DataForSEO 가격에 28% 추가)으로 청구되므로 별도의 DataForSEO 계정이 필요 없습니다.
- 이 Mac의 Docker — 설정 및 시작은
ghcr.io/every-app/open-seo를 가져와http://localhost:3001에서 시작합니다. 프로젝트는open_seo_data볼륨에 저장되므로, 설정 적용 및 재시작(키나 포트를 변경한 후)과 업데이트(최신 이미지)를 해도 그대로 유지됩니다. OpenSEO의 원격 측정은 기본적으로 꺼져 있으며, OpenRouter 키를 공유하면 SAM 에이전트를 사용할 수 있습니다. - 다른 곳에 자체 호스팅 — 기존 인스턴스의 URL을 입력하거나 Cloudflare에 배포…를 누르십시오. FrontierStack은 저장소를 복제하고, DataForSEO 키와 Cloudflare Access를 통과할 수 있는 이메일 주소를 담은 소유자 전용
.env.selfhost를 작성한 다음, 앱 내 콘솔에서pnpm deploy:selfhost를 실행합니다. 처음 실행할 때 Cloudflare에 로그인하게 됩니다. OAuth 범위를 사용자 지정할지 묻는 질문에 yes로 답하고access:write를 활성화하십시오. 출력된 Worker URL을 인스턴스 URL에 붙여 넣으십시오.
라이브 모니터는 인스턴스의 /api/health 엔드포인트를 읽습니다. 이 엔드포인트는 DataForSEO 키, 데이터베이스, 인증 모드, AI, Search Console에 대한 설정 검사 결과를 나열합니다. 알림 받기를 고정하면 검사가 실패할 때 알림이 발생합니다. oseo_ API 키를 붙여 넣으면 MCP 엔드포인트에 대해 확인하므로, 폐기된 키도 표시됩니다. AI 에이전트 섹션은 MCP URL, claude mcp add 명령, Claude Desktop/Cursor 구성을 복사합니다. API 키 방식은 셸에서 $OPENSEO_API_KEY를 읽으므로, FrontierStack은 키를 클립보드에 넣지 않습니다.
DataForSEO는 OpenSEO의 데이터 소스이며, 자체 라이브 모니터가 있고 OpenSEO 패널에 포함되어 있습니다. app.dataforseo.com ▸ API Access에서 확인한 API 로그인과 암호(대시보드 암호가 아닙니다)를 입력하거나, 로그인을 비워 두고 더 긴 Base64 자격 증명을 붙여 넣으십시오. 모니터에는 선불 잔액, 오늘의 지출과 API 호출 수가 표시되며, 오늘의 지출이 임계값을 넘거나 잔액이 설정한 하한 아래로 떨어지면 알림을 보낼 수 있습니다. 자체 호스팅 OpenSEO 설치도 같은 자격 증명을 사용하므로 한 번만 입력하면 됩니다.
7.12사이트 전송: 머신 간 사이트 복사
두 가지 도구를 쓰면 수동으로 rsync를 이리저리 돌리지 않고도 사이트를 옮길 수 있습니다. Apache 간 웹사이트 복사는 로컬의 경우를 처리합니다: Mac에 Apache가 둘 이상 설치되어 있을 때(예: Homebrew 버전과 오래된 Server.app 버전), 원본 설치를 선택하고 원하는 사이트에 체크하면 FrontierStack이 해당 사이트의 문서 루트와 가상 호스트 정의를 현재 선택된 Apache로 복사합니다. 같은 도메인의 사이트는 덮어쓰므로, 마이그레이션 후 다시 가져올 때도 이 방법을 씁니다.
사이트를 다른 머신으로 옮기려면, AI의 promote_site 도구가 로컬 사이트를 지정한 플릿 호스트 하나로 복제합니다: 문서 루트를 업로드하고, 원격 측에 가상 호스트(Apache 또는 Nginx)를 작성하고, 웹 서버를 다시 로드하며, 새 호스트를 가리키는 Cloudflare A 레코드를 추가할 수도 있습니다 — 수동 플릿 푸시와 같은 단계를 한 번의 호출로 처리합니다.
7.13새 웹 프로젝트 프로비저닝
위의 요소들을 결합하면, 프로젝트의 인프라를 처음부터 구축하는 하나의 흐름이 됩니다. 핵심은 명확한 역할 분담입니다: AI 도구(MCP 경유)는 코드를 담당하고, FrontierStack은 인프라를 담당합니다. 내장된 Provision Web Project 스킬은 어시스턴트가 다음 절차를 순서대로 진행하도록 안내합니다:
- 탐색 — 대상과 그 권한 접근, 설치된 Apache/Nginx, 연결된 DNS 제공업체를 조사하고, 공개적인 변경을 하기 전에 빠진 전제 조건을 확인하거나 설치합니다.
- 영역 —
cloudflare_zone_create가 Cloudflare 영역을 만들고 등록 기관에 설정할 네임서버를 반환합니다(토큰에 계정 수준의 영역 생성 권한이 없으면 그 사실을 분명히 알려 줍니다). - 가상 호스트 + 폴더 —
vhost_create가 Apache/Nginx 사이트를 정의합니다. 문서 루트를 지정하지 않았으면 FrontierStack이 플랫폼에 맞는 빈 폴더를 만들고 그 경로를 알려 줍니다. 사이트 콘텐츠를 디자인하거나 생성하지는 않습니다. - DNS —
dns_record가 이름이 호스트를 가리키도록 합니다. - TLS —
issue_certificate가 Let's Encrypt 인증서를 발급합니다. - 미리 보기 — localhost 테스트 지점을 위한 임시 공유(9장).
- 승격 — 필요하면
promote_site가 플릿 호스트로 복제합니다.
도메인 등록도 domain_register를 통해 이 절차의 맨 앞에 추가할 수 있으므로, 원칙적으로 에이전트가 이름을 구입하고, 영역을 만들고, 가상 호스트를 세우고, 인증서를 발급하고, 플릿으로 복제하는 데까지 모두 할 수 있습니다 — 비용이 들거나 시스템을 변경하는 모든 단계는 먼저 미리 보기로 표시되어 사용자의 승인을 받습니다.
제III부
서버를 하나의 플릿으로 연결한 다음, Mac, Linux 및 BSD 서버, Raspberry Pi, Windows 호스트까지 모두 하나의 윈도우에서 네트워크를 구성하고, 강화하고, 모니터링합니다.
제8장
서버 연결: 위치와 플릿
Mac 한 대는 시작에 불과합니다. FrontierStack은 SSH를 통해 운영 중인 다른 모든 서버에 연결하며, 그때 자신이 네트워크의 어디에 있는지도 파악합니다.
지금까지는 눈앞에 있는 Mac에 관한 내용이었습니다. 매뉴얼의 이 부분에서는 시야를 관리 대상 전체로 넓힙니다. 랙에 설치된 Linux 서버, 아직 macOS Server를 실행 중인 오래된 Xserve, 선반 위의 Raspberry Pi, 클라우드 VPS, 심지어 Windows 호스트까지 포함됩니다. 각 서버는 SSH로 한 번만 연결하면 되며, 그 이후 FrontierStack은 이들을 하나의 플릿으로 취급하여 진단을 실행하고, 명령을 여러 서버에 일괄 실행하고, 사이트를 배포하고, 상태를 감시합니다. 또한 이 Mac이 네트워크상 어디에 있는지도 추적하므로, 집과 사무실, 카페를 오가는 노트북이 지금 단지 보이지 않을 뿐인 서버에 대해 잘못된 경보를 울리지 않습니다.
이 장에서는 플릿의 연결과 운용을 다룹니다. 네트워크와 경계 보안은 9장, 보안 강화와 보안 감사는 10장, 지속적인 모니터링과 알림은 11장에서 더 자세히 다룹니다. AI 관리자는 같은 도구를 사용하여 여기 나오는 거의 모든 작업을 수행할 수 있습니다. 13장을 참조하십시오.
8.1위치 및 장소
위치 및 장소 ▸ 위치를 여십시오. 위치는 단순히 이름이 붙은 네트워크(집, 사무실, VPN 연결 중 등)이며, 여러 신호로 인식됩니다. Wi-Fi SSID, 라우터(게이트웨이) MAC 주소, Wi-Fi BSSID, IP 주소의 서브넷 접두사(예: 192.168.1.), 공인 IP 대역, 그리고 VPN 연결 여부입니다. 헤더에는 현재 위치(현재: 사무실)가 표시되고, 그 아래에 Wi-Fi 이름, IP, 게이트웨이, VPN 상태로 구성된 실시간 스냅샷이 표시됩니다. 감지는 30초마다 실행됩니다.
FrontierStack이 인식하지 못하는 네트워크를 발견하면 새 네트워크가 감지됨 배너를 표시합니다. 추가…를 클릭하여 저장하십시오. 현재 네트워크를 위치로 추가를 누른 다음 조건을 세부 조정할 수도 있습니다. 위치는 설정된 조건이 모두 충족될 때 일치하며(SSID와 라우터 MAC은 그중 하나만 일치하면 됨), 비워 둔 필드는 무시됩니다. 여러 위치가 일치하면 목록의 첫 번째 항목이 아니라 가장 구체적인 위치가 선택됩니다. 자동 감지 대신 위치를 수동으로 고정하려면 모드 선택기를 사용하십시오. 신호가 모호할 때 유용합니다.
모든 신호의 신뢰도가 같지는 않으며, 이는 생각보다 중요합니다. 서브넷 접두사는 식별자가 아닙니다. 가정용 라우터, 카페, 호텔은 어디서나 192.168.1.× 주소를 할당하므로, 서브넷만으로 정의된 위치는 전혀 다른 건물에서도 그대로 일치해 버립니다. 라우터 MAC은 가장 강력한 신호입니다. 하나의 하드웨어에 고유하며 특별한 권한 없이 읽을 수 있습니다. 그래서 라우터 일치 기능이 생기기 전에 저장된 위치는 현재 네트워크에서 모든 조건 업데이트를 클릭 한 번으로 바로잡을 수 있습니다.
8.18.1GPS로 장소 고정
두 장소가 실제로 같은 서브넷을 사용하고 MAC 주소를 일일이 다루고 싶지 않은 까다로운 경우에는 위치에 GPS 핀을 추가할 수도 있습니다. 해당 장소에서 위치를 열고 이 지점 고정(GPS)을 누르십시오. 반경 슬라이더로 어디까지를 “여기”로 볼지 설정합니다(기본값 150 m. 실내 측위는 정밀하지 않고, 장소는 점이 아니라 건물이기 때문입니다).
핀은 필수 조건이 아니라 교차 확인용입니다. 핀은 두 가지 역할을 합니다. 약한 일치를 확인해 주고, 더 유용하게는 잘못된 일치를 거부합니다. 따라서 집이 우연히 같은 서브넷을 쓰는 카페를 자기 위치라고 주장하지 않게 됩니다. 이 기능이 감지를 결코 악화시키지 않도록, 공유될 수 있는 조건(서브넷, VPN 연결 여부)만으로 식별된 위치는 현재 위치 정보가 있고 그것과 모순될 경우 더 이상 확인됨으로 보고되지 않습니다. 확신에 찬 잘못된 답 대신 외부 / 알 수 없음이 표시됩니다.
기기도 위치에 속합니다. 기기 검색에서 모니터링 중인 기기의 ⋯ 메뉴 ▸ 위치에 할당을 선택하면 특정 장소에 배치됩니다. 자동으로 두면 해당 서브넷을 소유한 위치에 자동으로 속하게 됩니다. 기기 자체의 패널에서도 설정할 수 있으며, 각 위치의 행에는 해당 위치에 할당된 기기가 나열됩니다. 사설 서브넷은 장소마다 반복되므로, 다른 곳에 고정된 기기가 서브넷에 의해 어떤 위치에 들어갈 수 있습니다. 그 목록에서 기기의 ×를 누르거나 위치 없음을 선택하면 제거되며, 일치하는 서브넷이 있어도 다시 추가되지 않습니다. Mac이 인식된 위치에 도착하면 FrontierStack은 해당 기기들을 확인하고(VPN 등을 통해 최근에 확인된 기기는 건너뜀) 각각의 상태를 표시합니다. 녹색은 연결 가능, 빨간색은 이곳에 있어야 하지만 응답이 없음, 주황색은 이 Mac이 도달할 수 없는 Wi-Fi 구간에 있음을 뜻합니다. 주황색은 대개 다른 액세스 포인트나 대역에 있는 경우로, 예를 들어 Mac은 5 GHz에 연결되어 있는데 센서는 2.4 GHz 전용인 경우입니다. 주황색은 “사라짐”이 아니라 “여기서는 확인할 수 없음”을 의미합니다.
이 모든 것의 목적은 위치 기반 모니터링 섹션입니다. 개요 ▸ 알림에서 기기, Wi-Fi 네트워크, Cloudflare 영역 또는 감시 항목을 중요 항목으로 표시한 다음, 여기에서 범위를 사무실에서만으로 지정하십시오. 그러면 그 검사는 다른 모든 곳에서 일시 중지됩니다. 호텔에 있을 때 NAS가 DOWN으로 울리지 않고, 회사에 있을 때 집 Wi-Fi가 끊겼다는 알림도 오지 않습니다. 일시 중지된 항목은 돌아오면 조용히 재개됩니다. 위치 자체가 바뀌면 FrontierStack은 로컬 알림을 게시하거나, 메시징 게이트웨이를 통해 “📍 현재 위치: 사무실” 알림을 보내거나, 둘 다 할 수 있습니다.
get_location 도구로 이 정보를 읽을 수 있습니다. 활성 위치, 그 위치가 결정된 방식(고정 또는 자동 감지), 실시간 스냅샷, 그리고 설정된 모든 위치의 조건입니다. AI 관리자는 이를 바탕으로 LAN 전용 서비스가 현재 위치에서 연결 가능한지, 아니면 외부에서 VPN으로 접속 중인지를 판단합니다.8.2SSH로 서버 연결
서버는 서버 연결 시트를 통해 플릿에 합류합니다. 이 시트는 기기 패널, 기기 검색, 또는 클라우드 서버 및 원격 도구 패널에서 열 수 있습니다. 이름, 호스트 또는 IP, 포트, SSH 사용자 이름(root, ubuntu, ec2-user…), 로그인 암호를 입력하십시오. 이 암호는 단 한 번만 사용됩니다. 앱은 이 Mac의 관리형 SSH 키를 서버의 authorized_keys에 설치하고, 그 이후로는 키로만 연결합니다. 서버 주소 외에는 아무것도 저장되지 않으며, 암호는 폐기됩니다.
암호 로그인이 없는 키 전용 서버의 경우 암호를 사용할 수 없습니까? 키를 수동으로 설치를 펼치고, 표시된 공개 키를 서버의 authorized_keys에 직접 복사한 다음 연결하십시오. 모니터링 헬퍼도 설치를 선택하면 같은 단계에서 호스트 모니터도 설정됩니다(아래에서 설명).
Windows 서버와 Tailscale 서버. OpenSSH를 실행하는 Windows PC도 같은 방법으로 연결됩니다. FrontierStack은 Windows 셸을 감지하고 PowerShell로 키를 설치합니다. 관리자 계정이면 C:\ProgramData\ssh\administrators_authorized_keys에(sshd가 요구하는 권한으로), 그렇지 않으면 사용자의 .ssh\authorized_keys에 설치합니다. 서버의 SSH 호스트 키는 FrontierStack 자체의 신뢰 저장소에 기록되므로, ~/.ssh/config가 일부 주소의 호스트 키를 버리도록 설정되어 있어도 연결할 수 있습니다(Tailscale용으로 UserKnownHostsFile /dev/null을 지정한 Host 100.* 규칙이 흔히 쓰입니다).
연결된 서버에는 연결 가능 여부를 나타내는 작은 녹색 또는 빨간색 상태 점이 표시됩니다. 서버를 재설치한 뒤나 키가 처음부터 설치되지 않은 경우처럼, 점이 빨간색으로 바뀌고 Permission denied (publickey)가 표시되면 AI 도구 repair_ssh_access가 오래된 호스트 키를 지우고 관리형 키를 다시 설치합니다. 이때 보관함 비밀 값으로 보관해 둔 일회용 로그인 암호를 사용합니다. 암호는 로컬에서 읽혀 키 접근을 다시 설치하는 데 쓰이며, 성공하면 점이 다시 녹색으로 바뀝니다.
호스트의 상태 섹션에는 연결 행도 표시됩니다. 서버의 기본 경로를 실제로 담당하는 연결을 보여 줍니다. 협상된 Ethernet 속도(10 GbE, 2.5 GbE, 1 GbE), 채널 폭을 포함한 Wi-Fi 세대(Wi-Fi 7 = 802.11be, Wi-Fi 6E/6/5), 또는 VPN 터널입니다. Linux, macOS, FreeBSD 호스트에서는 일반 상태 점검 중에 읽히고, 에이전트 전용 호스트에서는 호스트 모니터 에이전트(v1.17 이상)가 보고합니다. 이 Mac에도 같은 행이 표시되며, SNMP 기기에서는 인터페이스 조회 시 각 포트의 협상된 링크 속도가 나열됩니다.
각 서버에는 대화형 셸을 위한 연결 방식 설정(편집 시트에 있음)도 있습니다. 일반 SSH(기본값), mosh(SSH 설정으로 로그인한 다음 자체 UDP 전송으로 전환하므로, 잠자기, 네트워크 이동, 불안정한 연결에도 세션이 유지됩니다), 또는 실험적인 SSH3(QUIC/HTTP3 기반이며, 서버를 UDP 443의 비밀 URL 뒤에 숨길 수 있습니다) 중에서 선택할 수 있습니다. 셸 열기와 SSH 열기는 이 선택을 따르며, 상태 점검과 파일 전송은 항상 일반 SSH를 사용합니다. 두 클라이언트 모두 서비스 카탈로그에 있습니다(mosh는 Homebrew, SSH3는 Go로 설치).
repair_ssh_access 도구는 로컬 .env 보관함에서 이름으로 일회용 암호를 읽으며, 그 값은 AI 모델에 전송되지 않습니다.8.3관리형 키와 저장된 sudo 암호
키 접근으로 앱은 서버에 연결할 수 있지만, /var/log 읽기, Apache 구성 편집, 방화벽 다시 로드 같은 유용한 작업의 상당수는 서버의 root 권한이 필요합니다. FrontierStack은 이를 호스트별 sudo 암호로 처리하며, 이 암호는 macOS 키체인에 저장됩니다(일반 파일에는 절대 저장되지 않음). 서버를 연결할 때 자동으로 저장되며, 나중에 호스트 패널이나 원격 도구의 대상 섹션(Sudo 암호 필드)에서 설정하거나 변경할 수 있습니다.
root 전용 명령이 실행되면 헬퍼는 SSH 세션을 통해 저장된 암호로 sudo의 자격 증명 캐시를 미리 채운 다음 명령을 실행합니다. 저장된 암호가 없으면 root 작업은 암호 없는 sudo -n으로 대체되며, 그것이 설정되어 있지 않으면 단순히 “sudo 필요”라고 보고합니다. 비밀 값은 이름으로 참조되므로 여러 개를 보관할 수 있습니다. 예를 들어 .env 보관함에 서버마다 다른 MySQL 암호를 둘 수 있습니다.
sudo -S에 전달되며, AI 모델에 표시되거나 로그에 기록되지 않습니다. 필드를 비우면 폐기됩니다. 다른 호스트에 영향을 주지 않고 특정 호스트 하나만 다시 등록하거나 키를 다시 설정할 수 있습니다.8.4플릿 실행: 모든 노드에서 명령 하나 실행
플릿 및 원격 ▸ 플릿 실행은 하나의 작업을 연결된 모든 서버 또는 선택한 일부 서버에 동시에 실행하고, 호스트별 결과를 실시간으로 보여 줍니다. 대상을 선택하고(호스트를 켜고 끄며, 연결 가능 여부 점으로 어느 호스트가 작동 중인지 확인), 작업을 고른 다음 N대 서버에서 실행을 누르십시오. 모든 작업이 SSH를 통해 동시에 실행되고, 각 호스트의 결과가 아래에 표시되며 펼치면 전체 출력을 볼 수 있습니다.
작업은 OS를 인식합니다. 패키지 업데이트는 호스트에 따라 apt, dnf, pacman, zypper, apk 또는 brew로 매핑되고, 서비스 재시작은 systemd를 먼저 시도한 다음 Homebrew를 시도합니다. OS별 명령을 직접 작성할 필요가 없습니다.
| 작업 | 플릿 전체에서 수행하는 일 |
|---|---|
| 모든 패키지 업데이트 / 업그레이드 | 호스트 패키지 관리자의 update + upgrade를 실행합니다. 일괄 실행 전에 확인을 거칩니다. |
| 패키지 설치 | 지정한 패키지(예: htop)를 선택한 모든 호스트에 설치합니다. |
| 서비스 재시작 | 지정한 유닛(예: nginx)을 systemd 또는 brew로 재시작합니다. |
| 재부팅 필요 여부 확인 | 업데이트 후 재부팅을 기다리는 호스트를 보고합니다. |
| 디스크 사용량(df) | 플릿 전체에서 df를 한 번 실행하여 가득 차 가는 디스크를 찾아냅니다. |
| 가동 시간 및 부하 | 호스트별 가동 시간과 평균 부하를 표시합니다. |
| 저장소 git pull | 각 호스트의 지정한 경로에서 저장소를 pull합니다. 간단한 배포 방법입니다. |
| 사용자 지정 명령 | 선택한 모든 호스트에서 셸 명령을 그대로 실행합니다. 일괄 실행하기 전에 다시 확인하십시오. |
플릿 실행은 구성 편차를 찾아내는 가장 빠른 방법입니다. 디스크 사용량이나 가동 시간 및 부하를 실행하여 호스트를 한눈에 비교하거나, 원격 도구(다음 절)의 파일 체크섬 및 상태 검사 도구를 사용하여 플릿 전체에서 달라진 구성을 찾으십시오.
8.5이 Mac 또는 서버에서 컨테이너 만들기
FrontierStack에서 컨테이너를 나열하는 곳에는 모두 Create Container… 버튼이 있으며, 어느 곳에서 누르든 같은 시트가 열립니다. 이 Mac의 Docker 패널, 호스트 선택기에서 연결된 서버를 고른 같은 패널, 그리고 서버 활동 윈도우의 Docker 탭이 그렇습니다. 만든 컨테이너는 시작한 곳의 대상에서 실행됩니다 — 로컬에서는 docker 바이너리를 통해, 서버에서는 이미 갖고 있는 SSH 연결을 통해 실행됩니다.
프리셋에서 시작하거나 빈 상태에서 시작하십시오. 프리셋에는 일반 이미지 — nginx, PostgreSQL, MySQL, Redis, 일회용 Ubuntu 셸 — 와 함께, n8n, Flowise, Langflow, Vaultwarden, Checkmk처럼 앱이 단일 컨테이너로 실행할 수 있는 모든 자체 호스팅 서비스가 포함됩니다. 하나를 선택하면 이미지, 포트, 볼륨, 환경 변수가 채워지며 모두 변경할 수 있습니다. docker-compose 스택이 필요한 서비스는 대신 이 Mac의 해당 서비스 패널에서 설치하며, 시트에 그 이름이 표시되므로 빠진 것처럼 보이지 않습니다.
| 필드 | 역할 |
|---|---|
| Image | 이미지 참조입니다. 대상에 이미 있는 이미지를 메뉴에서 고를 수 있습니다. |
| Name | 선택 사항이며, 대상에서 이미 사용 중인 이름과 겹치는지 확인합니다. |
| Published ports | 각 포트에는 127.0.0.1에 바인딩하는 This machine only 스위치가 있어, 명시하지 않는 한 포트가 네트워크에 노출되지 않습니다. |
| Volumes | 일반 이름은 Docker가 관리하는 볼륨이고, /로 시작하는 경로는 대상의 폴더입니다. |
| Environment | 어떤 변수든 비밀 값으로 표시할 수 있으며, 그러면 암호처럼 입력되고 미리 보기에서 숨겨집니다. |
| Advanced | 재시작 정책, 네트워크, 명령 재정의, 추가 Docker 인수, 백그라운드 실행 여부입니다. |
실제로 실행하기 전에 시트는 비밀 값을 점으로 가린 정확한 docker run 명령줄을 보여 주며, 이를 복사할 수 있습니다. 만들기를 실행하면 먼저 이미지를 가져온 다음(이 동작을 끄지 않은 경우) 실행하고, 출력을 시트에 실시간으로 표시합니다.
docker 그룹에 속해 있지 않으면 명령이 암호 없는 sudo docker로 대체됩니다 — 새로 설치한 Linux 서버에서 첫 시도가 권한 오류를 보고하는 일반적인 이유가 이것입니다.8.18.2모니터로서의 Containers 보드
Containers 패널은 단순한 목록이 아닙니다. 이 Mac의 모든 런타임을 하나의 판정으로 모은 상태 점이 있어, 사이드바를 한 번 보는 것만으로 주의가 필요한 것이 있는지 알 수 있습니다. 녹색은 설치된 모든 것이 정상이라는 뜻이고, 주황색은 무언가가 중지되었거나 아직 확인 중이라는 뜻이며, 빨간색은 설치된 엔진이 다운되었거나 컨테이너가 비정상, 재시작 반복 중이거나 오류로 종료되었다는 뜻입니다. 설치한 적이 없는 런타임은 문제로 보지 않습니다 — 따라서 녹색은 “모든 것이 실행 중”이 아니라 “존재하는 모든 것이 정상”이라는 의미입니다.
섹션은 서비스 목록과 같은 순서를 따릅니다. Apple Containers, Docker, Kubernetes, OrbStack, 컨테이너 머신, 그리고 Vagrant 순입니다. Kubernetes는 여기서 읽기 전용으로 표시되며, Kubernetes Clusters에서 고정한 클러스터를 보여 줍니다. 고정과 클러스터별 작업은 그 패널에서 하며, 그 패널은 이 Mac에 있는 것만이 아니라 어디서 실행되든 클러스터 전체를 감시합니다. 런타임이 설치되어 있지 않으면 버튼은 다운로드 페이지로 보내는 대신 해당 런타임을 설치하는 패널을 엽니다.
헤더의 고정 버튼은 작은 플로팅 팔레트를 엽니다. 전체 상태 점과 실행 중인 개수를 보여 주는 상태 막대 하나 아래에 실행 중인 항목의 짧은 목록이 있고, 설정되었지만 유휴 상태인 항목은 Waiting 아래에 묶입니다. 일부러 아주 작게 만들었습니다 — 다른 작업을 하는 동안 화면 구석에 놓아두기 위한 것입니다. 행을 클릭하면 메인 윈도우가 해당 항목으로 이동합니다.
8.18.3Docker Swarm
Swarm은 별도로 설치하는 제품이 아니라 Docker 엔진에 내장되어 있습니다. 그래서 FrontierStack은 Swarm에 별도의 패널을 두지 않고 Docker 패널에서 모니터링합니다. 보고 있는 엔진이 스웜에 속해 있으면 Docker Swarm 섹션이 나타나, 클러스터의 노드(준비 또는 다운, 드레인 중인지 여부, 어느 노드가 매니저인지)와 서비스 및 그 복제본 수를 나열합니다 — 서비스가 요청한 모든 태스크를 갖추면 3/3, 그렇지 않으면 1/3처럼 표시됩니다. 서버 활동 윈도우의 Docker 탭에도 같은 내용이 Swarm 세그먼트로 있어, 어느 연결된 서버에서든 클러스터를 확인할 수 있습니다.
상태는 docker info에서 가져옵니다. 패널이 엔진 상태 확인을 위해 이미 호출하는 명령이므로, 스웜에 속하지 않은 머신은 확인에 추가 비용이 들지 않습니다. Swarm의 규칙 하나가 표시되는 내용을 좌우합니다. 클러스터를 나열할 수 있는 것은 매니저뿐입니다. 워커에 요청하면 데몬이 거부하므로, 워커에서는 FrontierStack이 실패처럼 보이는 빈 표 대신 그 사실을 분명히 알려 줍니다.
8.18.4미리 구성된 스택
어떤 것은 컨테이너 하나가 아니라, 따로 떼어 놓으면 쓸모없는 여러 컨테이너로 이루어집니다. Containers 패널과 서버 활동 윈도우의 Docker 탭에 있는 Install Stack…은 그룹 전체를 한 번에 설정합니다. 앱에는 네 가지가 포함되어 있습니다. *arr 미디어 스택(다른 앱이 읽는 인덱서 목록을 보관하는 Prowlarr, 시리즈용 Sonarr, 영화용 Radarr, 음악용 Lidarr, 도서용 Readarr, 자막용 Bazarr, 그리고 다운로드 클라이언트), Monitoring(Prometheus, Grafana, node-exporter), Media server(Jellyfin, 요청 관리를 위한 Jellyseerr 선택 가능), 그리고 서버, 머신 러닝, Redis, PostgreSQL의 네 컨테이너가 실제로 필요한 자체 호스팅 사진 라이브러리 Immich입니다.
포함할 구성원, 설정 폴더와 미디어 폴더의 위치, 컨테이너가 파일을 기록할 때 사용할 사용자와 그룹, 그리고 이미 수신 대기 중인 것과 겹치지 않도록 스택 전체를 옮기는 포트 오프셋을 선택합니다. 공개 포트는 따로 지정하지 않는 한 127.0.0.1에 바인딩됩니다. 그런 다음 FrontierStack은 프로젝트 폴더에 docker-compose.yml을 작성하고 docker compose up -d를 실행합니다. 스택을 스택답게 만드는 것이 Compose입니다. 구성원들은 네트워크를 공유하고 서로를 이름으로 부르므로, Sonarr의 인덱서 설정을 그냥 http://prowlarr:9696으로 지정할 수 있습니다.
docker compose up -d를 다시 실행하는 것이 일반적인 방법입니다 — FrontierStack은 아무것도 숨기지 않았습니다.container CLI에는 compose에 해당하는 기능이 없고, 사용자 지정 네트워크에서 아직 다른 컨테이너를 이름만으로 확인하지 못하므로, 스택에 필요한 방식으로 구성원들이 서로를 찾을 수 없습니다.8.18.5Apple 컨테이너와 권장 GUI
Apple 실리콘에서는 macOS가 Apple의 자체 container 명령으로 Linux 컨테이너를 기본 실행할 수 있으며, 각 컨테이너는 하나의 큰 Linux VM을 공유하는 대신 자체 경량 가상 머신을 갖습니다. Containers 패널에는 이를 위한 Apple Containers 섹션이 있습니다. 실행 중인 항목을 나열하고, 컨테이너 시스템을 시작 및 중지하고, 이미지를 가져오고, 새 컨테이너를 만들며, 구성은 위의 Docker 섹션과 같습니다. Apple의 도구는 명령줄 프로그램이며, FrontierStack은 GitHub 릴리스에서 이를 설치합니다.
Apple 컨테이너를 일상적으로 다룰 때는 Davit을 권장합니다. 같은 container 명령에 제대로 된 그래픽 프런트엔드를 제공하는 독립 macOS 앱으로, 하위 명령을 기억하지 않고도 컨테이너와 이미지를 살펴보고, 시작 및 중지하고, 로그를 따라볼 수 있습니다. Apple Containers 섹션에서 Homebrew cask로 설치한 뒤 바로 열 수 있습니다. Davit에는 Apple 실리콘과 macOS 15 이상이 필요합니다.
container CLI를 구동하므로 두 앱은 실행 중인 항목에 대해 항상 같은 내용을 보여 줍니다 — 하지만 어느 쪽이든 통신할 대상이 있으려면 Apple의 container가 설치되어 있어야 합니다. Davit만 설치해서는 충분하지 않습니다.
8.6Remote Tools — 노드별 진단
Fleet & Remote ▸ Remote Tools는 실제 플릿 디버깅 작업에서 추려 낸 SSH 기반 진단 도구 모음입니다. 먼저 대상을 선택하십시오 — 고정된 서버, 또는 저장된 서버가 아닌 임시 주소를 위한 Other (IP / host)…(이 경우에도 sudo 암호가 키체인에 보존됩니다) — 그다음 도구와 매개변수를 선택합니다. 읽기 전용 검사는 root 권한이 필요 없고, 보호된 로그나 설정을 읽는 검사는 헬퍼를 통해 저장된 sudo 암호를 사용하며, 일부는 mutating(변경 작업)으로 표시됩니다.
| 도구 | 용도 |
|---|---|
| Ping · Traceroute · Whois | 기본 도달성, 경로, 등록 정보 조회를 선택한 노드에서 실행합니다. |
| Net Info · Netstat | 인터페이스와 주소, 라우팅 테이블, 인터페이스/프로토콜 통계, 활성 소켓. |
| Port Scan · Port Check · Web Check | 범위 스캔, 단일 포트 테스트, 또는 HTTP/HTTPS 엔드포인트를 가져와 상태를 보고합니다. |
| TLS Inspect · TLS Expiry | 인증서를 검사하고, 선택한 여러 노드의 만료일을 한 번에 확인합니다. |
| System Resources · Listening Ports | 노드의 부하, 메모리, 디스크, 그리고 수신 대기 중인 항목(선택적으로 sudo 사용). |
| Tail Log · Config Test | 임의의 로그 경로를 tail하고, 웹 서버 설정을 검증합니다. |
| File Diff · Healthcheck | 여러 노드 간 파일 내용을 비교하고(드리프트), 각 노드에서 루프백으로 가상 호스트의 경로에 요청을 보냅니다. |
| rsync Deploy | 로컬 폴더를 원격 경로로 푸시합니다 — 드라이런 미리 보기와 선택적 --delete 포함. |
| Security · SSH · Exposure · Auth · User audits | 임의의 노드나 임시 IP에 대한 읽기 전용 감사(10장 참조). |
| Flush DNS · Restart Backend | 리졸버 캐시를 비우고, macOS Server 웹 백엔드를 재시작합니다(변경 작업 — 사이트가 잠시 끊깁니다). |
일부 도구는 선택한 여러 노드에서 한 번에 동작합니다 — File Diff, Healthcheck, TLS Expiry, Serving Path Diagnosis(어느 노드가 살아 있는지, 각 노드가 어떤 공인 IP에 바인딩하는지, 프로세스별 CPU 포화 상태와 중지된 서비스를 고정된 모든 Cloudflare 영역의 오리진 IP와 대조)는 설계상 플릿 전체를 대상으로 합니다 — 모든 웹 노드가 유효한 인증서로 같은 콘텐츠를 제공하는지 확인하는 방법이 바로 이것입니다. 패널 하단에서는 /etc/hosts(헬퍼를 통한 root 권한)와 SSH 사용자의 ~/.ssh/known_hosts를 SSH로 안전하게 편집할 수도 있으며, 각각 먼저 .fsbak으로 백업됩니다.
8.7멈춘 서버 복구 — 그리고 SSH 없이 안전하게 전원 재설정하기
서버는 서비스는 계속 실행되는 상태에서 SSH에만 응답하지 않을 수 있습니다 — 다운된 것이 아니라 과부하 상태입니다. FrontierStack은 이를 표시합니다. SSH에는 연결할 수 없지만 서비스 포트(예: 3306의 MySQL)가 여전히 응답하면, 서버의 점은 빨간색이 아닌 주황색이 되고 패널에 "SSH가 멈췄지만 서버는 여전히 서비스 중입니다"라고 표시되며, 응답 중인 항목이 데이터베이스의 버전 배너와 함께 나열됩니다. 머신은 살아 있고 관리 채널만 멈춘 것이므로, 죽었다고 단정하거나 무작정 전원을 끊지 마십시오.
먼저 일반 Reboot를 시도하십시오. Reboot 후에는 FrontierStack이 유예 시간을 기다린 다음 폴링하는 동안 점이 깜박이며, 호스트가 돌아오는 즉시 새로 고침됩니다 — Refresh를 계속 누를 필요가 없습니다.
SSH 없이 전원 재설정을 안전하게 만드십시오. 데이터베이스가 여전히 응답하면 패널에 빨간 테두리의 EMERGENCY 상자, Prepare databases for a safe power reset이 표시됩니다. 각 단계는 데이터베이스 상태에 저장된 자격 증명을 사용해 데이터베이스 자체 연결(SSH 아님)로 위에서 아래로 실행됩니다. Stop accepting writes(읽기는 계속 가능, 되돌릴 수 있음), Quiesce & flush to disk, 그리고 Clean-shutdown입니다. 정상 종료 후에는 메모리에 손상될 수 있는 미기록 데이터가 남아 있지 않으므로 강제 전원 재투입이 안전합니다. 지원 범위는 엔진마다 다릅니다 — MySQL, Redis, MongoDB는 각 프로토콜로 정상 중지할 수 있고, PostgreSQL은 SQL로 정지 및 플러시할 수 있지만 중지할 수는 없으므로 플러시한 뒤 전원을 재투입합니다. 정상 종료 버튼은 빨간색이며 먼저 확인을 요청합니다.
전원을 재투입한 다음 되살리십시오. 하드웨어 전원 제어(SwitchBot 플러그, 스마트 멀티탭/PDU, KVM)는 각각 확인 단계에서 Shut Down Databases First를 제공하므로, 전원을 끊기 전에 데이터베이스를 플러시하고 중지할 수 있습니다. 그리고 종료로 부하가 해소되어 SSH가 복구되면 Start 버튼으로 SSH를 통해 데이터베이스를 다시 시작합니다 — 따라서 이상적인 순서는 대개 폭주한 데이터베이스를 정상 종료하고, 서버가 회복되게 둔 다음, Start로 다시 시작하는 것이며, 전원 재투입은 전혀 필요 없습니다.
8.8Host Monitor(원격 에이전트)
SSH 진단은 요청할 때만 실행됩니다. 지속적인 가시성이 필요하면 Host Monitor를 설치하십시오 — 서버에 상주하며 자체 상태를 보고하는 작은 읽기 전용 Go 헬퍼(fsagent)로, 주기마다 SSH를 사용하지 않습니다. 연결된 호스트의 패널에서 설치를 선택하거나 Link a Server에서 체크 상자를 선택하십시오. 앱은 기존 키를 통해 호스트의 OS와 아키텍처에 맞는 바이너리를 푸시하고, 플랫폼 서비스(systemd, launchd 또는 BSD rc.d)를 설정하고, TLS 인증서를 고정합니다. AI 도구 install_monitor도 요청에 따라 같은 작업을 수행합니다.
LAN과 Tailscale을 동시에. 모니터는 이 Mac이 설치에 사용한 주소, 그리고 서버 자체의 LAN 주소와 Tailscale 주소에서 수신 대기합니다 — 모든 인터페이스에서 수신 대기하지 않으며, 공인 주소나 컨테이너 브리지 주소에서도 수신 대기하지 않습니다. 한 주소에서 응답이 멈추면(예: 사무실을 떠나 이제 Tailscale로 서버에 접속하는 경우), FrontierStack은 같은 고정 인증서를 제시하는 다른 주소로 전환합니다. 버전 1.22 이전에 설치된 모니터는 한 주소에서만 응답합니다. Detect monitor는 모니터가 실행 중이지만 연결할 수 없을 때 이를 알려 주며, Install & Enroll로 업그레이드할 수 있습니다.
등록이 완료되면 모니터는 실시간 지표를 스트리밍합니다. CPU, 메모리, 마운트별 디스크, 활성 네트워크 인터페이스, 감지된 서비스, 방화벽 및 fail2ban 상태를 보내며, GPU 호스트에서는 GPU별 온도와 사용률도 보내므로 채굴 장비나 ML 장비의 발열 상태가 드러납니다. list_monitors는 플릿의 헬퍼와 그 버전, 최신 지표를 보고합니다. 무엇보다 모니터는 Mac 앱이 오프라인일 때도 계속 감시하며 알림을 보낼 수 있습니다. 자체 채널로 직접 알리고, 앱이 돌아오면 버퍼에 쌓인 내용을 재전송합니다. 로그 윈도우도 모니터를 우선 사용합니다 — 모니터는 서버에서 root로 실행되므로 sudo 암호 없이도 권한이 필요한 로그를 읽습니다.
등록된 호스트의 패널에는 Behavior & History 차트도 있습니다. CPU, 메모리, 디스크, 온도를 5분 단위로 최대 30일간 기록하며, 학습된 기준선과 비교해 비정상적인 동작을 표시합니다. 온도는 도 단위의 별도 눈금을 사용하므로 백분율 기반 리소스 사용량 옆에서도 읽기 쉽습니다. 세로선은 같은 타임라인에 사건을 표시합니다. 빨간 실선은 서버 재부팅(보고된 가동 시간에서 산출)이고, 주황 점선은 워치독 문제 — 서비스 강제 재시작, 데이터베이스 손상 경고, 재부팅 에스컬레이션 — 입니다. OS 충돌 리포터가 CPU를 사용하기 시작하면(프로세스가 반복해서 충돌하는 경우) 주황색 Crashes 곡선이 차트에 추가되므로, "어젯밤 MySQL이 두 번 강제 재시작되었고 무언가가 충돌을 반복하고 있었다"는 사실을 한눈에 알 수 있습니다.

모니터는 기본적으로 읽기 전용입니다. Host Monitor 패널에서 Allow actions를 켜면, 승인 절차를 거치는 monitor_action 도구로 실행되는 작고 고정된 제어 동작 집합이 열립니다 — 임의의 셸 명령은 절대 허용되지 않습니다. 허용 목록에 있는 서비스의 재시작/다시 로드/시작/중지, DNS 캐시 비우기, 방화벽 또는 fail2ban 다시 로드, 재부팅이 가능합니다. 각 작업은 서버에 기록됩니다. 지원 대상은 Linux(amd64/arm64/arm — 모든 Raspberry Pi 포함), macOS(OS X 10.11 El Capitan까지의 레거시 Intel 빌드 포함), FreeBSD(pfSense/OPNsense/TrueNAS), Windows입니다.
모니터를 장기간 건강하게 유지하는 일은 자동으로 처리됩니다. Rotate monitor credential은 베어러 자격 증명을 그 자리에서 교체합니다. 새 비밀 값은 Mac에서 생성되어 승인된 FS1 서명 키를 통해 전송되고, 화면에 표시되거나 AI에 전달되는 일 없이 서버에서 활성화됩니다. Allow self-update를 켜 두면 새 빌드 푸시는 구조적으로 안전합니다 — 후보 바이너리의 릴리스 서명을 검증하고, root 권한을 받기 전에 호환성 자체 테스트를 통과해야 하며, 이전 바이너리는 롤백용으로 보관됩니다. 새 바이너리가 상태 확인에 응답하지 않으면 FrontierStack이 자동으로 이전 바이너리를 복원합니다. 풀 방식 업데이트는 영구 토큰 대신 짧은 수명의 일회용 승인으로 바이너리를 가져옵니다. 모니터가 FS1 서명 요청을 검증하고 있으면 패널에 FS1 signed 배지가 표시됩니다.
8.9Cloud Servers, Server Clone 및 원격 Apache
컴퓨팅 패널과 함께 있는 AWS ▸ DynamoDB는 선택한 리전의 테이블을 상태, 항목 수, 크기, 파티션/정렬 키와 함께 나열합니다. 실제로 비용이 발생하는 두 가지에 초점을 맞춥니다. 용량 모드 캡슐은 사용 여부와 관계없이 읽기 및 쓰기 단위에 대해 계속 요금이 청구되는 프로비저닝 테이블과 요청당 요금이 청구되는 온디맨드 테이블을 구분합니다. 그리고 no PITR 플래그는 특정 시점 복구가 꺼진 테이블을 표시합니다. 특정 시점 복구는 모든 새 테이블에서 기본적으로 꺼져 있으며, 잘못된 쓰기 후 되돌릴 수 있는 유일한 방법입니다. 특정 시점 복구는 각 행의 메뉴에서 켜거나 끌 수 있습니다. DynamoDB에는 일괄 describe 호출이 없으므로 각 테이블을 개별적으로 조회하며, 목록은 리전당 40개로 제한됩니다.
Fleet & Remote ▸ Cloud Servers는 API 토큰이 설정된 모든 클라우드 제공업체 — DigitalOcean, Vultr, Linode, Hetzner, Sakura, Contabo — 와 AWS EC2, Lightsail, RDS의 인벤토리를 하나로 모읍니다. 읽기 전용 집계이며(전원 제어는 각 제공업체의 패널에 남아 있습니다), IP가 있는 실행 중인 인스턴스마다 수신 대기 중인 항목을 찾는 Services 버튼과, SSH로 인스턴스를 연결하고 모니터를 한 번에 설치하는 + Helper 버튼이 있습니다 — 시트에서 올바른 사용자 이름과 키만 지정하십시오.
Server Clone은 플릿 서버를 이 Mac과 같은 구성으로 세우는 안내형 마법사입니다. 감지된 Homebrew 스택을 설치하고, 설정과 사이트 파일을 원래 경로로 복사하고, 도메인 설정을 푸시하고 웹 서버를 다시 로드하며, MySQL 데이터베이스를 복제할 수도 있습니다(로컬 mysqldump를 SSH를 통해 대상의 mysql로 파이프). 모든 단계는 키 기반 SSH로 실행되고 다시 실행해도 안전하며, 기존 데이터는 삭제되지 않습니다.
하나의 사이트를 공개할 준비가 되면, 도메인의 컨텍스트 메뉴에서 Promote to Production 푸시를 사용하십시오. 가상 호스트 설정을 로컬과 같은 경로로 보내고, 선택적으로 문서 루트와 데이터베이스를 복사하고, Cloudflare를 통해 DNS를 대상으로 지정하며, certbot으로 실제 Let's Encrypt 인증서를 발급할 수 있습니다 — 파일, 데이터베이스, 가상 호스트, DNS, HTTPS를 한 번의 푸시로 처리합니다.
원격 서버의 Apache를 직접 관리할 수도 있습니다. 원격 호스트가 하나라도 있으면 Apache 패널에 호스트 선택기(This Mac / 각 연결된 서버)가 추가됩니다. 서버를 선택하면 FrontierStack이 SSH로 해당 서버의 Apache — 버전, 설정 구조, 실제 로그 경로를 포함한 모든 활성 가상 호스트 — 를 찾아내며, 가상 호스트, 모듈, MIME 유형, 포트, WebDAV를 편집할 수 있습니다. 각 변경 사항은 적용 전에 검증(httpd -t)되고 정상적으로 다시 로드되며, 설정이 유효하지 않으면 롤백됩니다. 레거시 macOS Server.app의 Apache 트리도 인식합니다. 사이트 목록의 Push to Server…는 로컬 사이트의 가상 호스트를 문서 루트를 바꿔 넣어 모니터가 연결된 서버에 생성합니다. 이 기능들이 대응하는 로컬 Apache 및 사이트 워크플로는 7장에서 다룹니다.
8.10호스트 화면 공유
각 서버의 패널은 프로브가 감지한 원격 접속 방법을 제공합니다 — Mac은 Apple 화면 공유 / VNC, Windows는 RDP, 그리고 클라이언트가 있으면 AnyDesk, TeamViewer, RustDesk, NoMachine입니다. 이 Mac에 Apple Remote Desktop이 설치되어 있으면 vnc:// 핸들러를 등록해 클릭을 가로채므로, 패널은 항상 Apple의 내장 화면 공유 클라이언트를 여는 별도의 Screen Sharing (macOS) 작업을 제공합니다. 호스트에 둘 이상의 주소로 연결할 수 있으면 — 예를 들어 LAN IP와 VPN 또는 Tailscale 주소 — 이 작업은 연결할 네트워크를 고르는 메뉴가 됩니다. 각 선택 항목은 숫자 IP로 직접 연결하므로, 호스트 이름이 확인되지 않을 때(mDNS, 분할 DNS, VPN 문제)에도 동작합니다. 패널이 확인되지 않을 수 있는 이름을 사용하게 되는 경우에는 VNC와 RDP에도 그에 맞는 “— by IP” 버튼이 나타납니다.
8.11KVM-over-IP: 콘솔과 전원, 원격 관리
SSH와 화면 공유는 머신이 켜져 있고 네트워크에 연결되어 있어야 합니다. 그렇지 않을 때 — 커널 패닉, BIOS/펌웨어 화면, 끝내 올라오지 않은 네트워크 스택 — 에는 대역 외 접근이 필요합니다. 운영 체제와 무관하게 실제 HDMI 출력을 캡처하고 USB 키보드/마우스 입력을 주입하는 KVM-over-IP 장치입니다. Remote KVM 패널에는 보유한 장치를 몇 대든 등록할 수 있습니다 — PiKVM, JetKVM, TinyPilot, NanoKVM, GL.iNet Comet, 또는 일반 장치 — 각각 고정할 수 있고, 클릭 한 번으로 BIOS까지 내려가는 웹 콘솔을 열 수 있습니다.
전원 제어가 있는 장치는 마지막 고리를 채웁니다. ATX 보드를 단 PiKVM, 네트워크 PDU, 또는 KVM이자 스마트 전원 플러그인 GL.iNet의 Comet Pro (GL-RM10)는 주전원을 전환할 수 있어, 완전히 멈춘 서버의 전원을 강제로 재투입할 수 있습니다. 이런 장치를 서버의 Power 섹션(SwitchBot, UPS, PDU 명령 옆)에서 전원 소스로 연결하면 On/Off/Cycle을 사용할 수 있습니다. AI 관리자도 이를 제어할 수 있습니다. list_kvms, kvm_power, server_power가 있으며, 마지막 도구는 호스트에 연결된 플러그/PDU/KVM을 통해 reboot_host에 응답하지 않는 멈춘 서버를 재시작합니다.
8.12콘솔 연결: 시리얼 및 콘솔 서버 접근
네트워크 설정을 잃은 라우터나 스위치는 SSH, 웹 UI, KVM으로 접근할 수 없지만 콘솔 포트는 여전히 동작합니다. Console Connections 패널(Fleet & Remote)은 FrontierStack에 내장된 시리얼 터미널입니다. USB-시리얼 어댑터(FTDI, Silicon Labs CP210x, WCH CH340/CH9102, Prolific)를 꽂거나 기기 자체의 USB 콘솔 포트(Cisco의 USB mini-B 또는 USB-C, Netgate 방화벽)를 연결하면, 몇 초 안에 Attached serial ports 아래에 어댑터의 칩 이름과 함께 나타납니다. Quick Connect는 아무것도 저장하지 않고 선택한 속도로 엽니다. Save as…는 제조사의 콘솔 설정으로 연결을 저장합니다. Cisco, Juniper, Arista, Aruba CX, ProCurve, Ruckus, Fortinet, Palo Alto, SonicWall, WatchGuard, pfSense/OPNsense, MikroTik, Ubiquiti, TP-Link Omada, Dell OS10, Allied Telesis, APC, Raspberry Pi, Linux, 그리고 OpenWrt 및 GL.iNet 라우터의 보드 레벨 UART를 지원합니다.
모든 설정은 편집할 수 있습니다. 속도(460800과 921600을 포함해 어댑터가 지원하는 모든 속도), 데이터 비트, 패리티, 정지 비트, 흐름 제어와 함께, Return 키가 보내는 값(CR, CR LF 또는 LF), ^H로 보내는 Backspace, 로컬 에코, 그리고 화면에 계단식으로 출력되는 기기를 위한 LF → CR LF 변환이 있습니다. 어댑터를 다른 USB 포트로 옮겨 macOS가 이름을 바꾸더라도 FrontierStack은 USB 일련 번호로 다시 찾아냅니다. 콘솔 서버(Lantronix, Opengear, Digi, Avocent ACS, Cisco 터미널 서버의 reverse telnet, 또는 Raspberry Pi의 ser2net)는 telnet, raw TCP 또는 SSH 연결로 추가합니다.
각 세션은 별도의 윈도우에서 열립니다. Break는 라인 브레이크를 보냅니다 — Cisco ROMMON, Juniper 및 대부분의 부트 로더가 암호 복구 중에 기다리는 신호입니다. DTR과 RTS를 켜고 끌 수 있습니다. 붙여넣기 지연은 붙여 넣은 설정을 한 줄씩 보내므로 9600보드 콘솔에서도 문자가 누락되지 않습니다. 세션 로그는 기기가 보낸 모든 내용을 ~/Library/Logs/FrontierStack/Console에 저장하며, Export로 화면을 저장하거나 이메일로 보낼 수 있습니다. 연결을 고정된 기기에 연결하면 해당 기기 페이지의 Console 섹션에 나타나며, 그곳에서 추가한 콘솔은 해당 플랫폼의 일반적인 설정으로 시작합니다. AI 관리자는 콘솔과 연결된 어댑터를 나열할 수 있지만(kvm, 작업 consoles), 세션을 열거나 세션에 입력하지는 않습니다.
8.13부트 미디어: 네트워크로 운영 체제 설치하기
예전에는 서버를 다시 설치하려면 USB 메모리를 들고 랙까지 가야 했습니다. Boot Media 패널(Fleet & Remote)이 그 USB 메모리를 대신합니다. 설치 이미지를 이 Mac의 라이브러리 한곳에 보관해 두면, 선택한 이미지를 FrontierStack이 대상 머신에 가상 CD로 제공합니다 — 서버의 관리 컨트롤러, PiKVM, Proxmox VE 가상 머신의 CD 드라이브 또는 네트워크 부트 메뉴를 통해서입니다. Mac은 Apple이 더 이상 그런 방식의 부팅을 허용하지 않으므로 다르게 처리합니다. 아래의 Mac을 참조하십시오.
8.18.6이미지 라이브러리
Add ISO or Disk Image…는 로컬 파일을 등록합니다. 파일은 원래 위치에 그대로 있으며 아무것도 복사되지 않습니다. Add Image URL…은 이미 웹 서버나 파일 서버(http, https, nfs 또는 cifs)에 있는 이미지를 등록합니다 — 원격 URL은 대상에 그대로 전달되므로 이 Mac이 데이터를 중계할 필요가 없습니다. Compute SHA-256은 파일의 체크섬을 기록하므로, 그 이미지로 무엇이든 설치하기 전에 제공업체가 공개한 체크섬과 비교할 수 있습니다. 각 항목은 이름 변경, Finder에서 보기, 라이브러리에서 제거가 가능하며, Copy Image URL로 제공 주소를 복사할 수 있습니다. 저장된 위치에 파일이 더 이상 없는 항목은 누락됨으로 표시됩니다.
8.18.7내장 미디어 서버
관리 컨트롤러는 설치가 진행되는 동안 ISO를 HTTP로 조금씩 읽어 들여 마운트합니다. 패널의 Media server는 바로 그 용도로 라이브러리의 로컬 이미지를 제공합니다. 가상 CD에 필요한 바이트 범위 요청과 keep-alive를 지원하며, 최근 요청 로그와 이미지별 전송 바이트 수를 보여 주므로 컨트롤러가 실제로 읽고 있는지 확인할 수 있습니다. 대상에 로컬 이미지가 필요하면 자동으로 시작되며, 직접 Start Serving을 눌러 시작할 수도 있습니다.
| 설정 | 기능 |
|---|---|
| Stop serving after | 1, 3, 6, 12 또는 24시간, 또는 Until I stop it. 읽기가 있을 때마다 타이머가 다시 시작되므로 느린 설치가 도중에 끊기지 않습니다. FrontierStack을 종료해도 제공이 중지됩니다. |
| Address in image URLs | Automatic은 이 Mac이 각 대상에 접근할 때 쓰는 주소를 사용하므로, 별도의 관리 VLAN에 있는 컨트롤러에도 실제로 접근 가능한 주소가 전달됩니다. 고정 주소 하나를 선택할 수도 있습니다. |
| Port | 기본값은 8742입니다. |
| Open Port… | pf 또는 애플리케이션 방화벽이 켜져 있어 컨트롤러를 차단할 수 있을 때 표시됩니다. 관리자 확인 후 포트를 엽니다. |
403을 반환합니다. 각 이미지는 추측할 수 없는 128비트 토큰 URL로, 제공이 켜져 있는 동안에만 공개됩니다. 설치용 ISO는 보통 비밀이 아니지만, 사용자 지정 이미지에는 키나 응답 파일이 들어 있을 수 있으므로 공유 네트워크에서는 Until I stop it을 선택하지 말고 타이머를 켜 두십시오.8.18.8서버 관리 컨트롤러(Redfish)
대부분의 랙 서버에는 이미지를 가상 CD로 제공할 수 있는 베이스보드 관리 컨트롤러가 탑재되어 있습니다. FrontierStack은 표준 DMTF Redfish API로 이를 제어합니다. 대상은 Dell iDRAC 8 및 9, HPE iLO 4, 5 및 6, Lenovo XClarity Controller(XCC), Supermicro X12 이상, 그리고 표준 Redfish 가상 미디어를 구현한 그 밖의 모든 컨트롤러입니다.
- Add Controller를 누르고 주소, 포트, 사용자 이름, 암호를 입력하십시오. 암호는 키체인에 보관되며 컨트롤러에만 전송됩니다. 필요하면 컨트롤러를 플릿 서버에 연결하여 둘을 함께 표시할 수 있습니다. Virtual Media 및 Control 권한이 있는 계정을 사용하십시오.
- Read Controller는 컨트롤러가 관리하는 대상을 검색합니다. 각 시스템의 모델과 전원 상태, 그리고 각 가상 CD 슬롯과 현재 마운트된 내용이 표시됩니다.
- System, Virtual CD, Image를 선택하십시오. Boot from it once를 켜 두면 CD로 한 번만 부팅하고, 그 후에는 서버가 원래 부팅 순서로 돌아갑니다.
- Then에서 Don't restart, Graceful restart 또는 Force restart를 선택하고 Mount(또는 먼저 확인을 요청하는 Mount and Restart)를 누르십시오.
- 설치가 끝나면 가상 CD를 Eject하십시오.
| 컨트롤러 | 가상 미디어 참고 사항 |
|---|---|
| Dell iDRAC 8 / 9 | Enterprise 또는 Datacenter 라이선스가 필요합니다. |
| HPE iLO 4 / 5 / 6 | iLO Advanced가 필요합니다. |
| Lenovo XClarity (XCC) | XCC Advanced 또는 Enterprise가 필요합니다. |
| Supermicro X12 이상 | 표준 Redfish 가상 미디어. X10 및 X11 보드는 자체 콘솔에서만 가상 미디어를 제공하므로, 복사한 URL을 사용해 그곳에서 이미지를 마운트하십시오. |
| 기타 Redfish 컨트롤러 | 표준 VirtualMedia 삽입/꺼내기 동작을 구현한 모든 컨트롤러. |
8.18.9IPMI 컨트롤러와 1회 네트워크 부팅
오래된 보드에는 Redfish가 없거나, Redfish는 있어도 가상 미디어가 없는 컨트롤러가 탑재되어 있습니다: Supermicro X10/X11, ASRock Rack, Gigabyte, Intel, iDRAC 7. 이러한 컨트롤러는 Protocol을 IPMI over LAN으로 설정하십시오. 그러면 FrontierStack이 ipmitool로 제어합니다(Install ipmitool은 앱 내 콘솔에서 Homebrew로 설치합니다). 암호는 키체인에 보관되며 명령줄이 아닌 환경 변수로 ipmitool에 전달됩니다. Read Controller는 전원 상태를 표시합니다. IPMI에는 표준 가상 미디어가 없으므로, IPMI로 OS를 설치하는 방법은 네트워크입니다. Network Boot Once는 다음 부팅을 PXE로 설정하고(chassis bootdev pxe, Legacy BIOS boot를 선택하지 않으면 UEFI 모드), 필요하면 하드 리셋을 보내거나 서버가 꺼져 있으면 전원을 켭니다. IPMI에는 정상 재시작이 없습니다.
Redfish 컨트롤러에도 Network Boot Once가 있습니다. 1회 Pxe 부팅 재정의 후 선택한 방식으로 재시작합니다. 아래의 내장 PXE 서버와 조합하면 가상 미디어 없이도 원격 서버를 이 Mac의 ISO 메뉴로 부팅할 수 있습니다.
8.18.10PiKVM 가상 미디어
PiKVM은 연결된 머신에 USB 드라이브를 에뮬레이트할 수 있습니다. Boot Media는 PiKVM의 문서화된 /api/msd 인터페이스를 사용하며, ATX 전원 제어와 같은 PiKVM API 계정을 씁니다(KVM-over-IP 참조). 먼저 이미지를 PiKVM 자체 저장소에 복사하십시오. 로컬 파일은 진행률 막대와 함께 업로드되며, 원격 URL은 PiKVM이 직접 다운로드합니다. 복사를 시작하기 전에 여유 공간을 확인합니다. 그런 다음 저장된 이미지를 As CD-ROM(ISO의 경우) 또는 As Flash(raw .img의 경우)로 연결하고, 머신의 부팅 메뉴에서 선택하거나 Power Cycle…(확인 후 수행하는 하드 ATX 전원 재투입)을 사용한 뒤, 콘솔을 열어 설치 과정을 지켜보십시오. 작업 후에는 Disconnect Drive와 삭제로 정리합니다.
8.18.11Proxmox VE 가상 머신
Proxmox VE의 가상 머신(아래 Proxmox VE에서 설명한 대로 연결)의 경우 Node, Virtual machine, ISO storage를 선택한 다음 Source를 선택하십시오. Image from the library는 Proxmox가 직접 이미지를 ISO 저장소로 다운로드하게 하므로(download-url 호출), 로컬 이미지는 이 Mac의 미디어 서버에서 가져옵니다. ISO already on Proxmox는 이미 그곳에 있는 ISO를 사용합니다. FrontierStack은 ISO를 VM의 CD 드라이브에 연결하고 부팅 순서에서 CD를 맨 앞에 둘 수 있습니다 — 원래 순서는 기억되었다가 꺼낼 때 복원됩니다. 마지막으로 VM을 그대로 둘지, 시작할지, 리셋할지(확인을 요청하는 하드 리셋) 선택하십시오.
API 토큰에는 다운로드를 위한 Datastore.AllocateTemplate과 Sys.AccessNetwork, 그리고 VM에 대한 VM.Config.CDROM, VM.Config.Options, VM.PowerMgmt 권한이 필요합니다. 패널은 컨트롤 옆에 이 목록을 표시합니다.
8.18.12네트워크 부팅(PXE / iPXE)
컨트롤러도 KVM도 없는 머신도 네트워크로 부팅할 수 있습니다. Serve an iPXE boot menu from this Mac을 켜면 미디어 서버가 iPXE 메뉴도 함께 공개합니다. 이 메뉴는 라이브러리의 모든 ISO를 HTTP로 SAN 부팅하고, 설치 프로그램 카탈로그가 있는 netboot.xyz로 체인하며, iPXE 셸과 boot from local disk를 제공합니다. Download iPXE Boot Loaders는 boot.ipxe.org에서 공식 로더(ipxe.efi, undionly.kpxe, arm64용 ipxe.efi)를 가져오므로 UEFI HTTP Boot 클라이언트가 이 Mac에서 직접 iPXE를 로드할 수 있습니다.
남은 일은 부팅하는 머신을 어디로 보낼지 DHCP 서버에 알려 주는 것입니다. 사용 중인 DHCP server를 선택하고 Copy Settings를 누르면 바로 쓸 수 있는 설정 조각이 복사됩니다.
| DHCP 서버 | 사용하는 경우 |
|---|---|
| dnsmasq | dnsmasq가 DHCP 서버인 경우. 내장 TFTP 서버도 있습니다. |
| dnsmasq (proxy-DHCP) | 라우터가 계속 주소를 할당하고 dnsmasq는 PXE 클라이언트에만 응답하는 경우. |
| ISC dhcpd · Kea | 직접 편집하는 Linux DHCP 서버인 경우. |
| OPNsense / pfSense | 방화벽이 DHCP 서버인 경우. 설정 조각에 해당 네트워크 부팅 필드 이름이 표시됩니다. |
| UEFI HTTP Boot (no TFTP) | 펌웨어가 TFTP 없이 이 Mac에서 HTTP로 iPXE를 다운로드하는 경우. |
8.18.13내장 PXE 서버
네트워크에 dnsmasq가 없고 DHCP 서버도 변경하지 않으려면, 네트워크 부팅 설정에서 Answer PXE clients from this Mac을 켜십시오. 그러면 제공이 켜져 있는 동안 Mac이 두 가지 작은 서비스를 실행합니다.
- ProxyDHCP(UDP 67 및 4011)는 네트워크 부팅을 요청하는 머신(PXE 펌웨어, UEFI HTTP Boot, iPXE)에만, 그리고 부트 파일만 응답합니다. 주소는 절대 할당하지 않으므로 라우터의 DHCP는 이전과 똑같이 계속 작동합니다.
- TFTP(UDP 69, 읽기 전용)는 세 가지 iPXE 로더만 제공하고 그 밖에는 아무것도 제공하지 않습니다. BIOS 머신은
undionly.kpxe, UEFI x64 머신은ipxe.efi, ARM64 머신은 ARM64용ipxe.efi를 받습니다. UEFI HTTP Boot 클라이언트는 대신 HTTP로 로더를 받습니다. iPXE가 실행되면 다시 요청하여 메뉴를 받습니다.
응답할 Network를 선택하고(서비스는 그 인터페이스 하나에만 바인딩됩니다), 필요하면 응답할 머신의 MAC 주소만 나열하십시오. 각 요청과 전송은 스위치 아래에 표시됩니다. 로더는 처음에 자동으로 다운로드됩니다. pf 또는 애플리케이션 방화벽이 켜져 있으면, 서버 섹션의 방화벽 버튼이 이제 UDP 67, 69, 4011도 함께 엽니다.
8.18.14기타 KVM-over-IP 장치
JetKVM, GL.iNet Comet, NanoKVM, TinyPilot, Raritan, ATEN, Avocent, Lantronix, Adder 장치에는 가상 미디어용의 안정적인 공개 API가 없으므로, FrontierStack은 이를 제어하는 척하지 않습니다. 대신 Copy URL이 제공을 시작하고 KVM이 접근할 수 있는 이미지 주소를 복사하며, 패널은 해당 제공업체의 자체 콘솔에서 어디에 붙여넣어야 하는지 보여 줍니다.
8.18.15Mac
Mac은 설치 프로그램 ISO로 부팅할 수 없고 네트워크 부팅도 사라졌습니다. Apple silicon에는 네트워크 부팅이 없으며, Intel NetBoot는 macOS Server 5.7에서 서버 기능이 없어졌고 전체 보안 설정의 T2 Mac에서는 거부됩니다. 그래서 Mac의 경우 Boot Media는 Apple이 지원하는 방식으로 macOS를 설치합니다 — SSH로 Mac 자체에서 Apple의 전체 설치 프로그램을 다운로드해 실행하는 방식입니다. 플릿의 모든 원격 Mac에 카드가 표시됩니다(먼저 Remote Servers에서 Mac을 추가하십시오).
- Refresh는 macOS 버전, Apple silicon·Intel·T2 탑재 Intel 여부, 모델, 여유 공간, 이미 있는 설치 프로그램, 콘텐츠 캐싱 사용 여부를 읽어 옵니다.
- List는 사용 가능한 전체 설치 프로그램을 Apple에 조회하고(
softwareupdate --list-full-installers), Download on 해당 Mac은 그중 하나를 백그라운드에서 진행률과 함께 가져옵니다(--fetch-full-installer). - Install…은
startosinstall을 두 가지 모드 중 하나로 실행합니다: Upgrade / reinstall (keeps data) 또는 Erase and install. Apple silicon에서는 볼륨 소유자만 설치를 시작할 수 있으므로 관리자 사용자와 그 암호를 입력합니다. 암호는 표준 입력으로startosinstall에 전달되며 저장되지 않습니다. - Turn On Content Caching(이 Mac 또는 플릿의 아무 Mac에서)은 Apple의 업데이트와 설치 프로그램 사본을 LAN에 보관하므로, 다른 모든 Mac이 Apple 대신 그곳에서 다운로드합니다.
- KVM이 연결된 Intel Mac의 경우 Internet Recovery…는 확인 후 Apple 자체의 네트워크 복구로 재시작합니다. 복구 모드에는 화면 공유나 SSH가 없으므로 이를 조작하려면 KVM이 필요합니다.
8.18.16AI 관리자에서 사용하기
AI 관리자와 MCP 클라이언트는 기존 kvm 도구를 통해 Boot Media에 접근합니다. media_list(읽기 전용)는 라이브러리, 미디어 서버 상태, 각 컨트롤러의 전원과 마운트된 이미지, 각 PiKVM의 드라이브를 보고합니다. media_attach는 대상 — 이름으로 지정한 컨트롤러나 PiKVM, 또는 proxmox:<vmid> — 에 이미지를 마운트하며, boot=true를 지정하면 그 이미지로 재시작도 합니다. media_eject는 이미지를 제거합니다. 연결, 꺼내기, 재시작에는 Allow changes가 필요하며 항상 확인을 요청합니다(13장).
8.14Proxmox VE: 실시간 클러스터 상태와 게스트 전원
Proxmox VE 호스트는 서버로 가득 찬 서버이며, 노드에 SSH로 접속하는 것만으로는 게스트에 대해 알 수 있는 것이 많지 않습니다. 그래서 Proxmox VE 서비스 페이지(Containers 카테고리, 6장 참조)는 Proxmox 자체 API와 통신합니다. Add Connection을 누르고 클러스터 또는 단일 노드의 주소와 API 토큰을 입력하십시오 — 토큰 ID는 user@realm!name 형식이며, 그 비밀 값은 키체인에 보관되고 Authorization 헤더로만 전송됩니다. Proxmox의 자체 서명 인증서는 사설 주소에서만 허용됩니다. 상태 확인에는 PVEAuditor 역할의 토큰으로 충분하며, 전원 제어와 부트 미디어에는 위에 나열한 추가 권한이 필요합니다.
연결되면 페이지에 클러스터 이름, Proxmox 버전, 쿼럼이 표시되고, 노드별 CPU, 메모리, 루트 디스크, 가동 시간, 모든 VM과 컨테이너의 상태, 저장소별 사용량 막대가 표시됩니다. 각 게스트는 시작, 종료, 재부팅할 수 있으며, 확인 후 강제 중지나 리셋도 할 수 있습니다. Show in Server Activity와 Boot an ISO…는 Proxmox가 나타나는 다른 두 곳으로 이동합니다.
서버 활동 윈도우(11장)에서는 모든 노드가 All Servers, Cluster, Everything 레이아웃의 타일로 표시되며, CPU, 메모리, 디스크, 가동 시간 스파크라인과 “5/7 VMs · 2/3 containers running” 같은 줄이 함께 나타납니다. 노드 세부 정보에는 KPI, CPU 및 메모리 차트, 같은 전원 컨트롤이 있는 게스트 목록, 저장소와 클러스터 정보, 그리고 Open Web UI, Refresh, Boot an ISO…가 표시됩니다.
알림은 백그라운드에서 각 연결을 약 5분마다 새로 고치며 감시합니다: API 접근 가능 여부, 각 노드의 온라인 상태, 클러스터 쿼럼, 사용률이 90%를 넘은 저장소. AI 관리자는 kvm 도구의 proxmox_status 동작(읽기 전용)으로 같은 내용을 볼 수 있으며, proxmox_power로 게스트의 전원을 변경할 수 있습니다. 이때는 항상 확인을 요청합니다.
PVEAuditor로 충분합니다. 나중에 여기서 설치 프로그램을 부팅하기로 하면 VM 및 데이터스토어 권한을 추가하십시오.8.15오래된 Mac, Raspberry Pi & Windows 호스트
플릿의 의미 중 하나는 오래되었거나 특이한 하드웨어를 계속 쓸모 있게 유지하는 것입니다. 아직 macOS Server를 실행하는 구형 Xserve나 Mac mini도 다른 호스트와 똑같이 연결됩니다. Remote Apache 검색은 Server.app 고유의 Apache 트리와 내부 포트를 이해하므로 해당 웹 사이트가 표시되고 편집할 수 있으며, 모니터의 레거시 Intel 빌드는 OS X 10.11 El Capitan까지 거슬러 올라가 실행됩니다. 선반 가득한 Raspberry Pi도 일반 Linux 머신으로 연결됩니다 — 모니터의 arm 빌드가 Zero를 포함한 모든 Pi를 지원합니다 — 따라서 다른 모든 것과 나란히 CPU, 디스크, 서비스를 지켜볼 수 있습니다.
Windows 호스트는 Microsoft의 OpenSSH 서버를 통해 참여합니다. SSH 진단을 위해 Linux 머신처럼 연결하고, 모니터를 네이티브 Windows 서비스로 설치하십시오(Windows 서비스는 머신 환경 변수를 안정적으로 상속하지 않으므로 설정은 실행 파일 옆의 파일에서 읽습니다). Windows용 모니터는 자동으로 푸시되지 않으며, Host Monitor 패널에서 제공하는 PowerShell 설치 프로그램으로 수동 설치합니다.
진단을 넘어서는 대화형 제어를 위해 카탈로그에는 원격 접근 도구 — RustDesk, MeshCentral, Apache Guacamole, Windows 원격 데스크톱, WinRM — 도 들어 있지만, 이들은 직접 운영하는 서비스이지 SSH 플릿 자체는 아닙니다. 플릿의 강점은 모든 것을 하나의 윈도우에서 일관되고, 스크립트로 자동화할 수 있으며, 부담이 적게 관리한다는 점입니다 — 그리고 13장의 run_script로 어느 노드든 이름으로 지정할 수 있으므로, AI가 원격 서버를 두 단계씩 진단하고 수정할 수 있습니다: 읽기 전용 테스트, 그다음 최소한의 수정, 그리고 다시 실행하여 확인.
8.16OpenCore Legacy Patcher Mac: 업데이트해도 안전할까?
오래된 Intel Mac 중 일부는 OpenCore Legacy Patcher(OCLP) 덕분에 Apple이 해당 기종용으로 출시한 적이 없는 최신 macOS를 실행하고 있을 것입니다. 이 경우 재부팅의 의미가 달라집니다. 일반 서버 Mac은 전원 → macOS → FrontierStack 에이전트 순으로 부팅하지만, OCLP Mac은 전원 → 펌웨어 → EFI/OpenCore → macOS → OCLP 루트 패치 → FrontierStack 순으로 부팅합니다. 연결 고리가 하나 늘어날 때마다 무인 부팅이 멈출 수 있는 지점이 생깁니다. macOS 업데이트는 봉인된 시스템 볼륨을 교체하면서 루트 패치도 함께 없애 버리고(Wi-Fi, 그래픽 가속, Bluetooth가 다시 적용될 때까지 사라짐), 메이저 업그레이드에는 먼저 그에 맞는 OCLP 릴리스가 필요하며, 펌웨어의 시동 항목이 OpenCore를 가리키지 않게 되면 누군가 Option 키를 누른 채 “EFI Boot”를 선택할 때까지 머신이 부팅 선택 화면에 멈춰 있습니다 — 그 Mac이 다른 건물에 있다면 훨씬 더 번거로운 일입니다.
OpenCore Patcher 패널(Fleet & Remote)은 Update를 누르기 전에 이를 알 수 있도록 존재합니다. This Mac 또는 연결된 Mac을 선택하면 읽기 전용 검사를 실행합니다 — OCLP 앱 버전, OpenCore의 NVRAM 스탬프(Mac이 실제로 OpenCore를 거쳐 부팅했을 때만 존재), 루트 패치 영수증, bless --getBoot, SIP, 소프트웨어 업데이트 설정, OpenCore가 위장한 모델 뒤의 실제 모델 — 그리고 이를 Remote boot safety 목록으로 정리합니다: 펌웨어 부트 항목 → OpenCore, 기본 부팅 볼륨 설정, 무인 재부팅에 대한 FileVault의 영향, 루트 패치의 존재 및 최신 여부, OCLP 릴리스의 설치된 macOS 지원 여부(최신 GitHub 릴리스와 대조), 대기 중인 macOS 업데이트, macOS 자동 설치 꺼짐, EFI/OpenCore 백업. 그 위에 하나의 판정이 이유와 함께 표시됩니다: Safe to update macOS, Update with caution 또는 Not safe.
이 패널은 의도적으로 OCLP를 관리하지 않습니다 — OpenCore 빌드와 루트 패치 적용은 OCLP 자체 앱에서 수행합니다. 대신 고정된, 되돌릴 수 있는 세 가지 관리 동작을 제공합니다: macOS 자동 설치 끄기(시스템 설정이 OCLP Mac을 무인으로 업데이트하지 않도록), EFI 백업(해당 Mac에 보관되는 EFI/OC 폴더의 아카이브), OpenCore 다시 bless(OCLP의 “Install to disk”가 실행하는 것과 같은 bless --setBoot, OpenCore.efi가 실제로 있지 않으면 거부). 플릿 상태 검사도 모든 고정된 Mac에서 OCLP를 감지합니다. 호스트 행과 서버 활동 윈도우에 표시되며, 루트 패치가 없거나 부트 항목이 OpenCore를 우회하면 알림이 보안 항목을 발생시킵니다.
diagnose ["oclp"]는 전체 보고서를 반환하며, 패널의 판정이 안전으로 나올 때까지 AI의 스크립트는 macOS 업데이트 설치 — 또는 부트 항목이 OpenCore를 우회하는 Mac의 재부팅 — 를 거부합니다. 따라서 “이 Mac을 업데이트한 뒤 왜 Wi-Fi가 사라졌지?”라고 물으면, 공식 지원 Mac에 내릴 진단이 아니라 OCLP = true, 실제 모델, 최근 업데이트, 루트 패치 = 없음이라는 사실에서 출발해 추론합니다.8.17마이그레이션 마법사: 스택을 새 기기로 옮기기
오래된 서버를 퇴역시킨다고 해서 “모든 것을 손으로 다시 설치”해야 하는 경우는 드뭅니다. FrontierStack에는 레거시 머신에서 스택을 들어내 선택한 대상 — 이 Mac, 다른 Mac 또는 Linux 머신 — 에 다시 구축하는 안내형 마이그레이션 마법사가 포함되어 있습니다. 원본은 읽기만 하며, 모든 쓰기는 대상에 이루어집니다.
Migrate Setups 패널은 MAMP, XAMPP 또는 Apple Server.app 웹 스택을 처리합니다. 원본을 자동으로 감지한 다음, 옮길 항목을 정확히 선택할 수 있습니다: Homebrew 도구, 웹 파일, MySQL 데이터베이스, 사이트(가상 호스트), MIME 재정의, Apache 모듈, PHP 설정, WordPress wp-config.php 수정, Git 저장소. Set up on 선택기로 대상을 고릅니다. 전체 앱 내 마이그레이션을 하려면 This Mac으로 두고, 연결된 호스트를 선택하면 SSH를 통해 새 기기에 스택을 설치하면서 웹 파일(rsync)과 데이터베이스(SSH를 통한 덤프)를 복사합니다 — Homebrew 대신 apt/dnf를 사용하는 Linux 토글도 있습니다.
패널의 Servers 섹션에는 Import from a Repo…도 있습니다. SSH 설정, Ansible 인벤토리 또는 .env 파일이 들어 있는 폴더나 git 저장소를 지정하면, 검토를 거친 후 서버를 플릿에 추가하고 자격 증명을 Script Secrets 또는 해당 서비스에 추가합니다. FrontierStack AI는 값을 한 번도 보지 않고 다른 구성도 읽을 수 있습니다(13장).
Apple Server Migration 패널은 Server.app 머신 전체를 위한 원클릭 마법사입니다. 원본(이 Mac 또는 원격 Mac)을 지정하면 serveradmin으로 모든 서비스 — 웹 사이트, 메일, 캘린더 및 연락처, 메시지(XMPP), VPN, DNS, DHCP, NetInstall, Open Directory, 파일 공유, Time Machine, 프로파일 관리자 등 — 의 목록을 작성하며, 또한 git 서버, 데이터베이스, Docker, 독립 실행형 Nginx 등 실행 중인 그 밖의 항목도 찾아냅니다. 각 서비스에는 상태 배지와 최신 대체 서비스가 표시되며, 합리적인 대체 서비스가 둘 이상인 경우(캘린더 → Radicale / SOGo / Baïkal, VPN → WireGuard / strongSwan, DHCP → dnsmasq / Kea) 어느 것을 쓸지 선택합니다. 대상 머신과 OS를 선택하면 마법사가 대체 서비스를 설치하고 정확한 이전 체크리스트를 출력합니다. 전용 가져오기 기능이 있는 서비스 — 웹 사이트(가상 호스트 전체 + 파일 복사)와 Open Directory(사용자 및 그룹) — 는 각자의 패널로 넘겨지며, 감지된 git 서버는 Git Server 마이그레이션으로 넘겨집니다.
serviceproxy로 포트 80/443을 받는데, 이전 릴리스 — 특히 High Sierra — 에서는 이 프로세스가 멈춥니다: 연결은 계속 받아들이지만 응답은 하지 않습니다. Ping은 성공하고, 포트 스캔에서는 열려 있으며, SSH도 여전히 작동하므로, 모든 사이트가 응답 없이 멈춰 있는데도 접근 가능한 것처럼 보입니다. 바로 그 때문에 DNS나 네트워크 장애로 오진되기 일쑤이며, 프로세스가 죽지 않으므로 단순한 “서비스가 실행 중인가?” 검사로도 잡아낼 수 없습니다. 원본 머신에 http://127.0.0.1/을 대상으로 서비스 serviceproxy를 지정한 Service Guardian 감시를 설정하십시오(그 뒤의 백엔드를 감시하려면 server-httpd를 사용). 그러면 이전을 계획하는 동안 멈춤이 감지되어 launchctl kickstart로 복구됩니다. 사이트를 일반 Apache로 마이그레이션하면 멈추기 쉬운 프록시가 서비스 경로에서 영구히 제거됩니다.serveradmin을 root로 실행하므로, 먼저 해당 호스트의 설정에 sudo 암호를 저장하십시오(8장, “관리 키와 저장된 sudo 암호”). 일부 Apple 서비스는 설정이 자동으로 이전되며(DNS 영역, Apache 가상 호스트, Postfix main.cf), 다른 서비스는 대체 서비스를 설치하고 절차를 안내합니다 — 마법사가 각각에 Automatic, Assisted 또는 Manual 레이블을 붙이므로 예상치 못한 일이 없습니다.
8.18Git Server: Gitea & 저장소 마이그레이션
Git Server 패널은 자체 호스팅 Gitea(자동 HTTPS를 위해 Caddy 뒤에 배치)를 어떤 대상 — 이 Mac, 연결된 서버, NAS, Docker 호스트 또는 Linux 머신 — 에든 구축하며, 플랫폼을 감지하여 알맞은 방법으로 설치합니다. 실행되면 액세스 토큰으로 연결하여 실시간 모니터를 사용할 수 있습니다: 버전, 저장소 수, 그리고 미러가 원본보다 뒤처지면 알리는 백업 지연 알림.
같은 패널은 다른 Git 서버를 Gitea로 마이그레이션하거나 미러링합니다. 디스크의 bare 저장소 — 레거시 macOS 앱 Simple Git Server, Xcode Server, Gitolite, 일반 git-daemon 또는 아무 폴더 — 를 지정하거나, git://, https:// 또는 ssh:// 클론 기본 주소로 실행 중인 원격 서버를 지정하십시오(저장소 이름은 SSH로 열거하거나 붙여넣기). Scan은 저장소를 나열하고, Migrate는 각 저장소를 전체 기록, 모든 브랜치와 태그와 함께 미러 클론한 뒤 Gitea로 푸시하며, 대상 저장소는 API로 생성합니다. 복사는 이 Mac에서 실행됩니다.

제9장
네트워킹과 경계
LAN의 모든 기기를 확인하고, 라우터의 실시간 상태를 읽고, 외부에서 서비스에 접근하십시오 — 포트를 하나도 열지 않고도, 또는 열어서도 가능합니다.
서비스를 실행하는 Mac은 네트워크 안에 있으며, 실제 문제의 대부분은 그 네트워크에서 시작됩니다. WAN 링크가 끊겼다 붙었다 하는 라우터, 엉뚱한 서브넷에 있는 잊혀진 기기, 몇 달 전에 열어 두고 닫지 않은 포트 같은 것들입니다. FrontierStack은 네트워크와 그 경계—LAN과 인터넷 사이의 경계—를 일급 객체로 다룹니다. 라우터를 직접 읽고, LAN을 스캔하여 인벤토리를 만들고, 데이터 흐름 맵을 그리며, 서비스를 외부에 공개하는 몇 가지 체계적인 방법을 제공합니다.
이 장에서는 서버를 둘러싼 네트워크를 다룹니다. SSH로 서버 자체를 연결하는 방법은 8장을, 호스트 방화벽, fail2ban 및 보안 감사는 10장을, Cloudflare DNS와 TLS는 7장을 참조하십시오.
9.1읽고 제어할 수 있는 라우터 및 방화벽
FrontierStack은 네트워크 장비 고유의 관리 API가 있으면 그것을 통해, 없으면 SSH를 통해 통신합니다. 가장 긴밀하게 통합된 두 가지는 OPNsense(전체 REST API)와 Cloudflare(7장에서 다룸)이며, 그 밖의 다양한 라우터와 방화벽도 실시간 상태를 보고합니다. 라우터 및 네트워크 패널에서 주소, 제조사, API 키를 입력하여 기기를 추가하면, AI 관리자의 router_info 도구가 버전과 모델, 가동 시간, CPU와 메모리, WAN 링크와 게이트웨이(작동 또는 중단), 인터페이스 및 클라이언트 수를 읽을 수 있으며, FrontierStack이 매핑하지 않는 필드는 원시 API JSON으로도 확인할 수 있습니다. 이 도구는 읽기 전용입니다. 기기 자체의 API를 조회할 뿐, SSH는 절대 사용하지 않습니다.
| 기기 | FrontierStack의 접근 방식 |
|---|---|
| OPNsense | 전체 REST API — 실시간 상태, 방화벽 규칙, 경계용 포트 포워드(rdr) |
| pfSense | API 패키지를 통한 REST |
| MikroTik RouterOS | REST API(RouterOS v7 이상) |
| Ubiquiti UniFi / EdgeOS | 컨트롤러 / 게이트웨이 API 키 |
| OpenWrt | LuCI / ubus API |
| DD-WRT | 웹 관리 화면 / SSH |
| ASUSWRT | 라우터 웹 API / SSH |
| FRITZ!Box | TR-064 / 웹 관리 화면 |
| TP-Link Omada | 컨트롤러 API |
router_info는 여전히 고정되어 있다는 사실, 위치, 연결 가능 여부를 보고하며, 버전, 게이트웨이, WAN, 인터페이스를 실시간으로 읽으려면 라우터 및 네트워크에서 API 키를 추가하라고 알려 줍니다.OPNsense와 pfSense에서는 API 키를 입력하면 지속적인 방화벽 모니터(고정된 기기 패널의 토글)를 사용할 수 있습니다. 알림 점검이 실행될 때마다 방화벽 자체에 게이트웨이 상태, 인터페이스 캐리어, 서비스 작동 여부를 조회합니다. 따라서 멀티 WAN 라우터가 조용히 페일오버하는 동안 WAN 회선이 끊긴 경우(서버의 웹 탐색은 정상이지만 사이트로 들어오는 트래픽은 끊긴 상태)에도, 원인을 알 수 없는 빨간 사이트 점들이 잔뜩 뜨는 대신 해당 게이트웨이와 캐리어를 잃은 포트를 명시한 알림이 발생합니다. 라우터에는 아무것도 설치하지 않습니다. OPNsense의 REST API는 기본 내장되어 있으며, pfSense는 REST API v2 패키지만 있으면 됩니다. 같은 패널에서 OPNsense 라우터를 tailnet에 참여시킬 수도 있습니다. Mac에서 Tailscale에 로그인하고(Google 계정 사용 가능), 사전 인증 키를 발급하여 기기 패널의 Tailscale 섹션에 붙여넣으십시오. 그러면 FrontierStack이 필요 시 os-tailscale 플러그인을 설치하고, 키와 로그인 서버(Headscale도 지원)를 저장한 뒤 API를 통해 서비스를 재시작합니다. 라우터에서 브라우저로 로그인할 필요가 없습니다. 이후 tailnet 주소는 대체 경로로 기억됩니다. LAN 주소가 응답하지 않게 되면(외부에 있을 때, VPN 경로가 끊겼을 때, LAN 구간이 죽었을 때) 상태 확인, 모니터, 인증서 갱신이 자동으로 Tailscale을 통해 다시 시도하고 그 사실을 표시하며, 모니터는 라우팅 장애가 라우터 다운으로 오인되지 않도록 별도의 “LAN 주소” 알림을 발생시킵니다.
공격 및 장애 신호. 게이트웨이를 감시하는 같은 점검이 라우터 자체의 문제도 감시하며, 이상이 있는 라우터는 사이드바에서 경고 삼각형과 함께 주황색으로 바뀝니다. 마우스를 올리면 이유가 표시됩니다. Intrusion Detection 플러그인이 활성화된 OPNsense에서는 FrontierStack이 같은 API로 최근 Suricata 알림을 읽어 건수와 가장 많이 발생한 시그니처를 보여 줍니다(방화벽 UI를 열지 않아도 공격 시도를 파악할 수 있습니다. pfSense의 REST API는 IDS를 일관되게 노출하지 않으므로 현재는 OPNsense 전용입니다). OPNsense, pfSense, OpenWrt 등 모니터링되는 모든 라우터에서 각 점검은 예기치 않은 재부팅(가동 시간이 급격히 줄어듦: 충돌, 전원 문제 또는 공격), 라우터 관리 화면/SSH에 대한 무차별 대입 급증(로그인 실패 반복, 라우터 자체 로그에서 가장 빈번한 출발지 IP 표시), 리소스 압박(메모리나 부하가 위험할 정도로 높음: DoS, 폭주하거나 침해된 프로세스), 사용 가능한 펌웨어 업데이트(오래된 펌웨어는 알려진 취약점을 의미함)도 감지합니다. 각 신호는 알림을 발생시킵니다. 특정 플랫폼이 보고할 수 없는 신호는 그냥 건너뛸 뿐, 결코 거짓 “이상 없음”으로 처리하지 않습니다. 가장 많은 정보를 보고하는 것은 OPNsense와 OpenWrt이며, pfSense의 API는 더 제한적입니다.
인증서 만료. 같은 점검이 방화벽의 신뢰 저장소—서비스가 사용하는 모든 CA와 인증서—를 읽어, 만료 한 달 전과 만료된 시점에 알림을 발생시킵니다. 아무도 대비하지 않는 장애입니다. OPNsense의 기본값인 397일로 발급된 OpenVPN 서버 인증서는 1년 뒤 모든 원격 사용자를 조용히 차단하며, Web GUI 자체의 HTTPS 인증서가 만료되면 관리 페이지가 브라우저 경고로 바뀝니다. 기기 패널은 이 인증서들을 만료가 가까운 순서로 색깔 점과 함께 나열하며, Renew… 버튼으로 라우터 API를 통해 인증서를 그 자리에서 재발급합니다. 개인 키, 주체, CA는 그대로이고, 유효 기간은 직접 선택하며(최대 10년), 인증서를 다시 로드하도록 OpenVPN 서버와 Web GUI를 재시작하는 옵션도 있습니다. 키와 주체가 바뀌지 않으므로 기존 VPN 클라이언트 프로필은 계속 작동하며, 다시 내보낼 필요가 없습니다. pfSense에서는 REST API의 갱신 동작이 같은 일을 하고 종속 서비스도 직접 재시작합니다. 또한 pfSense의 API는 인증 기관의 만료일을 보고하지 않으므로 FrontierStack이 CA 인증서 자체에서 그 날짜를 읽어, pfSense CA도 다른 CA와 마찬가지로 경고합니다. CA는 어느 API로도 갱신할 수 없습니다. 만료가 다가오는 CA를 일찍 알리는 이유는 바로 CA를 교체하려면 인증서를 다시 서명하고 클라이언트 프로필을 재배포해야 하기 때문입니다. OpenVPN 서비스 패널은 이 라우터 인증서들을 Mac에 있는 모든 .ovpn 프로필(OpenVPN Connect, Tunnelblick, 마지막으로 사용한 파일)에 포함된 CA 및 클라이언트 인증서 옆에 표시하므로, 클라이언트와 서버의 만료일을 나란히 볼 수 있습니다. 또한 Plan & Cost 카드에는 OpenVPN 자체는 무료이며 Access Server와 CloudConnexa의 요금이 얼마인지도 나와 있습니다.
라우터 제어 및 진단. 이제 AI 관리자는 읽기 이상의 작업을 할 수 있습니다. reboot_router는 서버를 재부팅하는 것과 같은 방식으로 어플라이언스를 재시작하며(OPNsense/pfSense는 API, OpenWrt는 SSH), “Allow changes” 설정으로 제한됩니다. 또한 라우터 자체 콘솔에서 하는 편이 정말로 더 나은 작업이라면, 어시스턴트가 주소를 추측하지 않고 기기 패널에서 확인하여 open_web_ui로 Web UI를 열어 주겠다고 제안합니다. FrontierStack 자체는 의도적으로 이러한 어플라이언스의 방화벽 규칙을 편집하지 않습니다. OPNsense/pfSense/OpenWrt는 자체 구성 시스템으로 규칙을 관리하므로, 패널과 어시스턴트는 대신 기본 방화벽 페이지로 안내합니다(라우터를 우클릭 ▸ Open firewall rules…로 해당 페이지에 바로 연결). 패널의 두 가지 편의 기능이 이를 보완합니다. Diagnostics 버튼은 API 없이 연결 가능성을 확인하므로(ping, 일반적인 관리 포트 80/443/8443/53, 역방향 DNS, 게이트웨이) API 키가 없어도 라우터를 진단할 수 있습니다. 또한 라우터나 방화벽에서는 Discover Services가 포트 스캔 대신 Web UI를 열도록 제안합니다(자신의 경계 기기를 스캔하는 것은 원하는 일이 아닌 경우가 대부분입니다). OPNsense나 pfSense 장비로의 SSH가 거부된다면, SSH가 비활성화되어 있거나, 더 흔하게는 특정 인터페이스(보통 WAN이 아닌 LAN)에서만 허용되어 있는 것입니다. VPN 등을 통해 LAN 쪽으로 접속하면 대개 되지만, 외부에서는 일반적으로 차단됩니다. 웹 UI에서 SSH와 수신 인터페이스를 활성화하십시오(OPNsense의 경우 System ▸ Settings ▸ Administration ▸ Secure Shell). SSH 버튼 자체는 관리용 셸이 전혀 없는 가정용 게이트웨이(NTT, 일부 TP-Link/FRITZ!Box)에서만 숨겨지며, 이 경우 Web UI가 유일한 접근 수단입니다.
9.2방화벽 주요 지표, 그래프 및 전원
모니터링이 켜진 고정된 OPNsense, pfSense 또는 OpenWrt 방화벽은 API를 통해 자체 주요 지표를 보고하며, 이제 해당 패널에서 이를 그래프로 표시합니다. CPU와 메모리는 0–100 차트 하나에, 그리고 부하 평균과 온도가 표시됩니다. 샘플은 이미 실행 중이던 모니터링 폴링에서 수집되므로 그래프 때문에 API 호출이 추가로 발생하지 않으며, 알림 점검이 진행됨에 따라 채워져 세션의 최근 약 6시간을 보여 줍니다.
플랫폼마다 제공하는 정보가 다르며, 패널은 실제 값만 표시합니다. pfSense는 순간 CPU 사용률을 보고하고, OPNsense는 대신 부하 평균을 보고합니다. 온도는 하드웨어가 FreeBSD에서 읽을 수 있는 센서를 제공하는지에 따라 달라집니다. 가상화 환경이나 ARM 설치에는 센서가 없는 경우가 많으므로, 값이 없다는 것은 고장이 아니라 “센서 없음”을 의미합니다.
모든 고정된 기기에는 서버와 마찬가지로 스마트 플러그를 연결할 수 있습니다. 켜기, 끄기, 전원 재투입, 그리고 플러그가 전력을 측정하는 경우 실시간 와트 수치를 사용할 수 있습니다. 이는 특히 방화벽에 중요합니다. 방화벽은 멈췄을 때 SSH로 접근할 수 없는 유일한 장비이기 때문입니다. 접근에 사용할 네트워크가 바로 그 방화벽이 제공하는 네트워크이기 때문입니다. OPNsense와 pfSense 모두 자체 전력 소비량을 보고하지 않으므로(FreeBSD는 와트가 아닌 온도 센서만 노출함), 전력 측정 플러그가 유일한 실제 전력 수치입니다. 전원 재투입은 확인을 요청하며 방화벽을 통과하는 모든 연결이 끊긴다고 경고합니다. 먼저 API 재부팅을 시도하십시오.
9.3기기 검색: LAN 인벤토리
기기 검색을 열고 Find Monitors를 누르십시오(또는 먼저 서브넷을 선택하십시오). FrontierStack은 선택한 /24를 사용 가능한 모든 방법으로 동시에 스캔하므로, 라우터, 액세스 포인트, 스위치, NAS 장비(Synology, QNAP, ZimaCube/ZimaOS…), 프린터, 카메라 및 기타 서버가 모두 나타납니다.
- Ping / ARP — ICMP 스캔이며, ARP/MAC으로 각 호스트의 제조사를 알아냅니다. ICMP를 차단하는 호스트를 찾으려면 TCP Probe를 켜십시오.
- Bonjour(mDNS) 및 SSDP / UPnP — 광고되는 서비스와 그 표시 이름.
- SNMP 및 LLDP / CDP —
net-snmp와lldpd가 설치되어 있으면 모델, 포트, 인접 장비 정보를 추가합니다(패널의 버튼으로 설치할 수 있습니다). - Windows 서비스 포트 — ICMP를 차단하는 컴퓨터도 특징적인 포트(RDP, WinRM, SMB 등)를 조사하여 찾아내므로, Windows PC가 더 이상 스캔에서 숨지 않습니다.
스캔은 각 호스트에 접속할 수 있는 방법도 기록합니다. AnyDesk 배지는 AnyDesk가 로컬에서 실행 중이거나 기본 포트 7070에서 응답할 때 표시되며, Tailscale 배지(피어가 온라인이면 녹색)는 이 Mac의 tailscale status를 바탕으로 메시 피어를 검색된 기기와 대조하여 만들어집니다(엔드포인트, 호스트 이름, OS만 보관하며 로그인 이름은 절대 보관하지 않습니다). 직접 연결된 LAN에서는 macOS가 이미 Bonjour로 알고 있는 Mac과 기기가 더 느린 IP 스캔보다 먼저 나타나므로 목록이 빠르게 채워집니다. 기기의 세부 정보 보기에는 Open app 바로 가기가 있는 AnyDesk 및 Tailscale 행이 함께 표시됩니다.
스캔하지 않고 tailnet 기기를 고정하려면 Tailscale 서비스 패널을 여십시오. Tailnet Devices는 이 Mac의 Tailscale이 인식하는 tailnet의 모든 기기를 나열합니다(API 토큰이 필요 없으며, 이 Mac에서 Tailscale이 연결되어 있지 않으면 Tailnet 패널의 API 목록을 대신 사용합니다). 또한 직접 Tailscale 연결, tailscale ping, Tailscale API 또는 Bonjour를 통해 각 기기의 LAN(Wi-Fi/이더넷) 주소도 찾아냅니다. 이미 고정했거나 서버에 이미 있는 기기는 표시가 붙어 있으며 클릭하면 열립니다. Mac과 서버에는 Add to Servers(기기 검색이 이들을 등록하는 곳과 같은 위치)가, 그 밖의 기기에는 Pin이 표시됩니다. 이 Mac과 같은 네트워크에 있는 기기는 LAN 주소로 추가되며, 외부에 있을 때는 tailnet 주소로 계속 감시됩니다. 다른 곳에 있는 기기는 tailnet 주소로 추가됩니다. Mac, Windows PC, 서버 또는 NAS는 고정하거나 유형을 이들 중 하나로 변경하면 자동으로 서버에도 추가되며, MAC 주소, 제조사, 아이콘, 색상, 전원 및 UPS 연결, 저장된 암호, 위치, 사이드바 그룹이 함께 옮겨집니다. Identity 섹션의 Open in Servers를 누르면 해당 항목으로 이동합니다.
다른 tailnet 기기의 서브넷 경로를 통해 접속하는 LAN의 라우터는 ping에 응답하지만, 터널을 거치면 어느 라우터가 응답했는지 증명할 하드웨어 주소가 없습니다. 두 사이트 모두 192.168.1.1을 가질 수 있기 때문입니다. 그래서 사용자가 보증하기 전까지는 오프라인으로 유지됩니다. 라우터 패널에는 해당 서브넷을 라우팅하는 기기를 명시한 Tailscale Subnet Route 섹션이 표시됩니다. This router is on …'s network를 클릭하면 그 이후로는 해당 경로를 통한 응답이 온라인으로 간주됩니다. 하나의 경로는 주소당 고정된 라우터 하나만 가질 수 있습니다.
AI 관리자의 discover_devices 도구는 같은 스캔을 실행하고 유형을 확실하게 식별할 수 있는 기기를 자동으로 고정합니다. 모호한 기기는 추측하지 않고 목록으로 돌려주므로, 어시스턴트가 그것이 무엇인지 사용자에게 물어본 뒤 pin_device로 고정할 수 있습니다. 고정된(모니터링되는) 기기는 사이드바의 해당 유형 섹션에 나타납니다. 더블클릭하면 패널이 열리며, 행에서 Open Web UI, Discover Services, Reclassify 또는 Remove를 사용할 수도 있습니다. 주소를 이미 알고 있다면 Add a device by IP 필드에서 바로 조사하고 고정할 수 있으며, 전체 스캔이 필요 없습니다.
스캔을 기다리지 않고 고정하기. 이미 높은 신뢰도로 식별된 행에는 스캔이 진행 중일 때도 Pin이 표시되며, 그렇지 않은 행은 Review & Pin…으로 유형을 선택할 수 있습니다. 스캔 도중 고정한 기기는 고정 상태를 유지하며, 스캔이 끝나면(또는 Stop을 누르면) 나머지 스캔에서 알아낸 정보가 고정된 기록에 반영됩니다. 기기 하나를 자세히 살펴보려면 Stop을 누른 뒤(지금까지 찾은 행은 그대로 남습니다) 해당 기기의 Review & Pin… 또는 ⋯ 메뉴에서 Identify & Pin을 선택하십시오. FrontierStack이 그 주소만 핑거프린팅하여 결과가 확실하면 고정하고, 그렇지 않으면 핑거프린트 결과를 표시한 채 사용자가 검토하도록 남겨 둡니다.
POS 하드웨어. Square Terminal 또는 Register는 포트를 열지 않고 Bonjour로도 알리지 않으므로 Square 자체의 MAC 주소 블록으로 식별하여 POS(판매 시점 관리)로 표시합니다. Square 패널의 하드웨어 섹션에는 Square API가 보고하는 기기(상태, 배터리, Wi-Fi, IP)와 함께 표시됩니다. Square 카드 리더는 Bluetooth로 연결되므로 네트워크에 나타나지 않습니다. Star Micronics 및 Epson TM 영수증 프린터는 제공업체와 모델 이름으로 식별합니다.
9.4모든 제조사의 카메라
카메라 패널은 영상을 표시할 수 있는지와 관계없이 FrontierStack이 알고 있는 모든 카메라를 위한 하나의 상태 보드입니다. 기기 검색으로 찾은 카메라(고정된 카메라와, 찾았지만 아직 고정하지 않은 카메라), AV Feeds 스트림, SwitchBot 카메라, Smart Life 카메라, UniFi Protect 카메라를 모아서 보여 줍니다. 카메라가 수십 대일 때는 상단의 개수와 Offline 필터가 빠른 해답입니다. 오프라인 카메라가 먼저 정렬되며, 주소가 고정된 카메라와 일치하는 스트림은 두 번 표시되지 않고 해당 카메라의 타일에 표시됩니다. 고정된 카메라와 MAC 주소가 같은 Protect 카메라도 해당 카메라의 타일에 표시됩니다. 각 타일의 종 아이콘으로 오프라인 알림을 켜고 끄며, Alert on All은 확인 가능한 모든 카메라에 한 번에 적용됩니다. 알림은 알림 패널을 거치므로, 연락처 프리셋으로 해당 사이트의 기술자를 호출할 수 있습니다.
카메라는 RTSP(포트 554), 웹 포트(80) 또는 ONVIF(2020)에서 응답하면 작동 중으로 간주됩니다. Ring, Nest, Blink, Arlo 같은 클라우드 전용 카메라는 자체 앱으로만 접근할 수 있으므로 상태가 표시되지 않습니다.
어디서나 Tapo 카메라 확인(비공식). 서비스 ▸ 카메라 ▸ Tapo Cameras에서 TP-Link ID로 로그인하면 Mac이 집 밖에 있을 때도 각 Tapo 카메라의 온라인/오프라인 상태를 확인할 수 있으며, 오프라인 알림은 알림 기능을 통해 전송됩니다. TP-Link가 공식 API를 제공하지 않으므로 FrontierStack은 Tapo Android 앱과 같은 방식으로 로그인합니다. 따라서 TP-Link가 앱을 변경하면 작동하지 않을 수 있으며, 이 기능의 사용이 TP-Link 약관에 위배될 수도 있습니다. 상태만 읽습니다. 암호는 절대 저장하지 않으며, 카메라는 두 번 연속 확인에 실패한 뒤에야 오프라인으로 간주되고, TP-Link 클라우드에 연결할 수 없으면 오프라인이 아니라 Status unavailable로 표시됩니다. 고정된 Tapo 카메라는 클라우드가 온라인이라고 보고하는 동안 LAN 밖에서도 녹색 점을 유지합니다. 다른 Tapo 기기도 감시할 수 있으며, 별도로 로그인하면 Kasa 기기도 감시할 수 있습니다.
SD 카드. Tapo, Hikvision/Annke, Dahua/Amcrest/Lorex, Reolink, Axis 카메라의 경우 각 타일에 카메라 자체가 보고하는 메모리 카드 상태도 표시됩니다. SD ✓ 42% used, No SD card, Unformatted, SD card error, 또는 알 수 없을 때는 SD —(마우스를 올리면 이유 표시)입니다. FrontierStack은 클라우드가 아닌 카메라 자체의 로컬 API에만 문의하며, Mac이 카메라와 같은 네트워크에 있을 때만 확인합니다. 네트워크 밖에서는 마지막 결과가 그 시각과 함께 유지됩니다. 확인은 30분마다, 한 번에 카메라 한 대씩, 카메라당 최대 10분에 한 번 실행됩니다. Tapo 이외의 카메라는 AV Feeds 스트림의 로그인 정보나 카메라의 기기 패널에 입력한 로그인 정보를 사용합니다. Tapo 카메라에는 admin과 TP-Link 계정 암호가 필요하며, Tapo Cameras ▸ Local camera access에서 한 번 입력하면 됩니다. 이 암호는 키체인에 보관되며 TP-Link 클라우드로 절대 전송되지 않습니다. 카메라가 로그인을 거부하면, 카메라는 반복된 실패 후 계정을 잠그기 때문에 FrontierStack은 로그인 정보를 고치거나 Retry를 누를 때까지 해당 카메라에 대한 요청을 중단합니다. 연결하거나 로그인할 수 없는 카메라를 카드가 없다고 보고하는 일은 없습니다. SD 알림은 옵트인 방식입니다. 대부분의 카메라는 루프 녹화를 하므로 항상 가득 차 있기 때문에 거의 가득 참 알림은 기본적으로 꺼져 있습니다. eufy, WTW, Eseecloud 카메라에는 로컬 저장소 API가 없습니다.
Tapo 카메라 재시작. Tapo 카메라의 기기 패널에는 Restart Camera…가 있습니다. Tapo 앱의 재부팅 기능으로, SD 확인과 같은 로컬 로그인을 통해 같은 규칙에 따라 전송됩니다. 즉 카메라와 같은 네트워크에서만, 고정된 인증서를 사용하여, 로그인 거부나 잠금 이후에는 보내지 않습니다. 카메라는 약 1분 동안 녹화와 스트리밍을 중단합니다.
제조사별 요구 사항:
| 제조사 | 가능한 기능 | 설정 방법 |
|---|---|---|
| Anker eufy | 많은 모델에서 RTSP 지원. ONVIF 및 공개 API 없음 | eufy Security 앱에서: 카메라 ▸ 설정 ▸ 저장소 ▸ NAS(RTSP). 여기서 사용자 이름과 암호를 설정하고(기본값은 무작위임) 링크를 복사하십시오. 보통 rtsp://user:pass@ip:554/live0입니다. 연속 녹화를 선택하십시오. 이벤트 모드와 배터리 카메라에서는 이벤트 중에만 스트림이 존재하므로 오프라인 알림이 잘못 발생합니다. 동시 시청자는 최대 4명입니다. |
| WTW (塚本無線) | PoE/IP 제품군은 RTSP 및 ONVIF 지원. EAGLE Wi-Fi 제품군은 지원 없음 | 아래를 참조하십시오. |
| Eseecloud(EseeCloud / IP Pro 앱) | 레코더에서 웹 포트 80으로 RTSP 지원 | 레코더 자체의 네트워크 메뉴에서 RTSP 서버를 켠 다음 rtsp://user:pass@nvr-ip:80/ch0_0.264를 사용하십시오. 채널 번호는 0부터 시작하며(ch0이 카메라 1), _1은 서브 스트림입니다. 독립형 Eseecloud Wi-Fi 카메라 중 상당수는 RTSP를 전혀 지원하지 않습니다. 기본 로그인은 admin에 빈 암호입니다. |
9.17.1WTW 카메라 및 레코더
구형 IP 카메라. WTW의 2018년 IP 카메라 설명서에는 메인 스트림으로 rtsp://ip:554/live/0/main, 서브 스트림으로 /live/0/sub가 나와 있습니다. 포트 554가 기본값이며 변경할 수 있습니다. RTSP는 카메라의 웹 네트워크 설정에서 켭니다. 현재의 PoE/IP 모델과 NV4 시리즈 레코더는 사양에 RTSP와 ONVIF가 명시되어 있습니다. 위 경로로 연결되지 않으면 NVR 앱에서 ONVIF로 카메라를 추가하여 URL을 찾으십시오.
EAGLE Wi-Fi 제품군. 이 제품군은 RTSP도 ONVIF도 지원하지 않습니다. WTW 지원 사이트에서 카메라 한 대에 대해 그렇게 밝히고 있으며, 레코더 사양에도 TCP/IP, DHCP, P2P만 나와 있습니다. 이 제품들은 레코더가 웹 포트에서 응답하는지 확인하는 것이 최선입니다. 기기 검색에서 WTW Camera / NVR로 고정하고 오프라인 알림을 켜십시오.
기본 암호. NV4 레코더는 00000000을 사용하며, 공장 초기화 후에는 wtwjapan이 됩니다. 구형 카메라는 admin에 빈 암호, 또는 admin/admin을 사용합니다. 기기를 네트워크에 연결하기 전에 변경하십시오.
9.17.2스마트 홈 클라우드
Smart Life(Tuya) 기기는 Tuya의 공식 Cloud API로 읽습니다. 계정의 데이터 센터(일본 계정은 Western America 사용)에서 iot.tuya.com에 Cloud 프로젝트를 만들고, Devices ▸ Link Tuya App Account로 Smart Life 계정을 연결한 다음, 프로젝트의 Access ID와 Secret을 Smart Life 패널에 붙여넣으십시오. 그러면 모든 기기의 온라인 상태와 플러그 전력을 확인하고, 플러그와 조명을 켜고 끌 수 있으며(멀티탭은 콘센트별로 개별 제어), 어떤 기기든 오프라인이 되면 알림을 받도록 설정할 수 있습니다. TESSAN, BN-LINK, Edison Smart, OHMAX, MEAPUXIN 플러그도 Smart Life 기기입니다. 서버의 전원을 재투입하려면 전원 제어에 Smart Life / Tuya 콘센트로 추가하십시오. 무료 체험판은 월 약 26,000회의 호출을 허용하며 몇 달마다 연장해야 하므로, FrontierStack은 10분마다 확인합니다.
Minut 센서는 임대 숙소의 소음, 재실 여부, 온도, 습도를 보고합니다. Minut 패널은 센서가 오프라인이 될 때, 배터리가 부족할 때, 숙소에서 소음 문제가 진행 중일 때 알림을 보냅니다. Minut는 승인한 계정에만 API를 공개하며, 도움말 문서에서는 이를 Enterprise 플랜과 연결하고 있습니다.
SmartThings, Govee, LIFX, Sensibo, Nuki는 각각 계정의 기기를 상태 점과 함께 나열하는 자체 패널이 있습니다. 녹색은 온라인, 빨간색은 오프라인, 회색은 클라우드가 응답하지 않은 경우입니다. 기기 옆의 종 아이콘이나 Alert on all을 켜면 기기가 오프라인이 될 때 알림을 받습니다. Govee, LIFX, Sensibo, Nuki는 제공업체의 앱이나 웹사이트에서 받은 API 키 또는 토큰만 있으면 됩니다. SmartThings는 로그인이 계속 유지되도록 SmartThings CLI로 자신만의 OAuth 앱을 한 번 만드십시오. 개인 액세스 토큰도 사용할 수 있지만 24시간 후에 만료됩니다. 키가 거부되거나 로그인이 만료되면 계정 알림이 한 번 발생합니다. 클라우드에 연결할 수 없으면 해당 기기의 상태는 알 수 없음으로 남습니다. 두 경우 모두 기기가 오프라인이 된 것으로 보고되지 않습니다. Nuki 잠금장치는 임대 숙소에서 감시할 가치가 있습니다. 연결이 끊긴 잠금장치는 게스트를 위해 원격으로 열 수 없기 때문입니다.
9.5데이터 맵
데이터 맵 패널은 위치별 데이터 흐름도를 그립니다. 데이터가 어디에 있고 한 사이트의 기기와 서비스 사이를 어떻게 이동하는지를 보여 줍니다. FrontierStack은 해당 위치의 인벤토리—검색된 기기, 그 역할, 그리고 (선택적으로) 스캔한 포트—를 직렬화하여 비밀 값을 제거한 뒤, 로컬 claude CLI를 통해 구독 중인 Claude에 전달합니다(앱 내 하네스가 사용하는 종량제 API가 아님). 응답은 Mermaid 플로차트와 짧은 설명으로 돌아오며, 패널에서 오프라인으로 렌더링됩니다. 각 위치의 마지막 다이어그램이 보관되며, Obsidian 보관함에 런북으로 저장할 수 있습니다. 위치 자체에 대해서는 8장에서 설명합니다.
9.6포트 열기: UPnP 및 NAT-PMP/PCP
전통적인 방식으로 인터넷에서 서비스에 접근하려면 라우터의 포트가 Mac으로 포워딩되어야 합니다. FrontierStack은 라우터에 직접 로그인하게 하는 대신, 라우터가 광고하는 표준 프로토콜을 사용하여 라우터에 매핑을 요청할 수 있습니다.
- UPnP IGD(
miniupnpc사용) — 일반 가정용 라우터에서 흔히 쓰는 방식. - NAT-PMP / PCP(
libnatpmp사용) — Apple의 방식과 그 현대적 후속 방식. - OPNsense — API를 통해 직접 경계 규칙과 포트 포워드를 설정.
이 도구들은 처음 사용할 때 필요에 따라 설치됩니다. 임시 세션용으로 만든 매핑(Debug Share 참조)은 세션이 끝나면 자동으로 제거됩니다.
9.7동적 DNS: 바뀌는 IP 따라가기
가정과 소규모 사무실 회선은 고정 IP인 경우가 드물기 때문에, 오늘의 주소를 가리키게 한 호스트 이름은 내일이면 맞지 않게 됩니다. Dynamic DNS 패널은 호스트 이름이 현재 공인 IP를 계속 따라가도록 유지합니다. Name, Hostname(예: myhost.duckdns.org), 제공업체의 계정 정보로 항목을 추가하고, Update Now를 눌러 즉시 반영하거나 Update automatically를 켜십시오. 업데이터를 FrontierStack이 실행 중일 때만 동작시킬지, 시스템 서비스로 상시 동작시킬지 선택할 수 있으므로 앱을 닫아도 레코드를 최신 상태로 유지할 수 있습니다. Cloudflare 사용자는 더 긴밀한 방법을 쓸 수 있습니다. 공인 IP를 따라가는 Cloudflare DDNS A 레코드로, 7장과 같은 Cloudflare 연동으로 동작합니다. 그 밖의 제공업체는 업데이트 URL을 사용하는 범용 주기 업데이터로 지원됩니다.
9.8터널과 메시: 포트를 열지 않고 안으로 들어오기
외부에서 서비스에 접근하는 더 나은 방법은 인바운드 포트를 아예 쓰지 않는 것입니다. 터널은 바깥쪽으로 연결을 만들고, 외부 엔드포인트가 그 연결을 타고 다시 들어오게 하여 아무것도 포워딩하지 않고 NAT를 통과합니다:
- Cloudflare Tunnel — Quick Tunnel은 계정 없이 공개
*.trycloudflare.comURL을 제공하며, 고정 호스트 이름이 필요하면 이름 있는 터널을 사용합니다. - Tailscale — Serve는 서비스를 tailnet 안에서만 비공개로 유지하고, Funnel은 Tailscale 노드를 통해 인터넷에 공개합니다.
기기 간의 지속적인 연결에는 메시 또는 VPN 네트워크가 어디로 이동하든 모든 노드에 고정된 사설 주소를 부여합니다. FrontierStack은 대표적인 것들을 관리합니다 — 지원하는 라우터(OPNsense)에서는 API로, 서버에서는 SSH로 관리합니다:
| 네트워크 | 개요 |
|---|---|
| WireGuard | 현대적이고 빠른 커널 VPN 터널 — 나머지 대부분이 기반으로 삼는 기본 계층 |
| Tailscale | 출구 노드와 서브넷 라우터를 갖춘 WireGuard 메시로, SSH 또는 OPNsense API로 설정합니다. VPN 패널에서 FrontierStack을 실행할 때마다 Tailscale을 자동으로 켜도록 할 수도 있어, 라우터 대체 주소와 tailnet 모니터가 첫 번째 점검부터 동작합니다 |
| Headscale | 셀프 호스팅 오픈 소스 Tailscale 제어 서버 |
| NetBird | 셀프 호스팅이 가능한 오픈 소스 제로 트러스트 네트워킹 |
| Nebula | 경량 오버레이 메시(Slack / Defined Networking) |
| ZeroTier | 제로 트러스트 SD-WAN / 가상 네트워크 — 에이전트와 API |
9.17.3Tailnet: Tailscale 네트워크 전체 보기
서버별 Tailscale 제어는 각 서버의 패널 안에 있으며 SSH로 동작합니다. 이 제어는 “이 기기에서 데몬이 실행 중인가”에 답합니다. Tailnet 패널은 Tailscale 자체 API만 답할 수 있는, 네트워크 전체에 걸친 질문에 답합니다. API 액세스 토큰을 붙여넣으면(기기 읽기 권한이면 충분합니다 — 이 패널은 절대 쓰지 않습니다) 모든 기기를 주소, OS, 클라이언트 버전, 소유자, 태그, 마지막 접속 시각과 함께 나열합니다.
이 패널의 진가는 Needs attention 목록에 있습니다. 곧 만료되는 노드 키를 보여 줍니다 — 이는 예정된 장애와 같습니다. 키가 만료되면 누군가 다시 인증할 때까지 기기가 조용히 tailnet에서 빠지기 때문입니다. 또한 승인 대기 중인 기기, 아무도 승인하지 않은 경로를 알리는 기기(노드가 분명히 켜져 있는데도 서브넷에 연결할 수 없는 흔한 원인), 몇 주 전부터 응답이 끊긴 기기를 보여 줍니다. 키 만료와 승인 대기는 알림도 발생시킵니다.
9.17.4Apple TV를 입구로: 잠긴 ISP 라우터에 접근하기
NTT의 XG-100NE 같은 FLET'S 홈 게이트웨이 등 ISP가 제공하는 라우터는 Tailscale이나 VPN을 실행할 수 없고, 설정 페이지도 LAN에서만 응답합니다. IPoE 회선(MAP-E 또는 DS-Lite)에서는 사용할 수 있는 인바운드 IPv4 포트도 없으므로 포트 포워딩과 전통적인 VPN 서버는 쓸 수 없으며, 고정 경로는 네트워크 내부의 트래픽만 조정합니다. 해결책은 라우터 뒤에서 항상 켜져 있는 기기가 Tailscale을 서브넷 라우터로 실행하는 것입니다. 이 기기는 바깥쪽 연결만 만들고 인터넷에 아무것도 노출하지 않으며, 이미 TV에 연결된 Apple TV는 손쉬운 선택입니다.
- Apple TV에서 App Store로 Tailscale을 설치하고 Install VPN Configuration을 선택한 뒤 QR 코드를 스캔하여 로그인하십시오.
- 앱의 subnet router 옵션을 켜고 LAN 범위(예:
192.168.1.0/24)를 입력하십시오. - Tailscale 관리 콘솔의 Machines 목록에서 Apple TV의 ⋯ ▸ Edit route settings…를 열고 범위를 체크하여 저장하십시오. 같은 메뉴에서 Disable key expiry도 선택하십시오.
- tailnet의 어디에서든 라우터의 LAN 주소(예:
http://192.168.1.1)를 여십시오.
| 모델 | Tailscale |
|---|---|
| Apple TV 4K (2021, 2022) | 완전 지원(tvOS 27) |
| Apple TV HD (2015), Apple TV 4K (2017) | 동작하지만 tvOS 26까지만 지원되며, HD는 100Mbit 이더넷입니다 |
| Apple TV 3세대 이하 | App Store 없음, 불가 |
Apple TV를 홈 허브로 지정하면 잠자기 중에도 연결할 수 있습니다. 포트가 있는 모델이라면 이더넷을 사용하고, tvOS 업데이트가 무인 상태에서 재시동하므로 집을 나서기 전에 전원을 껐다 켜는 테스트를 해 두십시오. 접속하는 쪽의 192.168.1.x 네트워크와 겹치지 않도록 집 LAN에는 흔하지 않은 범위를 지정하십시오(NTT 게이트웨이에서는 Web設定 ▸ LAN設定). tvOS에는 SSH가 없으므로 FrontierStack이 Apple TV 자체를 설정할 수는 없지만, Tailnet 패널에서 온라인 여부를 확인하고 아직 승인 대기 중인 경로를 표시해 줍니다.
9.17.5자체 ZeroTier 컨트롤러 운영하기
ZeroTier 클라이언트는 멤버 쪽일 뿐이며, 네트워크는 보통 my.zerotier.com에서 관리합니다. 하지만 모든 zerotier-one 설치는 자기 네트워크의 컨트롤러가 될 수도 있습니다 — 완전한 셀프 호스팅으로, 멤버 목록을 제3자가 보관하지 않습니다 — 그런데 이 방식에는 로컬 관리 UI가 전혀 없습니다. ZeroTier Controller 패널이 그 빠진 인터페이스입니다.
컨트롤러의 ID와 소유한 네트워크를 보여 주고, 클릭 한 번으로 승인/승인 해제할 수 있는 멤버 승인 대기열을 처리합니다. 승인되었지만 2주 동안 보이지 않은 멤버는 표시됩니다. 사용하지 않는 허가는 네트워크에 상시 뚫린 구멍이기 때문입니다. 네트워크의 이름, 공개 여부, 경로, IP 할당 풀을 편집할 수 있고, ZeroTier 고유의 규칙 언어로 플로 규칙을 작성할 수 있습니다 — 입력하는 동안 로컬에서 컴파일되며, 흔한 경우를 위한 템플릿과 모든 사람을 차단하게 되는 규칙 세트를 저장하기 전의 경고가 제공됩니다.
모든 작업은 SSH를 통해 컨트롤러 자체의 루프백 API를 대상으로 실행됩니다. 컨트롤러는 127.0.0.1:9993에서 수신하고 root만 읽을 수 있는 토큰으로 인증하므로, FrontierStack은 공개적으로 접근 가능한 컨트롤러 API를 전혀 필요로 하지 않으며 오히려 적극적으로 막습니다. 그럼에도 노출되어 있다면 내장 감사가 이를 표시하며, 느슨한 파일 권한과 백업 누락도 함께 표시합니다. 이 밖에 Prometheus 내보내기, 웜 스탠바이 백업/복원, ZeroTier Central에서 네트워크를 이전하는 도우미도 있습니다.
identity.secret은 대체할 수 없습니다. 잃어버리면 그 컨트롤러가 소유한 모든 네트워크 ID가 고아가 됩니다. 암호화하여 기기 밖에 백업하십시오.9.9UniFi: Cloud Gateway, Dream Machine, Superlink
Ubiquiti 콘솔에는 전용 패널이 있습니다. UniFi 게이트웨이는 범용 라우터 점검으로는 볼 수 없는 일을 더 많이 하기 때문입니다. Dream Machine(UDM, UDM Pro, UDM SE), Cloud Gateway(UCG-Ultra, UCG-Max, UXG), Superlink 게이트웨이, Cloud Key 또는 셀프 호스팅 컨트롤러 등 콘솔 제품군을 모두 다룹니다. UniFi 패널은 Ubiquiti의 두 API를 모두 사용하며, 두 API는 서로 다른 질문에 답합니다. Site Manager 키(unifi.ui.com에서 만드는 키 하나)는 계정의 모든 콘솔을 모델, 펌웨어, 온라인 상태와 함께 나열합니다. 원격 사이트의 전원이나 인터넷 연결이 끊겼는지 알 수 있는 유일한 방법입니다. 네트워크에서 떨어진 콘솔은 로컬로 아무것도 알려 줄 수 없기 때문입니다. 콘솔에서 Settings ▸ Admins & Users로 직접 만드는 로컬 콘솔 키를 사용하면 게이트웨이가 지금 하고 있는 일을 볼 수 있습니다.
로컬에서는 WAN 링크를 ISP, 지연 시간, 처리량과 함께 보여 주며, 실제로 트래픽을 전달하는 링크가 어느 것인지 표시합니다. 이 세부 사항이 중요합니다. 주 회선이 끊기면 UniFi는 조용히 백업 회선으로 페일오버하는데, 백업은 대개 더 느리고 종량제인 경우가 많으며, 보통은 다음 달 청구서를 보고서야 알게 됩니다. 또한 채택된 기기와 펌웨어, 게이트웨이가 평가하는 순서대로의 방화벽 규칙, 클라이언트 목록, 모든 포트 포워딩을 나열합니다. 활성화된 포워딩은 하나하나가 방화벽에 의도적으로 낸 구멍이므로, 패널은 모든 출발지 주소에서 연결을 받는 포워딩을 표시합니다 — 공개 웹 서버라면 맞는 설정이지만, 그 밖의 경우라면 다시 확인해 볼 만합니다.
알림은 콘솔 오프라인, WAN 링크 다운, 백업 링크로 운용 중, 기기의 네트워크 이탈, 인터넷에 노출된 포트 포워딩을 다룹니다. 이 패널은 의도적으로 읽기 전용입니다. 규칙과 네트워크 변경은 검증 기능이 있는 UniFi 콘솔에서 하십시오. PoE 스위치 포트는 다음 절에서 다루며, 단순한 콘솔 연결 가능 여부는 다른 제조사와 함께 Router & Network에도 계속 표시됩니다.
Site Manager 키는 UniFi Protect 카메라와 도어벨도 나열하며, 최대 5분마다 읽습니다. 카메라의 Alert나 Alert on all Protect cameras를 체크하면 오프라인 알림을 받습니다. 업데이트 중이거나 콘솔 자체가 오프라인인 카메라는 다운이 아니라 알 수 없음으로 표시됩니다.
9.10PoE(Power over Ethernet): 전원 버튼이 없는 기기의 전원 버튼
액세스 포인트, 카메라, 도어 컨트롤러, 탁상 전화기에는 전원 스위치가 없습니다. 유일한 전원은 연결된 스위치 포트이므로, 멈춘 기기를 복구하는 방법 — 전원을 껐다 켜기 — 은 보통 제조사 웹 UI를 거치거나 랙까지 걸어가야 합니다.
Power over Ethernet 패널은 포트를 버튼으로 만듭니다. 관리형 스위치를 IP로 추가하면 포트별로 PoE 상태(전력 공급 중, 탐색 중, 장애), 수전 기기 클래스, 우선순위, 그리고 스위치가 보고하는 경우 전력(W)을 볼 수 있으며 — 전원 끄기/켜기와 제대로 된 전원 재투입도 할 수 있습니다. 스위치의 전력 예산도 보여 줍니다: 총 와트, 사용 중인 와트, 그리고 스위치 자체의 사용량 임계값을 넘으면 경고를 표시합니다. 임계값을 넘으면 스위치가 우선순위가 낮은 포트의 전원부터 끊기 시작하므로 포트 우선순위도 여기서 편집할 수 있습니다.
PoE는 표준화되어 있으므로 폭넓게 동작합니다. RFC 3621의 POWER-ETHERNET-MIB는 사실상 모든 관리형 PoE 스위치 — Cisco, Aruba/HPE, Netgear, TP-Link/Omada, Ubiquiti, MikroTik, D-Link, Zyxel — 에 구현되어 있습니다. 읽기에는 Device Discovery의 SNMPv2c 또는 SNMPv3 프로필을 사용합니다. SNMPv2c에서 포트를 전환하려면 별도의 읽기-쓰기 커뮤니티가 필요하며, 스위치별로 추가하고 키체인에 보관합니다. SNMPv3에서는 해당 사용자에게 스위치의 쓰기 권한이 있을 때만 인증 프로필을 사용합니다. 전원 차단은 신중한 접근 권한과 확인을 거쳐야 하므로, FrontierStack은 임의의 OID 쓰기를 제공하지 않습니다. Monitor를 켜면 장애 상태의 포트나 전력 예산을 초과한 스위치가 알림을 발생시킵니다 — 둘 다 그렇지 않으면 누군가 카메라가 꺼진 것을 알아차릴 때까지 드러나지 않습니다.
9.11Show Network: 클럽, 무대, 공연 감독하기
공연은 무언가가 조용해지기 전까지는 아무도 들여다보지 않는 네트워크 위에서 돌아갑니다: CDJ가 링크에서 떨어지고, 조명 노드가 응답을 멈추고, 타임코드가 멈추고, NDI 피드가 미디어 서버에서 사라집니다. Show Network 패널(사이드바 ▸ AV & Stage)은 이 Mac을 그 네트워크의 감독자로 만듭니다. 공연을 운영하지는 않습니다. 공연을 운영하는 모든 것을 지켜보고, 그중 하나가 사라지는 순간 알려 줍니다.
9.17.6현황 요약
패널 맨 위에서 FrontierStack은 Mac이 연결된 네트워크 또는 VLAN마다 기기들이 직접 알려 오는 정보를 집계하여 평이한 문장 하나로 적습니다 — 예: “en5 · 2.0.0.0/8에 Art-Net 노드 14개, 사용 중인 유니버스 73개, sACN 소스 2개, NDI 비디오 소스 1개가 있습니다.” 공연장에 들어섰을 때 “전부 다 있는가?”에 가장 빨리 답해 주며, 케이블을 옮긴 뒤 가장 먼저 읽어야 할 내용입니다.
9.17.7Show Dashboard
현황 요약 아래의 Show Dashboard는 공연의 각 부분에 타일을 하나씩 할당합니다:
| 타일 | 표시 내용 |
|---|---|
| 플레이어 및 믹서 | 번호별 Pro DJ Link 플레이어(CDJ 1 online), DJM 믹서, rekordbox. |
| 템포 | 비트 패킷에서 얻은 BPM — 플레이어 상태 패킷이 이 Mac에 도달하면 마스터 덱, 그렇지 않으면 재생 중인 덱의 값입니다. |
| Resolume | 웹 서버가 응답하거나, 이 Mac에서 실행 중이거나, NDI 출력이 보이면 온라인입니다. |
| NDI | 네트워크에 있는 NDI 비디오 소스 수. |
| Art-Net / sACN | 사용 중인 유니버스와, 이를 송출하는 Art-Net 노드 및 sACN 소스. |
| 타임코드 | CoreMIDI 소스의 MIDI Time Code와 Art-Net 타임코드를 기준으로 한 Healthy 또는 Stopped. |
| LED 시스템 | 발견되었거나 추가된 WLED 컨트롤러, 픽셀 컨트롤러, LED 프로세서. |
| 제어 | OSC 엔드포인트, RTP-MIDI 세션, TCNet 노드. |
아래의 목록에는 각 타일에 해당하는 모든 기기가 표시되며, 행마다 Watch 버튼이 있습니다. SMPTE LTC는 오디오 신호이므로 직접 읽지 않습니다. MTC 또는 Art-Net 타임코드로 변환하면(대부분의 LTC 인터페이스와 ShowKontrol이 지원) 타임코드 타일에 나타납니다.
9.17.8Arm Show
개장 전에 Arm Show를 누르십시오. FrontierStack은 그 시점에 온라인인 모든 것 — 덱, 믹서, 조명 노드, sACN 소스, NDI 소스, LED 컨트롤러, Link 세션 — 을 감시하며, 그중 하나라도 사라지면 평소의 채널(11장)로 Show Network 그룹에 분류된 알림을 보냅니다. 공연이 끝난 뒤 Disarm을 누르면 감시 목록이 비워집니다. 개별 기기를 직접 감시하거나 감시 해제할 수도 있습니다.
9.17.9수동적 탐색, 그리고 비켜서기
거의 모든 것은 묻지 않고 듣기만 하여 발견합니다:
| 프로토콜 | 수신 위치 |
|---|---|
| Pro DJ Link (CDJ/XDJ, DJM, rekordbox) | UDP 50000–50002: 킵얼라이브와 비트 패킷 |
| Denon StageLinQ (Engine DJ) | UDP 51337 |
| Ableton Link | 멀티캐스트 224.76.78.75:20808: 피어, 템포, 세션 |
| TCNet (ShowKontrol) | UDP 60000 |
| sACN / E1.31 | 239.255.250.214:5568에서 유니버스 탐색. 데이터 유니버스는 목록에 지정한 경우에만 |
| NDI, OSC, WLED, RTP-MIDI | Bonjour |
| MIDI 소스와 MIDI Time Code | CoreMIDI, 입력만 |
FrontierStack이 보내는 유일한 것은 Art-Net ArtPoll입니다: 탐색용 브로드캐스트 하나를 30초마다 반복하여 새 노드가 저절로 나타나게 합니다. Poll Art-Net Now를 직접 누르는 편이 좋다면 설정에서 Poll for Art-Net nodes automatically를 끄십시오.
공연 소프트웨어는 UDP 포트를 독점해야 합니다. rekordbox, Engine DJ, ShowKontrol, Beat Link Trigger, PRO DJ LINK Bridge, QLC+, Resolume, MadMapper, QLab 등이 같은 Mac에서 실행되는 동안에는 해당 리스너가 닫히고 패널에 그 사실이 표시됩니다. 소프트웨어와 네트워크를 모두 보려면 공연 네트워크에 있는 두 번째 Mac에서 감독하십시오.
9.17.10Show Servers
Show Servers에서 Add Server로 미디어 서버, LED 컨트롤러 또는 조명 데몬의 주소를 추가합니다. 각각 30초마다 HTTP로 확인하며, 응답이 멈추면 알림을 보냅니다. 일부는 실제 상태를 보고합니다:
- Resolume — 웹 서버를 통해(Preferences ▸ Webserver).
- WLED — LED 수, 프레임 속도, 소비 전류, Wi-Fi 신호, 실시간 Art-Net 또는 sACN 입력 여부와 함께 On/Off 및 밝기 제어.
- Falcon Player (FPP) — 플레이어 상태와 현재 시퀀스.
- OLA와 QLC+ — 데몬 또는 웹 액세스의 응답 여부와, OLA의 버전 및 유니버스 수.
NovaStar/COEX, Brompton Tessera, Colorlight, MADRIX 5, Lightjams는 웹 UI 또는 원격 포트의 응답 여부를 확인합니다. 수신 카드, 캐비닛 온도, 토폴로지는 각 제조사의 도구에서 확인하십시오.
9.17.11프리셋
9.17.12경고등, 고정, 전원
무대 감독이 밤새 화면만 볼 수는 없으므로, Show Network는 조명을 깜박여 알릴 수 있습니다. 경고등에 WLED 스트립이나 경광등, 로컬 브리지의 Philips Hue(브리지의 링크 버튼을 누른 뒤 페어링), 또는 HTTP 요청(알람 URL과 해제 URL — PATLITE 네트워크 신호탑, 경광등을 켜는 Shelly 릴레이, Home Assistant 웹훅)을 추가합니다. 감시 대상이 다운되면 빨간색으로 깜박이고, 복구되거나 확인을 누르면 원래 상태로 돌아갑니다.
고정하면 플레이어, 믹서, Art-Net 노드, WLED, Falcon Player, LED 프로세서가 Device Discovery에 추가되어, 기기 패널에서 전원 콘센트나 PDU, SwitchBot 플러그, UPS를 연결할 수 있습니다(요금제의 기기 수 한도에 포함). 고정된 감시 대상에는 전원 재투입…과 선택형 자동 재투입(최대 2회, 30분 간격)이 표시됩니다. LED 월 프로세서(NovaStar/COEX, Brompton Tessera, Colorlight)와 MADRIX는 Full Fleet 기능입니다.
Clubs & Bars 프리셋에는 Show Network, AV Feeds, Power over Ethernet이 포함됩니다. 페스티벌, 투어, 기업 행사에는 공연 네트워크의 기반(Places, VPN, 메시 네트워킹)을 추가한 Stage & Shows에서 시작하십시오. 다른 셋업에는 Show Supervisor 애드온을 추가할 수 있습니다. Pro DJ Link 플레이어와 믹서, LED 월 프로세서, WLED 및 픽셀 컨트롤러는 Device Discovery에서 고정하여 연결 가능 여부를 확인할 수도 있습니다.
9.12발전기: 행사 및 대기 전원
콘서트, 페스티벌, 야외 행사는 렌탈 발전기로 돌아가며, 발전기가 멈추면 무대도 조용해집니다. 발전기 패널(AV & Stage의 Show Network 옆)이 이를 지켜봅니다. 렌탈 장비는 제조사가 섞여 있으므로 연결 방법은 세 가지입니다.
- 이 네트워크의 컨트롤러. 대부분의 세트는 Deep Sea Electronics, ComAp, DEIF, CRE, Datakom 컨트롤러로 제어되며, 이들은 Modbus TCP로 통신합니다. 컨트롤러를 제작 네트워크에 연결하고(DSE는 이더넷 포트 또는 DSE855 게이트웨이) IP를 추가하면 FrontierStack이 모델을 식별하고 몇 초마다 읽습니다. 클라우드 구독이나 모바일 신호가 필요 없습니다. 지원 맵: DSE(GenComm, 제품군별 경보 이름 표시), ComAp InteliLite 4, DEIF AGC 150, CRE GENSYS Compact, Datakom D-300/500/545/700.
- ComAp WebSupervisor: ComAp 클라우드에 보고하는 세트용입니다. API 키와 애플리케이션 클라이언트 ID 및 시크릿으로 연결한 다음 감시할 유닛을 선택하십시오. 값은 1분마다 갱신됩니다.
- AEMP 2.0 텔레매틱스(ISO 15143-3): 렌탈 업계에서 널리 쓰이는 Trackunit, Atlas Copco FleetLink 및 대부분의 장비 제조사 포털. 계정을 연결한 다음 플릿에서 감시할 세트를 선택하십시오. 스냅샷은 5분마다 갱신되며, Trackunit 확장 데이터에는 발전기 자체의 전압, 주파수, 부하가 포함됩니다. 텔레매틱스는 연료와 「아직 운전 중인지」 확인에는 좋지만 공연 중 트립을 잡기에는 너무 느립니다.
세트마다 운전 상태와 모드, kW와 부하(컨트롤러가 부하를 보고하지 않으면 정격 kW를 설정), 연료(운전 데이터가 20분 쌓이면 남은 시간 추정치 포함), 상별 전압과 전류, 주파수, 냉각수 온도, 오일 압력, 배터리 전압, 운전 시간, 컨트롤러 자체 경보 이름을 표시합니다.
개장할 때 운전 중인 세트 감시 시작을 누르십시오. 그 시점에 운전 중인 모든 세트는 계속 운전해야 하는 것으로 간주되며, 멈추거나 고장 나거나 응답하지 않으면 알림(그룹 「발전기」)이 전송됩니다. 연료 부족, 설정 시간 내 연료 소진 예상, 고부하, 결상, 허용 범위를 벗어난 주파수·전압도 알림이 됩니다. 주파수는 기본적으로 50 Hz와 60 Hz 중 가까운 쪽을 기준으로 합니다. 전기적 문제는 15초 동안 지속될 때만 계산하므로 무대 장비를 한꺼번에 켜도 오경보가 나지 않습니다. 경고등을 켠 세트는 심각한 문제가 생기면 Show Network 경고등을 깜박입니다.
Stage & Shows 프리셋과 Show Supervisor 애드온에는 발전기 패널이 포함됩니다. AI 관리자는 ups_status(kind: generator)로 모든 세트를 읽을 수 있습니다.
9.13인터넷 상태와 속도 테스트
Internet Health 패널은 회선 자체를 보는 화면입니다. Targets 목록 — 기본값은 Cloudflare의 1.1.1.1, Google 및 Quad9 DNS, 두 AWS 리전, Tailscale의 조정 서버 — 에 지속적으로 ping을 보내 지연 시간과 패킷 손실을 표시하고 30초마다 다시 테스트합니다. ICMP를 차단하는 호스트는 :443에 대한 TCP 연결 지연 시간으로 대체합니다. Internet 섹션 머리글의 톱니바퀴 버튼을 누르면 대상 편집 대화상자가 열립니다 — 목록을 한 번 설정해 두면 방해가 되지 않습니다. 같은 섹션에는 IPv6 판정도 있습니다. 점검할 때마다 글로벌 IPv6 주소가 할당되어 있는지, IPv6 트래픽이 실제로 동작하는지(Cloudflare/Google v6 애니캐스트로 ping), 네트워크가 알리는 IPv6 DNS 서버가 응답하는지 확인합니다. 가장 강하게 경고하는 상태는 알려졌지만 동작하지 않는 IPv6입니다 — 라우터가 주소와 IPv6 DNS 서버를 배포하고, 연결은 IPv6를 먼저 시도하며, IPv4로 대체될 때까지 모든 것이 멈춥니다. 패널은 이를 쉬운 말로 알리고, 응답하지 않는 DNS 서버를 지목하며, 라우터를 원인으로 가리킵니다. AI 관리자도 internet_speed(check=ipv6)로 같은 진단을 실행하고, 진단 도구를 통해 ping6/dig/scutil로 더 깊이 조사할 수 있습니다. 사이드바의 Internet Health 행에는 가벼운 백그라운드 점검(실행 시, 이후 5분마다)으로 갱신되는 상태 점이 있습니다: 정상이면 녹색, IPv6 장애나 심한 패킷 손실이면 주황색, 모든 대상에 연결할 수 없으면 빨간색입니다. Live Traffic은 활성화된 모든 인터페이스의 실시간 처리량을 그래프로 보여 주고, Addresses & Networks는 각 인터페이스, 서브넷(직접 접근할 수 있는 네트워크), 게이트웨이를 나열합니다. 내장 traceroute는 트래픽이 거치는 ISP와 트랜싯 제공업체를 보여 줍니다. Speed Test 섹션에서 Test Now를 누르거나 — AI에게 internet_speed로 요청하면 — 다운로드, 업로드, 지연 시간, 응답성을 측정합니다. Ookla speedtest CLI가 설치되어 있으면 이를 사용하고, 그렇지 않으면 Apple의 networkQuality를 사용합니다. 측정 중에는 speedtest.net 스타일의 다이얼 두 개가 다운로드와 업로드를 실시간으로 보여 주며 — 바늘, 단계, 현재 Mbps — Ookla의 스트리밍 출력으로 갱신됩니다(내장 networkQuality는 끝날 때만 보고하므로 다이얼은 대기합니다). 패널은 측정 중과 결과에서 연결한 테스트 서버(제공업체와 도시)를 표시합니다. 테스트가 실패하면 조용히 끝나지 않고 이유를 알려 줍니다. 다만 Wi-Fi에 연결된 Mac은 ISP만큼이나 Wi-Fi를 측정하게 되므로 — 같은 섹션에서 테스트를 라우터나 유선 서버에서 실행할 수 있습니다. From Router / Server에서 기기를 선택하면 FrontierStack이 SSH(키 인증, 라우터는 root로)를 통해 해당 기기에서 측정을 실행합니다. 설치된 Ookla/speedtest-cli를 우선 사용하고, 없으면 curl 단일 스트림 추정으로 대체합니다. 라우터가 Mac보다 훨씬 빠르게 측정된다면 병목은 회선이 아니라 무선 구간입니다 — AI도 source를 지정한 internet_speed로 같은 비교를 할 수 있습니다.
9.14Network Path: 스위치, 허브, 홉별 지연 시간
Network Path 패널은 IP 도구로는 답할 수 없는 물리적인 질문에 답합니다: 이 연결이 실제로 어떤 장비를 거치며, 어느 장비가 느리게 만드는가? LAN Path는 관리형 스위치의 브리지 테이블과 LLDP 이웃 정보를 SNMP로 읽어 이 Mac과 LAN 기기 사이의 경로를 그립니다 — 각 링크에는 포트와 속도가 표시되고, 가장 느린 링크가 표시되며, 여러 기기가 스위치 포트 하나를 공유하는 곳에는 점선으로 된 추정 상자가 그려집니다(직접 조회할 수 없는, 숨어 있는 비관리형 스위치나 허브의 전형적인 경우). Locate a Device는 기기 하나를 추적합니다: IP, MAC, 제조사(MAC 접두사로 판별), 유형 — 그리고 연결된 정확한 스위치 포트까지. Visual Traceroute는 각 홉의 왕복 시간을 차트로 그리고 지연 시간을 가장 많이 늘리는 홉을 강조 표시하므로, “내 Wi-Fi 문제인가, ISP의 첫 구간인가, 그보다 먼 곳인가?”를 그림으로 볼 수 있습니다. 스위치 읽기에는 Device Discovery에서 설정한 SNMPv2c 또는 SNMPv3 프로필을 사용합니다. 비관리형 장비는 본질적으로 보이지 않으며, 추정 기능은 바로 그런 경우를 위한 것입니다. 패널은 스스로 내용을 채웁니다: 열면 이 Mac과 라우터 사이의 기기를 자동으로 매핑합니다(Map Mac → Router로 다시 실행). Device Link Speeds는 범위를 더 넓혀 — 알려진 모든 기기의 스위치 포트에서 협상된 이더넷 포트 속도를 조사하며(링크의 양 끝은 같은 속도로 협상합니다), 가장 느린 링크와 반이중 링크를 먼저 보여 줍니다: 기가비트 네트워크에서 100 Mbps로 묶여 있는 NAS는 대개 불량 케이블, 오래된 비관리형 스위치, 또는 협상이 잘못된 NIC 때문이며, 바로 여기서 드러납니다. Locate a Device는 기기가 에이전트를 실행하는 경우 기기 자체에도 SNMP로 포트의 협상 속도를 묻습니다.
9.15서브넷과 VLAN
Subnets 패널은 FrontierStack이 알고 있는 모든 네트워크 — 이 Mac의 인터페이스와 VPN 경로, 라우터의 LAN, 서버와 기기가 속한 네트워크 — 와 각 네트워크에 있는 것을 나열합니다. 맨 위의 전환 스위치로 같은 네트워크를 세 가지 방식으로 볼 수 있습니다: List, By VLAN(VLAN별 그룹), 또는 그림으로 그린 VLAN Layout입니다.
각 서브넷은 사용 가능한 가장 강력한 근거에 따라 VLAN에 배치됩니다. 사용자가 직접 지정한 것이 최우선입니다: 아무것도 보고하지 않는 네트워크는 서브넷을 오른쪽 클릭하고 Assign to VLAN…을 선택하십시오(지정 내용은 다른 설정과 함께 저장되며 설정 백업에 포함됩니다). 다음은 API로 VLAN을 나열하는 라우터 — OPNsense, REST API 패키지를 설치한 pfSense, MikroTik RouterOS, UniFi — 와 각 VLAN 인터페이스의 주소, 그리고 igb0.10처럼 이름에 태그가 들어 있는 라우터 인터페이스입니다. 그다음은 이 Mac 자체의 VLAN 인터페이스입니다. 마지막은 관리형 스위치입니다: 서브넷의 기기 대부분이 스위치의 포워딩 테이블에서 한 VLAN으로 학습되어 있으면 서브넷이 그 VLAN에 배치됩니다. 배치된 서브넷은 모두 어떤 근거로 배치되었는지 표시하며, 남은 것은 No VLAN tag known 아래에 나열됩니다.
VLAN Layout은 그 결과를 그림으로 그립니다: 맨 위에 VLAN을 전달하는 라우터와 스위치, 그 아래에 802.1Q 트렁크, 그리고 VLAN마다 색으로 구분된 열에 서브넷과 게이트웨이, 사용하는 스위치 포트(태그 없는 액세스 포트는 채워진 표시, 태그된 포트는 윤곽선 표시), 그 VLAN에 있는 기기와 서버가 표시되며 — 각각 클릭하면 해당 패널이 열립니다. Read Switches는 포트 정보를 채웁니다: Device Discovery가 찾은 관리형 스위치에 Network Path와 같은 읽기 전용 프로필을 사용하여 SNMP로 VLAN 이름, 포트 멤버십, 네이티브 VLAN, VLAN별 포워딩 테이블을 묻고, 여러 VLAN을 태그된 상태로 전달하는 포트를 트렁크로 표시합니다. 스위치에서 읽은 정보는 세션 동안 유지되므로 케이블을 다시 연결한 뒤에는 다시 누르십시오. AI 관리자에게 “NAS는 어느 VLAN에 있나요?”라고 물으면 router_info를 통해 같은 화면 정보를 읽습니다.
9.16Debug Share: localhost 서버를 잠시 외부에 공개하기
동료나 휴대폰에 localhost에서 실행 중인 개발 서버를 보여 주어야 할 때, Debug Share 패널은 해당 서버를 한 세션 동안 공개한 뒤 스스로 닫힙니다. 포트를 입력하고(또는 Scan localhost를 눌러 실행 중인 서버를 찾고), Expose via에서 공개 방식을 고른 다음 Auto-close 시간을 설정하고 Open debug session을 누르십시오. 모든 공유는 FrontierStack을 종료할 때도 자동으로 닫힙니다.
| 방식 | 접근 범위 |
|---|---|
| Cloudflare Quick Tunnel | 계정 없이 쓰는 공개 *.trycloudflare.com URL — 클라이언트나 휴대폰에서 빠르게 미리 보기에 적합 |
| Tailscale Serve | 비공개 — 자신의 tailnet 안에서만 접근 가능 |
| Tailscale Funnel | 자신의 Tailscale 노드를 통한 공개(tailnet에서 Funnel이 활성화되어 있어야 함) |
| LAN forwarder | 0.0.0.0:<auto> → 127.0.0.1:port 브리지로, 이 LAN의 다른 컴퓨터가 루프백 전용 서버에 접근할 수 있게 함 |
LAN forwarder에는 두 가지 추가 기능이 있습니다. 호스트 방화벽이 켜져 있으면 패널에 Open port in firewall이 표시되어, 세션 동안에만 pf 규칙에서 해당 포트를 허용할 수 있습니다. 또한 Outside access 선택기로 UPnP, NAT-PMP 또는 OPNsense API를 통해 WAN 포트를 매핑하고 DDNS host와 짝지을 수 있으므로, LAN 공유를 공용 인터넷에서도 접근할 수 있게 됩니다 — 매핑은 공유가 닫힐 때 제거됩니다. AI 관리자도 세션을 열고, 목록을 보고, 닫을 수 있으며(debug_share_open / _list / _close), “Allow changes”가 켜져 있으면 MCP를 통해서도 가능합니다.
Debug Share 세션은 짧게 쓰도록 설계되었습니다. 자신의 개발 서버를 타이머 없이 tailnet에서 계속 접근할 수 있게 하려면 Localhost 패널(4장)에서 해당 서버의 Also serve on Tailscale을 켜십시오. 이 Mac의 Tailscale 주소에서 같은 포트로 응답하고, LAN에는 노출되지 않으며, 서버가 중지되면 닫힙니다. AI 관리자는 debug_share의 serve 액션으로 폴더를 이 방식으로 시작하고 열어야 할 주소를 알려 줄 수 있습니다.
9.17Named tunnel: 영구적인 공개 호스트 이름
Quick Tunnel은 의도적으로 일회용입니다. 이 Mac의 서비스 — 셀프 호스팅 앱, 내부 대시보드, 웹훅 수신기 — 를 실제 주소로 영구적으로 접근할 수 있게 하려면 대신 named tunnel을 사용하십시오. named tunnel은 서비스에 자신의 Cloudflare 영역 중 하나에 속한 고정 호스트 이름(예: app.example.com)을 부여하고, 재부팅 후에도 유지되며, 모든 터널과 마찬가지로 인바운드 포트를 열지 않습니다. Mac이 Cloudflare 엣지로 바깥 방향 연결을 맺으므로 포워딩할 것도, 포트 스캔에 발견될 것도 없습니다.
Cloudflare 패널의 Named Tunnels 섹션에서 만드십시오. New Tunnel…을 누른 다음, 자신의 영역 아래 호스트 이름과 그 앞단에 둘 로컬 포트를 지정합니다. FrontierStack은 이미 보유한 토큰으로 Cloudflare API를 통해 전체 설정을 진행합니다 — 터널을 만들고, 인그레스 규칙(hostname → http://localhost:PORT)을 작성하고, 호스트 이름을 <id>.cfargotunnel.com으로 가리키는 프록시된 CNAME을 추가한 다음, cloudflared service install로 상주 데몬을 설치합니다. 마지막 단계에는 한 번의 관리자 인증이 필요합니다(/Library 아래에 LaunchDaemon을 작성하기 때문). cloudflared 자체는 처음 사용할 때 Homebrew에서 가져옵니다. 터널과 DNS만 만들고 cloudflared는 다른 호스트에서 실행하려면 Run on this Mac now의 선택을 해제하십시오. Delete는 데몬, DNS 레코드, 계정 측 터널까지 전부 되돌립니다. AI 관리자도 같은 세 가지 동작(tunnel_create / tunnel_list / tunnel_delete)을 사용할 수 있으며, 터널 생성은 서비스를 인터넷에 공개하는 작업이므로 빨간색 확인을 거쳐야 합니다.
cloudflared service install은 Mac마다 시스템 데몬 하나만 실행하므로, 로컬에서는 한 번에 하나의 named tunnel만 실행됩니다. 그래도 앱에서 추가 named tunnel을 만들고 라우팅한 뒤, 그 cloudflared 커넥터를 다른 컴퓨터에서 실행할 수 있습니다 — 어느 쪽이든 계정, 호스트 이름, DNS는 모두 설정됩니다.각 터널 행에는 실시간 상태 줄과 선택적으로 켜는 다운 알림용 종 아이콘도 표시되며, Protect…는 호스트 이름 앞에 Cloudflare Access 로그인을 둡니다 — 7장을 참조하십시오.
제10장
보안 및 강화
경계를 지키는 것은 일의 절반에 불과합니다. 이 장에서는 사용하지 않는 문을 닫고, 사용 중인 문을 지켜보며, 그 문을 통과해도 되는 대상을 증명하는 방법을 다룹니다.
서버가 가장 취약해지는 때는 무언가가 공격해 올 때가 아니라 조용히 어긋나기 시작할 때입니다. 열린 채 방치된 방화벽, 아무도 비활성화하지 않은 암호 로그인, 지난주에 만료된 인증서, 누구의 메일이든 릴레이해 주는 메일 서버가 그런 예입니다. FrontierStack은 보안 강화를 일회성 체크리스트가 아니라 지속적으로 관찰할 수 있는 상태로 다룹니다. 보안 패널은 지금 사용 중인 호스트를 위한 콘솔이며, AI 관리자(13장)는 같은 점검을 SSH를 통해 플릿 전체에 적용합니다. 여기에 있는 모든 기능은 변경을 요청하기 전까지 읽기 전용이며, 모든 변경은 직접 수작업으로도 할 수 있는 것들입니다.
10.1방화벽: 애플리케이션 방화벽과 pf
macOS에는 두 가지 방화벽이 기본으로 들어 있으며, FrontierStack은 둘 다 읽습니다. 애플리케이션 방화벽(ALF)은 시스템 설정에서 지정하는 앱 단위 계층입니다. 보안 패널은 그 상태 — 활성화 여부, 스텔스 모드, 모든 수신 연결 차단, 앱 규칙 수 — 를 보여 주므로 방화벽이 켜져 있는지 한눈에 확인할 수 있습니다. pf 패킷 필터는 그보다 아래인 포트 수준의 계층이며, FrontierStack이 직접 관리하는 것은 바로 이쪽입니다.
앱이 관리하는 pf 규칙은 별도 파일 ~/Library/Application Support/FrontierStack/pf-frontierstack.conf에 저장되며, 시스템 /etc/pf.conf에 멱등적으로 연결된 전용 frontierstack 앵커로 로드됩니다. 규칙을 전용 앵커에 두기 때문에 FrontierStack은 Apple의 기본 규칙 세트를 절대 편집하지 않으며, 다시 로드해도 다른 규칙을 덮어쓰지 않고 사용자의 규칙이 유지됩니다. 규칙을 추가하거나 제거하면 인증된 관리자 프롬프트를 거쳐 pf가 다시 로드됩니다.
AI 쪽에서는 firewall_rule 도구가 포트 하나에 대한 허용/거부 규칙을 하나씩 추가하거나 제거하며, 필요하면 출발지 주소로 범위를 한정할 수 있습니다. 이 도구는 먼저 대상의 운영 체제를 감지합니다. 이 Mac과 원격 macOS 호스트에는 pf(frontierstack 앵커)를, Linux 서버에는 ufw를 사용합니다. Mac에 ufw 명령을 보내거나 Linux에 pf 규칙을 보내는 일은 절대 없습니다.
ufw를 강화하기 전에, 규칙이 관리용 경로를 허용하는지 확인하고 별도의 접속 수단(콘솔, KVM-over-IP, 헤드리스 설정의 화면 공유)을 확보해 두십시오.10.2침입 방지와 열린 포트 감시
열어 두어야 하는 포트에도 경비는 필요합니다. 보안 패널은 두 가지 침입 방지 엔진을 통합합니다. fail2ban은 악의적인 로그 패턴과 일치하는 IP 주소를 차단합니다. SSH와 Apache 무차별 대입 공격이 대표적인 사례입니다. 패널에는 fail2ban의 설치 및 실행 여부, jail 수, 현재 차단된 주소 수가 표시되며, 클릭 한 번으로 실행되는 다시 로드와, 사용자의 재정의 설정을 덮어쓰지 않고 적절한 SSH jail을 넣어 주는 “기본 jail.local 작성” 동작이 있습니다. CrowdSec은 그 위에 공유 평판 네트워크를 더하며, 활성 결정(decision) 수와 지표 버튼을 보여 줍니다. 둘 다 Homebrew로 설치되는 root 서비스로 실행됩니다.
열린 포트 섹션에는 호스트의 모든 리스너가 나열됩니다. 함께 동작하는 감시 기능 — 원격 제어 및 화면 공유 노출 — 은 특히 VNC/화면 공유(:5900), Apple Remote Desktop, AnyDesk, TeamViewer, Chrome Remote Desktop, Splashtop, RustDesk, Tailscale 출구 노드 광고를 표시하며, 지금 이 순간 누군가 접속해 있으면 빨간색으로 바뀝니다. 최근 침입과 활성 차단 섹션은 fail2ban.log, CrowdSec, Suricata의 eve.json, Wazuh의 alerts.json에서 탐지 내역을 모아 최신순으로 보여 줍니다. 실행하지 않는 소스는 그냥 건너뜁니다. 새 차단, 새 리스너, 활성 인바운드 세션은 각각 알림을 발생시킬 수 있습니다 — 전달 방법은 11장에서 설정하십시오. 같은 섹션은 이 Mac의 FileVault도 확인하며, 판단 기준은 그 Mac이 무엇을 가지고 있는가입니다. Mac이 연결된 서버에 대한 SSH 접근 권한이나 앱이 관리하는 SSH 키를 가지고 있는데 FileVault가 꺼져 있으면, 행이 빨간색으로 바뀌고 알림이 발생합니다. 노트북을 분실하거나 도난당하면 플릿 전체의 열쇠를 내주게 되기 때문입니다. 플릿 자격 증명이 없는 Mac은 그대로 둡니다.
10.3SSH 보안 강화
대부분의 서버에서 SSH는 가장 중요한 출입문이므로, 보안 패널에는 SSH 보안 강화 감사가 포함되어 있습니다. 이 감사는 sshd -T로 실제 적용 중인 구성을 읽습니다 — 디스크에 있는 파일만이 아니라, 데몬이 드롭인 설정까지 반영한 뒤 실제로 적용하는 값입니다 — 그리고 PermitRootLogin, PasswordAuthentication 등 중요한 설정을 표시합니다. SSH가 네트워크에서 접근 가능한 경우 패널은 이를 분명히 알려 줍니다. 바로 그런 경우에 점검 결과가 중요하기 때문입니다.
인터넷에 노출된 호스트의 기본 원칙은 PasswordAuthentication no와 함께 키 기반 인증을 사용하는 것입니다. 수정 사항은 기본 파일이 아니라 /etc/ssh/sshd_config.d/를 편집해 적용하십시오. 그래야 패키지를 업데이트해도 보안 강화 설정이 그대로 유지됩니다. FrontierStack 자체의 플릿 채널도 이미 이 원칙을 따릅니다. Ed25519 키, BatchMode=yes, IdentitiesOnly=yes를 사용하며, 호스트 키는 처음 접속할 때 신뢰하여 known_hosts에 기록합니다(8장). 호스트의 키 접근이 깨지면 repair_ssh_access 도구가 로컬 보관함에 저장된 일회용 로그인 암호를 사용해 관리 키를 다시 설치합니다 — 암호는 사용자의 Mac에서 읽히며 AI에 전송되지 않습니다.
10.4서버 보안: 원격 호스트의 보안 상태 점검
지금까지 설명한 내용은 이 Mac의 보안 패널입니다. 서버 보안 패널은 그에 대응하는 연결된 서버용 패널로, 같은 보안 상태 점검을 SSH를 통해 플릿의 어느 호스트에서든 수행합니다. 서버의 세부 정보를 열고 보안 옆의 확인…을 클릭하거나, 패널을 직접 열어 호스트 메뉴에서 서버를 선택하십시오. 한 번의 스캔으로 중요한 SSH 보안 강화 항목(PermitRootLogin, PasswordAuthentication, 수신 대기 포트), 방화벽의 존재 및 활성화 여부(ufw, firewalld, nftables 또는 직접 구성한 iptables), 실행 중인 침입 방지 엔진(fail2ban, CrowdSec), 대기 중인 보안 업데이트 수(apt, dnf, yum), 모든 인터페이스에서 수신 대기하는 서비스, 그리고 호스트 무결성의 이상 징후 — sticky 비트가 없는 모든 사용자 쓰기 가능 디렉터리, 예상치 못한 SUID 바이너리 — 를 보고합니다.
각 점검 결과에는 높음 · 경고 · 정보 · OK 등급이 매겨지고 한 줄 요약 배지로 집계되므로, 플릿 전체를 훑어보며 어느 호스트에 조치가 필요한지 한눈에 알 수 있습니다. 이 패널은 아무것도 변경하지 않습니다. 해결 링크를 누르면 실제로 변경을 수행하는 패널로 이동합니다 — 방화벽을 활성화하거나 규칙을 편집하는 서버 방화벽 패널, 원격 도구의 SSH 보안 강화 검토, 또는 fail2ban/CrowdSec을 설치하는 보안 도구입니다. root로 실행하거나 암호 없는 sudo가 있을 때 가장 깊이 점검할 수 있으며, 둘 다 없으면 가능한 항목만 실행하고 그 사실을 알려 줍니다. 상호 링크는 양방향으로 연결됩니다. 로컬 보안 패널은 macOS 방화벽으로, 서버 보안은 서버 방화벽으로 연결되며, 고정된 서버의 패널에서는 둘 다로 이동할 수 있습니다.
10.5에지 어플라이언스: NetScaler, BIG-IP와 VPN 게이트웨이
네트워크 경계에 있는 어플라이언스 — Citrix NetScaler ADC/Gateway, F5 BIG-IP, FortiGate, Palo Alto PAN-OS, Ivanti Connect Secure, Cisco ASA/FTD, Kemp LoadMaster, SonicWall SMA — 는 최근 몇 년간 발생한 대규모 침입 대부분의 출발점이었습니다. CitrixBleed, 2026년 NetScaler 제로데이, FortiOS SSL-VPN 버그, GlobalProtect, Ivanti의 2024–25년 연쇄 취약점, ArcaneDoor가 그 예입니다. 에지 어플라이언스 패널(라우터 및 방화벽, 그리고 각 제공업체의 카탈로그 패널 안에 있음)은 이러한 공격 캠페인의 핵심이 된 질문들을 계속해서 확인합니다.
패널은 각 어플라이언스의 실행 중인 버전을 읽어 제공업체의 공식 보안 공지와 대조하며, 실제로 악용된 취약점을 먼저 확인하고, 실제로 켜져 있는 기능을 고려합니다 — Gateway 가상 서버나 DTLS가 필요한 CVE는 구성상 해당 기능이 없다는 것이 입증될 때에만 영향을 받지만 사용 중이 아님으로 표시되며, 판단할 수 없을 때는 최악의 경우를 가정합니다. 또한 지원 종료(EOL) 브랜치, 공격자들이 노렸던 구성(데이터 플레인이나 WAN 인터페이스에 노출된 관리 기능, SSLv3/TLS 1.0, 기본 SNMP 커뮤니티, 원격 로깅 없음, 암호화되지 않은 구성 비밀 값, 공격자 플레이북에 나오는 이름의 관리자 계정), 그리고 가상 서버, HA 쌍, 인증서의 상태를 표시합니다. 모든 점검 결과에는 수정된 버전과 보안 공지가 명시되고, NetScaler에서 CitrixBleed 이후 필요한 세션 종료처럼 제공업체가 권장하는 업그레이드 후 조치가 나열됩니다.
연결. 전용 읽기 전용 계정을 사용하십시오 — read-only 명령 정책에 바인딩된 NITRO 사용자, BIG-IP Auditor, 읽기 전용 프로필을 가진 FortiOS API 사용자, PAN-OS “Superuser (read-only)” 키, Ivanti 읽기 전용 관리자, 쓰기 권한이 없는 Kemp 키 등입니다. Cisco ASA/FTD와 SonicWall SMA에는 안전한 읽기 API가 없으므로 버전을 직접 입력합니다. 자격 증명은 HTTPS로만 전송되며, 어플라이언스가 자신의 신원을 증명한 뒤에만 전송됩니다. 즉, 공개적으로 신뢰되는 인증서이거나, 콘솔과 지문을 비교한 뒤 승인한 자체 서명 인증서여야 합니다. 승인된 인증서가 바뀌면 FrontierStack은 아무것도 보내지 않고 심각 알림을 발생시킵니다.
패치했다고 깨끗한 것은 아닙니다. 대부분이 패치하기 전에 이미 악용된 CVE의 경우, 수정된 버전이라도 처리 완료로 표시할 때까지 침해 검사 실행, 장비에 저장되어 있던 자격 증명 교체, 기존 세션 종료를 상기시키는 알림이 남아 있습니다. NetScaler와 BIG-IP의 경우, SSH 호스트 키를 검증한 플릿 서버에 어플라이언스를 연결하고 침해 스캔을 실행하십시오. CISA, Mandiant, Citrix, F5의 침해 지표를 바탕으로 만든 고정된 읽기 전용 스크립트입니다. 중간에 중단되었거나 필요한 도구가 없는 스캔은 그 사실을 알려 주며, 절대 깨끗한 것으로 표시되지 않습니다.
10.6맬웨어 감사 패널
맬웨어 감사 패널은 Mac 한 대를 위한 방어자용 대시보드로, 부담 없이 항상 켜 둘 수 있는 점검부터 무거운 포렌식까지 여러 섹션으로 구성됩니다.
| 섹션 | 점검 내용 |
|---|---|
| 보호 기능 | Apple 자체의 보호 계층 — Gatekeeper(서명되지 않은 앱 차단), SIP(시스템 무결성 보호), FileVault, 그리고 알려진 맬웨어를 자동으로 검사하고 제거하는 XProtect / XProtect Remediator입니다. 다시 확인을 누르면 상태를 새로 고칩니다. |
| 지속성 및 자동 실행 | 타사 LaunchAgents와 LaunchDaemons — macOS에서 고전적인 지속성 확보 위치입니다. 서명되지 않은 항목은 주황색으로 표시되므로 각 항목을 직접 설치했는지 확인할 수 있습니다. Apple 서명 항목은 정상입니다. |
| ClamAV 주문형 스캔 | 시그니처 기반 안티바이러스입니다. 경로를 지정하고 스캔을 누른 뒤 감염된 파일 목록을 확인하십시오. 처음 스캔하기 전에 시그니처 업데이트(freshclam)를 실행하십시오. 읽기 전용이므로 보고만 할 뿐, 삭제하거나 격리하지 않습니다. |
| YARA 규칙 스캔 | YARA-X(yr) 또는 기존 YARA를 사용해 IOC 및 맬웨어 계열에 대한 규칙 기반 분류를 수행합니다. 위협 인텔리전스 피드의 규칙과 함께 사용하십시오. |
| 파일 평판 | 파일의 SHA-256을 계산하고 VirusTotal 보고서(70개 이상의 엔진, API 키 불필요)를 엽니다. 파일 자체는 절대 업로드되지 않으며, 해시만 사용됩니다. |
같은 ClamAV 주문형 스캔이 보안 패널에도 있으며, AI의 malware_scan 도구는 요청에 따라 임의의 경로에 대해 ClamAV 및/또는 YARA를 실행합니다 — 마찬가지로 읽기 전용입니다.

10.7심층 포렌식 도구
빠른 스캔만으로 충분하지 않을 때 사용하는 무거운 분석 도구는 보안 도구 카탈로그 범주에 설치 가능한 서비스로 들어 있습니다 — 카탈로그 필터로 표시하십시오(6장). Volatility 3는 RAM 캡처를 분석하는 메모리 포렌식 프레임워크이고, capa는 실행 파일 안에 숨겨진 기능을 식별하며, CAPE와 Cuckoo 샌드박스는 의심스러운 샘플을 격리된 환경에서 실행해 그 구성과 동작을 추출합니다. URLhaus, OpenPhish, OpenCTI 같은 위협 인텔리전스 서비스는 YARA 및 샌드박스 규칙에 데이터를 공급합니다. Wazuh 같은 SIEM 플랫폼은 아래에서 설명하는 별도의 SIEM 및 보안 데이터 섹션에 있습니다.
10.8EDR 플릿 보드
엔드포인트에서 이미 상용 EDR 에이전트를 실행하고 있다면, EDR 플릿 패널이 모든 콘솔을 아우르는 하나의 읽기 전용 요약을 제공합니다. 콘솔 추가…를 선택하고 제공업체를 고른 다음 API 자격 증명을 붙여 넣으십시오 — 자격 증명은 키체인에 저장되며 AI에는 절대 보이지 않습니다. 엔드포인트 수와 미해결 탐지 수는 SentinelOne, Huntress, CrowdStrike, Sophos Central, Bitdefender GravityZone, Microsoft Defender for Endpoint의 REST API에서 가져옵니다. Jamf Protect와 LimaCharlie는 접속 가능 여부만 확인하며, 그 밖의 콘솔은 일반(접속 가능 여부만)으로 추가할 수 있습니다. 플릿 합계 행은 전체를 합산합니다. 보드는 몇 분마다 새로 고쳐지며, 콘솔에 접속할 수 없게 되면 보안 그룹에서 알림이 발생하고 알림 세부 정보에 해당 콘솔의 미해결 탐지 수가 함께 표시됩니다. 콘솔 열기를 누르면 제공업체 자체의 대시보드로 이동해 심층 작업을 할 수 있습니다.
10.9SIEM 및 보안 데이터
SIEM & Security Data 사이드바 섹션은 예전에는 Security Tools와 Logging에 흩어져 있던 보안 운영 워크플로를 따로 모은 것입니다. 이 섹션의 SIEM Overview는 플릿에 관한 첫 번째 질문에 답합니다. FrontierStack이 알고 있는 보안 플랫폼과 데이터 경로는 무엇이며, 감시 중인 관리 엔드포인트에 연결할 수 있습니까? 행은 앱이 구체적인 증거를 확보했을 때만 구성됨으로 표시됩니다 — 저장된 API 자격 증명, 감지된 로컬 설치, 또는 원격 엔드포인트 감시입니다. 저장된 키는 Connected가 아니라 Credentials saved로, TCP 응답은 Healthy가 아니라 Reachable로 표시됩니다. 이렇게 구분하면 포트는 열려 있지만 고장 났거나 관계없는 서비스가 잘못된 녹색 상태를 받는 일을 막을 수 있습니다.
이 섹션은 두 계층으로 구성됩니다.
- SIEM 플랫폼 — Wazuh, Security Onion, Splunk, Elastic Security, Microsoft Sentinel, Google Security Operations, Graylog, IBM QRadar, Sumo Logic Cloud SIEM, Rapid7 InsightIDR, LogRhythm, Devo, FortiSIEM, OpenText ArcSight.
- 보안 데이터 파이프라인 — VirtualMetric DataStream, Cribl Stream, Logstash, Vector, Fluent Bit, Fluentd, NXLog, syslog-ng, OpenTelemetry Collector. 이들은 텔레메트리를 수집, 정규화, 필터링, 버퍼링하고 라우팅하며, 그 자체가 반드시 분석가가 인시던트를 추적하는 곳은 아닙니다.
서비스를 열어 알맞은 설정 방법을 선택하십시오. 클라우드 전용 SIEM에는 계정/테넌트와 최소 권한 API 토큰을 입력하는 Connect 영역이 표시되며, 토큰은 macOS 키체인에 저장되고 의미 없는 로컬 설치 버튼은 표시되지 않습니다. 자체 호스팅 또는 하이브리드 플랫폼은 제공업체의 배포 방법과 관리 콘솔을 감시하는 Remote Instance를 제공합니다. 실제 Homebrew formula가 있는 수집기는 로컬에서 설치하고 제어할 수 있으며, Linux/Windows 에이전트와 어플라이언스는 Mac 서비스인 척하는 대신 지원되는 패키지로 연결됩니다.
Sources & coverage는 계층을 합치지 않고 서로 연결합니다. 엔드포인트 콘솔 커버리지에는 EDR Fleet을, 호스트/네트워크 탐지와 침입 방지에는 Security를, 로컬 문제 해결에는 Logs를 사용하십시오. 전체 이벤트 보존, 상관 분석, 헌팅, 인시던트 대응은 SIEM 쪽이 담당합니다. FrontierStack은 상태 확인과 제어 평면 역할을 유지합니다. 자격 증명을 로컬에 보관하고, 증명할 수 있는 구성 요소를 확인하고, 연결이 끊기면 알리고, 심층 작업을 위해 올바른 콘솔로 안내합니다.
10.10읽기 전용 보안 감사
호스트의 실제 상태를 가장 빠르게 파악하는 방법은 AI의 security_audit 도구입니다. 이 도구는 This Mac 또는 SSH로 연결된 서버에서 포괄적이면서도 완전히 읽기 전용인 점검을 실행합니다. OS를 스스로 감지하고 대기 중인 보안 업데이트, 디스크 암호화(FileVault 또는 LUKS), 방화벽(macOS의 Application Firewall + pf, Linux의 ufw / iptables), SSH 강화, 수신 대기 포트, UID 0 및 권한 있는 계정, 암호 없는 sudo(NOPASSWD) 항목, 침입 방지, 최근 로그인 실패를 확인합니다. 암호 없는 sudo는 사용할 수 있는 곳에서만 사용하며, 사용할 수 없는 곳에서는 점검 범위를 줄여 그대로 진행합니다. 아무것도 변경되지 않으며, 우선순위가 매겨진 발견 사항 목록과 구체적인 수정 방법을 받게 됩니다. 이를 직접 적용하거나, 평소의 승인 카드를 거쳐 AI에게 다시 맡길 수 있습니다. 원격으로 감사하려면 target을 서버 이름으로 설정하고, 로컬 Mac을 감사하려면 생략하십시오.
10.11Security Audit 패널: 샌드박스 안에서 실행되는 악용 가능 취약점 전용 감사
위의 읽기 전용 security_audit 점검은 호스트가 어떻게 구성되어 있는지 알려 줍니다. Security Audit 패널은 더 어려운 질문을 던집니다. 여기서 공격자가 실제로 악용할 수 있는 것은 무엇입니까? 이 패널은 코딩 에이전트를 적대적인 감사자로 바꿉니다. 에이전트는 대상을 파악한 뒤 여러 각도에서 취약점을 찾고 — 인젝션, 손상된 접근 제어, 인증 및 권한 부여, 비즈니스 로직, 암호화, 노출된 비밀 값, SSRF, 잘못된 구성, 연쇄 공격 — 이어서 자신의 발견 사항을 하나하나 반증하려고 시도하므로, 최종적으로 남는 것은 구체적인 공격 경로가 있는 문제뿐입니다. 모든 발견 사항에는 시나리오와 수정 방법이 함께 제공되며, 이론적인 잡음은 없습니다.
두 가지 모드로 실행됩니다. Codebase는 에이전트가 저장소나 웹 프로젝트 폴더를 대상으로 소스를 감사합니다. Infrastructure는 FrontierStack이 이미 수집하는 신호로 자신의 환경 전체를 감사합니다 — Cloudflare 영역과 그 TLS/WAF 설정, 도메인 및 인증서 상태, 각 고정된 서버의 OS, 노출된 서비스, 원격 접근 및 MDM/활성화 잠금/FileVault 상태, 로컬 방화벽 — 이를 정리한 비식별화된 인벤토리를 에이전트가 공격합니다.
전체 실행은 Sandcastle Docker 샌드박스 안에서 이루어지므로, 신뢰할 수 없는 코드를 대상으로 하는 적대적 에이전트가 호스트에 직접 닿지 않습니다. 처음 감사를 실행할 때 앱이 샌드박스 이미지와 실행기를 준비하며(Docker 또는 Podman이 실행 중이어야 합니다), 그 이후에는 바로 실행이 시작됩니다. 발견 사항은 심각도 배지와 함께 표시되며, Obsidian에 저장하거나 critical 또는 high 항목을 알림으로 올릴 수 있습니다. 다른 모든 곳과 마찬가지로 Mac 밖으로 나가는 것은 비식별화된 프롬프트뿐이며 — 비밀 값은 먼저 제거됩니다 — 샌드박스 안의 에이전트는 claude setup-token으로 받은 토큰(또는 Anthropic API 키)을 사용해 Claude 구독으로 인증합니다.
.env, 개인 키, service-account.json — 이 들어 있는 폴더는 샌드박스에 마운트되지 않고 거부됩니다. 깨끗한 체크아웃을 감사하십시오.
10.12Strix: AI 침투 테스트
지금까지의 감사는 읽기 전용입니다. 호스트가 어떻게 구성되어 있는지, 그 코드의 어디가 악용될 수 있는지를 살펴봅니다. Strix는 한 걸음 더 나아가 능동적인 침투 테스트를 실행합니다. Security 패널의 Strix AI Security Testing 섹션에서 저장소 폴더, Git URL, 도메인, URL 또는 IP 주소를 지정하고(또는 연결된 호스트 중 하나를 선택하고), 깊이를 Quick, Standard, Deep 중에서 고르면, Strix가 공격 표면을 파악하고 실제 익스플로잇 경로를 시도한 뒤 침투 테스트 보고서를 작성합니다.
FrontierStack은 호스팅 서비스를 스크레이핑하는 대신, 오픈 소스 Strix 명령줄 에이전트를 Mac에서 로컬로 구동하고 그것이 디스크에 남기는 실행 결과물 — 발견 사항, 실행 메타데이터, 보고서 — 을 읽는 방식으로 이를 수행합니다. CLI가 설치되어 있지 않으면 섹션에 그렇게 표시되고 Install Strix… 링크가 제공됩니다. Update Strix는 스크립트를 셸에 파이프하는 방식이 아니라 uv 또는 pipx로 업그레이드합니다. AI 제공업체 키는 선택 사항입니다. 키를 입력하면 macOS 키체인에 저장되고, 로컬 Strix 프로세스에만 전달되며, 화면에 표시되거나 클라우드 모델로 전송되는 일은 없습니다 — 패널에는 키가 구성되어 있는지만 표시됩니다.
타일에는 마지막 실행이 요약됩니다. Critical, High, Medium 건수, 소요 시간, 최근 24시간 동안 새로 나온 항목, 실패한 스캔입니다. 진행 중인 실행에는 실시간 단계 텍스트와 Stop 버튼이 표시되며, 새로운 critical 또는 high 발견 사항이 나타나면 Silence alerts가 켜져 있지 않은 한 로컬 알림을 받습니다. Open Findings와 Export Report로 세부 정보를 확인하고, Re-run Failed Scan과 Restart Scan Engine으로 잘못된 실행을 복구할 수 있습니다. 심각한 발견 사항은 민감한 정보로 취급되며 클라우드 AI로 전송되지 않습니다. AI 관리자도 strix_status, strix_scan, strix_control을 통해 Strix를 구동할 수 있으며, 모두 13장에서 다룹니다.
10.13인증서 소스와 TLS
인증서 만료는 스스로 자초한 장애입니다. Certificate Sources 대시보드는 호스트의 발급 스택별로 한 행씩 보여 줍니다 — Let's Encrypt(acme.sh 사용), Certbot, Step CA, Traefik, Cloudflare SSL — 만료일은 openssl로 인증서 자체에서 직접 읽어 옵니다. Cloudflare는 분석용으로 구성한 토큰과 영역을 사용하며, 이 Mac에 없는 소스는 흐리게 표시됩니다. Traefik은 대시보드가 acme.json을 가리키도록, Step CA는 해당 URL을 가리키도록 지정할 수 있습니다.
인증서 발급에는 두 가지 방법이 있습니다. mkcert는 로컬에서 신뢰되는 인증서를 만듭니다 — 공개 CA가 필요 없는 .localhost나 LAN 이름에서의 개발에 적합하며, 설치되어 있으면 Certificates 패널의 Get 동작이 이를 사용합니다. 외부에서 접근해야 하는 모든 것에는 Let's Encrypt를 사용하십시오. AI의 issue_certificate 도구는 This Mac 또는 연결된 서버에서 acme.sh나 certbot을 실행하며, DNS-Cloudflare 방식에서는 실행 시에 주입되는 CF_TOKEN 보관함 비밀 값을 읽고 이 값은 모델로 전송되지 않습니다. 상용 인증서가 필요하면 Certificates 패널의 ACME 섹션에서 인증 기관으로 GlobalSign Atlas를 선택하고, Atlas 포털의 EAB 키 ID와 HMAC 키를 입력해 한 번 등록하십시오. 이후 발급과 갱신은 같은 방식으로 이루어지며 HMAC 키는 키체인에 보관됩니다.
10.14메일 보안
메일 서버에는 서로 다른 두 가지 위험이 있습니다. 위장될 수 있고(누군가 도메인 명의로 메일을 위조), 악용될 수 있습니다(낯선 사람을 대신해 메일을 릴레이). FrontierStack은 두 가지 모두에 대응하며, 그 도구들은 Postfix가 밑에서 동작하는 구형 Apple Server 환경도 이해합니다.
- 위장 방지 DNS —
email_auth_dns는 SPF, DMARC, (선택적으로) DKIM TXT 레코드를 생성합니다. SPF는 도메인을 대신해 누가 메일을 보낼 수 있는지 선언하고, DMARC는 수신 측에 실패 시 처리 방법을 알리며, DKIM은 발신 메일에 암호학적으로 서명합니다.publish=cloudflare를 지정하면 레코드를 대신 만들어 주고, 그렇지 않으면 BIND, dnsmasq 또는 등록 대행업체에 붙여 넣을 정확한 레코드를 출력합니다. - DKIM 키 —
generate_dkim_key는 도메인과 셀렉터를 지정해 서버에서opendkim-genkey를 실행하고, 게시할 TXT 레코드 형태로 공개 키를 반환합니다. 개인 키는 OpenDKIM milter용으로 서버에 남습니다. - Postfix 강화 —
harden_mail_postfix는 SSH를 통해postconf로 안전한 기본값을 적용합니다. 릴레이에 SMTP AUTH 요구(오픈 릴레이 차단), 알 수 없거나 목록에 없는 발신자 도메인 거부, 선택적으로 발신자/로그인 일치 강제입니다. Postfix를 다시 로드하고 적용된 설정을 출력합니다. - 오픈 릴레이 테스트 —
test_open_relay는 안전한 SMTP 대화(외부 도메인으로 EHLO / MAIL FROM / RCPT TO 후 전송하지 않고 QUIT)를 실행하고, 외부 수신자가 거부되었는지(정상) 수락되었는지(오픈 릴레이 — 위험) 보고합니다. - 전달 프로브 — 서버의 Mail Server Policy 섹션에서 태그가 붙은 테스트 메시지 한 통을 릴레이를 거쳐 끝까지 보내고 정확한 SMTP 판정을 확인합니다. accepted & queued(큐 ID 포함), deferred, rejected, 또는 TLS 인증서 실패입니다. 이것으로 “수락된 뒤 조용히 버려짐”과 실제 전달을 구분할 수 있습니다 — 또한 LAN IP로 지정한 릴레이처럼 STARTTLS 인증서를 검증할 수 없는 경우에는 Trust LAN relay 옵션으로 암호화되었지만 검증되지 않은 채널로 다시 시도합니다. Apple Server.app 서버에서는 구성상 로그가 syslog/ASL에 맡겨져 있어도 FrontierStack이 Postfix의 실제 로그를 찾아내고, 메일 큐와 Server.app의
/Library/Logs/Mail/파일도 읽습니다. - 계정 확인 — Mail Server 패널에서 메일 계정의 POP3, IMAP, SMTP 설정을 입력하고 Check Settings를 클릭하십시오. 각 서버에 메일 클라이언트가 연결하는 방식 그대로 접속을 시도하며, 단계마다 무엇을 발견했는지 알려 줍니다. 확인되지 않는 서버 이름, 연결을 거부하거나 방화벽에 의해 조용히 버려지는 포트, 포트와 맞지 않는 보안 모드(110 또는 587의 SSL/TLS, 995, 993 또는 465의 STARTTLS), TLS 1.0/1.1, 그리고 이 Mac이 신뢰하지 않는 인증서와 그 이유(만료, 다른 이름으로 발급, 자체 서명 또는 중간 인증서 누락)입니다. 그런 다음 로그인하여 메시지 수를 읽고 로그아웃하며, 로그인이 거부되면 서버의 응답을 그대로 보여 줍니다. 아무것도 다운로드, 전송, 삭제되지 않으며 암호는 저장되지 않습니다. 인증서가 유효하지 않거나 연결이 암호화되지 않은 경우에는, 따로 켜지 않는 한 암호를 아예 전송하지 않습니다.
serveradmin으로 관리될 수 있으며, 이것이 main.cf를 덮어써 harden_mail_postfix 변경을 조용히 되돌릴 수 있습니다. 적용 후 결과를 검토하고, 원래대로 돌아갔다면 Server.app에서 같은 설정을 다시 적용하십시오.10.15암호 자동 완성과 Credential Exchange
FrontierStack은 이미 관리하는 웹 페이지의 로그인 정보를 보관하고 있습니다 — Routers & Network ▸ Web links에 저장한 라우터나 프린터, Synology 또는 QNAP 관리자 계정, Boot Media의 서버 컨트롤러, 서비스 로그인 등입니다. Password AutoFill 패널(Secrets & Vaults)을 사용하면 Safari와 다른 앱이 이를 자동으로 채울 수 있으므로, 더 이상 앱에서 암호를 복사해 올 필요가 없습니다.
- Secrets & Vaults ▸ Password AutoFill을 여십시오. 상태 줄에 FrontierStack이 켜져 있지 않다고 표시되면 Turn On…을 선택하고 시스템 설정 ▸ 일반 ▸ 자동 완성 및 암호에서 FrontierStack을 활성화하십시오.
- Saved in FrontierStack 아래에서 Safari가 채워도 되는 각 로그인 옆의 Offer를 선택하십시오. 앱의 다른 곳에 보관되어 있지 않은 로그인은 Add a Login…으로 추가할 수 있습니다.
- 기기의 웹 페이지에서 FrontierStack 제안을 선택하고(또는 암호 메뉴를 열어 FrontierStack을 선택하고), Touch ID나 Mac 암호로 확인하십시오.
Credential Exchange(macOS 26 이상)는 암호 관리자 간에 암호를 옮기기 위한 FIDO 표준입니다. 암호 앱 — 또는 이를 지원하는 다른 암호 관리자 — 에서 앱으로 내보내기를 선택하고 FrontierStack을 고르십시오. macOS가 데이터를 바로 넘겨 주므로 중간에 디스크에 기록되는 것은 없습니다. 그러면 FrontierStack이 검토 화면을 보여 줍니다. 주소가 이 네트워크에 속하는 로그인(알려진 FrontierStack 로그인, 플릿 서버, 사설 주소)은 미리 체크되어 있으며, FrontierStack에 로그인은 있지만 아직 암호가 없는 경우에는 가져온 암호로 채울 수 있습니다. 원하지 않는 항목은 체크를 해제하십시오. 패스키, 인증 코드, 카드, 메모, 체크하지 않은 모든 로그인은 완료 시 폐기되며, 감사 로그에는 건수만 기록됩니다.
반대 방향으로는 Export to a Password Manager…를 사용해 저장된 로그인을 체크하여 Touch ID나 암호 확인 후 다른 앱으로 보낼 수 있습니다. 그러면 macOS가 대상을 선택하는 자체 시트를 표시합니다.
10.16외부에서 누가 변경할 수 있는가
지금까지 설명한 내용은 모두 FrontierStack이 관리하는 머신을 강화하는 것입니다. 이 섹션은 FrontierStack 자체를 강화하는 방법을 다룹니다 — 플릿 전체의 SSH 키, 데이터베이스 암호, 클라우드 토큰을 보관하는 앱은 그 앱이 관리하는 어떤 단일 서버보다도 매력적인 공격 대상이기 때문입니다.
FrontierStack은 여러 경로를 통해 외부에서 제어할 수 있습니다. AI 클라이언트용 MCP 서버, Webhook과 모바일 패널용 인바운드 HTTP 제어 서버, 단축어와 Siri용 App Intents, 그리고 — 활성화한 경우 — 에이전트 통합입니다. 각각은 이미 자체 토큰을 갖고 있습니다. 이 모든 것 위에 Remote Control & Lock의 두 가지 설정이 있으며, 각 설정이 어떤 질문에 답하는지 분명히 알아 두는 것이 좋습니다.
앱 잠금은 잠금 상태에서 무엇이 남는가에 답합니다. 암호를 설정하고 앱을 잠그면 윈도우가 가려지고, 모든 외부 접점은 완전히 차단되거나 읽기 전용으로 제한됩니다.
10.19.1Fleet: 물리적 보안 키 요구
Fleet 라이선스에서는 암호 잠금 설정 바로 옆에 Physical security key가 추가됩니다. Yubico YubiKey, Google Titan, FEITIAN ePass 중 하나를 선택한 뒤 Apple의 시스템 보안 키 시트에서 키를 등록하십시오. FrontierStack은 공개 자격 증명만 저장하며, 개인 키는 동글 밖으로 나가지 않습니다.
활성화하면 FrontierStack은 잠긴 상태로 시작하고, 백그라운드로 전환되면 다시 잠깁니다. 등록된 키를 연결하거나 갖다 대고 터치하기 전까지는 아무 동작도 하지 않습니다 — 윈도우와 모든 외부 제어 접점이 계속 차단됩니다. 앱 잠금 암호도 구성했다면 잠금 해제는 2단계입니다. 올바른 암호와 물리적 키 터치가 모두 필요합니다. 키가 없다고 해서 암호만으로 접근하도록 대체되는 일은 없습니다.
키는 최대 세 개까지 등록할 수 있으며, 적어도 하나는 백업으로 다른 장소에 보관하십시오. 지원되는 제품군은 YubiKey, Google Titan, FEITIAN FIDO2/ePass입니다. iPhone과 iPad에서는 호환되는 USB-C 또는 Lightning 키를 사용하거나, Apple의 시트가 요청할 때 NFC 지원 모델을 갖다 대십시오. 정책을 해제할 때도 현재 등록된 키의 새로운 터치가 필요하므로, 잠금 해제된 세션을 가진 사람이 몰래 보호를 약화시킬 수 없습니다.
페어링된 기기와 Script Secrets
키를 등록하면 Paired devices need the key too가 기본적으로 켜집니다. 페어링 코드 생성, KeyRotate 페어링, 페어링된 기기의 권한 상향 — 더 높은 수준, 원격 셸 또는 AI 변경 — 은 각각 이 Mac에서의 터치가 필요합니다. 기기의 권한을 낮추거나 폐기할 때는 필요하지 않습니다. 휴대폰의 비밀 값 및 셸 요청은 터치로 기기 키 세션(기본 15분)이 열릴 때까지 거부됩니다. 세션 없이 휴대폰이 요청하면 Mac에 키 프롬프트가 최대 1분에 한 번 표시됩니다. FrontierStack을 잠그면 세션이 닫히며, Paired Devices에서 세션이 열려 있는지 확인할 수 있습니다.
AI의 Script secrets도 키로 봉인할 수 있습니다. AI 관리자의 Encrypt with Security Key…는 값을 secrets.env.fsenc에 저장하며, 이 값은 등록된 보안 키의 터치로만 복구할 수 있는 키로 암호화됩니다(FIDO2 PRF, macOS 26.4 이상). 이름은 계속 표시됩니다. 값은 실행하거나 잠글 때마다 터치가 필요하고, 1시간 후 다시 잠깁니다. 값을 사용하는 스크립트는 실행될 때 터치를 요청합니다. 백업 키마다 Add Backup Key…를 사용하십시오. 이 기능이 생기기 전에 등록한 키는 먼저 제거한 뒤 다시 등록해야 하며, 비밀 값이 키에 봉인되어 있는 동안에는 FrontierStack이 모든 키를 제거하도록 허용하지 않습니다.
보안 키를 사용한 SSH. 연결된 서버의 Edit Settings에서 Create Security-Key SSH Key…를 사용하면 보안 키에 ed25519-sk 키를 만들고, 이미 가진 접근 권한으로 서버에 설치한 뒤, 테스트 세션이 성공한 후에만 서버를 새 키로 전환합니다. 원하면 서버에서 이전 키를 제거할 수도 있습니다. 평소에는 Open Key Session으로 한 번 터치하면, 모니터링, 명령, 터미널이 유휴 시간이 시간 제한(기본 60분, 서버별로 설정)에 이를 때까지 그 세션을 공유합니다. 세션이 닫혀 있는 동안 해당 서버의 모니터링은 서버를 다운으로 표시하지 않고 일시 중지되며, 백그라운드 작업이 터치를 기다리는 일은 없습니다. Apple 기본 제공 ssh는 FIDO 키를 사용할 수 없으므로 이 Mac에는 Homebrew의 OpenSSH가 필요하며, FrontierStack이 설치를 제안합니다. 이는 Linux와 Windows를 포함한 모든 서버에 적용됩니다. 서버에는 추가로 설치되는 것이 없으며, OpenSSH 8.2 이상만 있으면 됩니다. Stop Using Security Key…를 사용하면 서버가 이전 키로 돌아갑니다.
External changes는 다른 질문에 답합니다. 잠금 해제된 앱에서 외부 호출자가 무언가를 변경하려면 어떤 절차를 거쳐야 합니까? 이 설정은 모든 외부 접점 — MCP 서버, 제어 패널, 단축어, 명령줄 — 에 한꺼번에 적용됩니다. 수준은 세 가지입니다. Full auto는 외부 도구가 묻지 않고 동작하도록 허용합니다 — 연결된 모든 클라이언트와 그것이 실행되는 머신을 신뢰할 때만 정당화할 수 있습니다. 기본값인 Confirm each action은 모든 변경 앞에 호출자 이름을 표시한 승인 패널을 띄웁니다. 요청이 대기 중이고 FrontierStack이 맨 앞의 앱이 아닌 동안에는 Dock 아이콘이 계속 튀어 오르며 — 응답하지 않고 다른 곳을 보더라도 마찬가지입니다 — 요청에 응답하면 멈춥니다. 대기 중인 요청의 알림에는 Deny와 Allow once 버튼이 있습니다 — 마우스를 올리면 보이고, 시스템 설정 › 알림에서 FrontierStack을 알림 스타일로 설정하면 항상 보입니다. Deny는 알림에서 언제나 동작합니다. Allow once는 사람 존재 확인 보호가 Touch ID를 사용할 때 Touch ID를 요구하고, 하드웨어 입력 보호를 사용할 때는 알림의 클릭과 합성 클릭을 구분할 수 없으므로 대신 패널을 엽니다. 시간제 허용은 패널에서만 할 수 있습니다. 읽기만 하는 호출 — 메일 서버 감사, DNS 레코드 목록 조회 — 에는 확인을 요청하지 않습니다. Password required는 외부 도구가 서버에 손대기 전에 반드시 암호를 요구합니다.
확인 수준에는 인시던트 중에 중요한 안전밸브가 있습니다. 변경을 승인할 때 Allow for session을 선택하면 5분간 허용되지만, 그 호출자 하나와 그 동작 종류 하나에만 적용됩니다. MCP 클라이언트의 서비스 재시작을 승인해도 그 클라이언트의 셸은 허용되지 않으며, 모바일 패널로 요청된 재시작도 허용되지 않습니다. 이렇게 범위를 좁히는 것이 핵심입니다. 장애 중에 확인 요청이 반복되면 사람들은 결국 Full auto로 영구 전환하게 되며, 허용이 옆으로 새어 나간다면 그것이 대신한 확인 요청보다 더 나쁠 것입니다.
어느 수준에서든 세 가지 속성이 유지되며, 이 속성들 덕분에 이 설정은 단지 구성 가능한 것이 아니라 신뢰할 수 있는 것이 됩니다. 읽기는 절대 차단되지 않습니다 — 무엇을 선택하든 모니터링 클라이언트는 계속 동작합니다. 인시던트 중에 꺼지는 대시보드는 오히려 해가 되기 때문입니다. 자격 증명, 셸 접근, FrontierStack 자체 설정은 어떤 수준에서도 외부에서 변경할 수 없습니다. 원격 도구에서 온 요청은 암호를 읽거나 임의의 명령을 실행하기에는 애초에 잘못된 출처라는 판단에 따라, 이러한 요청은 확인을 묻지 않고 거부됩니다. 그리고 세션 허용은 디스크에 기록되지 않습니다. 앱을 종료하거나 잠그면 허용이 지워지므로, 5분간의 편의가 잊어버린 상시 권한으로 몰래 바뀌는 일은 없습니다.
10.19.2사람 존재 확인 승인 — AI가 마우스를 움직일 수 있을 때
확인 패널은 그것을 클릭하는 주체가 사람이라고 가정합니다. 컴퓨터 전체를 조작하는 AI 에이전트(“컴퓨터 사용”)는 이 가정을 깨뜨립니다. 합성 마우스 및 키보드 이벤트를 보내거나, 손쉬운 사용을 통해 컨트롤을 직접 누를 수 있으며, 어느 쪽이든 바로 그것을 막기 위해 존재하는 카드에서 사람과 똑같이 Approve를 누릅니다. 같은 Remote Control & Lock 패널에 있는 Human-Presence Approvals는 두 가지 수준으로 이 경로를 막습니다.
Real keyboard & mouse only는 모든 승인 뒤에 있는 입력을 검사합니다. 실제 클릭이나 키 입력은 이를 보낸 프로세스 없이 macOS가 전달하지만, 합성 이벤트에는 이를 보낸 앱의 신원이 담겨 있고, 손쉬운 사용을 통한 누르기는 입력 이벤트 자체가 없습니다. 실제 하드웨어 입력이 아닌 것은 모두 거부됩니다. 승인 카드는 열린 채로 남고, 카드에 무슨 일이 있었는지 메모가 표시되며, 이벤트가 변경 로그에 기록되고(식별할 수 있으면 이벤트를 보낸 앱 이름 포함), 자동화가 방금 무언가를 승인하려 했다는 알림이 표시됩니다.
Real input + Touch ID는 결정적인 증거를 추가합니다. 모든 승인에 Touch ID(또는 페어링된 Apple Watch)도 요구하며, 암호로 대체할 수 없습니다 — 암호는 합성 키보드가 입력할 수 있는 바로 그것이지만, 지문은 Mac의 소프트웨어가 절대 보낼 수 없는 유일한 것입니다. 보안 키가 등록되어 있어도 의도적으로 Touch ID를 요구합니다. Mac에 꽂아 둔 키는 그 Mac에서 실행되는 소프트웨어의 손이 닿는 곳에 있지만, 지문은 그렇지 않기 때문입니다. Touch ID도 Watch도 없는 Mac에서만 등록된 보안 키의 터치로 대체됩니다.
이 게이트는 모든 승인 결정 — 스크립트 카드, 보안 확인, 외부 도구 허용, AI가 제안한 수정, 앱 잠금 암호 — 에 적용되며, 거부에는 증명이 필요하지 않으므로 이 보호는 승인을 막을 수만 있을 뿐 무언가를 계속 실행되게 만들 수는 없습니다. 의도된 부수 효과 두 가지를 알아 두십시오. 화면 공유, VNC 또는 KVM으로 주입된 입력은 합성 입력으로 간주됩니다(머신 앞에서 직접 승인하거나, Watch를 통해 화면 공유에서도 동작하는 Touch ID 수준을 사용하십시오). 또한 Karabiner-Elements 같은 키 리매퍼나 손쉬운 사용을 통해 컨트롤을 누르는 보조 도구도 합성 입력으로 취급됩니다.
10.19.3KeyRotate: 키의 마스터 사본
Enfour의 Mac App Store 키 관리 앱인 KeyRotate는 컴패니언 앱(자격 증명 전용) 수준으로 FrontierStack과 페어링한 뒤, FrontierStack이 사용하는 키의 마스터 사본을 보관합니다. 대상은 AI 제공업체 키, Cloudflare, 호스팅, 이메일 리스트, 에이전트 토큰, CLI Proxy의 클라이언트 키, 그리고 Firecrawl, Supabase, Shopify, PagerDuty처럼 키 하나를 받는 모든 서비스 패널과 SaaS 모니터의 키입니다. Stripe 모니터의 제한된 키와 GitHub, GitLab, Gitea, Bitbucket 토큰은 보통 앱의 키보다 권한 범위가 좁기 때문에, 직접 선택한 경우에만 연결됩니다. 페어링되어 있는 동안 KeyRotate는 이 키들을 각각 FrontierStack에 보내 최신 상태로 유지하며, FrontierStack에 입력한 키는 입력을 멈추고 몇 초 후 KeyRotate로 다시 전송됩니다. 그러면 KeyRotate가 해당 키를 기록하는 모든 파일을 다시 씁니다. 이 전송은 한 계정에 대해 2분간 유효한 일회용 티켓으로 이루어지며, 서명된 컴패니언 앱만 사용할 수 있습니다. 티켓을 전달하는 링크에는 계정 이름만 들어 있고 값은 절대 포함되지 않습니다.
FrontierStack이 실행 중일 때 KeyRotate를 처음 열면 FrontierStack의 키를 가져올지 묻습니다. FrontierStack은 어떤 키가 어느 앱으로 가는지 보여 주며 기본값은 거부이고, 허용하려면 Mac에서 Touch ID를 사용할 수 있을 때는 항상 Touch ID가 필요하며 암호로 대체할 수 없습니다. 사용 가능한 Touch ID가 없는 Mac에서만 Apple Watch, 등록된 보안 키, 또는 그마저 없을 때 로그인 암호를 허용합니다. FrontierStack이 열려 있지 않아도 됩니다. 숨겨져 있거나 백그라운드만으로 종료되어 있어도 KeyRotate가 호출하면 백그라운드 서비스가 앱을 시작합니다. 휴대폰은 전체 제어 권한이 있더라도 이 요청을 할 수 없으며, 모든 전송은 감사 로그에 기록됩니다.
KeyRotate를 통한 교체. KeyRotate가 페어링되어 있으면 AI 관리자가 credentials 도구로 키를 교체할 때 기본적으로 KeyRotate에 교체를 요청합니다. 따라서 새 키가 FrontierStack에만 반영되는 것이 아니라 KeyRotate가 그 키를 기록하는 모든 파일에 반영됩니다. FrontierStack은 계정 이름과 일회용 티켓만 담은 keyrotate://rotate 링크를 열고, KeyRotate는 서명되고 고정된 연결을 통해 그 티켓을 확인한 후에만 동작합니다. KeyRotate는 자체 규칙(활성 구독, 그리고 잠겨 있을 때는 FrontierStack을 요청자로 표시하는 Touch ID 확인)을 적용하고, 새 키를 FrontierStack에 보내며, 자동 업데이트 설정이 켜져 있으면 다른 대상 파일도 다시 쓴 뒤, 대기 중인 도구에 결과를 보고합니다. 이전 키는 절대 폐기되지 않습니다. 이 Mac에서 직접 교체하려면 via: frontierstack을 전달하십시오. 저장된 키는 모두 교체할 수 있습니다. 제공업체의 API가 대체 키를 발급하는 경우(키 자체 또는 저장된 관리자 키 사용)에는 자동으로, 그렇지 않으면 수동으로 교체합니다. 수동 교체 시에는 FrontierStack 또는 KeyRotate가 제공업체의 키 페이지를 열고 붙여넣은 새 키를 검증합니다. AI 관리자에게 보내는 프롬프트에 저장된 키가 나타나면 AI 관리자가 교체를 제안하며, MCP와 CLI(frontierstack keys, frontierstack rotate <service>)를 통해 연결된 외부 AI 도구도 유출된 키를 발견하면 같은 제안을 하도록 안내받습니다.
keyrotate:// 링크를 열 수 있으므로, 직접 요청하지 않은 페어링 링크는 수락하기 전에 확인을 요청합니다.10.17auth.md를 이용한 에이전트 로그인
암호는 자동화하기에 가장 나쁜 자격 증명이므로, FrontierStack은 타사 서비스의 장기 암호를 붙여넣으라고 요구하지 않습니다. 대신 auth.md를 찾아냅니다. auth.md는 서비스가 https://<host>/auth.md에 게시하여 AI 에이전트가 사용자를 대신해 로그인하는 방법을 알려 주는 공개 사양(WorkOS가 처음 제안)입니다. 서비스의 Connect ▸ Login Automation (auth.md) 펼침 영역과 AI의 check_authmd 도구는 이 공개 파일을 가져와 공지된 흐름(에이전트 검증 또는 사용자 주장), 범위, OAuth 엔드포인트를 요약하거나, 게시된 파일이 없다고 보고합니다. 권한 부여 자체는 해당 서비스에서 이루어지며 수명이 짧고 폐기할 수 있으며 범위가 제한된 토큰이 발급됩니다. FrontierStack은 암호를 저장하지 않습니다. 현재 Cloudflare와 Firecrawl이 auth.md를 게시하고 있으며, 지원 서비스는 점점 늘고 있습니다.
10.18서명된 요청 신뢰 모델(FS1)
FrontierStack 자체의 제어 인터페이스(로컬 제어 서버, MCP 서버, 원격 fsagent)는 TLS를 통한 베어러 토큰으로 보호됩니다. 그러나 토큰만으로는 공유 비밀 값에 불과합니다. 재사용(리플레이)이 가능하고, 누가 호출하는지 증명하지 못합니다. FS1 서명된 요청 방식은 그 위에 두 번째 요소를 더합니다. 모든 요청은 승인된 기기별 Ed25519 키로 서명되며, 서버는 공개 키 허용 목록을 유지하고 명시적으로 승인하지 않은 키로 서명된 요청은 모두 거부합니다. 따라서 토큰이 유출되어도 그것만으로는 아무것도 제어할 수 없습니다. 플릿이 이미 신뢰하고 있는 SSH 키의 HTTP판이라고 할 수 있습니다.
각 요청에는 기기의 키 ID, 타임스탬프, 무작위 nonce, 그리고 정규화된 문자열에 대한 서명이 담깁니다. 서버는 키가 승인되었는지, 타임스탬프가 60초 범위 안에 있는지, nonce가 이전에 사용되지 않았는지(서명이 확인된 후에만 nonce를 사용 처리하므로 잘못된 서명으로 nonce를 소진시킬 수 없음), 서명이 유효한지를 확인합니다. 같은 방식이 macOS 앱, Go 에이전트, iOS 클라이언트에 동일하게 구현되어 있으며, 언어 간 테스트로 일치가 보장됩니다.
기기는 사이드바의 Overview 그룹에 있는 페어링된 기기 패널에서 관리합니다(이전에는 이 보안 패널 안에 있었습니다). 페어링된 각 휴대폰이나 태블릿에는 레이블, 키 지문, 마지막 확인 시각, 범위 선택기, 폐기 버튼이 표시됩니다. 페어링은 한두 명이 각자 기기 두어 대를 쓰는 경우를 전제로 하며(등록은 최대 4대), 각 기기에는 범위가 지정됩니다.
| 범위 | 상태 및 로그 읽기 | 서비스 재시작 | 플릿 작업 | 도구 / CLI / 스크립트 |
|---|---|---|---|---|
readOnly | 예 | — | — | — |
restart | 예 | 예 | — | — |
operate | 예 | 예 | 예 | — |
full | 예 | 예 | 예 | 예 |
같은 섹션에 제어 서버와 MCP 서버별 요청 서명 필수 스위치가 있습니다. 도입은 의도적으로 완만하게 설계되었습니다. 서명이 선택 사항인 동안 서버는 토큰 또는 서명을 받아들이며, 이미 가진 토큰으로 첫 번째 키를 등록할 수 있도록 부트스트랩 예외가 있습니다. 따라서 강제 적용을 켜도 모두가 차단되는 일은 결코 없습니다.
각 행에는 기기별 제어가 두 가지 더 있습니다. AI 관리자 허용(기본적으로 켜짐, 모든 범위에서 사용 가능)은 그 휴대폰이 AI와 대화할 수 있는지를 결정합니다. 신뢰하는 휴대폰은 채팅을 허용하고 다른 휴대폰은 차단할 수 있으며, 이 스위치는 언제나 권한을 제한하기만 합니다. 켜져 있더라도 변경을 가하는 모든 작업에는 여전히 앱 잠금 해제, 서명된 기기, full 범위의 “Allow changes”가 필요합니다. 원격 셸 허용은 full 범위에서만 제공되며 기본적으로 꺼져 있습니다. 휴대폰이 명령줄 셸을 열고, 이 Mac이 오프라인일 때 직접 접속할 수 있도록 서버에 자신의 SSH 키를 설치하려면 이 명시적 허가가 필요합니다. 휴대폰을 분실한 경우 분실한 휴대폰 보호를 사용하면 기기와 대기 중인 이전 작업이 즉시 차단되고, 세션이 닫히며, 접근 가능한 서버에서 직접 SSH 키가 제거되고, 푸시 토큰이 비활성화됩니다. 오프라인 서버는 목록에 남아 있으므로 서버가 돌아오면 정리를 마무리할 수 있습니다.
Bluetooth 페어링 대체 경로. 새 휴대폰이 Wi-Fi나 Tailscale로 이 Mac에 접근할 수 없는 경우(제한된 게스트 네트워크, 클라이언트 격리, 캡티브 포털 등)에도 Bluetooth로 등록을 완료할 수 있습니다. Bluetooth 페어링 허용(기본적으로 꺼짐)을 켜면 페어링 대화상자가 열려 있는 동안에만 Mac이 수명이 짧은 GATT 서비스를 알립니다. 휴대폰은 같은 일회용 QR 코드를 스캔하고 동일한 서명 등록 핸드셰이크를 실행하며, 다만 HTTPS 대신 BLE로 전달합니다. FS1 서명은 전송 방식에 의존하지 않으므로, Bluetooth 경로도 TLS 채널 없이 같은 신뢰 보장을 그대로 이어받습니다.
어디서나 Mac에 접근하기. 기본 상태에서 페어링된 휴대폰은 Mac과 같은 네트워크에 있을 때만 Mac에 접근할 수 있습니다. Mac에서 Tailscale이 감지되지 않으면 페어링된 기기 패널이 설치를 권장합니다. Mac에 Tailscale을, 휴대폰이나 iPad에 iOS용 Tailscale 앱을 설치하고 둘 다 같은 tailnet에 로그인하면 어디서나 페어링이 계속 작동합니다. Mac은 고정된 사설 주소를 유지하고, 트래픽은 종단 간 암호화되며, 라우터 포트는 열리지 않습니다.
full이 아니라 restart로 페어링해야 합니다. 모든 기기를 등록했으면 두 서버 모두에서 요청 서명 필수를 켜십시오(에이전트에서는 require_sign). 그 후에는 호출자가 승인된 개인 키도 가지고 있어야 하므로, 유출되거나 스크린샷에 찍힌 토큰으로는 아무것도 제어할 수 없습니다. 휴대폰을 분실하거나 사람이 떠나면 즉시 해당 기기를 폐기하십시오.10.19헤드리스 Mac 보안 강화
디스플레이가 없는 서버에는 고유한 보안상의 절충이 있으며, Headless Setup 도구(8장과 17장에서 자세히 설명)는 여기서 가장 중요한 점을 알려 줍니다. System Status 섹션은 FileVault가 켜져 있을 때 경고합니다. 키보드나 화면이 없는 암호화된 Mac은 부팅 시 잠금을 해제할 수 없어서, 온라인으로 돌아오지 못하고 FileVault 프롬프트에서 멈추기 때문입니다. 헤드리스 Mac에서는 일반적으로 전체 디스크 암호화와 무인 재시작 중 하나를 선택해야 하며, FrontierStack은 다음 정전 후에야 이 사실을 알게 되는 대신 이 선택을 명확하게 보여 줍니다. 이런 호스트에서 화면 공유나 원격 로그인을 켜는 것은 바로 Open Ports 감시가 계속 지켜보게 될 종류의 노출입니다.

제11장
모니터링 및 알림
지속적인 상태 점검이 관심 있는 모든 서비스, 기기, 하위 시스템을 지켜보고, 문제의 첫 징후를 평소 확인하는 앱의 메시지로 바꿔 줍니다.
무언가를 바꾸게만 해 주는 제어판은 절반짜리 도구입니다. 나머지 절반은 문제가 생겼을 때, 가능하면 장애로 번지기 전에 그 사실을 아는 것입니다. FrontierStack은 감시하도록 지정한 모든 대상에 대해 모니터 점검을 계속 실행하고, 문제의 첫 징후를 원하는 채널의 메시지로 알려 줍니다. 이 장에서는 모든 것을 요약하는 로컬 상태 보드, 경고를 발생시키고 전달하는 알림 패널, 이를 전달하는 메시징 게이트웨이, 그리고 클라우드 서비스, 프로젝트 도구, 전원, 스토리지를 위한 전용 모니터를 다룹니다.
11.1로컬 상태 보드
Overview ▸ Local Health를 열면 “지금 고장 난 게 있는가?”라는 질문에 답하는 단일 화면이 나타납니다. 모니터링되는 모든 서비스, 기기, 하위 시스템이 UP 또는 DOWN으로 표시된 행으로 나타나며, 웹 및 데이터베이스 서비스, 플릿, 사이트 및 인증서, 디스크, UPS 및 SNMP 기기, 연결된 클라우드 계정 등 영역별로 묶입니다. 맨 위에는 X up / Y down 형식의 한 줄 요약이 있어서, 모든 행을 읽지 않고도 플릿 전체 상태를 한눈에 파악할 수 있습니다.
그룹은 접을 수 있지만, 실패한 항목이 있는 그룹은 자동으로 펼쳐집니다. 행의 기록 버튼을 선택하면 최근 30회 점검, 측정된 응답 시간 스파크라인, 24시간, 7일, 30일 동안 실제로 관측된 정확한 이동 가동 시간, 최근 상태 전환을 볼 수 있습니다. 각 가동 시간 값 옆에는 관측 범위가 표시됩니다. 앱이 꺼져 있던 시간, 일시 중지된 시간, 네트워크 밖에 있던 시간은 알 수 없음으로 처리되며, 정상으로 추정하지 않습니다. Fleet-wide Events는 최초 관측, 장애, 복구를 최대 1,000건까지 31일간 보존하며, 엔드포인트, 자격 증명, 응답 본문은 저장하지 않습니다.
이 보드는 AI 관리자가 get_server_health 도구로 읽는 것과 같은 데이터입니다. “무엇이 다운됐어?”라고 물으면 AI 관리자는 이 화면에 표시된 내용을 그대로 보고하고, 수정안을 제안하기 전에 조사를 제안합니다(13장 참조). 점검은 약 60초마다 실행되며, 각 DOWN 항목은 해당 항목을 소유한 패널에도 귀속됩니다. 그래서 사이드바 행과 Dock 아이콘에 빨간색 개수 배지가 나타날 수 있습니다. 문제가 있다는 사실뿐 아니라 문제가 어디에 있는지도 알 수 있습니다.
11.2알림 패널: 감시 대상

로컬 상태 보드는 상태를 보여 주고, 알림 패널(Overview ▸ Alerts)은 무엇을 메시지로 보낼 가치가 있는지 판단하고 전송합니다. “Monitor critical services and alert me”를 켜면 점검에서 알림이 발생하기 시작합니다. 감시 대상은 다음과 같습니다.
- 사이트 및 서비스 상태 — HTTP/루프백 점검, TCP 포트, 더 깊은 프로토콜 검사(SMTP/IMAP 로그인, 데이터베이스
SELECT 1, LDAP 바인드)를 수행하므로, 수신 대기 중이지만 실제로는 고장 난 서비스도 감지됩니다. MySQL 검사는 추가로 연결 풀(현재 사용량 대max_connections, 그리고 “too many connections” 거부 카운터)을 읽습니다. 풀이 90%를 넘거나 점검 사이에 클라이언트가 거부되면 알림을 보내며, 모든 점검 결과는 데이터베이스 상태 패널에 Connection Health History로 차트화됩니다. 시간에 따른 풀 사용률(%)과 함께 거부 급증 및 장애가 빨간 선으로 표시됩니다. - 연결된 서버 — 점검할 때마다 모든 플릿 호스트의 SSH 엔드포인트에 대한 연결 가능성을 확인하므로(로그인 시도 없이 TCP 연결만 수행), 완전히 꺼진 서버는 간단한 “Server down” 알림을 발생시키고, 복구되면 “Server recovered”를 보냅니다. 이는 호스트가 켜져 있지만 연결 속도를 제한하고 있을 때만 발생하는 SSH 쿨다운 알림과는 별개입니다.
- 인증서 및 도메인 — 플릿 전체의 TLS 만료와 함께 등록 기관/DNS/SSL 점검을 수행하여, 도메인이 만료되는 당일 아침이 아니라 며칠 전에 경고합니다(7장).
- 디스크 용량 부족 — 볼륨의 여유 공간이 임곗값 아래로 내려가면 아래의 디스크 상태 모니터를 통해 알립니다.
- 보안 노출 — 새로 열린 포트나 예상치 못한 수신 대기 프로세스, VPN 터널 끊김, 또는 SSH가 네트워크에서 접근 가능한 상태에서의 심각한 SSH 보안 강화 실패.
- 결제 실패 및 청구 — 연결된 유료 서비스(OpenAI, Anthropic, Cloudflare, Google Cloud)가 할당량 부족, 잔액 부족, 인증 오류를 반환하는 경우로, 카드가 만료되었다는 징후입니다.
- 연결된 클라우드 서비스 — Stripe, Shopify, Freshdesk, SendGrid 등의 실시간 모니터로, 선택한 지표가 임곗값을 넘으면 알림이 발생합니다.
대부분의 점검은 임곗값 기반이므로 무엇을 “문제”로 볼지 직접 정할 수 있습니다. 인증서 만료가 N일 이내로 다가왔을 때, 미해결 티켓이 특정 수를 넘었을 때, 디스크 사용률이 특정 비율을 넘었을 때 알리도록 설정할 수 있습니다. 보수적인 임곗값을 쓰면 사후 분석 대신 사전 경고를 받을 수 있습니다. 이 패널에는 “Alert on intrusions”도 있습니다. 새로운 fail2ban/CrowdSec 차단, 심각도 높은 Suricata 시그니처, 주목할 만한 Wazuh 알림(레벨 ≥ 7)이 발생하는 즉시 메시지로 전송되며, 기존 기록에 대해서는 다시 알리지 않습니다.
SwitchBot 기기. SwitchBot 기기를 고정하면 SwitchBot 클라우드를 통해 감시합니다. 플러그는 2분마다 읽으며 Wi-Fi 불안정 경고를 받습니다. 잠금장치, 센서, 커튼, Bot, 조명, Hub 2/3 등 상태를 보고하는 기기는 10분마다 읽으며, SwitchBot이 해당 기기나 연결된 허브가 오프라인이라고 보고하면 알림을 보냅니다. 카메라와 Hub Mini는 상태를 보고하지 않으므로 오프라인으로 표시되지 않습니다. SwitchBot의 하루 10,000회 호출 할당량을 넘지 않도록, 고정된 기기가 많으면 간격이 자동으로 늘어납니다. 할당량은 계정별이므로 각 계정의 예산은 따로 계산됩니다. 고정된 SwitchBot 기기의 점은 자체 상태 점검에 응답한 후에만 초록색이 되며, 아직 점검되지 않았거나 상태가 없으면 회색으로 남습니다. SwitchBot 패널에서 Receive SwitchBot webhooks를 켜고 인터넷 접근(Cloudflare Tunnel, Tailscale Funnel 또는 라우터 포워딩)을 설정하면, Indoor Cam과 Pan/Tilt Cam이 모션을 감지할 때마다 보고하며 이는 last active로 표시됩니다. Pan/Tilt Cam 2K와 Plus 모델은 웹훅을 보내지 않습니다. 조용한 카메라는 오프라인으로 보고되지 않습니다.
여러 SwitchBot 계정. 토큰은 자체 계정에 추가된 기기만 나열하므로, 다른 사람이 소유하고 공유해 준 집의 기기에는 그 사람의 토큰으로 접근합니다. SwitchBot 패널의 Other Accounts에서 추가하십시오. 각 기기에 대한 명령과 점검은 그 기기를 나열하는 계정을 사용합니다. SwitchBot API에는 방 개념이 없으므로, Group by는 기기를 연결된 허브별, 고정한 장소별, 또는 계정별로 정렬합니다.
11.3메시징 게이트웨이
알림은 받는 사람에게 도달해야 비로소 쓸모가 있습니다. 알림 패널에서는 여러 게이트웨이를 동시에 활성화하고 채널마다 여러 수신자를 지정할 수 있으므로, 담당자가 이미 열어 두고 있는 앱으로 알림을 보낼 수 있습니다. 봇 토큰이나 웹훅 URL을 붙여넣고 테스트를 보내면 바로 사용할 수 있습니다. AI 관리자는 get_messaging_channels로 활성화된 게이트웨이 목록을 확인하고 send_notification으로 이를 통해 메시지를 보낼 수 있습니다(13장).
| 게이트웨이 | 적합한 용도 |
|---|---|
| Telegram | 봇 토큰 하나로 게이트웨이당 여러 채팅을 지원합니다. 빠르고 무료이며 신뢰할 수 있는 휴대폰 푸시입니다. |
| LINE (Messaging API) | LINE을 주로 쓰는 사람, 특히 일본과 한국의 사용자에게 연락할 때. |
| Slack / Discord | 팀 채널로 들어오는 수신 웹훅. 운영 알림을 팀이 이미 대화하는 곳으로 보냅니다. |
| ntfy | 공개 서버 또는 직접 호스팅하는 ntfy를 통한 간단한 휴대폰 푸시. |
| Apprise | 한 단계만 거치면 80개 이상의 대상(Pushover, Matrix, Gotify, Microsoft Teams, PagerDuty 등)으로 분배합니다. |
| Email (SMTP) | 받은편지함에 반드시 도착해야 하는 모든 것. 예약된 AI 평가 보고서도 전달합니다. |
| SMS / WhatsApp | Twilio 또는 WhatsApp Business Cloud API를 통해 휴대폰으로 직접 연락할 때. |
| Slack/Discord 웹훅 | 모든 알림과 복구 내역을 팀이 볼 수 있는 기록으로 영구 보존할 때. |
| KakaoTalk | KakaoTalk 사용자를 위한 “나에게 보내기” 알림. |
| iMessage (Apple 메시지) | Mac에서 바로 보내는 네이티브 “나에게 보내기” 알림 — 외부 서비스가 필요 없습니다. |
| PagerDuty / Opsgenie (호출) | 에스컬레이션을 갖춘 실제 온콜 호출 — 아래를 참조하십시오. |
11.17.1온콜 담당자 호출(PagerDuty, Opsgenie, 긴급 ntfy)
위의 메시지 게이트웨이는 보내고 끝나는 텍스트입니다. 호출 채널은 성격이 다릅니다. 상태를 유지합니다. 모니터링 중인 항목이 다운되면 FrontierStack은 해당 항목을 키로 하는 인시던트를 트리거합니다. 그러면 PagerDuty(Events API v2 라우팅 키) 또는 Opsgenie(GenieKey)가 에스컬레이션 정책을 실행하여, 누군가 확인할 때까지 온콜 담당자에게 푸시, 문자 또는 전화를 보냅니다. 항목이 복구되면 FrontierStack이 같은 인시던트를 자동으로 해결합니다. 인시던트가 항목별로 키가 지정되므로 상태가 계속 바뀌는 서비스는 순번 담당자를 반복해서 호출하는 대신 하나의 인시던트만 업데이트하며, 이미 끝난 장애 때문에 누군가를 깨우는 일도 없습니다. 온콜 서비스가 없다면 ntfy 게이트웨이의 Page on down 토글을 켜면 “다운” 알림을 ntfy 최고 우선순위로 보냅니다 — 많은 휴대폰의 무음 설정을 무시하는 더 크고 반복되는 알림음입니다 — 복구 알림과 보고서는 일반 우선순위로 유지됩니다. 각 호출 채널에는 Send Test Page 버튼이 있어 실제 인시던트를 트리거하고 약 10초 후 자동으로 해결하므로, 에스컬레이션 경로 전체가 처음부터 끝까지 동작하는지 확인할 수 있습니다.
11.17.2다른 사람에게 알리기: 연락처, 프리셋, 에스컬레이션
위의 채널은 사용자 본인에게 알립니다. 하지만 많은 인시던트는 다른 사람에게도 알려야 합니다. 이메일을 원하는 관리자, 두 번째 지원 담당자, 또는 현장에 가야 하는 기술자 등입니다. 알림 ▸ Contacts & Escalation은 이를 세 부분으로 처리합니다.
| 부분 | 내용 |
|---|---|
| 연락처 | 본인 이외의 사람. 각 연락처에는 이름, 역할(관리자, 현장 기술자…) 및 사용할 주소를 지정합니다. 이메일, 휴대폰 번호(문자 및 전화), WhatsApp, Telegram 채팅 ID, 메시지 핸들, ntfy 토픽 또는 LINE 사용자 ID입니다. |
| 프리셋 | 누구에게, 어떤 방법으로, 언제 알릴지 정하는 재사용 가능한 레시피. 각 단계에는 연락처, 하나 이상의 방법, 지연 시간, 긴급 여부를 지정합니다. 프리셋에는 “서버실 B1 랙 3으로 가십시오”와 같이 모든 메시지에 추가되는 지시 사항도 넣을 수 있습니다. |
| 규칙 | 어떤 알림에 어떤 프리셋을 사용할지 정합니다. 모든 알림, 카테고리(Storage, Network & Routing…), 위치 또는 모니터링 항목 하나를 지정할 수 있습니다. 일치하는 규칙은 모두 적용되며, 두 규칙에 모두 지정된 사람에게는 한 번만 알립니다. |
예를 들어 Email the supervisor, page the on-site tech 프리셋은 관리자에게 이메일을 보내고, 기술자에게는 문자와 함께 알림 내용을 소리 내어 읽어 주는 전화를 겁니다. Tech now, supervisor if not fixed in 30 min은 에스컬레이션입니다. 관리자 단계는 30분 후에도 항목이 여전히 다운 상태이고 아무도 Acknowledge를 누르지 않은 경우에만 실행됩니다. 대기 중인 에스컬레이션은 이 섹션과 알림 팔레트(Ack)에 표시되며, 항목이 복구되면 각각 자동으로 취소됩니다. 고장 소식을 받은 사람에게는 복구 소식도 전달됩니다. 좋은 소식으로 전화를 받는 사람은 없으므로 복구 알림은 문자로 보냅니다. 미리 만들어진 프리셋을 사용하려면 New Preset ▸ Start from a template을 선택하십시오. 아직 없는 역할마다 빈 연락처가 추가됩니다. 테스트는 지연 시간을 무시하고 모든 단계를 TEST 표시와 함께 한꺼번에 보냅니다. 고정된 카메라, 라우터 또는 기타 기기의 오프라인 알림 스위치에는 Who else gets this alert… 버튼이 있습니다. 본인 외에 누가 알림을 받는지 보여 주고, 해당 기기에 대한 규칙이 미리 채워진 상태로 이 섹션을 열어 주므로 프리셋만 고르면 됩니다.
연락처는 이미 설정한 게이트웨이를 사용하되, 본인 주소 대신 해당 연락처의 주소로 보냅니다. 관리자에게 보내는 이메일은 사용자의 SMTP 계정을 사용하고, 문자와 전화는 사용자의 Twilio 번호를 사용하며 이 번호는 음성 통화가 가능해야 합니다. 이러한 게이트웨이는 본인 알림용으로는 꺼 둔 상태로 두어도 됩니다. 각 메시지에는 연락처의 역할, 위치, 프리셋의 지시 사항이 포함되므로 받는 사람이 왜 받았는지 알 수 있습니다. 주소가 없거나 게이트웨이가 구성되지 않은 경우 Delivery Errors에 예를 들어 SMS → Alex (On-site technician)와 같이 표시됩니다. 네트워크 오류는 보고하기 전에 2분 간격으로 두 번 다시 시도합니다.
IFTTT. Messaging Channels에서 IFTTT (Webhooks)를 켜면 모든 알림마다 IFTTT 애플릿을 실행합니다. value1은 제목, value2는 메시지이며, value3은 다운 알림이면 critical, 그 밖에는 info입니다. 다운 알림에 별도의 이벤트 이름을 지정하면 복구 때보다 더 눈에 띄는 동작(예: 조명 깜박이기)을 트리거할 수 있습니다. 연락처마다 자체 Webhooks 키를 지정할 수도 있으므로, 프리셋 단계에서 그 사람의 계정에 있는 애플릿을 실행할 수 있습니다. IFTTT의 Webhooks 서비스를 사용하려면 IFTTT Pro 플랜이 필요합니다.
토큰과 웹훅은 macOS 키체인에 저장되며 Mac 밖으로 나가지 않습니다. 예약된 AI 평가 보고서를 보낼 수도 있습니다. AI 관리자가 실시간 모니터링 상태를 바탕으로(읽기 전용 진단 실행) 요약을 작성하여 매일 또는 매주 이메일로 보내거나 활성화된 모든 채널로 푸시합니다 — 중요 항목이 두 개 이상 동시에 다운되면 더 자세한 보고서를 보내도록 선택할 수도 있습니다.
11.4전달 오류와 해결 방법
알림이 조용히 전송에 실패한다면 모니터는 쓸모가 없습니다. FrontierStack은 모든 전송을 확인합니다. 게이트웨이가 실패하면 알림 패널의 Delivery Errors 섹션에 기록되며, 알기 쉬운 해결 안내와 그 아래의 원본 오류, 그리고 잘못 구성된 채널의 설정으로 바로 스크롤하는 Fix 버튼이 함께 표시됩니다. 사이드바의 알림 행과 Dock 아이콘에 빨간 배지가 나타나 확실히 눈에 띄며, 지울 때까지 남아 있습니다. AI 관리자도 get_alert_errors로 같은 목록을 읽으므로 “알림이 왜 오지 않지?”라고 물어보기만 하면 됩니다.
흔한 원인은 대개 사소하고 빠르게 고칠 수 있습니다.
| 증상 | 예상 원인 및 해결 |
|---|---|
| 전송 시 이메일 거부됨 | SMTP From 주소가 비어 있거나 수신자가 없음 — Email 채널에서 둘 다 입력하십시오. |
| 이메일 연결 거부 / 시간 초과 | 포트 또는 전송 방식이 잘못됨. 제공업체에 맞게(587 STARTTLS 또는 465 SSL) 포트와 호스트를 설정하십시오. |
| Telegram / Slack / Discord 401 또는 404 | 토큰 / 웹훅 URL이 잘못되었거나 폐기됨 — 새 값을 붙여넣고 테스트를 보내십시오. |
| 보고서가 도착하지 않음 | 보고서 전달이 “Email only”로 설정되어 있지만 Email 채널이 구성되지 않음 — “All enabled channels”로 바꾸거나 Email을 설정하십시오. |
11.5호스트 내 서비스 워치독 및 데이터베이스 상태
위의 모니터는 사용자의 Mac에서 실행됩니다. 중요한 서버라면 서버 자체에 상주하는 워치독도 있어야 Mac이 잠자기 상태이거나 오프라인이거나, 애초에 장애가 난 기기가 Mac이 아닐 때도 계속 동작합니다. FrontierStack의 서비스 워치독은 호스트 모니터와 함께 배포됩니다(8장). 짧은 간격으로 서비스 상태를 검사하고, 실패하면 재시작하며, — 최후의 수단으로, 그리고 사용자가 허용한 경우에만 — 기기를 재부팅합니다. 최소 간격 보호 장치가 있어 계속 고장 난 서비스가 부팅 루프를 일으킬 수 없습니다. 각 감시 항목에는 검사 유형이 있습니다. 프로세스 검사, HTTP 또는 TCP 프로브, 또는 전용 MySQL·PostgreSQL 검사입니다.
11.17.3고정된 서버의 복구 단계
고정된 서버의 서비스 워치독 패널에서는 일반적인 호스트 내 서비스 복구 이후에 선택적으로 두 단계를 추가할 수 있습니다. Reboot from FrontierStack을 켜면 새 Recovery exhausted 이벤트가 발생한 후 Mac이 검증된 재부팅을 한 번 실행합니다. 지연 시간은 사용자가 정합니다. 전원 제어에 제어 가능한 콘센트가 연결되어 있으면, 다음 단계로 서버가 지정한 시간 동안 완전히 응답하지 않을 때 전원을 껐다 켤 수 있습니다. FrontierStack은 재부팅을 시도한 후 90초를 기다린 다음 호스트 상태를 판단하며, 전원 타이머의 최솟값은 5분입니다.
강제 전원 차단 판정은 의도적으로 SSH 로그인 실패보다 엄격합니다. Mac의 네트워크 경로가 정상이어야 하고, 서버에서 SSH 응답, 정상적인 모니터 보고, ping 또는 ARP 흔적, 일반 서비스 포트의 응답이 모두 없어야 합니다. 조금이라도 살아 있다는 신호가 있으면 해당 인시던트는 취소됩니다. 전원 재투입은 한 번만 실행되고 그 후 복구 단계가 멈춥니다. 정책을 활성화하면 이전 워치독 이벤트는 처리됨으로 표시되며, watchdog_reboot_suppressed는 최종 상태로 유지되므로 앱이 헬퍼의 부팅 루프 보호를 무력화할 수 없습니다.
11.17.4Mac을 닫아도 계속 감시하기
먹통이 된 서버는 자신의 스마트 플러그를 안정적으로 조작할 수 없습니다. Recovery observer에서 등록된 다른 서버를 선택하면 마지막 단계를 그 기기의 헬퍼가 맡습니다. 옵저버는 FrontierStack이 닫혀 있어도 사설 IP, ping, 여러 TCP 포트로 대상을 계속 프로브합니다. 먼저 사설 전원 컨트롤러가 상태 요청에 응답하는지 확인하고, 루프 방지 영수증을 영구 저장한 다음, 설정된 유지 시간 동안 전원을 차단했다가 복원하며, 대상이 다시 살아난 것을 확인할 때까지 두 번째 전원 재투입은 하지 않습니다. 영구 저장되는 30분 쿨다운은 옵저버가 재시작되어도 유지됩니다.
fsck, xfs_repair, chkdsk 및 유사한 파일 시스템 도구는 시스템 디스크의 모든 서비스를 일시적으로 멈추게 할 수 있습니다. 로컬 Service Guardian과 호스트 내 서비스 워치독은 모두 이러한 복구 프로세스를 인식하고, 저장된 정책은 변경하지 않은 채 자동 복구 — 서비스 재시작과 원격 재부팅 에스컬레이션 포함 — 를 일시 중지합니다. 실패 카운터는 초기화되며, 복구가 끝난 후 60초를 더 기다렸다가 새로 시작합니다. 데스크톱과 휴대폰에 보류 상태가 표시됩니다. 의도적으로 필요한 경우 수동으로 확인하는 서비스 제어는 계속 사용할 수 있습니다.데이터베이스 Heartbeat는 프로세스/포트 검사로는 놓치는 장애를 잡아냅니다. MySQL Heartbeat는 암호 없이 SELECT 1을 요청합니다. 성공하거나 “access denied”가 반환되면 MySQL이 응답했다는 증거이며, 연결이 거부되거나 시간 초과되거나 포화 상태이면 비정상입니다. MySQL 암호는 저장되지 않으며 어떤 테이블도 읽지 않습니다. 프로브 이름을 비워 두면 root가 아닌 fs_watchdog가 사용되며, 실제 계정일 필요는 없습니다. PostgreSQL Heartbeat는 데이터베이스 사용자 이름이나 암호 없이 pg_isready를 사용합니다. error-log early-warning을 켜면 워치독이 데이터베이스 자체의 오류 로그도 추적하여, 손상 징후를 처음 발견하는 즉시 심각 이벤트를 발생시킵니다. 이 모든 것이 서버에서 실행되므로 Mac이 꺼져 있어도 ntfy나 웹훅으로 자율적으로 알림을 보낼 수 있습니다. 호스트의 서비스 워치독 패널에서 Alert me directly from this server로 켜십시오.
Aborted_connects에 집계합니다 — 1분에 약 2회, 하루에 수천 회입니다. 문제가 있는 것은 아닙니다. 서버는 정상이고 검사는 제 역할을 하고 있습니다. 다만 카운터가 Heartbeat 자체의 트래픽으로 채워져 무차별 대입 시도나 잘못 구성된 앱 같은 실제 신호를 가릴 수 있습니다. MySQL Heartbeat 패널에서는 선택 사항으로 해결책을 제공합니다. 빈 암호와 어떤 권한도 없는(USAGE만 — 아무것도 읽을 수 없고 서버 외부에서 연결할 수 없는 계정) fs_watchdog@localhost와 [email protected]을 만들어, 프로브가 정상적으로 로그인하고 일반 연결로 집계되도록 합니다. FrontierStack은 사용자가 요청할 때만 데이터베이스 상태에 저장된 MySQL 관리자 암호를 사용하여 이 계정을 만들며, 실행하기 전에 정확한 CREATE USER 문을 보여 줍니다. SQL을 복사하여 직접 실행하거나, 나중에 같은 패널에서 계정을 제거할 수도 있습니다. 그대로 두어도 괜찮습니다 — 이 카운트는 겉보기 문제일 뿐입니다.mysqlcheck 무결성 검사, 검증된 백업, 선택적 자동 복구를 사용하려면 감시 항목에서 Open table checks & auto-repair를 선택하거나 데이터베이스 상태를 연 다음, 해당 데이터베이스의 Scan & repair settings를 펼치십시오. root가 아니라 frontierstack_health@localhost 같은 전용 계정을 사용하십시오. 로그인용으로 USAGE와 SELECT 1을 부여하고, PROCESS는 플릿 전체의 연결 가시성이 필요할 때만, SELECT는 명시적으로 검사하는 스키마에만 추가하십시오. 계정은 localhost 또는 모니터의 정확한 사설 주소로 제한하십시오. FrontierStack은 서버에서 클라이언트를 실행하므로 MySQL을 더 넓은 네트워크에 노출할 이유가 없습니다.검사 전용 계정을 만들려면 your_database와 예시 암호를 바꾸십시오.
CREATE USER 'frontierstack_health'@'localhost' IDENTIFIED BY 'use-a-unique-random-password';
GRANT SELECT ON `your_database`.* TO 'frontierstack_health'@'localhost';
이 로그인 정보를 데이터베이스 상태에 저장하십시오. 수동 검사와 검증된 백업이 모두 성공할 때까지 자동 복구는 꺼 두십시오. 완전한 백업이나 복구에 다른 권한이 필요하면 MySQL이 지정하는 스키마 범위의 권한만 추가하고, *.*는 절대 사용하지 마십시오. 다른 기기에서 연결하는 모니터의 경우 localhost를 그 기기의 정확한 사설 주소 하나로 바꾸십시오.
고정된 서버의 Services 행에는 예약된 테이블 검사나 서버 자가 복구가 활성화되어 있으면 녹색 DB checker: On 점이, 대상은 있지만 둘 다 실행되고 있지 않으면 Paused가 표시되며, 선택한 MySQL 검사에 데이터베이스 암호가 없으면 녹색 대신 주황색 Needs login이 표시됩니다. 데이터베이스 상태와 Heartbeat는 서로 보완합니다. 전자는 더 느린 일정으로 테이블을 검사하고, 후자는 장애를 빠르게 감지하여 서버에서 MySQL을 재시작할 수 있습니다.
데이터베이스가 다운되지는 않았지만 느리거나 멈춘 경우에는 데이터베이스 상태 패널의 각 대상에 있는 Why slow/stuck? 버튼이 필요할 때 원인을 알려 줍니다. 서버의 실시간 활동(MySQL에서는 SHOW FULL PROCESSLIST, PostgreSQL에서는 pg_stat_activity)을 읽고, 실행 중인 쿼리를 형태별로 묶어 같은 쿼리가 몰려 들어오면 개수와 함께 한 줄로 합친 다음, 판정을 제시합니다 — 단일 쿼리가 집중적으로 호출됨, 오래 실행되는 쿼리가 다른 쿼리를 차단함, 연결이 잠금을 기다림, 지나치게 큰 결과 집합이 클라이언트로 스트리밍됨(대역폭 비용), 또는 연결 수가 상한에 가까움 등입니다. 유용한 세부 사항이 하나 있습니다. 부하가 간헐적으로 몰리는 경우 급증 사이에는 유휴 상태로 보일 수 있는데, 이때 도구는 문제없음이라고 잘못 보고하지 않고 그 사실을 밝히며 급증 중에 다시 실행하라고 안내합니다. 원격 대상은 SSH로 프로브하므로 데이터베이스 포트를 노출할 필요가 없습니다.
11.17.5유지 보수를 위한 검사 일시 중지
서비스를 의도적으로 내리는 중에 이것저것 재시작하는 워치독은 가장 원치 않는 존재입니다. 보호 기능을 끄고 — 다시 켜는 것을 스스로 기억해야 하는 — 대신, Guardian 헤더의 Pause Checks… 또는 개별 서비스 행의 일시 중지 버튼을 사용하십시오. 15분에서 하루까지 기간을 선택할 수 있습니다.
일시 중지 중에는 Guardian이 일시 중지한 대상의 상태 검사와 재시작을 멈추므로 작업이 방해받지 않습니다. 아무것도 비활성화되지 않으며 설정도 사라지지 않습니다. Keep Alive, Auto Recover, 임계값, 간격은 모두 그대로 유지되며, 기간이 끝나면 — 또는 Resume Now를 누르면 즉시 — 검사가 자동으로 재개됩니다. 앱을 종료했다가 다시 열더라도 일시 중지가 정해진 기간을 넘어 유지되는 일은 없습니다.
11.6사례 연구: High Sierra Server.app의 serviceproxy 먹통 현상
High Sierra에서 macOS Server(Server.app)를 아직 실행 중인 오래된 Mac에는 잘 알려진 장애가 있습니다. 실제 백엔드 앞에서 포트 80/443을 바인딩하는 웹 프런트 프록시 — launchd 작업 com.apple.serviceproxy — 가 가끔 먹통이 됩니다. TCP 연결은 계속 받아들이지만 응답하지 않으므로, 프로세스 검사는 모두 정상으로 보이는데도 그 뒤의 모든 웹 사이트가 먹통이 됩니다. Apple의 수정은 없으며 이 스택은 지원이 종료되었습니다. 서비스 워치독은 바로 이 사례를 염두에 두고 만들어졌습니다.
감시 설정 방법. 서버 패널에서 서비스 이름 serviceproxy에 대한 워치독 항목을 추가하고 — 이것이 중요합니다 — 프로세스 검사가 아니라 대상이 http://127.0.0.1/인 HTTP 검사를 지정하십시오. 실제 장애(연결은 수락되지만 응답 없음)를 감지하는 것은 HTTP 프로브뿐입니다. 실패하면 워치독이 launchctl kickstart로 복구하는데, 이는 관리자가 직접 입력하는 수동 해결책과 정확히 같습니다. 500 미만의 HTTP 상태는 모두 살아 있는 것으로 간주합니다(프록시가 반환하는 403/404도 응답하고 있다는 증거입니다). 각 프로브는 6초 후 시간 초과되므로 먹통이 된 프록시는 시간 초과로 검사에 실패합니다. 프록시 뒤의 백엔드도 같은 방식으로 server-httpd로 감시할 수 있습니다.
잘 동작하는 타이밍. 30초마다 검사하고, 3회 연속 실패하면 재시작하며, 재시작은 최대 3회까지 시도하고, 재시작 후 유예 시간은 기본값(약 20 초, 오래된 하드웨어의 Apache에도 충분한 여유)으로 두십시오. 이렇게 하면 조치하기 전에 약 90 초 동안 먹통 상태를 확인합니다 — 한 번의 느린 응답이나 순간적인 부하 급증으로 kickstart가 실행되지 않을 만큼 길고, 실제로 먹통이 된 후 약 2분이면 손대지 않아도 사이트가 복구될 만큼 짧습니다. 사이트가 매우 중요하다면 15–20 초 간격에 2회 실패(확인까지 ≈40 초)로 줄이십시오 — 그보다 더 줄이면 대부분 잘못된 재시작만 늘어납니다. 실제로 느린 오래된 기기는 부하가 걸리면 응답하는 데 몇 초가 걸릴 수 있기 때문입니다. 기기가 정말로 무인 상태가 아니라면 “Reboot the server if recovery still fails”는 끈 상태로 두십시오. 실제로는 kickstart로 먹통 현상이 해결되며, 이런 기기에서 최후 수단으로 재부팅하면 대부분 다운타임만 늘어납니다(어떤 경우든 부팅 루프 방지 장치가 워치독 재부팅 사이에 최소 30 분 간격을 강제합니다).
프로세스 검사를 쓰지 않는 이유는? serviceproxy라는 이름의 프로세스는 없습니다 — 이 작업은 특수한 구성의 httpd로 실행됩니다 — 그래서 v1.6.1 이전의 모니터는 정상적인 프록시를 계속 “다운”으로 판단하여 반복해서 재시작했고, 재부팅 에스컬레이션이 허용된 경우에는 정상적인 기기를 주기적으로 재부팅했습니다. v1.6.1부터는 모니터가 대신 launchd에 작업의 실제 상태를 묻기 때문에 이제 프로세스 검사도 정확한 결과를 알려 주지만, 실제 먹통 현상을 잡아내는 것은 여전히 HTTP 검사입니다. 오래된 서버가 뚜렷한 원인 없이 재부팅되고 있었다면 먼저 모니터 버전을 확인하십시오 — 또한 “Why did it reboot?”는 워치독이 시작한 재부팅을 명시적으로 구분해 알려 줍니다(v1.6+ 모니터에서는 이유와 함께 표시되며, 이전 모니터는 기록을 남기므로 그것도 보고됩니다).
serviceproxy를 완전히 퇴역시키는 것입니다. Apple Server Migration 마법사(8장)는 Server.app 기기의 구성을 조사하고 웹 사이트를 지원되는 시스템의 일반 Apache로 옮겨, 먹통이 되기 쉬운 프록시를 서비스 경로에서 제거합니다. 그때까지는 HTTP 감시가 오래된 기기를 제대로 동작하게 지켜 줍니다.전달 측면에서 한 가지 보장으로 마무리합니다. 알림은 절대 조용히 사라지지 않습니다. 메시징 게이트웨이와 별개로, 모든 상태 변경 알림은 게이트웨이와 무관하게 macOS 네이티브 알림 및 푸시도 발생시킵니다 — 따라서 이메일을 끄고 모든 채널을 비활성화해도 서비스가 다운되면 Mac에서 여전히 알 수 있습니다. 데이터베이스 복구 — mysqlcheck/pg_amcheck 실행과 AI 안내에 따른 재구축 — 는 5장에서 다룹니다.
11.7인시던트, 온콜 및 상태 페이지
이미 정식 인시던트 대응 체계를 운영하는 팀이라면 FrontierStack은 사용 중인 도구를 대체하지 않고 그 도구와 연결됩니다. 각 도구에는 카탈로그 항목에서 열 수 있는 라이브 패널이 있으며, 읽기 전용 API 키를 붙여넣으면 현재 상태가 표시됩니다.
- 인시던트 관리 & 온콜 — PagerDuty(열린 인시던트와 긴급도 높은 인시던트, 현재 온콜 담당자, 서비스), Opsgenie(열린 알림/확인되지 않은 알림, US/EU 리전 전환 포함), incident.io 및 Rootly(진행 중인 인시던트).
- 상태 페이지 — Statuspage(해결되지 않은 인시던트와 다운된 구성 요소) 및 Better Stack(모니터 업 / 다운 / 일시 정지).
각 패널에서 키를 설정하면(예: PagerDuty ▸ Integrations ▸ API Access Keys) 패널이 연결을 확인합니다. 이 정보는 같은 모니터링 화면에 반영되므로 열려 있는 PagerDuty 인시던트나 다운된 상태 페이지 구성 요소가 자체 상태 정보와 나란히 표시됩니다.
11.8SaaS 라이브 모니터 & 프로젝트 관리 패널
FrontierStack은 인프라에서 멈추지 않습니다. 설정 기반 SaaS 라이브 모니터는 연결된 클라우드 계정을 감시하며 몇 분마다 새로 고칩니다. 각 서비스에는 자격 증명 양식, 라이브 지표 타일, "Alert me" 토글과 임계값이 있습니다. 알림을 발생시킬 수 있는 서비스는 지표가 임계값을 넘으면 DOWN 알림을 발생시키고, 나머지 서비스는 연결 가능 여부를 감시합니다. 라이브 모니터 대상으로는 Stripe(응답이 필요한 분쟁, 잔액), Shopify 및 WooCommerce(미처리 주문), Freshdesk 및 Zammad(열린/보류 중/기한 초과 티켓), SendGrid, Mailgun 및 Postmark(반송 및 차단), GitHub Copilot(비활성 시트), 그리고 ID 제공업체 Okta와 Microsoft Entra ID가 있습니다. 서비스를 고정하면 알림 설정과 관계없이 항상 로컬 상태에 표시됩니다.
엔지니어링 및 컴플라이언스 서비스도 같은 방식으로 다룹니다. Sentry(최근 24 시간 동안 새로 발생한 미해결 이슈), Grafana 및 Grafana Cloud(발동 중인 알림 규칙), Honeycomb(발동된 트리거), New Relic(활성 이슈), Make(유효하지 않은 시나리오와 완료되지 않은 실행), MongoDB Atlas(열린 알림), Vanta 및 Drata(실패한 컴플라이언스 테스트), CircleCI 및 Buildkite(최근 24 시간 동안 실패한 빌드), Netlify 및 Render(최신 배포가 실패한 사이트 또는 서비스)입니다. 각각 읽기 키만 있으면 되며, 어떤 권한을 부여해야 하는지는 패널에 표시됩니다.
Ahrefs(API v3, Lite 플랜 이상)는 할당량을 소비하지 않고 감시합니다. 모니터는 무료 사용량 엔드포인트만 읽고 이번 달 API 유닛이 90%를 넘으면 알림을 보내며, 도메인을 지정하면 하루에 한 번 Domain Rating을 가져옵니다.
GMO 그룹의 서비스에도 전용 모니터가 있습니다. Color Me Shop(カラーミーショップ)은 developer.shop-pro.jp에서 등록한 앱의 OAuth 토큰으로 오늘, 이번 주, 이번 달의 매출을 읽어 판매 채널 대시보드에 반영하고, 발송 대기 주문이 쌓이면 알림을 보냅니다. GMO Trust Login은 SCIM 엔드포인트로 확인합니다. Entra ID가 이미 사용하는 항목에서 자격 증명을 생성하면 그 동기화가 끊기므로 모니터 전용 SCIM IDP 항목을 만드십시오. GMO Aozora Net Bank는 계좌 잔액을 보여 주고 엔화 잔액이 하한 아래로 내려가면 알림을 보낼 수 있습니다. OAuth 클라이언트 ID, 시크릿, 갱신 토큰이 있으면 30일짜리 액세스 토큰을 스스로 갱신하며, 무료 sunabar 샌드박스에서 먼저 시험해 볼 수 있습니다. GlobalSign은 키가 필요 없으며 Atlas ACME 디렉터리, GlobalSign 상태 페이지, 도메인의 실제 인증서를 감시합니다.
전용 GitHub 패널에는 계정 및 저장소 합계, Actions 관련 작업, PR, 요청된 리뷰, 할당된 이슈, 읽지 않은 알림, 남은 API 요청 수, 그리고 가장 최근에 업데이트된 저장소 5개의 릴리스 애셋 다운로드 수가 추가로 표시됩니다. Installed app permissions 섹션은 지정한 GitHub App을 감시하며(GitHub은 토큰으로 이 목록을 조회할 수 없게 합니다), 앱이 마지막으로 검토한 것보다 많은 접근 권한을 요청하면 — 새 권한, 읽기 전용에서 읽기 & 쓰기로의 상향, 새 소유자 — 보안 알림을 발생시킵니다. 이 섹션은 읽기 전용이며, 수락 또는 거절은 github.com에서 해야 합니다. Anthropic 계정/모델 모니터링과 GitHub Copilot 시트 사용량에는 해당 API 자격 증명만 필요하며, 클라우드 전용 서비스에 임의의 호스트나 포트를 만들어 내지 않습니다.
AppSignal에는 전용 읽기 전용 라이브 연결이 있습니다. 애플리케이션 ID와 개인 API 토큰을 입력하십시오. 토큰은 키체인에 저장되며, FrontierStack은 AppSignal의 GraphQL API를 사용해 열린 오류 인시던트, 활성 가동 시간 알림, 최신 배포, 그리고 제공되는 최근 1시간의 오류/지연 시간 지표를 표시합니다. 알림 임계값은 열린 인시던트와 가동 시간 알림을 합산합니다. AppSignal은 API 토큰을 GraphQL URL에 포함하도록 요구하므로 FrontierStack은 이 URL을 비공개로 구성하며 인증 정보가 포함된 URL을 로그에 기록하지 않습니다. 더 깊이 조사하려면 MCP Servers에서 AppSignal 프리셋을 추가하십시오. 이 프리셋은 버전이 고정된 OAuth 브리지를 통해 AppSignal의 호스팅 MCP를 열며, 모니터링 토큰을 AI 클라이언트로 복사하지 않습니다. 쓰기 가능한 도구를 검토하기 전까지는 AppSignal 접근을 읽기 전용으로 유지하십시오.
Paessler PRTG에는 자체 호스팅 PRTG 코어와 PRTG Hosted Monitor 모두를 위한 전용 라이브 연결이 있습니다. PRTG 서비스를 열고 HTTPS 기본 URL을 입력한 다음, Setup ▸ Account Settings ▸ API Keys에서 Read access 스크립팅 키를 생성하십시오. FrontierStack은 키를 키체인에 저장하고, 크기가 제한된 센서 상태 표를 읽어 Up, Down, Warning, Paused 및 기타 센서 합계를 표시합니다. Alert me when this needs attention을 켜면 Down 센서와 연결된 프로브가 없는 센서가 알림으로 전달됩니다. 이 통합은 알람을 확인 처리하거나 기기, 센서, 프로브를 변경하지 않습니다. PRTG Network Monitor와 Enterprise Monitor는 코어 서비스를 Windows에서 실행하므로 연결된 Windows 서버와 제공업체 설치 프로그램을 사용하거나 Hosted Monitor를 사용하십시오. 원격 Windows 프로브와 멀티 플랫폼 프로브를 사용하면 플릿의 나머지 부분까지 수집 범위를 넓힐 수 있습니다.
NinjaOne, Atera, Site24x7에도 전용 읽기 전용 라이브 연결이 있습니다. NinjaOne은 Monitoring 범위를 가진 Client Credentials 애플리케이션을 사용해 기기, 오프라인 엔드포인트, 활성 알림, 실행 중인 작업을 요약합니다. Atera는 Agents와 Alerts로 제한된 대상 API 키를 사용합니다. Site24x7은 계정이 속한 리전 데이터 센터에서 읽기 범위의 Zoho 갱신 토큰을 교환하고 현재 모니터 상태를 읽습니다. 이들의 비밀 값은 키체인에 보관되고 응답 크기는 제한되며, 어떤 연결도 엔드포인트에 패치를 적용하거나, 작업을 실행하거나, 알림을 닫거나, 유지 관리를 시작하거나, 제공업체 설정을 변경하지 않습니다.
같은 패턴으로 프로젝트 관리 도구에도 토큰 로그인 방식의 라이브 패널이 제공됩니다. Jira(열린 / 미할당 / 차단됨 / 스프린트 내 건수), Linear, monday.com, OpenProject, Plane, Taiga입니다. 이들은 알림 소스라기보다는 대시보드이지만, 팀의 작업량을 그 작업을 실행하는 서버와 같은 윈도우에서 보여 줍니다. 이메일 전송에는 트랜잭션 메일 제공업체 지표와 SPF/DKIM/DMARC 검사를 결합한 별도의 통합 Email Delivery 패널이 있습니다(7장).
11.9큐 운영
Queue Operations는 RabbitMQ, Kafka, NATS/JetStream, Redpanda, AWS SQS, Azure Service Bus, Google Pub/Sub, Celery/Flower, Redis Streams, Apache Pulsar, Apache RocketMQ를 위한 읽기 전용 대시보드입니다. 브로커, 네임스페이스 또는 클라우드 계정마다 모니터를 하나씩 추가하십시오. FrontierStack은 제공업체가 노출하는 경우 큐 또는 컨슈머 그룹 이름, 대기 및 처리 중 메시지 수, 컨슈머 수, 지연(lag), 데드 레터 수, 가장 오래된 메시지의 경과 시간을 표시합니다. 메시지 본문은 절대 읽거나 저장하지 않습니다.
클라이언트 포트와 관리 포트는 구분됩니다. 예를 들어 RabbitMQ 클라이언트는 5672에서 AMQP를 사용하고 관리 API는 보통 15672를 사용합니다. NATS 클라이언트는 4222를 사용하고 모니터링은 보통 8222를 사용합니다. Pulsar 클라이언트는 6650을 사용하고 HTTP 관리 API는 8080을 사용합니다. 모니터링 엔드포인트는 비공개로 유지하십시오. 호스트에 설치된 FrontierStack 모니터를 통하지 않고 대시보드에 접근하는 경우에는 항상 TLS와 모니터링 전용 계정을 사용하십시오.
연결된 서버의 경우 설치된 모니터를 선택하면 FrontierStack이 서명된 연결을 통해 자격 증명이 없는 헬퍼에게 크기가 제한된 요약을 요청합니다. 클라우드 제공업체는 일반적인 로컬 CLI 프로필 또는 키체인에 저장된 범위 제한 자격 증명을 사용합니다. 위험 임계값은 알림 점검에 포함되고, 동일하게 정리된 요약을 iPhone/iPad 앱에서도 볼 수 있으며, AI 관리자는 읽기 전용 get_server_health 도구를 통해 큐 상태에 관한 질문에 답할 수 있습니다. 대시보드에는 퍼지, 삭제, 게시, 확인 처리, 재생 작업이 없습니다.
11.10UPS 모니터링 및 SNMP 기기
배터리 백업 모니터링에는 전원 제어를 열고 UPS 섹션을 사용하십시오. FrontierStack은 USB UPS 기기를 macOS 전원 소스에서 직접 읽고, upsc로 NUT를 조회하며, apcaccess로 apcupsd를 통해 APC 기기를 조회합니다. 이 경로들은 Liebert 모델을 포함한 APC, Eaton, CyberPower, Vertiv는 물론 macOS 또는 NUT가 지원하는 기타 기기를 포괄합니다. NUT는 시리얼 및 네트워크 UPS 기기도 노출할 수 있습니다.
NUT는 무료 오픈 소스 소프트웨어이며 구독이 필요하지 않습니다. 상태 읽기에는 API 키가 필요하지 않으므로 NUT 서비스 패널에는 의도적으로 API 자격 증명 카드나 플랜 & 비용 카드가 없습니다. 전용 NUT 명령 로그인은 검토된 UPS 제어를 사용하기로 선택한 경우에만 필요하며, 유료 지원이나 호스팅 대시보드는 별도의 제품입니다.
같은 패널에서 전원 전환이 가능한 Raritan / Legrand Xerus PDU도 지원합니다. 사설 HTTPS 주소, 콘센트에 인쇄된 번호, 그리고 콘센트 제어로 권한이 제한된 전용 계정을 추가하십시오. 암호는 키체인에 보관됩니다. FrontierStack은 정확한 콘센트 상태와, 있는 경우 실제 유효 전력 센서 값을 읽고, On과 Off를 지원하며, Cycle에는 Xerus의 원자적 cyclePowerState 메서드를 사용합니다. 공인 주소, 내장된 자격 증명, 리디렉션, 임의의 JSON-RPC 메서드는 거부합니다. Off와 Cycle은 매번 새로운 파괴적 작업 확인을 표시하며, AI 하네스에도 같은 확인 게이트가 적용됩니다.
각 행에는 해당 모델이 제공하는 측정값이 표시됩니다. 충전량, 예상 배터리 런타임, 부하, 와트 단위의 유효 전력, 입력 및 출력 전압, 배터리 전압, 주파수, 온도입니다. UPS가 보고하는 와트 값은 그대로 표시됩니다. 기기가 정격 유효 전력과 부하율은 보고하지만 현재 와트 값은 보고하지 않는 경우, FrontierStack은 추정으로 표시된 값을 보여 줍니다. 볼트암페어를 와트로 취급하지 않습니다.
알림을 켠 다음 충전량, 런타임, 부하 임계값을 설정하십시오. 상용 전원 상실, 런타임 부족, 충전량 부족, 높은 부하, 배터리 서비스 경고, 강제 종료, 통신 두절은 각각 따로 추적됩니다. 따라서 런타임 감소 알림이 기존 정전 알림에 가려지지 않고 첫 번째 배터리 전환 알림 이후에도 도착할 수 있습니다. 연결이 끊긴 장치는 Comms lost로 계속 표시됩니다. UPS를 고정하면 전체 상태가 로컬 상태와 장소 지도에 유지됩니다. NUT 및 apcupsd 설치 버튼으로 필요할 때 이러한 선택적 도구를 추가할 수 있습니다.
이제 배터리 종료 규칙으로 질서 있는 종료 절차 전체를 수행할 수 있습니다. UPS가 지정한 시간 동안 배터리로 동작하거나 충전량이 임계값 아래로 떨어질 때까지 기다린 다음, 지정한 관리 서비스와 VM 서비스를 순서대로 중지하고, 각 중지를 확인한 뒤, 마지막으로 보호 대상 호스트를 종료합니다. 확인에 실패하면 호스트가 계속 실행 중인 상태로 단계 진행이 멈추고, 상용 전원이 돌아오면 완료되지 않은 단계는 취소됩니다. 호스트에서 PowerChute Network Shutdown이 실행되어야 하는 경우, FrontierStack은 일반적인 서비스 이름을 감지하거나 수동 선언을 받아들일 수 있으며, 그것이 사라지면 별도로 알림을 보내고 설정된 대체 동작을 중지하거나 계속할 수 있습니다.
스캔은 NUT와 apcupsd의 응답을 기다립니다. 스캔이 진행되는 동안 중지를 누르면 대기를 포기하고, 이미 찾은 측정값은 유지하며, 새로 고침을 누를 때까지 자동 새로 고침을 일시 정지합니다.
서버나 일반 고정 기기의 Power 섹션에는 별도의 설정 대화상자가 두 개 있습니다. Add power control…은 전원 전환 경로용입니다. SwitchBot Plug, 설정된 Home Assistant, Shelly, Tasmota, 사설 HTTP, Raritan PDU, Anker SOLIX, TP-Link Tapo / Kasa 또는 Smart Life / Tuya 콘센트, 명령 기반 PDU, 또는 전원 제어가 가능한 Remote KVM이 여기에 해당합니다. 이 대화상자에서 SwitchBot, Home Assistant, Anker SOLIX, TP-Link Kasa/Tapo 제공업체 패널로 바로 이동할 수도 있으며, 전원 제어에서 기본 설정되는 제공업체는 전원 제어에서 열립니다. Add backup power…는 고정된 모니터링 대상 UPS, Mini DC UPS, 또는 Unmanaged / dumb UPS용입니다. PDU는 컨트롤러로 취급하십시오. 전원 제어에서 모든 물리적 콘센트에 인쇄된 번호를 지정한 다음, 서버나 기기에 대해 이름과 번호가 붙은 해당 콘센트를 선택하십시오. 고정된 PDU는 명령 기반 제어용으로도 제공되며, 이 경우 정확한 콘센트 번호와 명령을 서버의 Power 섹션에 직접 입력합니다. SwitchBot 리모컨과 센서는 제외됩니다. 보호 대상 기기에는 스마트 플러그와 일반(dumb) UPS가 모두 있을 수 있습니다. Smart Plug로 표시된 기기는 그 자체가 전원 컨트롤러이므로, 해당 패널에서는 다른 컨트롤러를 제안하지 않고 Power 섹션 전체를 생략합니다. 연결된 모니터링 대상 UPS는 실제 배터리, 런타임, 경고 상태를 제공합니다. 관리되지 않는 선택 항목은 제조사와 모델 메모만 받고 인벤토리 전용으로 남으므로, FrontierStack과 AI 하네스는 지어낸 측정값이나 제어를 노출하지 않습니다. TREEDIX는 5 V Raspberry Pi UPS 컨트롤러용 Mini DC UPS로 사용할 수 있습니다.
스마트 플러그 브랜드. TP-Link Tapo 및 Kasa 플러그와 멀티탭은 전원 제어에서 TP-Link Tapo / Kasa로 추가하며 로컬 네트워크에서 전환됩니다. 플러그의 주소와 설정에 사용한 TP-Link ID를 입력한 다음 Find outlets를 선택하십시오. 멀티탭의 각 콘센트는 별도의 항목이 됩니다. TESSAN, BN-LINK, Edison Smart, OHMAX, MEAPUXIN 플러그와 멀티탭은 화이트 라벨 Tuya 기기입니다. Smart Life 패널을 연결한 다음 Smart Life / Tuya 콘센트를 추가하고 기기와 콘센트를 선택하십시오(브랜드 자체 앱에서 설정한 플러그는 먼저 Smart Life에 다시 추가해야 합니다). Smart Life 전원 사이클은 콘센트 자체의 카운트다운도 시작하므로, 해당 콘센트가 라우터에 전원을 공급하더라도 다시 켜집니다. Onvis 및 Matter Amazon Basics 플러그는 Home Assistant의 Matter 통합에 공유한 뒤 Home Assistant 스위치를 추가하여 제어합니다. 모든 세대의 Shelly 플러그(Gen 1 릴레이 API 및 Gen 2/3/4 RPC)는 직접 전환됩니다.
콘센트 연결 가능 여부. 전원 제어에서 콘센트를 편집하고 Alert when this outlet is unreachable을 켜십시오. FrontierStack은 읽기 전용 프로브로 2분마다 콘센트를 확인하고, 2회 연속으로 응답이 없으면 알림을 보냅니다. 이 확인은 이 Mac이 콘센트가 마지막으로 응답했던 것과 같은 물리적 네트워크(라우터의 하드웨어 주소로 식별)에 있을 때만 수행됩니다. 집 밖에 있는 노트북이나 같은 주소를 재사용하는 네트워크에 있는 Mac이 플러그가 죽었다는 잘못된 알림을 받는 일은 없습니다. 이 Mac에서 접근할 수 없는 플러그에는 Shelly Cloud 패널(IoT)을 사용하십시오. Shelly 앱에서 인증 클라우드 키와 서버 주소를 붙여넣고, 각 기기 ID를 추가한 다음, 오프라인 알림을 받으려면 벨을 켜십시오. Shelly를 두 가지 방식으로 모두 감시하는 경우, 해당 네트워크에 있는 동안에는 로컬 확인이 우선합니다.
11.17.6번호가 매겨진 PDU 콘센트에 기기 연결하기
- 전원 제어에서 사용할 물리적 PDU 소켓마다 콘센트 레코드를 하나씩 추가하십시오. 알아보기 쉬운 이름을 지정하고 해당 소켓 옆에 인쇄된 번호를 입력하십시오. 예: Rack server · Outlet 4.
- 고정된 서버나 기기를 열고 Power를 펼친 다음 Add power control…을 선택하십시오. 설정된 콘센트가 이름과 물리적 번호로 표시됩니다. 해당 기기에 전원을 공급하는 정확한 콘센트를 선택하십시오.
- 설정된 콘센트가 없으면 Add a smart plug or PDU in Power Control…을 선택하십시오. FrontierStack이 설정 패널을 열어 컨트롤러의 사설 IP 주소나 URL을 입력하고 콘센트를 추가할 수 있게 합니다. 빈 PDU 연결은 만들지 않습니다.
- 주소가 있는 PDU가 이미 고정되어 있지만 FrontierStack 기본 콘센트 통합이 없는 경우, Command-based PDU / powerboard에서 해당 PDU를 선택하십시오. 서버의 Power 섹션에 해당 기기의 콘센트 번호와 검토된 On 및 Off 명령을 입력하십시오. 명령은 선택 메뉴가 아니라 그곳에서 설정합니다.
- UPS에 대해서는 별도로 Add backup power…를 선택하십시오. 고정된 UPS는 기기의 백업 전원을 나타내므로 그곳에 표시되며, 전원 전환이 가능한 PDU 콘센트가 아닙니다.
개별 콘센트를 식별할 수 있는 경우에는 서버를 PDU 전체에 연결하지 마십시오. FrontierStack은 행 레이블과 파괴적 작업 확인에 콘센트 번호를 포함하므로, 운영자는 Off 또는 Cycle 작업 전에 물리적 소켓을 확인할 수 있습니다.
11.11원격 KVM 플랫폼과 전원
Remote KVM 패널은 여러 대의 PiKVM, JetKVM, TinyPilot, NanoKVM, Raritan Dominion, ATEN, Vertiv Avocent, Lantronix Spider/SpiderDuo, Adder, GL.iNet, AWERAY 및 일반 KVM-over-IP 장비를 기록합니다. 각 레코드는 정확한 모델이나 펌웨어를 보관하고, 고정할 수 있으며, 비공개 브라우저 콘솔을 엽니다. AWERAY 레코드는 선택한 컴패니언 앱을 실행합니다.
전원 제어는 검토된 경로가 설정된 경우에만 제공됩니다. PiKVM은 문서화된 로컬 ATX API를 사용하며, 하드 작업을 보내기 전에 ATX가 활성화되어 있고 유휴 상태이며 예상한 현재 상태인지 확인합니다. JetKVM은 정확한 기본 토픽 하나로 공유 MQTT 연결을 사용합니다. 짧게 또는 길게 누르기 전에 보존된 ATX 상태를 읽고, DC 확장은 명시적인 ON 및 OFF 메시지를 사용합니다. 명령은 QoS 1을 사용하며 보존되지 않습니다. TinyPilot과 NanoKVM의 전원 하드웨어, 그리고 엔터프라이즈 제공업체의 PDU 통합은 모델과 펌웨어마다 다르므로, 명시적인 사설 엔드포인트가 제공되지 않는 한 해당 레코드는 콘솔/인벤토리 전용으로 남습니다. Dominion 대상과 연결된 Raritan PDU는 전원 제어의 검토된 Xerus 항목을 사용해야 합니다. KVM Off와 Cycle은 패널과 AI 하네스 모두에서 매번 새로운 확인이 필요합니다.
11.12Home Assistant 엔티티 모니터 (Beta)
이미 Home Assistant로 건물을 관리하고 있다면 FrontierStack이 Home Assistant가 보는 것을 감시할 수 있습니다. Home Assistant 서비스 패널을 열고 URL과 장기 액세스 토큰을 입력하면 Entity Monitors 섹션이 나타납니다. Load Entities from HA를 누르고 엔티티를 선택한 다음 규칙을 지정하십시오. 온도, 습도, 전력 측정값에는 숫자 규칙(is above / is below)을, 바이너리 센서의 on/off, wet/dry, home/not_home 상태에는 텍스트 규칙(equals / is not)을 사용합니다. 각 감시 항목은 일반 알림이 되어 평소의 점검 주기에 확인됩니다.
기기로 고정할 수 없는 센서에 적합한 곳이 바로 여기입니다. 서버실 바닥 아래의 Zigbee 누수 센서, 랙의 Z-Wave 도어 접점, Bluetooth 온도계 — 이들 중 어느 것도 IP 주소가 없으므로 ping을 보낼 수 없습니다. Home Assistant는 이미 이들의 프로토콜을 지원하므로 측정값은 Home Assistant를 통해 들어옵니다. Home Assistant 2026.9의 공유 Modbus 버스 접근은 같은 개념을 태양광 인버터, PDU, 전력량계로 확장합니다. 두 제품이 하나의 시리얼 연결을 놓고 다투는 대신 HA가 버스를 폴링하고 FrontierStack은 이름이 지정된 값을 읽습니다.
의도적으로 설계된 동작이 두 가지 있습니다. unavailable 또는 unknown을 보고하는 엔티티는 건너뛰지 않고 알림을 발생시킵니다 — 조용해진 누수 센서야말로 반드시 알아야 할 대상이기 때문입니다. 그리고 모니터는 구조적으로 읽기 전용입니다. Home Assistant의 서비스 API를 호출하지 않으므로 건물 상태를 읽을 수는 있지만 조명을 켜고 끄거나, 문을 열거나, 밸브를 열 수는 없습니다. 전환은 모든 작업이 명시적이고 확인을 거치는 전원 제어에서만 이루어집니다.
사용할 수 없는 기기. 엔티티를 하나씩 감시하는 대신 Alert when any device becomes unavailable을 켜십시오. FrontierStack은 1분마다 선택한 도메인의 모든 엔티티를 읽고 Home Assistant가 unavailable로 표시한 엔티티가 있으면 알림을 보냅니다. 단순히 unknown(아직 값이 없음)인 엔티티는 포함되지 않으며, Home Assistant 자체에 접근할 수 없는 동안에는 어떤 것도 오프라인으로 보고되지 않습니다. Alert after(기본값 10분)는 짧은 순단과 HA 재시작으로 인한 알림을 억제합니다. 많은 엔티티가 한꺼번에 실패하면(30% 초과 또는 50개 초과) 수십 개의 알림 대신 "Home Assistant: N devices unavailable"이라는 알림 하나를 받게 됩니다. 원인은 보통 HA 재시작, Zigbee/Z-Wave 브리지 다운, 또는 네트워크 문제로 같기 때문입니다. HA에서 아직 삭제하지 않은 퇴역 기기에는 Exclude(또는 각 행의 버튼)를 사용하십시오.
같은 연결이 기기 검색의 Import from Home Assistant 기능도 지원합니다. HA가 추적하는 네트워크 기기가 HA에서 지정한 이름으로 나열되며, 개별적으로 또는 한꺼번에 클릭 한 번으로 고정할 수 있습니다. 가져온 기기는 스캔 결과와 똑같이 동작하여 상태 확인, 장소, 라이선스 제한이 평소대로 적용되며, 이미 고정된 기기는 걸러집니다. Home Assistant 2026.9의 기기 레지스트리 API가 안정화될 때까지 두 기능 모두 Beta로 표시되며, 레지스트리 세부 정보 전체(영역, 모델)를 가져오는 기능은 그 이후로 미뤄집니다.
그 밖에 SNMP를 지원하는 모든 장비 — 관리형 스위치, 프린터, 네트워크 UPS, NAS 장치 — 는 기기 세부 정보 패널의 SNMP / OIDs 섹션에서 직접 조회합니다. 레거시 SNMPv2c 또는 SNMPv3를 선택하십시오. 권장되는 v3 프로필은 SHA 인증과 AES 암호화를 사용합니다. 암호구는 키체인에 보관되며 명령 인수가 아니라 소유자 전용 임시 설정 파일을 통해 net-snmp에 전달됩니다. 기본 제공 템플릿(System, Host Resources, Interfaces, Printer RFC 3805, UPS RFC 1628, Synology, QNAP, APC PowerNet)을 선택하고 Query를 누르면 레이블과 값 목록이 표시되며, 사용자 지정 OID 하나를 직접 가져올 수도 있습니다. OID를 감시할 수도 있습니다. 비교 조건과 임계값을 설정하면 FrontierStack이 해당 OID를 폴링하고 조건이 충족되면 알림을 발생시킵니다.
11.13Zigbee 및 Z-Wave 기기
오프라인 알림. Zigbee 패널에서 기기의 벨(또는 Alert on All)을 클릭하면 기기가 메시에서 이탈할 때 알림을 받습니다. Zigbee2MQTT에서는 Zigbee2MQTT 설정에서 availability를 켜야 합니다. 이 설정이 없으면 FrontierStack은 조용한 기기와 죽은 기기를 구분할 수 없으므로 패널에 주황색 안내가 표시되며, 절대 추측하지 않습니다. deCONZ는 조명의 연결 가능 여부를 보고합니다. 감시 중인 기기는 패널이 닫혀 있어도 1분마다 확인됩니다.
Zigbee 패널은 Z-Wave JS UI가 구동하는 Z-Wave 노드도 감시합니다. Z-Wave JS UI에서 Zigbee2MQTT가 사용하는 것과 같은 브로커에 MQTT 게이트웨이(Settings ▸ MQTT)를 활성화하고 Retain을 켜 두십시오. 그런 다음 패널의 Z-Wave 섹션에서 Z-Wave JS UI via MQTT를 켜고 같은 접두사(기본값 zwave)를 입력하십시오. 각 노드는 alive, awake, asleep 또는 dead로 표시되며, 벨을 켜면 노드가 dead가 될 때 알림을 받습니다. 절전 중인 배터리 노드는 정상이며 업 상태로 간주됩니다. 게이트웨이가 오프라인이거나, 보고한 적이 없거나, 마지막 읽기가 5분보다 오래된 경우 모든 노드가 unknown으로 표시되고 알림은 발생하지 않습니다 — FrontierStack은 알 수 없는 상태를 오프라인으로 보고하지 않습니다.
같은 SNMP 프로필은 기기 검색, Network Path, PoE 모니터링에서도 사용됩니다. PoE 쓰기는 설정된 사용자에게 쓰기 권한이 있으면 SNMPv3를 사용하고, SNMPv2c는 스위치별 쓰기 커뮤니티를 별도로 유지합니다. AI 하네스는 비밀 값이 아닌 프로필을 검사하고, 고정된 기기에서 숫자 OID를 읽고, PoE 상태를 나열할 수 있습니다. 쓰기 도구에는 임의의 OID 작업이 없으며, 검토된 PoE 켜기/끄기/사이클 작업으로 제한되고, 변경이 활성화되어 있어야 하며, 매번 새로 표시되는 수동 확인을 기다립니다.
11.14Music Assistant
Music Assistant는 Home Assistant 팀이 만든 음악 서버로, 스트리밍 서비스와 로컬 파일을 하나의 라이브러리로 묶어 AirPlay, Google Cast, Sonos, Squeezebox, Snapcast, DLNA 스피커에서 재생합니다. 문제가 생겨도 무언가가 멈추지는 않습니다 — 스트리밍 로그인이 만료되거나, 업그레이드로 스피커 통합이 깨지거나, 스피커가 네트워크에서 사라질 뿐입니다 — 그래서 음악이 재생되지 않을 때까지 아무도 알아채지 못합니다. Music Assistant 서비스 패널(홈 자동화)을 열고 서버 URL(보통 포트 8095)과 Music Assistant ▸ Settings ▸ Profile에서 발급한 장기 액세스 토큰을 입력하십시오.
모니터는 알림 점검이 돌 때마다 세 가지를 확인합니다. 서버가 응답하고 토큰을 받아들이는지, 로드에 실패했거나 다시 로그인해야 하는 음악 또는 플레이어 제공업체가 없는지, 그리고 오프라인 시 알림으로 전환해 둔 스피커가 여전히 사용 가능한지입니다. 휴대폰과 노트북은 하루 종일 연결되었다 끊기기를 반복하므로 스피커는 직접 선택한 경우에만 감시합니다. 모니터는 목록 조회 명령만 보내므로 재생을 시작하거나 음량을 바꾸거나 설정을 편집하는 일은 결코 없습니다.
서비스 스캔과 서비스 검색은 포트만 보고 추측하지 않고 /info 응답으로 포트 8095의 Music Assistant 서버를 인식하며, 그 버전을 표시합니다.
11.15디스크, RAID 및 SMART 상태
드라이브는 귀 기울이고 있으면 고장 전에 경고를 보냅니다. 디스크 상태 패널(기본 제공 모니터링 도구)은 여러 계층을 결합합니다. 볼륨 공간과 Time Machine 상태는 항상 표시됩니다. smartmontools를 설치하면(원클릭 설치 버튼) 각 물리 드라이브에 심층 SMART 속성이 추가됩니다 — 상태, 온도, 전원 켜짐 시간, 재할당 섹터와 보류 섹터, 고장 예측 플래그 — 드라이브별로 확인 버튼과 원본 보고서를 보여 주는 세부 정보 시트가 있습니다. 드라이브는 완전히 고장 났을 때만이 아니라 SMART 실패 또는 우려되는 속성(재할당/보류 섹터 또는 고장 예측)이 있을 때도 알림을 발생시킵니다.
소프트웨어 AppleRAID 세트(미러, 스트라이프, 연결)는 별도 섹션에 레벨, 상태, 구성원별 상태와 함께 표시되며, 세트가 저하되거나 구성원이 오프라인이 되면 알림이 발생합니다. 알림 및 임계값에서 디스크 알림을 켜면 다른 모든 모니터와 똑같이 사용자의 채널로 전달됩니다.
이 모니터들을 함께 사용하면, 한눈에 볼 수 있는 보드 하나, 조정할 패널 하나, 알림을 받을 채널 집합 하나를 갖게 됩니다 — 그리고 같은 상태 정보를 읽고 사용자를 대신해 같은 알림을 보내는 AI 관리자(13장)도 있습니다. 플릿 전체의 CPU, 메모리, GPU 지표를 이 그림에 공급하는 호스트 모니터는 8장에서 다룹니다.
11.16문제를 일으키는 패키지 및 컨테이너
패키지 관리자는 설치 후 스스로 실행되는 것들을 설치합니다 — Homebrew 서비스, 전역 npm 도구, pip로 설치한 서버, Docker 컨테이너 등 — 그리고 그중 하나가 코어 하나를 다 잡아먹거나 계속 쓰러져도 아무것도 알려 주지 않습니다. FrontierStack은 이 Mac에서 30 초마다 이들을 감시합니다. 바쁜 프로세스마다 프로그램이 있는 위치(Homebrew의 Cellar, node_modules, site-packages, gem, ~/.cargo/bin)로 어느 패키지에 속하는지 파악하고, docker stats와 각 컨테이너의 마지막 종료 상태를 읽고, macOS 충돌 보고서와 brew services를 확인한 다음, 다음을 표시합니다.
- 과도한 CPU 또는 메모리 — 임계값 초과(CPU는 활성 상태 보기와 같은 방식으로 계산하며 100% = 코어 하나, 패키지의 모든 프로세스 합계), 또는 메모리 한도의 90%에 이른 컨테이너
- 최근 24시간 동안 기록된 충돌, 그리고 메모리 부족으로 종료된 컨테이너나 오류와 함께 종료된 컨테이너
- 재시작 루프, 실패하는 상태 확인, 그리고 error 상태에 갇힌 brew 서비스
문제는 Docker, Homebrew, Node.js, Python, Ruby, Rust 패널 상단의 주의 필요 섹션에 표시되고 해당 패키지 행에 배지가 붙으며, 서버 활동 윈도우의 이 Mac 개요에도 나타나고 타일 색도 바뀝니다. 활동 윈도우의 프로세스 탭은 각 프로세스가 속한 패키지 이름을 보여 주며, Docker 탭은 이 Mac뿐 아니라 모든 서버에서 문제가 있는 컨테이너를 표시합니다. 무시를 누르면 해당 패키지 하나의 감시를 중지합니다.
직접 확인하지 않고 알림을 받으려면 알림 ▸ 패키지 및 컨테이너를 켜십시오. CPU와 메모리 임계값, 높은 사용량이 몇 분 동안 지속되어야 호출할지(빌드가 1분 동안 코어 하나를 꽉 채우는 것은 정상입니다), 그리고 리소스 사용, 실패, 또는 둘 다에 대해 알릴지를 선택하십시오. 그러면 알림은 다른 알림과 마찬가지로 채널, 연락처, 에스컬레이션 규칙을 거쳐 전달되고, 로컬 상태의 패키지 및 컨테이너 아래에 나타나며, 해당 패키지를 담당하는 패널에 배지를 표시합니다.
11.17서버 활동 윈도우
하나를 설정하는 것이 아니라 모든 기기를 한꺼번에 지켜보고 싶을 때는 모니터 ▸ 서버 활동 윈도우(⇧⌘A, 또는 도구 막대의 게이지 버튼)를 여십시오. 이것은 고정된 서버와 실시간 상태를 보고할 수 있는 고정된 기기 — 라우터와 방화벽, UPS 장치, PoE 스위치, 채굴 장비, KVM 콘솔, 스마트 플러그 — 만 담은 별도의 윈도우이며, 앱의 나머지 부분은 들어 있지 않습니다. 각 타일은 요청한 지표를 스파크라인과 상태 점으로 보여 주고, 주의가 필요하면 주황색이나 빨간색으로 바뀝니다.
레이아웃은 보드에 무엇을 올릴지 결정합니다. 기본 제공 레이아웃은 모든 서버, Mac, CPU 순으로 정렬된 간결한 클러스터 격자, 채굴 장비 및 GPU, 네트워크 및 전원, AI 에이전트, 전체입니다. 사본을 사용자화하거나 직접 만들 수 있습니다 — 대상 종류, 서버 필터, 개별 구성원, 지표와 그 순서, 타일 크기, 그룹화, 정렬, 샘플링 간격을 정할 수 있습니다. 측정값은 FrontierStack 모니터가 설치된 곳에서는 모니터에서, 그 외에는 SSH 왕복 한 번으로 가져오며, 샘플링은 윈도우가 열려 있는 동안에만 실행됩니다.
| 탭 | 할 수 있는 일 |
|---|---|
| 개요 | KPI, 사용량 차트(실시간, 또는 모니터의 24시간 / 7일), 네트워크 및 온도 차트, 시스템 정보, 상위 프로세스, 보안 상태 칩. |
| 프로세스 | 정렬, 검색, 종료 또는 강제 종료. |
| 서비스 | systemd / launchd / OpenRC: 시작, 중지, 재시작, 활성화, 비활성화. |
| Docker | 실시간 CPU, 메모리, 네트워크, 블록 I/O를 보여 주는 컨테이너, 로그, 시작, 중지, 재시작, 제거, 이미지, 컨테이너 생성… 및 스택 설치…. |
| Apple Containers | Mac 호스트의 Apple container CLI: 실행 중인 항목, 시작 및 중지, 로그. CLI가 없는 Linux 및 Windows 호스트에서는 숨겨집니다. |
| Kubernetes | 호스트에 kubectl이 있는 경우 읽기 전용 클러스터 상태: 각각 상태 점이 붙은 노드와 Pod, 그리고 그 출처인 컨텍스트. |
| 파일 | 탐색, 텍스트 파일 편집, 드래그 앤 드롭 업로드, 파일 또는 폴더 다운로드, 새 폴더, 삭제. |
| 포트 · 로그 · 터미널 | 수신 대기 포트와 연결, 로그 뷰어, 여러 세션을 지원하는 윈도우 내 터미널. |
| 사용자 · 패키지 · Cron · 방화벽 | 서버 패널과 같은 원격 관리 도구. Mac에서는 실제로 Mac이 사용하는 것이 Homebrew이므로 패키지 탭의 이름이 Homebrew입니다. |
| 전원 | 재부팅(SSH가 멈췄을 때는 모니터를 통한 재부팅), 플러그 / PDU / KVM 전원, PDU 명령, 연결된 UPS, Wake-on-LAN. |
이 윈도우는 키보드로 조작하도록 만들어졌습니다. 화살표 키는 보드나 목록에서 선택 항목을 옮기며, 위아래 화살표는 타일 한 줄씩 이동합니다. ⌘↑와 ⌘↓는 첫 번째 또는 마지막 대상으로 이동하고, ⇧⌘0은 보드로 돌아가며, esc는 한 단계씩 빠져나옵니다 — 세부 정보, 보드, 그리고 윈도우 닫기 순입니다. ⌘1부터 ⌘9까지는 레이아웃으로 바로 전환하고, ⌥⌘←와 ⌥⌘→는 레이아웃을 순환하며, ⌘E는 현재 레이아웃을 편집하고 ⌘⌫는 선택한 대상을 레이아웃에서 숨깁니다. ⌘F는 필터에 초점을 맞추고, ⌘R은 즉시 샘플링하며, ⌥⇥는 서버의 탭 사이를 이동하고, ⌘T는 터미널 윈도우를 열고, ⇧⌘O는 선택 항목을 메인 윈도우에서 열고, ⇧⌘K는 모든 서버에서 명령 하나를 실행하며, ⌃⌘S는 목록을 보이거나 숨깁니다. 언제든지 ⌘/를 누르면 전체 단축키 목록이 표시됩니다.
모두에서 실행…은 레이아웃의 모든 서버에서 명령 하나를 실행합니다. 기기에는 각자의 세부 정보가 있습니다. 라우터는 게이트웨이와 IDS 알림, UPS는 배터리와 전압, PoE 스위치는 포트별 제어, 채굴 장비는 해시레이트와 셰어, KVM은 콘솔과 전원, 플러그는 상태와 와트를 보여 줍니다.
서버의 개요 옆에 있는 웹 트래픽 탭은 해당 서버 하나에 대한 웹 트래픽 패널입니다. FrontierStack은 SSH로 서버의 Apache 또는 Nginx 액세스 로그를 찾아, 선택한 기간의 요청, 방문자, 오류율, 상위 페이지, 리퍼러, 봇을 보여 줍니다. 같은 보기가 메인 윈도우에도 있습니다 — 웹 트래픽 패널의 호스트 선택기에서 서버를 고르거나, 서버의 서비스에서 Apache 또는 Nginx 행의 트래픽을 누르십시오. root 전용 로그를 읽으려면 서버의 암호가 SSH 및 root 접근에 저장되어 있어야 합니다.

AI 에이전트 레이아웃은 설정해 둔 에이전트 런타임 중 상태 API가 있는 모든 것 — T3 Code, OpenClaw, Hermes, Paperclip, Octop, LangGraph 등 — 을 보드에 올리며, 작업 중인 에이전트와 오늘의 토큰 및 비용을 보여 줍니다. T3 Code는 읽기 전용으로 연결하면 사용자를 기다리는 스레드(답할 때까지 타일이 주황색으로 바뀝니다)와 전체 프로세스 트리의 CPU 및 메모리를 이 Mac 대비 비율로 추가합니다. 세부 정보에는 대기 중, 작업 중, 실패한 스레드, 모델별 사용량, 가장 바쁜 에이전트 프로세스가 나열됩니다. 플릿 점검에서 서버상에 발견된 T3 Code 워커는 존재만 표시하는 타일로 나타납니다.
연결된 Proxmox VE 클러스터는 모든 서버, 클러스터, 전체 레이아웃에 노드마다 타일 하나를 추가하며, CPU, 메모리, 디스크, 가동 시간 스파크라인과 실행 중인 VM 및 컨테이너 수를 보여 줍니다. 세부 정보에는 모든 게스트가 시작, 종료, 재부팅, 중지, 리셋 컨트롤과 함께 나열되고, 노드의 스토리지와 클러스터의 쿼럼이 표시되며, 부트 미디어 패널로 이어지는 ISO로 부팅…을 제공합니다. 클러스터 연결은 8장에서 다룹니다.
윈도우 자체의 제목 막대에는 세 가지 컨트롤이 있습니다. 모양은 이 윈도우만 다크 또는 라이트로 만듭니다 — 앱의 나머지 부분은 라이트로 두고 모니터링 보드만 다크로 쓰고 싶을 때 유용합니다 — 앱 따르기, 다크, 라이트 순으로 순환합니다. 탭 레이아웃은 선택한 서버의 탭을 콘텐츠 위의 띠와 옆의 세로 목록 사이에서 전환합니다. 세로 목록은 세로로 긴 윈도우에 어울리며 모든 탭을 한 번에 보여 줍니다. 키보드는 단축키 목록을 엽니다. 두 토글은 레이아웃 편집기와 ⇧⌘D, ⇧⌘L에도 있습니다.
제IV부
스크립트와 일정, AI 관리자, MCP, AI 스택 — FrontierStack을 단순한 제어판에서 스스로 일하는 도구로 바꿔 주는 네 개의 장입니다.
제12장
스크립트, Cron 및 자동화
하루 종일 실행하는 명령을 저장하고, 실제 시스템 cron으로 일정을 잡고, FrontierStack을 Apple 단축어, Siri 및 Mac의 다른 기능과 연결하십시오. 클릭 한 번으로 실행하는 스크립트부터 손을 쓰지 않는 음성 명령까지 다룹니다.
유능한 서버 관리자는 몇 가지 같은 일을 반복해서 합니다. 백업을 실행하고, 캐시를 예열하고, 백엔드를 올바른 방법으로 재시작하고, 가상 호스트가 정말 생각한 대로 제공하고 있는지 확인합니다. FrontierStack에서는 이러한 작업을 각각 저장된 스크립트로 만들어 클릭 한 번으로 실행하고, — 믿을 수 있게 되면 — cron에 맡겨 무인으로 실행할 수 있습니다. 여기서 더 나아가 Apple 단축어, Siri, frontierstack:// URL 스킴, 그리고 앱이 스스로 수행하는 예약 작업까지 이어집니다.
이 장에서는 자동화의 기계적인 측면, 즉 스크립트, 일정, macOS 자동화 기능을 다룹니다. 지능적인 측면 — 이러한 스크립트를 대신 작성하고 저장하고 예약하는 AI — 은 13장에서 다룹니다. 여기에 나오는 모든 것은 AI 관리자가 자체의 감사되는 도구로 조작할 수 있으므로, 두 장은 같은 장치를 양쪽 끝에서 설명합니다.
12.1스크립트 및 Cron 패널
사이드바에서 스크립트 및 Cron을 여십시오. 저장된 스크립트 라이브러리와 스케줄러가 한곳에 모여 있습니다. 상단의 저장된 스크립트 섹션에는 보관한 모든 스크립트가 이름과 본문 첫 줄과 함께 나열됩니다. 각 스크립트에는 네 개의 버튼이 있습니다. 실행(지금 실행), 예약(아래에서 설명하는 cron에 맡기기), 편집(편집기 열기), 그리고 삭제용 휴지통 아이콘입니다. 새 스크립트를 작성하려면 스크립트 추가…를 누르십시오.
저장된 스크립트는 앱이 해석하는 조각이 아니라 디스크에 있는 실제 실행 파일 — 셸, PHP 또는 Python — 입니다. 명확한 이름과 용도를 설명하는 메모를 붙여, 6개월 뒤의 사용자(또는 라이브러리를 훑어보는 AI 관리자)가 무엇을 하는 스크립트인지 한눈에 알아보고 올바른 것을 고를 수 있도록 하십시오. 저장된 파일이 그대로 실행되므로, 직접 테스트한 것이 일정에 따라 실행되는 것과 정확히 같습니다.
각 스크립트의 대상은 기본값인 이 Mac, 로컬 Docker 컨테이너, 또는 이름으로 지정한 연결된 서버(SSH 경유)입니다. 자격 증명이 필요한 스크립트는 로컬 .env 보관함의 이름 있는 비밀 값을 환경 변수($DB_PASSWORD, "$SSH_SUDO_PASS")로 참조합니다. 앱은 실행 시점에 실제 값을 주입하며, 그 값이 클라우드 모델에 도달하는 일은 결코 없습니다(13장).
12.2cron으로 예약하기
Cron 작업 섹션은 실제 시스템 crontab을 다루는 친숙한 프런트엔드입니다 — 앱이 따로 만든 스케줄러가 아니라, Unix에서 수십 년 동안 무인 작업을 실행해 온 바로 그 cron입니다. 각 행에는 작업 이름, 일정에 대한 쉬운 설명(FrontierStack이 5개 필드 구문을 대신 풀어 줍니다), 실행하는 명령이 표시되며, 활성화/비활성화 스위치와 지금 실행, 편집, 삭제 버튼이 있습니다.
저장된 스크립트에서 예약을 누르거나, 임의의 명령에 대해 작업 추가…를 누르면 일정 작성기가 열립니다. 주기 — 매시간, 매일 특정 시각, 매주 — 를 고르면 FrontierStack이 crontab 항목을 작성하고, 나중에 이름으로 찾아 업데이트할 수 있도록 자신의 작업에 # AC: 주석을 붙입니다. AI 관리자를 통해서도 마찬가지입니다. list_cron은 작업을 읽고, schedule_cron은 작업을 생성하거나 업데이트합니다(같은 이름의 작업이 이미 있으면 그 자리에서 업데이트).
완전히 직접 제어하려면 패널 하단의 원본 crontab 편집을 펼치십시오. 텍스트 편집기에 표시되는 표준 crontab이며, FrontierStack이 관리하는 작업은 # AC: 주석으로 표시되어 어느 줄이 앱의 것인지 알 수 있습니다. 직접 편집한 다음 적용을 누르십시오.
FS_TRIGGER, FS_LOCATION, FS_DEVICE, FS_DISK…)를 환경 변수로 받습니다. cron은 시간을, 트리거는 이벤트를 담당합니다.12.3함께 제공되는 샘플 스크립트
FrontierStack에는 검증되고 실전에서 다듬어진 관리 스크립트로 이루어진 작은 읽기 전용 라이브러리가 포함되어 있습니다. 이것은 사용자의 스크립트가 아니므로 그 자리에서 편집할 수는 없지만, 어느 것이든 전체 소스를 읽고 배우고, 자신의 라이브러리에 복사해 고쳐 쓸 수 있습니다. 이 스크립트들은 Mac 웹 스택(특히 구형 macOS Server 백엔드)의 실제 특이점을 담고 있으므로, 직접 작성하기 전에 하나 읽어 두면 예상치 못한 문제를 피할 수 있습니다. AI 관리자도 list_sample_scripts와 read_sample_script로 이 스크립트를 먼저 읽으므로, AI가 만드는 스크립트도 같은 어렵게 얻은 지식을 이어받습니다.
| 스크립트 | 하는 일 |
|---|---|
apache_real_docroot | 가상 호스트가 실제로 제공하는 문서 루트를 찾아냅니다 — 설정에 적힌 것이 아니라 Apache가 실행 시점에 결정하는 것입니다. |
apache_url_matrix | 가상 호스트의 경로 목록에 대한 HTTP 상태를 실제 호스트 헤더로 테스트해 보고하므로, 어떤 URL이 정상인지 한눈에 볼 수 있습니다. |
fleet_file_diff | 파일 하나의 체크섬을 플릿 전체에서 비교해 설정 드리프트 — 어떤 기기가 나머지와 조용히 달라진 곳 — 를 찾습니다. |
macos_httpd_vhosts | macOS Server 백엔드의 가상 호스트 → 문서 루트 맵을 출력하므로, 레거시 스택이 무엇을 제공하는지 정확히 볼 수 있습니다. |
macos_web_restart | macOS Server 웹 백엔드를 올바른 방법으로 재시작합니다 — 투박한 apachectl이 아니라 올바른 순서로 실행합니다. |
node_healthcheck | 가상 호스트 하나에 대해 여러 노드에 걸친 플릿 드리프트 / 상태 확인을 수행합니다. |
php_opcache_check | CLI와 웹 SAPI 양쪽의 OPcache 상태를 보고합니다. 두 쪽은 따로 설정되므로 어긋나기 쉽습니다. |
12.4Apple 단축어, App Intents 및 Siri
FrontierStack은 네이티브 App Intents를 제공합니다 — macOS 단축어 앱, Spotlight에 나타나고, (그중 몇 가지는) 말로 할 수 있는 기본 제공 Siri 문구로도 나타나는 동작입니다. 단축키, 메뉴 막대, 폴더 동작에서 실행하는 단축어에 넣어 쓰십시오. Automator는 단축어와 AppleScript를 실행할 수 있으므로 Automator에서도 작동합니다. 제공되는 동작은 다음과 같습니다.
| 동작 | 하는 일 | 기본 제공 Siri 문구 |
|---|---|---|
| 서버 스크립트 실행 | 저장된 스크립트 하나를 이름으로 실행합니다. | — |
| 서비스 그룹 시작 / 중지 | 그룹의 모든 서비스를 한꺼번에 시작하거나 중지합니다. | “Start my servers with FrontierStack” |
| 서비스 재시작 | Apache, Nginx, MySQL 또는 PostgreSQL을 재시작합니다. | “Restart a service with FrontierStack” |
| Docker 컨테이너 재시작 | 이름을 지정한 컨테이너를 재시작합니다. | — |
| 로컬 상태 가져오기 | 로컬 상태 요약(실행 중 / 중지된 서비스)을 반환합니다. | “Check server health with FrontierStack” |
| 사이드바 프리셋 적용 | 사이드바를 저장된 프리셋으로 전환합니다. | — |
| DNS 캐시 비우기 | macOS DNS 리졸버 캐시를 비웁니다. | — |
| 알림 보내기 | 알림 채널을 통해 알림을 보냅니다. | — |
| 서버 어시스턴트에게 묻기 | 일상적인 말로 된 질문을 AI 관리자에게 보내고 답을 워크플로로 돌려줍니다. | “Ask FrontierStack…” |
카탈로그는 이보다 더 넓습니다 — 서버 상태 가져오기, 서버 목록, Docker 컨테이너 목록, 웹사이트 확인 등도 모두 단축어를 만드는 데 사용할 수 있습니다. 기본 Siri 문구가 없는 동작도 마찬가지입니다.
macOS 15 이상에서는 FrontierStack이 서버, 웹사이트, 채굴 장비, Kubernetes 클러스터, 저장된 스크립트, 사이드바 프리셋을 Spotlight 색인(App Intents IndexedEntity)에도 등록합니다. 그러면 Siri와 Apple Intelligence가 “스테이징 서버 확인해 줘”나 “야간 백업 스크립트 실행해 줘”를 올바른 항목으로 해석할 수 있고, 각 항목은 실시간 부제와 함께 Spotlight에 나타납니다. 색인되는 것은 단축어가 이미 읽을 수 있던 정보 — 이름, 호스트 이름, OS, 상태 — 뿐이며 자격 증명이나 메모는 결코 포함되지 않습니다. 앱이 잠겨 있거나 라이선스가 없는 동안에는 색인이 비워집니다.
12.5스크립트에서 앱 조작하기
App Intents는 실제 단축어 동작이므로, macOS shortcuts 명령줄 도구를 사용해 셸 단계에서 호출할 수 있습니다 — 저장된 스크립트, cron 작업, Automator의 “셸 스크립트 실행” 동작, 또는 어떤 런처에서든 유용합니다. FrontierStack 동작을 한 줄짜리 단축어로 감싼 다음 shortcuts run "My Shortcut"으로 호출하고, 스크립트가 하는 다른 작업과 연결하십시오.
이 조립은 AI 관리자가 대신 해 줄 수 있습니다. 단축어를 통해 앱을 조작하는 자동화 스크립트를 요청하면, AI 관리자는 list_app_intents를 호출해 사용 가능한 동작과 각 동작의 정확한 shortcuts run 호출 방법을 확인한 다음, save_script로 스크립트를 작성합니다(또는 schedule_cron으로 예약합니다). 힌트가 아니라 완성되어 바로 실행할 수 있는 스크립트를 받게 됩니다.
12.6예약된 앱 동작
cron 작업은 셸 명령을 실행합니다. 예약된 앱 동작은 다릅니다. 이것은 앱 자체가 일정에 따라 수행하는 작업으로, 원시 셸 명령이 아니라 앱에 저장된 자격 증명과, 사용자와 AI 관리자가 사용하는 것과 같은 감사되는 도구를 사용합니다. 앱 동작을 사용하면 정해진 시간표에 따라 연결된 서버 재부팅, 앱이 제어하는 로컬 서비스 시작, 중지 또는 재시작, DNS 비우기를 할 수 있습니다. 앱 동작은 schedule_app_action으로 관리하고 list_app_actions로 나열하며, 패널의 예약된 앱 동작 아래에 표시됩니다. 가장 자연스럽게 만드는 방법은 AI 관리자에게 — “매일 밤 3시에 web-03 재부팅해 줘” — 라고 요청하고 승인하는 것입니다.
cron과 중요한 차이가 하나 있습니다. 앱 동작은 FrontierStack이 열려 있을 때만 실행됩니다. 앱을 통해 동작을 수행하므로, 앱이 닫혀 있는 동안 예정 시각이 된 것은 따라잡지 않습니다. 반면 cron은 앱이 열려 있든 아니든 시스템 수준에서 실행됩니다. 무슨 일이 있어도 반드시 실행되어야 하는 것에는 cron을, 앱이 자체 자격 증명과 도구로 해야 하는 것에는 앱 동작을 선택하십시오.
12.7frontierstack:// URL 스킴
모든 패널, 서버, 사이트, 컨테이너, Cloudflare 영역에는 frontierstack:// 딥 링크가 있습니다. AppleScript, Automator 셸 단계, 런처, 또는 어떤 스크립트 실행기에서든 open frontierstack://pane/Security 같은 한 줄로 앱을 앞으로 가져와 해당 패널로 바로 이동할 수 있습니다. 동작을 백그라운드에서 실행하는 대신 앱을 특정 위치에 띄워 두고 싶을 때, FrontierStack을 기존 워크플로에 연결하는 가장 빠른 방법입니다. URL 스킴의 전체 참조는 18장에 있습니다.
12.8백업, 로그 및 변경 로그 자동 내보내기
일상 자동화의 마지막 요소는 FrontierStack이 생성한 파일을 일정에 따라 Mac 밖으로 내보내는 것입니다. 백업 개요의 폴더로 자동 내보내기 섹션은 생성된 파일을 원하는 폴더로 복사합니다 — 외부 보관을 위한 Dropbox 폴더, 또는 자신만의 후속 규칙을 실행하도록 Hazel이 감시하는 폴더 등입니다. 기본 제공 피드는 세 가지입니다.
- 설정 백업 — 설정 백업의 zip 파일로, 사이드바 고정 항목, 셋업, 위치, 앱 환경설정 사본도 함께 들어 있습니다.
- 변경 로그 — 앱을 통해 이루어진 변경 사항의 누적 기록입니다.
- 앱 로그 — FrontierStack 자체 로그의 zip 파일입니다.
피드마다 간격(매시간, 6시간마다, 12시간마다, 매일 또는 매주)을 설정하고, 대상 폴더를 고르고, 필요하면 내보낸 후 비우기를 켜서 복사할 때마다 원본을 교체할 수 있습니다(변경 로그와 앱 로그가 끝없이 커지지 않도록 할 때 편리합니다). 지금 내보내기는 피드를 즉시 실행하며, 각 피드에는 마지막 결과가 표시됩니다. 파일은 선택한 폴더에 FrontierStack-<feed>-<timestamp> 형식으로 저장됩니다.
이제 기계적인 도구 모음이 모두 갖춰졌습니다. 저장하고 실행하는 스크립트, 그것을 일정에 따라 실행하는 cron과 앱 동작, 단축키나 음성으로 실행하는 단축어와 Siri, 어디로든 이동하는 URL 스킴, 그리고 결과를 기기 밖으로 보내는 자동 내보내기입니다. 다음 장에서는 이 모든 것을 대신 작성하고 연결해 줄 운영자, AI 관리자를 소개합니다.
제13장
AI 관리자
서버를 살펴보고, 무엇이 잘못되었는지 진단하고, 승인을 받아 수정하는 도구 사용 어시스턴트입니다. 비밀 값은 모델에 전달되지 않습니다.
AI 관리자, 즉 AI 하네스는 FrontierStack을 단순한 제어판 이상으로 만들어 주는 기능입니다. 도구를 사용하는 어시스턴트로서 사용자의 환경을 실시간으로 정확하게 파악하고 있습니다. 문제를 평소 쓰는 말로 설명하면 읽기 전용 진단으로 조사하고, 발견한 내용을 설명한 뒤, 수정안을 제안합니다. 수정안은 사용자가 승인하기 전에는 아무것도 실행되지 않습니다. 이 Mac과 SSH로 연결한 모든 서버에서 동작하며, 암호는 절대 보지 않습니다. 이 장에서는 AI 관리자가 어떻게 판단하는지, 무엇을 할 수 있는지, 그리고 안전하게 사용하는 방법을 설명합니다.

.env 비밀 값 보관함, 장기 기억.13.1모델 선택
AI 관리자는 특정 제공업체에 묶여 있지 않습니다. 패널 상단에서 AI 관리자를 구동할 모델을 선택합니다.
- FrontierStack AI — 데이터를 보존하지 않는(zero-retention) 서비스를 사용할 수 있을 때의 기본 하네스 엔진입니다. 별도의 API 키가 필요 없으며, Enfour의 AI Cloud를 통해 Qwen3를 실행합니다. FrontierStack AI 서버는 현재 사용자에게 무료로 제공되며, 향후 유료 서비스로 전환될 수 있습니다. 업스트림 키와 제공업체 엔드포인트는 Enfour 서버에만 보관되고, 프롬프트는 업로드 전에 결정론적으로 마스킹되며, 서비스는 데이터 무보존을 증명해야 합니다. 이 최종 하네스 엔진이 이미 데이터를 보존하지 않으므로, FrontierStack은 같은 텍스트를 두 번 보내지 않도록 별도의 클라우드 Prompt Firewall 단계를 건너뜁니다. 도구 제한과 승인은 그대로 유지됩니다.
- 클라우드 모델 — 어려운 진단과 여러 단계의 작업에 가장 강력한 선택지입니다. API 키는 직접 제공하며 로컬에 저장됩니다. OpenAI 키를 사용하면 가장 어려운 작업용 GPT-6 Astra, 복잡한 코딩과 전문 업무용 GPT-6 Sol, 집중적인 대량 작업용 GPT-6 Luna와 함께 이전 GPT-5.6 제품군(Sol, Terra, Luna)을 선택할 수 있습니다.
- Perplexity — AI Models에서 Perplexity API 키를 추가한 다음 Sonar, Pro Search, Deep Research 또는 Advanced Deep Research를 선택하십시오. FrontierStack은 Agent API를 사용하므로 AI 관리자가 웹 검색, URL 읽기, 출처 인용과 함께 평소의 보호된 도구를 사용할 수 있습니다. 모델 및 리서치 사용량은 사용자의 Perplexity API 계정으로 청구됩니다.
- 로컬 모델 — Ollama, LM Studio 또는 Mac에서 실행되는 OpenAI 호환 서버(LocalAI, Jan, llama.cpp)와 함께 Apple Intelligence도 사용할 수 있습니다. Apple silicon과 macOS 26의 온디바이스 Foundation Model을 네이티브로 사용하거나 Apfel을 통해 사용합니다(Apfel은 AI Models 패널이 명령 하나로 설치하고 실행하며, 로그인 시 또는 앱 실행 시 자동으로 시작하도록 설정할 수도 있습니다). 로컬 모델은 작업을 완전히 오프라인으로 유지합니다. Mac 밖으로 아무것도 나가지 않으므로 아래에서 설명하는 전송 전 검사가 필요 없으며 표시되지 않습니다. 로컬 모델 실행에 대해서는 15장을 참조하십시오.
- MCP를 통한 자신의 구독 도구 — 이미 요금을 내고 있는 정액제 플랜의 Claude Code, Claude Desktop 또는 Cursor에서 토큰당 요금 없이 앱 전체를 조작할 수 있습니다. 자세한 내용은 14장에서 다룹니다.
13.2비전 모델로 패널 검사하기
FrontierStack에는 설정이 보이지만 AI 관리자의 도구로는 해당 컨트롤을 검사할 수 없는 경우, 프롬프트 위의 Attach Screenshot…을 클릭하십시오. 이는 Qwen 전용 기능이 아니라 모델의 기능입니다. FrontierStack은 호환되는 OpenAI 방식, Anthropic, 로컬 Ollama 비전 모델에 맞는 이미지 형식을 보냅니다. 기능을 알 수 없는 사용자 지정 모델이나 라우팅된 모델도 시도할 수는 있지만, 해당 서버가 이미지를 거부할 수 있습니다.
FrontierStack은 화면을 자동으로 캡처하지 않습니다. 사용자가 이미지 한 장을 선택하고, 준비된 미리보기를 그대로 확인합니다. 앱은 이미지를 1,800픽셀로 제한하고, 다시 렌더링하여 메타데이터를 제거하며, macOS 텍스트 인식을 로컬에서 사용해 저장된 자격 증명, 개인 계정 이름, 비공개 플릿 식별자 또는 비밀 값처럼 보이는 토큰이 포함된 줄을 검게 가립니다. OCR은 보장이 아니라 다층 방어의 한 겹일 뿐입니다. 관련 패널만 남도록 잘라 내고, 보내기 전에 미리보기를 확인하십시오.
13.3대화가 진행되는 방식
동료에게 상황을 설명하듯 요청을 입력하십시오. 예: “사이트에서 왜 502가 나지?”, “shop.example.com 인증서가 곧 만료되는지 확인해 줘”, “db-02의 Postgres를 재시작해 줘”. 그러면 AI 관리자는 다음 과정을 반복합니다.
- 현황을 파악합니다. 행동하기 전에 서비스 카탈로그, 연결된 서버와 기기, 현재 상태 보드 등 실제로 무엇을 운영하고 있는지 확인하므로, 일반적인 추측이 아니라 사용자의 시스템에 맞는 답을 합니다.
- 읽기 전용으로 조사합니다. 로그를 읽고, 진단을 실행하고, 포트와 인증서를 확인하고, 설정 파일을 살펴봅니다. 이 과정에서는 아무것도 변경되지 않습니다.
- 설명한 다음 제안합니다. 발견한 내용을 알려 주고, 변경이 필요하면 실행하려는 정확한 명령이나 파일 편집 내용을 보여 줍니다.
- 사용자가 승인합니다. 시스템을 변경하는 작업은 사용자가 해당 작업에 대해 승인을 클릭하기 전에는 실행되지 않습니다. 승인 후 수정을 실행하고 다시 확인합니다.
턴이 끝날 때까지 기다릴 필요가 없습니다. 작업 중에 다른 메시지를 입력하면 어시스턴트의 다음 단계에서 진행 중인 대화에 합류합니다. AI 관리자는 도구 결과와 함께 새 지시를 읽고, 동료에게 방향을 바꾸라고 말할 때처럼 작업 도중에 진행 방향을 조정합니다. 해당 턴에 반영되지 못한 메시지는 턴이 끝난 직후 순서대로 전송되며, 중지해도 사라지지 않으므로 입력한 내용이 유실되지 않습니다. 또한 연결할 수 없는 SSH 호스트나 멈춘 서비스 때문에 도구 호출이 응답하지 않을 때는 진행 표시기 옆의 Skip을 누르십시오. 어시스턴트는 즉시 작업을 계속하며 해당 도구가 고장 났을 수 있다는 안내를 받으므로, 같은 실패를 반복해서 재시도하지 않고 우회합니다.
13.4신뢰 모델: 기본적으로 읽기 전용
이 장에서 가장 중요한 섹션입니다. AI 관리자는 프로덕션 서버를 맡겨도 통제권을 잃지 않도록 설계되었습니다.
| 설정 | 허용되는 작업 |
|---|---|
| (기본값) | 읽기 전용. 어시스턴트는 로그, 상태, 설정, 진단 등 모든 것을 볼 수 있지만 아무것도 변경할 수 없습니다. |
| Allow changes | 변경 작업(서비스 재시작, 파일 쓰기, 인증서 발급, 방화벽 포트 열기)을 허용합니다. 각 작업에는 여전히 승인 카드가 표시됩니다. |
| Allow scripts | 범용 셸 도구와 저장된 스크립트 실행을 허용합니다. 실행 전에 스크립트와 평이한 설명이 표시되어 승인을 받습니다. |
이 토글 위에 다음 원칙이 적용됩니다.
- 작업별 승인. 변경을 허용한 상태에서도 모든 변경 단계는 실제 명령이나 diff로 먼저 사용자에게 표시되며, 사용자가 그 작업을 승인하기 전에는 아무것도 실행되지 않습니다. 임시 변경에 대해 “모두 승인” 모드는 없습니다.
- 원격 작업에는 별도의 동의가 필요합니다. 모니터링 헬퍼를 통해 연결된 서버를 제어하려면 추가로 해당 서버의 Host Monitor 패널(8장)에서 설정하는 “Allow actions” 스위치가 켜져 있어야 합니다.
- 파괴적인 데이터베이스 작업에는 고성능 모델이 필요합니다. 데이터베이스 복구, 복원, 재구축은 되돌리기 어려운 작업이므로 FrontierStack은 이 단계를 최신 고성능 모델로만 엄격히 제한합니다. 소형 모델이나 온디바이스 모델도 로그를 읽고 진단할 수는 있지만, 고성능 모델(Claude Opus/Sonnet, GPT-4o/o 시리즈, Gemini Pro)로 전환하기 전까지는 파괴적인 도구 사용이 거부됩니다.
DELETE, TRUNCATE, 데이터베이스/테이블 삭제, 범위가 지정되지 않은 업데이트, 파일 삭제 및 덮어쓰기 기본 작업, 디스크 초기화, 파괴적인 저장된 스크립트, cron 작업 또는 이벤트 트리거는 승인 단계 전에 거부됩니다. 구조화된 파일 쓰기는 이전 파일을 보존합니다. vhost_remove는 Apache/nginx 가상 호스트 하나를 되돌릴 수 있는 방식으로 비활성화하며 문서 루트는 보존합니다. 이름이 지정된 백업에서 의도적으로 복원하는 작업은 별도로 보호되는 로컬 복구 워크플로를 통해서만 가능합니다.13.5비밀 값 보관함
실제 관리 작업에는 데이터베이스 암호, SSH sudo 암호, Cloudflare 토큰 같은 자격 증명이 필요합니다. FrontierStack은 이러한 값을 로컬 .env 보관함에 저장하므로 모델은 이를 절대 보지 못합니다.
AI 관리자의 Script secrets (.env) 막대에서 이름이 있는 비밀 값을 추가하십시오. 예: DB_PASSWORD, CF_TOKEN, SSH_SUDO_PASS. 어시스턴트가 비밀 값이 필요한 스크립트를 작성할 때는 값이 아니라 이름을 참조합니다.
mysql -u root -p"$DB_PASSWORD" -e "SHOW DATABASES;"
실행 시점에 앱이 로컬에서 또는 SSH를 통해 대상 서버에서 실제 값을 환경 변수로 주입하며, 스크립트가 실제로 참조하는 이름만 주입합니다. 모델은 올바른 스크립트를 작성할 수 있도록 비밀 값의 이름은 전달받지만 값은 절대 받지 않으며, 명령 출력은 전송 전에 비밀 값이 마스킹됩니다.
- 셸:
$NAME/"$NAME" - PHP:
getenv('NAME') - Python:
os.environ['NAME']
PROD_DB_PASSWORD, STAGING_DB_PASSWORD, 서버별 BALTHAZAR_MYSQL_PW. 어시스턴트는 대상에 맞는 이름을 고르며, 대응 관계가 불분명하면 추측하지 않고 질문합니다.13.6리포지토리에서 가져오기와 frontierstack run
일부 개발자는 에이전트를 위해 SSH 설정, Ansible 인벤토리, API 키로 가득한 .env 파일 등 네트워크 설정을 리포지토리에 보관합니다. FrontierStack은 의도적으로 자격 증명을 리포지토리로 내보내지 않습니다. 리포지토리는 모든 클론, CI 실행, 에이전트 샌드박스에 복사되며, 파일을 삭제한 뒤에도 기록에 비밀 값이 남기 때문입니다. 대신 이미 가지고 있는 리포지토리를 가져올 수는 있습니다.
Migrate Setups ▸ Servers ▸ Import from a Repo…를 여십시오(Script secrets 막대에서도 열 수 있습니다). 폴더를 선택하거나, git 주소를 붙여넣어 임시 폴더에 클론합니다. 임시 폴더는 윈도우를 닫으면 삭제됩니다.
| 리포지토리에서 찾은 항목 | 가져오는 형태 |
|---|---|
SSH 설정: Host, HostName, User, Port, IdentityFile | 플릿의 서버. 리포지토리 안의 키는 ~/.ssh/frontierstack에 복사됩니다 |
group_vars / host_vars가 있는 Ansible 인벤토리(INI 또는 YAML) | 환경(production, staging…)이 지정된 서버. become 암호는 서버의 sudo 암호가 됩니다 |
.env, .env.*, .envrc | Script Secrets. CLOUDFLARE_API_TOKEN처럼 잘 알려진 이름은 해당 서비스의 전용 항목도 채울 수 있습니다 |
| SOPS, Ansible Vault, age, git-crypt 파일 | 사용자 자신의 도구와 키로 메모리 안에서만 복호화 |
COMPUTERS.md 같은 Markdown 인벤토리(이름과 주소 열이 있는 표) | 서버. 폐기 또는 오프라인으로 표시된 기기와 ssh user@host 명령에만 나오는 호스트는 선택 해제된 상태로 시작합니다 |
설정 스크립트의 export NAME=value 줄 | Script Secrets |
AGENTS.md, CLAUDE.md, HOW_TO_*.md 런북과 스크립트 | Knowledge Folder(Runbooks, Recipes)의 사본. 비밀 값은 치환됩니다 |
FrontierStack Network Repo(frontierstack-network.json) | 그대로 읽습니다. 필요한 비밀 값 이름이 나열됩니다 |
그 밖의 항목(routers.yml, Terraform 변수) | Interpret with FrontierStack AI |
AI 단계는 항상 FrontierStack AI의 기본 모델을 사용하며, 값은 절대 보지 않습니다. 비밀 값처럼 보이는 모든 값은 ‹V7› 같은 자리 표시자로 대체되고, 모델은 자리 표시자로 응답하며, 실제 값은 Import를 클릭할 때 사용자의 Mac에서만 채워집니다. Show What the AI Sees…를 사용하면 전송되는 텍스트를 정확히 확인할 수 있습니다.
가져오기가 끝나면 FrontierStack은 리포지토리의 git 기록에 남아 있는 파일을 나열하고, API로 새 키를 발급할 수 있는 서비스에는 Replace Key를 제공하며, .env.frontierstack 참조 파일을 저장할 수 있습니다. 이 파일에는 이름만 들어 있으므로 커밋해도 안전합니다.
DB_PASSWORD=fs://DB_PASSWORD
CLOUDFLARE_API_TOKEN=fs://CLOUDFLARE_API_TOKEN
Script secrets 막대에서 Let frontierstack run use these secrets를 켜면, 에이전트가 값을 직접 보유하지 않고도 그 값으로 명령을 실행할 수 있습니다.
frontierstack run -- ./deploy.sh
frontierstack run --secret API=CLOUDFLARE_API_TOKEN -- terraform plan
값은 해당 명령 하나에 대해서만 환경 변수로 주입되며 출력에서 마스킹됩니다(대화형 프로그램에는 --no-masking 사용). 앱이 닫혀 있어도 동작하고, 앱 잠금을 준수하며, 보안 키로 암호화된 비밀 값은 열 수 없고, 각 실행을 이름만으로 변경 로그에 기록합니다.
13.7Prompt Firewall
Prompt Firewall은 FrontierStack에서 항상 켜져 있는 결정론적 마스킹 위에 추가되는 선택적 의미 검사입니다. Ollama 또는 지원되는 로컬 OpenAI 호환 모델을 사용하려면 On this Mac을 선택하고, 그렇지 않으면 명시적으로 Enfour's AI Cloud를 선택하십시오. 경고 후 확인을 요청하거나, 찾은 내용을 자동으로 마스킹하거나, 전송을 차단할 수 있습니다.
온디바이스 검사는 검사 전체를 이 Mac 안에서 처리합니다. Enfour의 AI Cloud는 FrontierStack이 알려진 자격 증명, 사용자 이름, 비공개 주소, 비밀 값 형태의 패턴을 제거한 뒤의 텍스트만 받습니다. 현재 사용자에게 무료입니다. 클라우드 서비스는 모든 응답에서 데이터 무보존을 증명해야 하며, 이 보증이나 서비스 자체가 사라지면 검사는 검증되지 않은 결과를 반환하고 Block 모드에서는 전송이 중지됩니다. Enfour의 업스트림 제공업체 키와 엔드포인트는 앱에 전달되지 않으므로, Enfour는 새 키를 배포하거나 앱이 임의의 주소를 호출하도록 원격으로 설정하지 않고도 나중에 신뢰할 수 있는 제공업체를 변경할 수 있습니다.
13.8AI 관리자가 할 수 있는 일: 도구
어시스턴트는 감사를 거친 고정된 도구 세트를 통해서만 작업합니다. 각 도구에는 안전장치가 있습니다. 읽기 전용 도구는 항상 동작하고, 변경 도구는 위의 토글과 승인이 필요합니다. 용도별로 정리하면 다음과 같습니다.
| 영역 | 대표적인 도구 |
|---|---|
| 탐색 및 현황 파악 | app_capabilities(FrontierStack이 관리할 수 있는 항목), search_app_help(FrontierStack 설정과 컨트롤에 대한 최신 도움말), list_targets(서버 및 기기), get_server_health, get_location, get_sidebar_state |
| 진단(읽기 전용) | diagnose(ping, dig, curl, netstat, df, ps…), read_logs/tail_log(Wi-Fi 이벤트 로그 포함), get_location(실시간 Wi-Fi 무선 세부 정보 포함), security_audit, port_check, cert_expiry_check, whois_lookup, ip_analysis, metrics_snapshot, php_test/python_test |
| 서비스 제어 | service_action(Homebrew 서비스), repair_service, reload_webserver, restart_app, monitor_action(서버의 헬퍼 경유), reboot_host |
| 웹 및 데이터베이스 | list_sites/read_site_file/write_site_file, vhost_create/vhost_remove, list_databases/run_sql, db_dump/backup_now/restore, issue_certificate |
| 네트워크 및 경계 | firewall_rule, flush_dns, dns_record(Cloudflare, DNSimple, GoDaddy, Hostinger, ConoHa), cloudflare_dev_mode(Development Mode, under_attack, email_status, web_vitals, rules, rule_update, rule_create, security_events, cache_hosts, workers, plan_usage, bot_fight), router_info(상태, 상태 지표 및 보안 신호), reboot_router, open_web_ui, discover_devices/pin_device, internet_speed |
| 메일 보안 | email_auth_dns(SPF/DMARC/DKIM), harden_mail_postfix, test_open_relay, generate_dkim_key, install_mail_cert |
| 보안 테스트 | strix_status(Strix 설치, 스캔 기록 및 발견 사항 읽기), strix_scan(승인된 침투 테스트 실행), strix_control(중지, 재실행, 재시작, 무음 처리) — 실제로 작업을 수행하는 두 도구는 로컬 전용입니다 |
| 파일 및 셸 | read_remote_file/write_remote_file/upload_file, 그리고 run_script — 이 Mac 또는 연결된 모든 서버에서 쓰는 범용 셸 |
| 스크립트 및 일정 | list_scripts/run_saved_script/save_script, schedule_cron, schedule_app_action, list_sample_scripts |
| 메시징 | get_messaging_channels, send_notification, get_alert_errors |
| 전자상거래 | ecommerce — 연결된 모든 쇼핑몰, 마켓플레이스, 결제 채널: 통화별 오늘/이번 주/이번 달 매출, 처리 대기 주문, 라쿠텐 RMS 라이선스 키 만료 임박 같은 경고, 전자상거래 카탈로그(읽기 전용) |
| 지식 | list_skills/load_skill, list_notes/read_note, obsidian_search/obsidian_read_note, remember/list_memory/forget |
| 제공업체 MCP 서버 | hosted_mcp — provider=zapier(사용자의 Zapier MCP 액션), supabase(Supabase 공식 MCP 서버), hostinger(Hostinger 공식 MCP 서버. Hostinger 패널에서 Allow writes가 켜져 있지 않으면 읽기만 가능), stripe, github, neon, posthog, datadog, pagerduty, resend, planetscale, n8n, grafana(각각 해당 패널에 저장된 키 사용, 같은 규칙 적용), 각 패널에서 브라우저로 로그인하여 사용하는 20여 개의 추가 서비스(atlassian, linear, vercel, sentry, notion 등), 또는 cloudflare(Cloudflare 공식 MCP 서버: 문서 및 API 사양 검색, Cloudflare 패널에서 execute가 허용된 경우 승인된 API 호출). 모든 제공업체에서 자격 증명을 반환하거나 생성하는 도구는 거부되며, 결과에 포함된 자격 증명 값은 마스킹됩니다 |
| 앱 자체 | open_pane, set_pane_visible, manage_palette, set_services_visible — 어시스턴트가 대신 화면을 이동하고 사이드바 구성을 바꿀 수 있습니다 |
범용 run_script 도구는 어시스턴트의 셸입니다. 고정 도구로 처리할 수 없는 작업은 작고 읽기 쉬운 스크립트를 작성하여 승인을 위해 보여 주는 방식으로 처리합니다. 원격 서버에서는 두 단계로 동작합니다. 먼저 읽기 전용 테스트 스크립트로 문제를 찾고, 이어서 최소한의 수정을 적용한 뒤, 다시 테스트하여 확인합니다.
13.9스킬, 노트, 기억
다음 세 가지 기능을 통해 AI 관리자는 일반적인 기본값이 아니라 사용자의 지식을 바탕으로 작업합니다.
13.12.1스킬
스킬은 플릿 보안 감사나 웹 스택 재시작 절차처럼 엄선된 여러 단계의 플레이북으로, AI Skill Manager에서 관리합니다. 어시스턴트는 스킬 목록을 가볍게(이름만) 확인하고 필요할 때 해당 스킬의 전체 지침을 로드하므로, 작업이 즉흥적으로 진행되지 않고 사용자가 승인한 절차를 따릅니다.
13.12.2AI와 공유하는 노트
Notes 패널(3장)에는 자격 증명, 런북, 지침이 들어 있으며, 각 노트에는 기본적으로 꺼져 있는 노트별 잠금이 있습니다. 어시스턴트는 Share with AI로 명시적으로 잠금을 해제한 노트만 읽을 수 있습니다. 어떤 노트가 있는지 알 수 있도록 제목은 볼 수 있지만, 본문은 작업에 필요할 때만 읽습니다.
13.12.3장기 기억
어시스턴트에게 “내가 선호하는 채널은 LINE이라는 걸 기억해 줘” 또는 “주말에는 절대 메시지를 보내지 마”라고 말하면, 이 규칙을 영구적인 memory.md에 저장하여 이후 세션에서도 따릅니다. 기억은 언제든지 목록으로 보거나 삭제할 수 있습니다.
13.12.4Knowledge Folder, Obsidian, Perplexity Brain
Knowledge Folder 패널에는 로컬 Markdown 폴더를 무엇이든 지정할 수 있습니다. FrontierStack은 관리 대상 인벤토리, 장애, 변경 사항, SOP, 런북, 프롬프트, 레시피를 FrontierStack/ 하위 폴더에 보관합니다. Obsidian은 선택 사항인 편집기입니다. 설치된 보관함은 바로 가기로 표시되지만 Obsidian을 설치할 필요는 없습니다.
외부 모델은 로컬 폴더 전체를 읽을 수 없습니다. Perplexity Projects와 Brain을 사용하려면 Prepare Perplexity Folder를 클릭하십시오. 생성된 Perplexity Export에는 기본적으로 마스킹된 인벤토리와 기능만 포함되며, 주소, MAC 주소, 계정 이름, 자격 증명, 비공개 노트, 저널은 제외됩니다. 절차나 저널을 공유하려면 별도로 동의해야 합니다. 폴더를 검토한 뒤 Perplexity Project에 첨부하고, 플랜에서 제공하는 경우 Brain을 활성화하십시오.
13.10이 Mac과 플릿
거의 모든 도구는 대상을 받습니다. 대상을 생략하면 도구는 이 Mac에서 실행되고, 연결된 서버의 이름을 지정하면 같은 진단, 로그 읽기, 스크립트 또는 수정이 SSH를 통해 해당 서버에서 실행됩니다(읽기 전용 도구는 계속 읽기 전용입니다). 따라서 같은 대화 안에서 “이 Mac의 디스크를 확인해 줘”에서 “이제 web-01과 edge-03에서도 똑같이 해 줘”로 자연스럽게 넘어갈 수 있습니다. 서버 연결과 호스트 모니터 헬퍼는 8장에서 다룹니다.
권한이 필요한 작업 전에 하네스는 선택한 대상의 비밀이 아닌 접근 상태를 읽습니다. 연결된 서버는 SSH/root/sudo 암호가 FrontierStack의 키체인에 로컬로 저장되어 있는지를 보고하며, 모델에는 접근 가능하다는 사실만 전달되고 값은 절대 전달되지 않습니다. 이 Mac은 승인된 권한 있는 헬퍼가 준비되었는지, 아니면 지원되는 작업에서 일반적인 대화형 macOS 관리자 암호 프롬프트가 표시되는지를 보고합니다. 접근이 가능한 경우, 어시스턴트는 지침만 안내하고 멈추지 말고 사용자의 승인 후 범위가 제한된 도구를 시도해야 합니다. AI가 자유롭게 작성한 스크립트에는 서버에 저장된 암호가 자동으로 제공되지 않습니다.
13.11사용자 지정 지침과 기록
Custom Instructions 편집기(17장)에서는 사내 스타일, 요약할 내용, 항상 원하는 기본값 등 어시스턴트의 기본 동작을 정할 수 있습니다. 지난 대화는 기록 메뉴에 보관되므로 조사하던 내용으로 돌아갈 수 있으며, 어시스턴트는 중단한 지점부터 이어서 작업할 수 있습니다.
13.12실제 예시
각 요소가 함께 동작하는 모습을 보여 주는 전형적인 대화입니다. “쇼핑몰이 502 오류로 다운됐어.”
어시스턴트는get_server_health를 호출하여 web-01에서 Apache는 실행 중이지만 PHP-FPM이 중지된 것을 확인합니다.read_logs(대상 web-01)로 PHP-FPM 로그를 읽어 설정 편집 후 풀이 시작되지 못하고 있음을 발견합니다. 문제가 되는 줄을 보여 주고,write_remote_file로www.conf를 한 줄 수정하는 방안을 제안한 뒤, 사용자가 승인하면reload_webserver로 다시 로드하고 루프백으로 사이트를 다시 확인합니다. 정상입니다. 요청하면send_notification으로 팀에 한 줄짜리 복구 완료 메시지를 보냅니다.
전 과정에서 어떤 암호도 모델에 전달되지 않았고, 모든 변경은 사용자의 승인을 기다렸으며, 모두 사용자가 직접 할 수도 있었던 작업입니다. 다만 훨씬 빠를 뿐입니다.
제14장
에이전트 워크플로 속의 FrontierStack
FrontierStack을 코딩 에이전트, 자율 코디네이터, 사람과 에이전트가 함께하는 워크플로 뒤에서 보호된 인프라 권한으로 사용하십시오. 서버 자격 증명을 모델로 옮길 필요가 없습니다.
13장에서는 FrontierStack 내부의 AI 관리자를 다루었습니다. 이 장에서는 반대 방향, 즉 이미 사용 중인 에이전트 워크플로 안에 FrontierStack을 배치하는 방법을 다룹니다. Hermes Bots, Codex, Claude Code, Cursor, Gemini CLI, Grok 기반 코디네이터 및 기타 MCP 클라이언트는 FrontierStack을 통해 실제 플릿을 조사하고 작업을 요청할 수 있으며, 자격 증명과 최종 권한은 Mac에 그대로 남습니다.
14.1FrontierStack의 역할
에이전트 시스템에는 일반적으로 무엇을 해야 할지 결정하는 코디네이터와 특정 작업 수행 방법을 아는 여러 전문가가 있습니다. FrontierStack은 그중 고정된 전문가 역할인 서버 관리자를 맡습니다. 또한 확률적인 모델 출력과 프로덕션 인프라 사이의 권한 경계이기도 합니다.
이 구분은 중요합니다. 코딩 에이전트는 배포를 이해하고 재시작을 제안할 수 있지만, 그 재시작을 가능하게 하는 SSH 키를 가지고 있어서는 안 됩니다. 관리자 에이전트는 인시던트를 할당할 수 있지만, 그 메시지가 승인은 아닙니다. FrontierStack은 요청을 받아 호출자를 인증하고, 도구 집합을 좁히고, 로컬 정책을 적용하고, 실행 시점에 자격 증명을 확인하고, 필요하면 사람에게 묻고, 작업을 수행하고, 관찰된 결과를 검증하고, 누가 요청했는지 기록합니다.
14.2하나의 요청, 처음부터 끝까지
- 코디네이터가 범위가 정해진 작업을 기술합니다. 예: “web-02의 인증서 오류 원인 조사” 또는 “큐 워커가 중지되어 있으면 재시작”.
- FrontierStack이 호출자를 인증합니다. 로컬 클라이언트는 소유자 전용 키체인 브리지를 사용합니다. 네트워크 호출자는 명시적으로 활성화되고 페어링되었으며 서명 및 범위가 지정된 경로를 사용해야 합니다.
- 도구 검색은 두 번 필터링됩니다.
frontierstack_find_tools가 작업과 관련된 도구를 찾은 다음, 호출자의 현재 범위가 사용할 수 없는 도구를 제거합니다. - 정책은 실행 시점에 적용됩니다. 읽기 전용 기본값, 앱 잠금, 파괴적 데이터 제한 및 승인 카드는 선택한 도구가 호출될 때 다시 확인됩니다. 검색은 결코 권한을 부여하지 않습니다.
- 자격 증명은 로컬에서 확인됩니다. SSH 키, sudo 암호, 데이터베이스 자격 증명, 라우터 로그인 정보 및 클라우드 토큰은 키체인 또는 연결된 보관함에 남습니다. 모델은 값도, 재사용 가능한 자격 증명이 담긴 명령도 받지 않습니다.
- 대상이 범위가 정해진 작업을 수행합니다. FrontierStack은 검토된 로컬, SSH 또는 헬퍼 경로를 통해 이 Mac 또는 선택한 Linux, Windows, Mac 호스트에서 작업합니다.
- 완료가 검증됩니다. 중요한 변경에는 프로세스가 성공적으로 종료된 것만으로는 충분하지 않습니다. FrontierStack은 앱이 관찰한 사후 조건을 확인하고, 감사 이벤트를 기록하고, 출처를 추적할 수 있는 결과 또는 지속적인 영수증을 반환합니다.
14.3에이전트 워크플로 패턴 선택
일반적인 출발점은 코딩 에이전트에서 대화형 MCP를 사용하는 것입니다. 지속적인 작업, 이벤트 또는 모바일 감독은 워크플로에 필요한 경우에만 추가하십시오.
통합 방식
| 팀 구성 | 사용 | FrontierStack이 제공하는 것 |
|---|---|---|
| 코딩 에이전트 또는 관리자에게 범위가 정해진 서버 작업이 필요한 경우 | MCP(권장) | 기존 로컬 정책 및 승인 경계를 거치는, 호출자별로 필터링된 실시간 도구와 리소스. |
| 셸 스크립트, 로컬 자동화 또는 CI 러너에 안정적인 인터페이스가 필요한 경우 | FrontierStack CLI | 기계가 읽을 수 있는 검색 정보와 MCP와 동일한 보호된 호출. 자격 증명은 스크립트에 복사되지 않고 소유자 전용 키체인 브리지가 제공합니다. |
| 에이전트가 연결하기 전에 플릿 지도가 필요한 경우 | Agent Skill / AGENTS.md | 서버, 역할, 서비스 및 운영 규칙을 담은, 자격 증명 없는 이식 가능한 설명. |
| 코디네이터가 오래 걸리는 작업을 위임하거나 인시던트를 인계하는 경우 | A2A 1.0 프리뷰 | 지속적인 작업 ID, 진행 상황, 취소, 입력 필요 또는 승인 필요 상태, 아티팩트 및 최종 영수증. 비공개이며 활성화하기 전까지는 꺼져 있습니다. |
| MCP 클라이언트가 지연 작업을 지원하는 경우 | MCP Tasks 프리뷰 | 실험적인 Tasks 확장을 통해 제공되는 동일한 지속 작업 엔진. 양쪽 모두 옵트인해야 합니다. |
| 인시던트 또는 CI/CD 시스템이 작업을 발생시키는 경우 | CloudEvents 프리뷰 | 선택된 인증 이벤트로 읽기 전용 분류 작업을 시작하고 상관관계 정보를 전달할 수 있습니다. 이벤트는 결코 변경 권한을 부여하지 않습니다. |
| 운영자가 Mac에서 떨어진 곳에서 에이전트를 감독해야 하는 경우 | iOS 에이전트 활동 | 페어링된 Mac에서 가져온 제한된 상태, 런타임, 작업 및 지속 세션 메타데이터. 프롬프트, 대화 기록, 터미널 내용 또는 자격 증명은 휴대폰에 복사되지 않습니다. |
도구 목록을 작게 유지
FrontierStack의 전체 도구 카탈로그를 모든 모델 대화에 로드하지 마십시오. 일부 AI 하네스는 도구 수를 128개로 제한하며, 관련 없는 긴 카탈로그는 도구 선택의 신뢰성도 떨어뜨립니다. 따라서 FrontierStack의 기본 카탈로그는 작은 부트스트랩 쌍만 노출합니다. frontierstack_find_tools는 현재 작업과 호출자에 관련된 도구만 찾고, frontierstack_call은 선택한 도구를 호출합니다. frontierstack tools --full은 점검용이나, 허용된 전체 카탈로그가 명시적으로 필요한 클라이언트에만 사용하십시오.
자격 증명 없는 설정 키트 설치
MCP 패널에서 Ecosystem Setup Kit를 내보내거나, MCP로 frontierstack://ecosystem-kits를 읽거나 frontierstack ecosystem-kits를 실행하십시오. 생성된 레시피는 OpenClaw/Hermes 스타일 전문가, Buzz 또는 기타 사람/에이전트 팀, OpenAI 스타일 관리자와 핸드오프, Microsoft 워크플로, LangGraph, CI/CD, Slack/Teams 승인 핸드오프 및 향후용 범용 어댑터를 다룹니다. 키트에는 역할 및 엔드포인트 메타데이터, 지침, 안전한 자리 표시자가 들어 있으며, 암호, 개인 키, Bearer 토큰 또는 API 키는 절대 들어 있지 않습니다.
- 사용하는 코디네이터에 가장 가까운 레시피를 선택하고 FrontierStack에 서버 관리자 역할을 부여하십시오.
- localhost를 통해 연결하거나, 코디네이터가 승인된 다른 기기에 있는 경우 FrontierStack의 페어링된 HTTPS 경로를 통해 연결하십시오. 로컬 MCP 포트를 직접 공개하지 마십시오.
- 읽기 전용으로 시작하십시오. 변경을 활성화하기 전에 검색, 플릿 상태, 도움말/매뉴얼 검색을 테스트하십시오.
- 변경이 필요하면 FrontierStack에서 정확한 작업을 승인하십시오. 그룹 채팅의 메시지, 에이전트 카드, 프롬프트 또는 승인했다는 주장은 승인이 아닙니다.
- 작업 보기를 사용하여 진행 상황을 확인하고, 작업을 취소하고, 최종 검증 영수증을 보관하십시오.
신뢰 경계는 이동하지 않습니다
- 자격 증명은 로컬에 남습니다. 서버 암호, SSH 키, AI 키 및 보관함 값은 실행 시점에 확인되며 코디네이터, 설정 키트, 원격 헬퍼, 콜백 또는 모델 프롬프트로 내보내지지 않습니다.
- 검색은 권한이 아닙니다. 역할 프로필, Skill, 이벤트, 채팅 ID 또는 도구 설명은 FrontierStack이 무엇을 할 수 있는지 알려 줄 뿐, 도구를 활성화하거나 호출자의 범위를 넓힐 수 없습니다.
- 변경은 하나의 관문을 통과합니다. MCP, A2A, CLI 및 이벤트는 모두 동일한 앱 잠금, 호출자별 범위, 파괴적 데이터 보호 장치, 로컬 승인 및 감사 기록을 사용합니다.
- 원격 헬퍼는 제한된 상태로 유지됩니다. 서버의 모니터/헬퍼는 FrontierStack의 결정론적인 손과 눈입니다. 모델을 호스팅하거나 AI 제공업체 자격 증명을 저장하거나 네트워크에서 임의의 MCP 작업을 받지 않습니다.
- 완료는 검증되었음을 의미합니다. 변경을 수행하는 지속 작업은 명령이 0을 반환했다는 이유만으로 끝나지 않으며, FrontierStack이 앱이 관찰한 사후 조건을 기록한 후에만 완료됩니다.
작업 내용을 노출하지 않고 에이전트 관찰
Mac의 에이전트 운영 보기는 워커 호스트 연결 가능 여부, 감지된 런타임, 활성 작업 및 지속 터미널 세션을 위한 운영 콘솔입니다. iPhone 및 iPad 컴패니언의 에이전트 활동 보기는 페어링된 Mac에서 가져온, 의도적으로 더 작은 상태 화면을 제공합니다. 어떤 워커에 연결할 수 있는지, 어떤 작업이나 세션이 활성 상태인지 보여 줄 수 있지만, 프롬프트, 대화 기록, 명령줄, 환경 변수, 터미널 내용 또는 자격 증명은 휴대폰으로 보내지 않습니다.
Linux 및 기타 플릿 호스트에서 오래 실행되는 작업의 경우, Servers › Host › Terminal Sessions가 tmux, GNU screen 및 Zellij 세션 목록을 보여 줍니다. 필요한 범위를 가진 휴대폰은 직접 SSH 터미널을 열고 선택한 세션에 연결할 수 있습니다. 세션 종료는 별도로 확인하는 전체 제어 작업입니다.
14.4MCP 서버 활성화
FrontierStack은 Mac에 설치된 일반적인 AI 클라이언트를 감지하고, 재사용 가능한 자격 증명을 노출하지 않고 자체 MCP 항목을 구성할 수 있습니다.
- MCP Server 패널을 여십시오. 서버는 기본적으로 켜져 있으며
localhost에 바인딩됩니다. 이 패널에서 끌 수 있습니다. - 감지된 AI 클라이언트를 검토하십시오. FrontierStack은 Amp, DeepSeek Harness Alpha, Hermes Bot Mode, Grok, Codex CLI, Cursor, Gemini CLI, Claude Code, Claude Desktop, Xcode(26.3 이상) 및 T3 Code를 인식합니다. 감지된 항목 설정을 사용하거나 개별 컨트롤에서 클라이언트 하나를 구성하십시오. T3 Code에는 자체 MCP 설정이 없습니다. 설정하면 T3 Code 세션이 읽는 Codex, Cursor 및 Grok 구성에 FrontierStack이 추가되고, Claude Code용
claude mcp add --scope user명령이 제공됩니다. 그런 다음 T3 Code에서 에이전트 세션을 재시작하십시오. - Amp 설정은
amp mcp add를 실행하고 FrontierStack의 소유자 전용 로컬 브리지만 추가합니다. Amp 원격 스레드 생성을 활성화하거나, 러너를 시작하거나, 원격 제어 터미널을 노출하지 않습니다. - DeepSeek Harness (Alpha)는 Harness
web프로필용 구성 전용 플러그인 번들을 사용합니다. 이 번들은 Harness 자체의 MCP 클라이언트를 활성화하고 FrontierStack의 소유자 전용 브리지를 가리키게 합니다. 번들에는 Bearer 토큰, 서버 자격 증명, DeepSeek 키 또는 네트워크 엔드포인트가 들어 있지 않습니다. DeepSeek Harness는 아직 개발자 프리뷰이므로 FrontierStack은 실행 시 이 Alpha 플러그인을 설치하거나 복구하지 않습니다. Alpha 플러그인 추가를 명시적으로 선택하고, 지원되는 Harness 릴리스가 바뀌면 FrontierStack으로 업데이트하십시오. - Hermes는 각 Bot을 격리된 프로필로 저장합니다. 자동 설정은 Hermes의 기본 프로필만 복구합니다. Bot 설정은 기존 Bot 목록에 대한 별도의 명시적 옵트인입니다. Hermes는 브리지를
untrusted로 기록하며, FrontierStack은 여전히 읽기 전용 기본값, 변경 및 스크립트 스위치, 앱 잠금, 승인 및 감사 규칙을 적용합니다. - 안정 버전의 감지된 클라이언트가 바뀔 때마다 FrontierStack이 자체
frontierstack항목만 복구하게 하려면 실행 시 감지된 AI 클라이언트 설정을 활성화하십시오. 다른 MCP 항목은 보존되며 Alpha 통합은 건너뜁니다. - 생성된 항목은 FrontierStack의 소유자 전용 브리지를 실행합니다. 브리지는 시작할 때 키체인에서 MCP 자격 증명을 가져오며, Bearer 토큰은 클라이언트 구성에 기록되지 않습니다.
- 다른 stdio MCP 클라이언트의 경우 FrontierStack CLI를 설치하고
frontierstack mcp가 반환하는 명령을 사용하십시오. - 읽기 전용으로 시작하십시오. 변경이나 스크립트를 허용하기 전에
frontierstack discover를 실행하고, 플릿 상태를 나열하고, 도움말 검색을 시도해 보십시오.
14.13.1Xcode
Xcode 26.3 이상(macOS 27의 Xcode 27 포함)은 코딩 에이전트를 호스팅하며 양방향으로 MCP를 사용합니다. Xcode에 추가는 FrontierStack의 소유자 전용 브리지를 ~/Library/Developer/Xcode/CodingAssistant/mcp-servers.json에 기록합니다. 이 파일은 Xcode 내부의 Claude, Codex 및 Gemini 에이전트가 사용할 수 있는 MCP 서버 목록입니다. 그러면 앱을 작업하는 에이전트가 대상으로 하는 서버, 데이터베이스 또는 사이트에 대해 FrontierStack에 질문하고, 다른 클라이언트와 동일한 읽기 전용 기본값, 변경 스위치, 승인 및 감사 규칙에 따라 범위가 정해진 작업을 요청할 수 있습니다.
반대 방향으로, AI 관리자의 xcode 도구는 xcrun mcpbridge를 통해 Xcode 자체의 MCP 서버와 통신합니다. 스킴과 타깃 나열, 빌드, 전체 또는 일부 테스트 실행, 빌드 로그 읽기, SwiftUI 미리 보기 렌더링, 프로젝트 파일 검색 또는 편집, 템플릿에서 프로젝트 생성, 시뮬레이터 조작이 가능합니다. Xcode › Settings › Intelligence › Model Context Protocol › Allow external agents to use Xcode tools를 켜고 프로젝트를 열어 두십시오. FrontierStack이 연결되면 Xcode가 알림을 표시합니다. Xcode의 읽기 전용 도구는 자유롭게 실행되지만, 빌드, 테스트 실행, 편집 및 스킴 전환에는 변경 허용이 필요합니다. Xcode에서 열려 있지 않은 프로젝트의 경우 이 도구는 대신 앱 내 콘솔에서 xcodebuild를 실행합니다. 같은 프로젝트에 대해 둘을 동시에 실행하지 마십시오. 두 빌더가 Xcode의 빌드 데이터베이스를 손상시킬 수 있습니다. 패널에는 Claude Code에 동일한 Xcode 도구를 제공하는 claude mcp add … xcode -- xcrun mcpbridge 명령도 표시됩니다.
14.13.2Grok Bot
Grok에 추가를 선택하여 FrontierStack의 소유자 전용 브리지를 ~/.grok/config.toml에 추가하거나, 하나의 저장소가 자체 Grok 지침을 가져야 하는 경우 프로젝트 키트를 내보내십시오. 브리지는 실행 시 키체인에서 MCP 자격 증명을 읽으므로 TOML 파일에는 Bearer 토큰이 들어 있지 않습니다. 로컬 Grok 워크플로는 상태 확인 및 도움말 호출이 예상대로 동작할 때까지 읽기 전용으로 유지하십시오. 클라우드 Grok Bot은 루프백 리스너에 도달할 수 없습니다. 원격으로 사용하려면 TLS로 보호된 네트워크 경로, 페어링된 호출자 ID 및 명시적 범위가 필요합니다. 검색 문제를 Bearer 토큰을 봇 메모리나 프로젝트 파일에 복사하는 방식으로 해결하지 마십시오. Grok Bot은 FrontierStack에서 자체 키가 필요하지 않습니다. AI Models의 xAI API 키는 별개이며 AI 관리자용 Grok 모델을 선택하는 데에만 쓰입니다. “Grok Bot”을 검색(⌘F)하면 이 설정으로 바로 이동합니다.
14.13.3SlackBot, Slack 핸드오프 및 Buzz
Slack 지원은 세 부분으로 나뉩니다. Messaging Gateway는 Slack 수신 웹후크를 통해 알림을 보냅니다. 에코시스템 키트는 기존 봇 워크플로를 위한 Slack 또는 Teams 핸드오프를 기술합니다. Full Fleet에는 FrontierStack 자체가 서버 관리자 팀원으로 워크스페이스에 참여하게 하는 Slack Server Admin Agent Beta도 포함되어 있습니다.
Messaging Gateways에서 제공된 비공개 Slack 앱 설정을 복사하여 워크스페이스에 설치하고, xapp- Socket Mode 토큰과 xoxb- 봇 토큰을 키체인에 저장하십시오. 공개 수신 엔드포인트는 열리지 않습니다. 초대된 내부 채널에서 @FrontierStack을 멘션하거나 앱에 직접 메시지를 보내십시오. 답장은 Slack 스레드 안에 머물고, 제한된 스레드 컨텍스트를 포함하며, FrontierStack의 서버, 서비스, 네트워크, 모니터링 및 설치 도구와 함께 AI 하네스를 사용할 수 있습니다.
FrontierStack은 요청자가 연결된 워크스페이스의 정식 멤버인지 확인하고, 게스트와 Slack Connect 대화는 거부합니다. 선택 사항인 채널 ID 목록으로 범위를 더 좁힐 수 있습니다. 기본값은 읽기 전용 조사입니다. 소유자가 변경 요청을 활성화하면 모델은 유형이 정해진 FrontierStack 작업만 선택할 수 있으며, 자격 증명, 임의의 셸, 복구 비밀 값 및 자기 관리 기능은 계속 사용할 수 없습니다. 모든 변경은 여전히 Full Fleet 관문, 앱 잠금, 외부 변경 정책, 로컬 승인, 감사, 작업 영수증 및 결과 검증을 거칩니다. Slack 메시지, 반응, 역할 주장 또는 버튼은 결코 승인이 아닙니다.
Buzz는 서비스 통합이자 팀 레시피 대상입니다. FrontierStack은 호스팅형 또는 자체 호스팅형 Buzz 스택을 설치하거나 연결하고, 릴레이와 종속 요소를 모니터링할 수 있습니다. 내보낸 Buzz 스타일 키트는 범위가 지정된 사람 및 에이전트 역할을 기술하고, 기존 MCP, A2A, CloudEvents 또는 CLI 경로를 선택합니다. 이는 실시간 Buzz 에이전트 엔드포인트가 아니며, Nostr 키, 서버 자격 증명 또는 FrontierStack Bearer 토큰을 포함하지 않습니다.
설치된 frontierstack CLI도 기본적으로 무상태(stateless) MCP를 사용합니다. 기계가 읽을 수 있는 프로토콜 및 기능 정보를 보려면 frontierstack discover를 실행하십시오. frontierstack info는 권장되는 무상태 리비전과 지원되는 레거시 리비전을 모두 보고합니다.
처음 접하는 클라이언트는 frontierstack://manual 리소스를 읽거나 search_app_help를 호출하여, 임의의 파일을 노출하지 않고 앱이 작성한 절차를 익힐 수 있습니다.
별도의 MCP Servers 패널은 두 세대의 다른 서버를 모두 관리할 수 있습니다. 자동 설정은 먼저 server/discover를 시도하고, 필요한 경우에만 레거시 initialize로 대체합니다. 녹색 Stateless 표시는 HTTP 서버가 지원을 입증한 후에만 서버 목록에 나타납니다. 무상태 stdio 서버는 외부 클라이언트가 해당 프로세스와 핸드셰이크를 소유하므로 명시적으로 표시할 수 있습니다.
예를 들어 AppSignal 프리셋은 검토되고 버전이 고정된 mcp-remote 브리지를 통해 AppSignal의 호스팅 MCP 엔드포인트에 연결합니다. 브리지가 AppSignal의 브라우저 OAuth 흐름을 수행하므로 AppSignal 토큰은 프리셋, 클라이언트 구성 또는 프로세스 인수에 들어가지 않습니다. 이 에이전트 연결은 FrontierStack의 결정론적인 AppSignal 상태 모니터와 별개입니다. 로컬 상태와 알림에는 AppSignal 서비스 패널의 개인 API 토큰과 앱 ID를 사용하고, 에이전트에게 더 깊은 조사가 필요한 경우에만 OAuth MCP를 사용하십시오. 읽기 전용 AppSignal 접근으로 시작하고, 위임하기 전에 쓰기 가능한 도구를 검토하십시오.
같은 브리지는 Claude의 커넥터 디렉터리에 나열된 제공업체 호스팅 서버에도 사용됩니다. Vercel, Railway, Hostinger, Neon, PlanetScale, Sentry, Honeycomb, PostHog, PagerDuty, incident.io, Rootly, CircleCI, Buildkite, GitLab, Postman, Atlassian(Jira), Linear, monday.com, Notion, Stripe, Square, PayPal, Zapier, Make, Intercom, Mixpanel, Amplitude, Vanta 및 Drata입니다. 각 제공업체 패널에는 해당 주소용 MCP 서버 추가 버튼이 있으며, MCP Servers 패널은 이들을 All Presets ▸ Vendor-Hosted Servers (Claude Connectors) 아래에 묶어 표시합니다. 제공업체에는 브라우저에서 로그인하며, 프리셋에 키가 복사되지 않습니다.
AI 관리자 자체가 제공업체의 MCP 서버(hosted_mcp 도구)를 사용할 때는 모든 제공업체에 동일한 규칙이 적용됩니다. 이름상 자격 증명(API 키, 토큰, 암호 또는 연결 문자열)을 반환, 생성 또는 교체하는 도구는 실행 전에 거부되며, 결과에 포함된 자격 증명 값은 [redacted by FrontierStack]으로 대체됩니다. FrontierStack 자체 MCP 서버에 연결된 클라이언트에도 같은 규칙이 적용되며, 목록 조회나 읽기 전용 도구는 승인을 요청하지 않습니다.
여러 제공업체 패널에는 해당 패널에 이미 저장된 키로 AI 관리자를 제공업체의 공식 MCP 서버에 연결하는 AI Access 섹션도 있습니다. Stripe, GitHub, Neon, PostHog, Datadog, PagerDuty, Resend, PlanetScale 및 Hostinger입니다. n8n 및 Grafana 패널은 사용자의 자체 서버(n8n의 인스턴스 수준 MCP 서버 및 자체 호스팅 mcp-grafana)에 대해 같은 기능을 제공합니다. 읽기 도구는 자유롭게 실행되며, 그 밖의 모든 도구는 해당 섹션에서 쓰기 허용을 켜기 전까지 거부되고, 켠 후에도 변경 허용과 사용자의 승인이 필요합니다. 쓰기가 꺼져 있으면 GitHub, Neon 및 PostHog는 제공업체 자체의 읽기 전용 모드로 실행됩니다. Stripe 서버는 2026년 10월 31일부터 에이전트 태그가 지정된 제한 키만 허용하므로, Stripe 섹션의 에이전트 키 필드에 저장하십시오.
또 다른 20여 개 제공업체는 키 대신 브라우저 로그인으로 연결됩니다. Atlassian(Jira, Confluence, Bitbucket), Linear, monday.com, Vercel, Railway, Square, PayPal, incident.io, Airtable, Sentry, Honeycomb, Make, GitLab, Notion, Mixpanel, Amplitude, Rootly, CircleCI, Buildkite, Postman, Intercom, Vanta, Drata, Grafana Cloud 및 MongoDB Atlas(등록 대신 FrontierStack이 게시한 클라이언트 설명을 읽음)입니다. 이들의 AI Access 섹션에는 로그인 버튼이 있습니다. FrontierStack이 제공업체에 자신을 등록하고, 사용자가 브라우저에서 승인하면, 토큰은 키체인에 보관됩니다. 어떤 도구가 읽기 전용인지는 도구 목록을 가져올 때 제공업체 자체 서버로부터 확인되므로, 목록을 한 번 가져오기 전까지는 모든 호출이 쓰기로 간주됩니다.
API 키나 자동 로그인이 없는 서비스(대시보드 전용 호스트, 그리고 Shopify, Slack, HubSpot, Box)에는 대신 Account ▸ Sign-in account 섹션이 있습니다. 이메일 또는 사용자 이름과 암호는 키체인에 보관되며, 암호 복사(60초 후 클립보드에서 삭제됨)와 로그인 페이지 열기를 사용할 수 있습니다. FrontierStack은 이 정보를 웹사이트에 입력하거나 AI에게 보여 주지 않습니다. Channel Manager는 Lodgify 유료 부가 서비스에서 게스트 데이터를 자동으로 추출하는 기능(계획 중)을 위해 선택 사항인 Lodgify 계정도 보관합니다.

14.5에이전트 플랫폼용 FrontierStack 설정
에이전트 플랫폼은 세 가지 방법 중 하나로 FrontierStack을 사용할 수 있습니다. 코딩 에이전트는 앞 절에서 설명한 대로 FrontierStack을 MCP 도구 서버로 호출합니다. 오케스트레이터는 FrontierStack을 Paperclip 하트비트나 A2A 작업 같은 할당을 받는 작업자로 고용할 수 있습니다. 그리고 셸을 사용할 수 있는 에이전트라면 누구나 frontierstack CLI를 사용할 수 있습니다. 어느 경로를 선택하든 FrontierStack은 동일한 서버 관리자 역할을 수행하며, 동일한 앱 잠금, 읽기 전용 기본값, 승인 및 감사 로그가 적용됩니다.
| 플랫폼 | 연결 방식 | 설정 위치 |
|---|---|---|
| Claude Code, Codex CLI, Cursor, Gemini CLI, Claude Desktop, Amp, Grok, Hermes, Xcode, T3 Code(해당 에이전트를 통해) | FrontierStack의 소유자 전용 로컬 브리지를 통한 MCP | MCP Server ▸ AI clients ▸ Set Up Detected |
| OpenClaw | OpenClaw 자체의 openclaw mcp add로 추가하는 로컬 브리지 경유 MCP, 그리고 ~/.agents/skills의 FrontierStack 스킬 | MCP Server ▸ AI clients ▸ OpenClaw ▸ Add to OpenClaw |
| Buzz | Buzz의 로컬 에이전트(Claude Code, Codex 또는 goose)가 해당 하네스의 MCP 항목을 사용하고 ~/.agents/skills에서 스킬을 읽음 | Buzz가 실행하는 하네스를 설정한 다음 Add to OpenClaw를 사용하거나 스킬을 ~/.agents/skills로 내보내기 |
| Claude(채팅, Cowork, Claude Code) | FrontierStack 플러그인: 두 스킬, 이 Mac의 Claude Code 및 Cowork용 로컬 브리지, 그리고 웹·데스크톱·휴대폰의 Claude용 커넥터로서의 클라우드 게이트웨이(FrontierStack 계정으로 로그인하며 ChatGPT access가 켜져 있어야 함) | Claude에서 Customize ▸ Plugins, 또는 Claude Code에서 /plugin marketplace add richardnorthcott/frontierstack-claude-plugin. 이전에 추가한 claude mcp add frontierstack 항목은 제거 |
| Claude Code(플릿 컨텍스트) | Fleet Skill, ~/.claude/skills/fleet/SKILL.md | Fleet Skill, 자동 업데이트 켜기(아래 참조) |
| Octop | FrontierStack이 로컬 MCP 브리지를 도구로 사용하는 Octop 전문가로서 전문가 팀에 참여 | Octop 패널 ▸ Join Octop teams |
| Paperclip | FrontierStack이 회사 에이전트로 고용되며, Paperclip의 프로세스 어댑터가 하트비트마다 한 번씩 실행 | Paperclip 패널 ▸ Work as a Paperclip agent |
| OpenClaw, Hermes 슈퍼바이저, LangGraph, Microsoft 및 OpenAI 방식의 관리자 | A2A 1.0 위임 또는 해당 에코시스템 키트 | MCP Server ▸ Accept delegated A2A tasks; Ecosystem Setup Kit |
| CI/CD, 셸 스크립트, n8n, 터미널을 사용하는 모든 에이전트 | frontierstack CLI, 또는 인시던트 트리거용 CloudEvents | MCP Server 또는 Remote Control & Lock ▸ Command Line ▸ CLI 설치 |
| ChatGPT, Codex, 사용자 정의 MCP 커넥터를 지원하는 클라우드 어시스턴트(클라우드 Grok Bot 등) | https://frontierstack.app/plugin/mcp의 FrontierStack 플러그인: FrontierStack 계정으로 로그인하면 이 Mac이 아웃바운드 연결로 응답 | MCP Server ▸ ChatGPT access(앱이 실행 중이어야 함) |
| 기타 클라우드 에이전트(Devin, Manus) | 범위가 지정된 ID를 사용하는, 페어링되고 TLS로 보호된 네트워크 경로만 가능 | 서명된 요청과 기기 페어링(다음 절) |
14.13.4Paperclip: FrontierStack을 회사의 시스템 엔지니어로 고용
Paperclip은 조직도, 예산, 목표, 승인 절차를 갖춘 하나의 회사처럼 에이전트 팀을 운영합니다. FrontierStack은 그 회사에 시스템 엔지니어 겸 네트워크 관리자로 참여할 수 있습니다. 할당된 인프라 이슈를 받아 자체 도구로 조사하고 결과를 이슈에 보고합니다.
- Paperclip을 이 Mac에 본인 사용자 계정으로 설치하십시오:
npx paperclipai onboard --yes. 하트비트가 FrontierStack을 로컬에서 실행하므로 Paperclip을 다른 컴퓨터에 둘 수는 없습니다. - Agent Operations 섹션에서 Paperclip 패널을 여십시오. Connection에서 엔드포인트(기본값
http://127.0.0.1:3100)를 확인하십시오. Paperclip이 authenticated 모드로 실행 중이면 보드 API 키를 토큰으로 붙여넣으십시오. - Work as a Paperclip agent에서 Accept Paperclip heartbeats를 켜고 Install heartbeat command를 클릭하십시오. 그러면
~/.frontierstack/bin/frontierstack-paperclip이 작성됩니다. - Hire FrontierStack into a company를 열고 Load companies를 클릭한 다음 회사를 선택하고 Hire as DevOps agent를 클릭하십시오. 그러면
process어댑터를 사용하는 “System Engineer & Network Administrator”라는 이름의 에이전트가 생성됩니다. 대신 Copy adapter config를 클릭해 Paperclip에서 직접 만든 에이전트에 붙여넣을 수도 있습니다. - Paperclip에서 이슈를 할당하십시오. 예: “web-02에서 보낸 메일이 반송되는 이유 찾기”. 진행 상황은 Paperclip의 실행 기록에 표시됩니다.
하트비트마다 Paperclip은 수명이 짧은 실행 토큰과 함께 하트비트 명령을 실행합니다. FrontierStack이 실행 중이 아니면 이 명령이 백그라운드에서 숨긴 상태로 FrontierStack을 시작합니다(콜드 스타트에는 최대 2분이 걸릴 수 있습니다). 그런 다음 FrontierStack은 할당된 이슈를 체크아웃하고, 조사하고, 댓글을 남긴 뒤 이슈를 완료, 차단됨 또는 검토 중으로 설정합니다. 다른 에이전트가 이미 이슈를 체크아웃했다면 FrontierStack은 해당 이슈를 건드리지 않습니다. 실행 토큰은 패널에 설정된 Paperclip 서버로만 전송됩니다.
Let Paperclip request changes는 처음에 꺼져 있으므로 에이전트는 조사와 권고만 합니다. 이 설정을 켜더라도 형식이 지정된 각 변경은 여전히 앱 잠금과 External changes 설정을 따릅니다. 즉 바로 실행되거나, 패널에서 Approve once, Allow for 5 minutes, Deny와 함께 대기하거나, 거부됩니다.
14.13.5Octop: FrontierStack을 전문가 팀에 배치
Tencent Cloud의 Octop은 여러 사용자를 위한 셀프 호스팅 어시스턴트입니다. Octop의 전문가는 단독으로 일하거나 팀으로 일하며, 팀에서는 호스트 전문가가 구성원에게 작업을 넘깁니다. 팀 구성원은 Octop 전문가여야 하므로 FrontierStack은 FrontierStack의 MCP 서버를 도구로 사용하는 전문가로서 참여합니다. 추론은 Octop의 모델이 하고, 작업은 FrontierStack이 수행합니다.
- Octop을 이 Mac에 본인 사용자 계정으로 설치하십시오(
python3 -m pip install --user octop실행 후octop init,octop run). Octop은 FrontierStack의 브리지를 로컬 명령으로 시작하므로 Docker 안이나 다른 컴퓨터에 있는 Octop은 참여할 수 없습니다. - MCP Server를 켜십시오.
- Agent Operations 섹션에서 Octop 패널을 열고 엔드포인트(기본값
http://127.0.0.1:8088)를 확인하십시오. - Join Octop teams에서 Octop 사용자 이름과 암호로 로그인한 다음 Set up expert를 클릭하십시오. FrontierStack이 Octop 커넥터에
frontierstackMCP 서버를 추가하고, Octop이 이를 시작할 수 있는지 확인한 뒤 Octop에 보이는 도구 수를 표시하고, FrontierStack이라는 이름의 전문가를 만들어 시작합니다. - 팀 옆의 Join을 클릭하십시오. Octop 팀에는 구성원이 2명 이상 필요하므로 먼저 Octop 대시보드(Experts ▸ My Teams)에서 팀을 만드십시오.
암호는 로그인할 때 한 번만 사용되며 저장되지 않습니다. 세션은 로그아웃하거나 FrontierStack을 잠그거나 종료하면 끝나며, 전문가와 팀 내 자리는 Octop에 그대로 남습니다.
14.13.6A2A 슈퍼바이저와 관리자 에이전트
OpenClaw나 Hermes 슈퍼바이저, LangGraph 관리자처럼 A2A 1.0을 사용하는 코디네이터는 도구를 하나씩 호출하는 대신 FrontierStack에 지속적인 작업을 넘길 수 있습니다. MCP Server 패널에서 Accept delegated A2A tasks를 켜십시오(기본값은 꺼짐). 이 Mac의 에이전트는 localhost로 연결합니다. 승인된 원격 코디네이터는 페어링되고 인증서가 고정된 HTTPS 경로를 사용합니다. Agent Card는 FrontierStack을 설명할 뿐 아무 권한도 부여하지 않습니다. 자연어로 된 할당은 항상 읽기 전용입니다. 변경은 형식이 지정된 FrontierStack 요청으로 보내야 하며, 그러면 일반적인 범위, 앱 잠금, 승인, 감사 및 검증 검사를 거칩니다. 진행 상황은 SSE로 스트리밍되며, 선택적 콜백은 공용 HTTPS 주소로만 보내야 합니다. 자격 증명이 포함되지 않은 바로 사용 가능한 구성 방법이 필요하면 해당하는 Ecosystem Setup Kit를 내보내십시오.
14.13.7셸을 사용하는 에이전트, CI 및 스크립트
MCP Server 패널 또는 Remote Control & Lock ▸ Command Line에서 CLI를 설치하십시오. 그러면 에이전트는 frontierstack discover로 사용 가능한 항목을 확인하고, frontierstack role로 서버 관리자 프로필을 읽고, frontierstack call <tool> '<json>'으로 도구를 실행할 수 있습니다. 자격 증명은 프롬프트에 붙여넣지 말고 frontierstack run으로 제공하십시오(에이전트용 자격 증명 참조). 플랫폼이 일정에 따라 또는 야간에 작업한다면 백그라운드 서비스를 켜서 앱이 닫혀 있어도 읽기 전용 검사가 동작하도록 하십시오(앱이 닫힌 상태에서 작업하기).
14.13.8플랫폼이 변경을 하기 전에
- 먼저 읽기 전용으로 연결하십시오. 검색(discovery), 플릿 상태, 도움말 검색을 확인하십시오.
- Claude Code에 Fleet Skill을 제공해 연결하기 전에 서버를 파악하게 하고, 자동 업데이트를 켜서 스킬이 플릿 변경을 따라가도록 하십시오.
- 플랫폼별로 변경을 켜십시오: MCP 변경 스위치, Let Paperclip request changes, 또는 형식이 지정된 A2A 요청. 승인은 Mac이나 페어링된 iPhone에서 하도록 유지하십시오.
- Agent Operations ▸ Activity와 감사 로그에서 작업을 지켜보십시오. iPhone의 Agent Activity 화면은 프롬프트나 기록을 복사하지 않고 상태를 보여 줍니다.
14.6서명된 요청과 기기 페어링(FS1)
제어 서버와 MCP 서버는 Bearer 토큰과 TLS 위에 기기별 서명된 요청 계층 — FS1 — 을 추가합니다. 페어링된 각 기기는 자체 Ed25519 개인 키를 보유하고 모든 요청에 서명합니다. FrontierStack은 사용자가 승인한 기기를 기준으로 서명을 검증하므로, 토큰이 유출되더라도 그것만으로는 아무것도 조작할 수 없습니다.
- 기기별 범위. 각 기기에는 읽기 전용부터 전체 제어까지의 범위가 부여되며, Mac에서 설정합니다.
- 원탭 폐기. 기기를 제거하면 다른 기기에는 영향 없이 즉시 차단됩니다.
- iPhone 및 iPad 앱이 페어링에 사용하는 것과 같은 메커니즘입니다 — 모바일 매뉴얼과 10장의 신뢰 모델을 참조하십시오.
14.7외부 AI 작업
실시간 MCP 외에도 FrontierStack은 구독형 AI CLI에 작업을 넘길 수 있습니다 — 작업을 패키지로 묶어 로컬 Claude(또는 유사한 도구)가 사용자의 플랜으로 처리하게 한 다음 결과를 앱으로 가져옵니다. 이를 통해 종량제 API 요금 없이 더 무겁고 오래 걸리는 분석을 실행할 수 있으며, Data Map(위치별 데이터 흐름 다이어그램)과 함께 사용하면 에이전트가 필요한 컨텍스트를 얻습니다. 외부 AI 작업은 AI 스택에서 관리합니다(15장).
14.8MCP를 통한 스킬, 메모, 메모리, Obsidian
외부 하네스는 내장 관리자와 같은 지식 영역에 같은 게이트를 거쳐 접근합니다.
- 스킬 — 직접 정리한 플레이북을 검색하고 필요할 때 불러올 수 있습니다.
- 공유 메모 — “Share with AI”로 잠금 해제한 메모만 읽을 수 있습니다.
- 장기 메모리 — 선호 사항과 상시 규칙을 담은 동일한
memory.md입니다. - Obsidian — Obsidian 보관함을 연결해 두었다면 에이전트가 SOP와 런북을 검색하고 문서화된 절차를 따를 수 있습니다(12장).
14.9Fleet Skill — 모든 에이전트를 위한 이식 가능한 컨텍스트
MCP 서버는 에이전트가 플릿에 대해 작업할 수 있게 합니다. Fleet Skill은 나머지 절반으로, 에이전트가 무언가를 건드리기 전에 사용자의 환경을 알려 주는 정적 컨텍스트입니다. Fleet Skill 패널은 SKILL.md를 생성합니다 — 서버와 그 역할, OS, 서비스, 접속 방법, 네트워크 위치, KVM과 전원, 그리고 사용자가 직접 작성하는 규칙과 선호 사항 자유 텍스트 블록이 담기며, 모든 비밀 값은 제거됩니다. 이 파일을 읽은 에이전트는 추측하는 대신 올바른 호스트를 고르고, 올바른 경로를 사용하며, 사용자의 관례를 따릅니다.
이 파일은 ~/.claude/skills/fleet/SKILL.md에 작성되며, Claude Code가 자동으로 찾아냅니다 — 프런트매터의 description:이 모델에게 이 스킬이 언제 관련 있는지 알려 줍니다. MCP로 연결된 에이전트는 get_fleet_context 도구로 같은 내용을 가져올 수 있으며, 원하면 해당 관례를 따르는 CLI를 위해 ~/AGENTS.md도 함께 출력할 수 있습니다. 자동 업데이트를 켜면 플릿, 위치 또는 KVM이 바뀐 뒤 몇 초 안에 스킬이 다시 작성되므로 실제 상태와 어긋나지 않습니다.
지도와 리모컨의 차이로 생각하십시오. MCP는 리모컨입니다 — 실시간으로 인증되어 실제로 작업을 수행할 수 있습니다. 스킬은 지도입니다 — 설정이 필요 없고, 이식 가능하며, 어떤 에이전트에게 건네도 안전하고, 유능한 도구가 잘못된 일을 올바른 방식으로 하는 것을 막아 줍니다.
14.10Network Repo — 에이전트가 작업할 수 있는 저장소
Fleet Skill은 에이전트가 읽을 수 있는 지도입니다. Network Repo 패널은 한 걸음 더 나아가, 네트워크 전체를 git 저장소로 작성합니다. 이 저장소를 Claude Code나 Codex 같은 에이전트에게 넘기면 에이전트가 스스로 설정 작업을 수행할 수 있습니다 — 새 Mac mini를 플릿 표준에 맞추고, 서버에 사이트를 구축하고, 모든 컴퓨터를 Tailscale에 연결하는 등의 작업입니다.
| 파일 | 내용 |
|---|---|
AGENTS.md(및 CLAUDE.md) | 기본 규칙: 먼저 실시간 상태 확인, 저장소에 비밀 값 금지, 운영 컴퓨터·라우터·DNS·방화벽을 변경하기 전에 계획을 세우고 확인 요청, 사용자 자신의 운영자 규칙 |
GOAL.md | 에이전트에게 맡길 작업. 템플릿으로 한 번 생성되며 덮어쓰지 않음 |
COMPUTERS.md, boxes/<name>/ | 모든 컴퓨터: 역할, OS, SSH 대상, LAN 및 Tailscale 주소, 서비스, 전원. 컴퓨터마다 목표 상태와 멱등성 있는 setup.sh |
NETWORK.md | 위치, 라우터와 방화벽 규칙, LAN 기기, tailnet, Cloudflare DNS 레코드, 도메인, pf 규칙 |
SERVICES.md, POWER.md | 사이트, 개발 서버, MCP 서버, cron, Script 라이브러리. UPS, 콘센트, KVM, PoE |
HOW_TO_SET_UP_A_BOX.md, scripts/complete-setup.sh, tests/check-fleet.sh, Brewfile | 새 컴퓨터용 런북, 이를 적용하는 스크립트(로컬 또는 SSH 경유), 읽기 전용 검사, Homebrew 기준 구성 |
.env.frontierstack, frontierstack-network.json, snapshots/ | 비밀 값의 이름만, 데이터 형태의 전체 맵(Import from a Repo가 다시 읽어 들임), 변경될 때마다 저장되는 날짜별 사본 |
Fleet Skill과 달리 저장소에는 실제 이름과 주소가 사용되므로 — 에이전트는 fleet-host-a1b2c3를 설정할 수 없습니다 — 비공개로 유지하십시오. 비밀 값은 절대 기록되지 않습니다. 저장하기 전에 모든 값을 키체인과 Script Secrets와 대조하며, 유출될 값이 있으면 내보내기가 중단됩니다. 자격 증명이 들어 있는 것으로 보이는 스크립트, cron 작업, MCP 명령은 제외되고 목록으로 표시됩니다. 에이전트는 아래에 설명된 방식, 즉 Mac에서 frontierstack run 또는 MCP를 통해 자격 증명을 얻습니다.
각 내보내기는 git에 커밋되며(FrontierStack 자체 파일만), Push는 사용자 자신의 git 자격 증명으로 지정한 원격 저장소에 전송합니다. GOAL.md에 작업을 작성한 다음 Copy Agent Prompt를 사용하거나, Open in Agent Jobs…로 미리 채워진 작업에서 시작하십시오 — 에이전트를 선택하고 Run을 누르면 됩니다.

14.11.env 없이 에이전트에게 자격 증명 제공
에이전트는 명령을 실행하는 데 API 키나 암호가 필요한 경우가 많습니다. 이를 채팅에 붙여넣거나 저장소에 보관하지 마십시오. Script Secrets(AI 관리자 ▸ Script secrets 막대)에 넣고 Let frontierstack run use these secrets를 켠 다음 에이전트가 다음과 같이 실행하게 하십시오.
frontierstack run --secret CLOUDFLARE_API_TOKEN -- terraform apply
값은 해당 명령 하나에만 환경 변수로 설정되고 출력에서 마스킹되므로, 에이전트는 값을 읽지 않고도 명령이 동작하는 것을 확인할 수 있습니다. 프로젝트에 이름만 담은 .env.frontierstack(DB_PASSWORD=fs://DB_PASSWORD)를 커밋해 둘 수도 있으며, 해당 폴더에서 frontierstack run -- <command>을 실행하면 값이 채워집니다. 에이전트 가이드, 내보낸 스킬, Fleet Skill 모두 에이전트에게 이 방식으로 작업하도록 안내합니다. 이미 저장소에 자격 증명을 보관하고 있습니까? Import from a Repo…로 옮겨 오십시오(13장).
14.12앱이 닫힌 상태에서 작업하기
에이전트가 FrontierStack을 사용하기 위해 앱을 계속 열어 둘 필요는 없습니다. Keep MCP and the CLI available when FrontierStack is closed는 기본적으로 켜져 있습니다(MCP Server 패널, 또는 Remote Control & Lock ▸ Command Line). 이 경우 로그인할 때 작은 백그라운드 서비스가 시작되어 로컬 MCP 및 CLI 포트(기본값 8788 및 8799)를 담당합니다. 앱이 닫혀 있으면 이 서비스가 검색(discovery)과 일련의 읽기 전용 검사에 직접 응답합니다: WHOIS, IP 분석, 인증서 만료, 포트 검사, 오픈 릴레이 테스트, 디스크 사용량, 상위 프로세스, 메트릭 스냅샷, hosts 파일 및 원격 파일 읽기, MySQL/PostgreSQL 테이블 검사이며, 이 Mac 또는 저장된 서버에서 수행됩니다. 그 밖의 요청은 FrontierStack을 숨긴 상태로 시작해 전달합니다. 앱이 실행 중일 때는 모든 요청이 앱으로 바로 가므로 앱 잠금, 승인, 감사 로그가 이전과 똑같이 동작합니다.
| 설정 | 앱이 닫혀 있는 동안 추가되는 기능 |
|---|---|
| Keep MCP and the CLI available when FrontierStack is closed | MCP와 frontierstack이 계속 응답합니다. 읽기 전용 검사는 앱 없이 실행되고, 그 밖의 요청은 앱을 숨긴 상태로 시작합니다. |
| Keep monitoring while FrontierStack is closed | 감시 항목, 메일 엔드포인트, TLS 인증서 및 도메인 갱신 날짜, 연결된 서버를 계속 확인합니다. 알림은 설정한 채널로 전송됩니다. 한 번에 한쪽만 확인하며, 앱이 열리면 앱이 이어받습니다. |
| Let headless agents work while my security key is plugged in | 보안 키 앱 잠금을 사용하는 경우, 등록된 키 중 하나가 꽂혀 있는 동안 읽기 전용 검사가 실행되며 frontierstack run이 키로 봉인된 Script Secrets를 열 수 있습니다. |
어느 쪽이 응답하고 있는지는 frontierstack info("answering": "app", "core" 또는 "none")와 frontierstack headless status로 확인하십시오. 서비스는 부팅 시가 아니라 로그인 시에 시작됩니다. 재시작이나 정전 후 MCP가 자동으로 복구되어야 한다면 Headless Mac Setup에서 자동 로그인을 켜십시오. 앱이 업데이트되면 서비스는 처리 중인 요청을 마친 뒤 새 버전으로 스스로 재시작합니다. 페어링된 iPhone과 iPad는 다시 페어링할 필요 없이 서비스를 통해 계속 Mac에 접근합니다. 휴대폰의 대시보드에서 Start FrontierStack on the Mac은 앱을 숨긴 상태로 시작하고, Open FrontierStack on the Mac은 윈도우를 엽니다. 앱이 닫혀 있는 동안에도 휴대폰으로 알림 푸시가 계속 전달됩니다.
frontierstack run마다 터치가 필요하며, 이를 끌 수도 있지만 끄는 데에도 터치가 필요합니다. PIN이 설정된 키는 앱에서만 봉인된 비밀 값을 열 수 있습니다. 변경은 항상 앱으로 전달됩니다. frontierstack headless key는 등록된 키가 꽂혀 있고 응답하는지 보여 줍니다.14.13언제 무엇을 사용할까
| 사용할 것… | 사용할 때… |
|---|---|
| 내장 AI 관리자(13장) | 승인 카드와 비용 모니터를 포함한 모든 것을 하나의 윈도우에서 사용하고 싶고, 모델/키를 직접 제공하거나 로컬에서 실행하는 데 문제가 없는 경우. |
| MCP를 통한 FrontierStack(이 장) | 이미 Amp, Claude Code 또는 Cursor에서 주로 작업하며 코드와 서버를 위한 하나의 보호된 경로를 원하는 경우. |
| 외부 AI 작업(15장) | 작업이 무겁거나 오래 걸려 대화형으로 실행하기보다 구독형 CLI에 넘기고 싶은 경우. |
세 가지 모두 동일한 보호된 도구와 동일한 실시간 앱 상태에 접근합니다. 선호하는 작업 환경에 따라 고르십시오. 안전 보장은 달라지지 않습니다.
제15장
AI 스택
AI의 또 다른 측면입니다. 서버를 운영하는 어시스턴트가 아니라, 서버가 실행하는 AI 인프라 — 에이전트 런타임, 로컬 모델, 샌드박스, GPU, 그리고 이 모든 것에 드는 비용을 하나의 윈도우에서 지켜봅니다.
앞의 두 장은 AI가 FrontierStack을 조작하는 방법을 다루었습니다. 내장 관리자(13장)와, 직접 사용하는 도구에서 MCP를 통해 앱을 구동하는 방법(14장)입니다. 이 장은 그 반대입니다. FrontierStack이 운영하고 모니터링하도록 도와주는 AI 인프라, 즉 에이전트 플랫폼, 로컬 모델 서버, 코드 샌드박스, 브라우저 자동화, GPU 패브릭, ML 도구, 거버넌스, 그리고 이 모든 것의 비용을 다룹니다. 이들은 다른 서비스와 마찬가지로 카탈로그에 있는 서비스이며 사이드바의 AI 카테고리 아래에 묶여 있지만, 따로 한 장을 할애할 만합니다. 이제 AI를 운영한다는 것은 호출만 하면 되는 상자가 아니라 직접 운영하는 스택이기 때문입니다.
15.1에이전트 운영
사이드바에서 에이전트 운영을 열면 에이전트 작업을 서버 중심으로 볼 수 있습니다. 모든 플릿 호스트가 연결 가능 여부, 환경, CPU와 메모리, 감지된 에이전트 워커와 함께 표시되며, 호스트 세부 정보와 상황별 셸을 여는 버튼이 있습니다. 셸은 이 Mac에서는 로컬로 열리고, 원격 머신에서는 해당 호스트에 구성된 SSH, mosh 또는 SSH3 신뢰 설정을 따릅니다. 런타임 상태, 로컬 코딩 에이전트 프로세스, FrontierStack 세션, 에이전트 컨테이너도 같은 보드에 함께 표시됩니다. AI 도구 get_agent_platforms가 런타임 상태를 관리자에게 제공하므로 “어떤 에이전트 런타임이 다운되어 있어?”처럼 평이한 말로 물어볼 수 있습니다.
런타임은 두 종류로 나뉩니다. 일부는 CLI 런타임으로, 명령줄 도구가 설치되어 있고 --version에 응답하는지로 감지합니다. Amp, DeepSeek Harness Alpha, Claude Code, Gemini CLI, OpenAI Codex, Factory의 droid가 여기에 속합니다. 나머지는 상태 엔드포인트를 제공하는 HTTP 런타임으로, 폴링하여 실시간 지표를 가져옵니다. 몇몇 클라우드 에이전트 제품(OpenHands, Manus, Devin, OpenAI Operator, E2B)은 아래쪽에 폴링 대상이 아니라 연결해서 사용하는 카탈로그 항목으로 표시됩니다.
| 플랫폼 | 설명 |
|---|---|
| OpenClaw | 자체 호스팅 에이전트 런타임. 실행 상태와 모델을 모니터링합니다. |
| Hermes | HTTP로 폴링하여 상태, 모델, 세션을 가져오는 에이전트 런타임. |
| DeerFlow | 심층 리서치 / 다단계 에이전트 런타임. |
| Paperclip | 에이전트 팀을 하나의 회사처럼 운영합니다(조직도, 예산, 목표, 승인). 포트 3100. 패널에는 회사 수와 에이전트 수가 표시되며, 인증 모드에서는 보드 API 키를 추가하십시오. Paperclip 에이전트로 일하기(베타): 하트비트 명령을 설치하고 FrontierStack을 시스템 엔지니어 겸 네트워크 관리자로 회사에 고용합니다. 변경 사항은 여전히 FrontierStack에서 승인해야 합니다. |
| LangGraph Platform | 그래프 기반 에이전트 오케스트레이션. 상태와 모델이 보드에 표시됩니다. |
| CrewAI Enterprise | 멀티 에이전트 “크루” 런타임. |
| Microsoft AutoGen | 멀티 에이전트 대화 프레임워크. |
| Genspark | 자율 에이전트 플랫폼. |
| Agent Zero | 범용 자율 에이전트. |
| NVIDIA NemoClaw | NVIDIA 에이전트 런타임. |
| OpenAI Codex / Claude Code / Gemini CLI / Factory Droid | 코딩 에이전트 CLI. 설치 여부와 버전으로 감지하며, 온디맨드로 표시됩니다. |
| Amp | 코딩 에이전트 CLI 겸 헤드리스 러너. FrontierStack이 로컬 또는 SSH로 버전을 감지하고, Amp 프로세스가 실행 중인 호스트를 표시합니다. |
| DeepSeek Harness (Alpha) | DeepSeek의 플러그인 기반 개발자 프리뷰 에이전트 하네스. FrontierStack이 dsh CLI와 실행 중인 작업을 로컬 또는 SSH로 감지합니다. 선택 사항인 FrontierStack 플러그인은 MCP 패널에서 명시적으로 설치합니다. |
| Unreal Agent | Unreal Labs의 오픈 소스 비동기 우선 에이전트 하네스. 모델이 작업을 계속하는 동안 도구 호출이 백그라운드에서 실행됩니다. OpenAI, Codex, OpenRouter, Fireworks, Ollama와 함께 사용할 수 있습니다. go install(Go 1.27 이상)로 설치하십시오. FrontierStack이 unreal-agent-runner를 로컬 또는 SSH로 감지하고, 실행 중인 호스트를 표시합니다. |
구성된 런타임은 시스템 전반에 연동되므로, 런타임이 다운되거나 토큰 할당량(속도 제한, 429, 결제)에 도달하면 알림이 발생하고 로컬 상태 보드의 서비스 그룹에 빨간색으로 표시됩니다. 각 런타임의 엔드포인트와 자격 증명은 한 번만 구성하면 되며, 그 후로는 다른 서비스와 똑같이 감시됩니다.

15.2활동, 작업, 런타임 및 라우팅
네 가지 보조 뷰가 에이전트 플릿을 운영 작업별로 나누어 보여 주며, 모두 같은 실시간 상태를 읽습니다.
- 활동 — 종 모양 아이콘의 운영자 받은편지함입니다. 확인 필요에는 런타임 실패, 연결이 끊긴 워커, 실패한 세션/작업이 모이고, 실행 중에는 현재 작업이, 최근 완료에는 짧은 실행 기록이 표시됩니다. 도구 막대의 종 아이콘으로 어디서든 열 수 있습니다.
- 작업 — 런타임 대기열, 목표 기반 관리자 세션, 격리된 Codex/Claude 샌드박스 작업의 세 탭으로 구성됩니다. OpenClaw cron 작업, 일시 정지 상태, 토큰, 일회성 작업 상태는 대기열에서 계속 확인할 수 있습니다.
- 런타임 — 구성된 모든 로컬/HTTP 엔진, 감지된 T3 Code 워커, 클라우드 에이전트 제품을 연결 가능 여부 또는 자격 증명 상태와 함께 표시합니다.
- 라우팅 및 통합 — 모델 라우팅/제공업체 키와 저장소 접근을 두 탭에서 관리합니다. GitHub, GitLab, Bitbucket, Cursor Origin 자격 증명은 키체인에 보관되며 API로 실시간 확인됩니다.
에이전트 런타임과 커넥터는 한 번 저장한 자격 증명으로 인증합니다. FrontierStack의 다른 모든 곳과 마찬가지로 이 토큰은 macOS 키체인에 보관되며, 앱 설정 파일에 저장되거나 클라우드 모델로 전송되는 일은 없습니다.
15.8.1Cursor Origin (Early Beta)
버전 관리 ▸ Cursor Origin은 Cursor의 Git 포지를 위한 실시간 대시보드입니다. cursor.com/codebase에 표시되는 코드베이스 이름을 입력하십시오. FrontierStack은 최대 30개의 저장소와, 처음 12개 저장소의 열린 풀 리퀘스트를 나열합니다. 저장소 행을 클릭하면 Origin에서 열립니다. 개인 로그인에는 Cursor 자체의 origin auth login을 권장합니다. FrontierStack은 origin api를 호출할 뿐 사용자 자격 증명을 받지 않습니다. 자동화에는 같은 패널과 저장소 커넥터에서 키체인에 저장된 서비스 계정 API 자격 증명이나 수명이 짧은 Origin 설치 토큰을 사용할 수 있습니다.
oit_로 시작하며 15분 이내에 만료됩니다. Origin App 설치는 GitHub에서 Origin으로 미러링된 저장소에 접근할 수 없으므로, 그런 저장소에는 FrontierStack의 GitHub 커넥터를 사용하십시오. Cursor API 또는 CLI가 업데이트된 후에는 커넥터를 점검하십시오.repository:contents:read를 사용하고, 그때가 되면 선택한 저장소에 대해서만 repository:contents:write를 추가하십시오.15.3작업 세션, T3 워커 및 내장 터미널
작업 ▸ 세션은 사용자가 직접 만드는 목표 기반 운영 및 SaaS 루프(일회성 또는 반복)를 관리합니다. 세션에는 평이한 말로 쓴 목표, 제목, 단계 예산, 그리고 변경을 허용할지 여부를 정하는 스위치가 있습니다. 각 세션은 관리자(13장)와 같은 보호된 도구를 구동하며, 모든 단계를 언제든 중지할 수 있는 기록으로 스트리밍합니다. 세션 루프에서는 스크립트가 절대 허용되지 않습니다.
FrontierStack은 127.0.0.1:3773/.well-known/t3/environment가 유효한 환경 응답을 반환할 때만 T3 Code 워커로 식별합니다. 일반 Node 프로세스나 열린 포트만으로는 해당하지 않습니다. 탐색은 읽기 전용이며 루프백으로만 이루어집니다. T3 서버를 외부에 노출하거나, FrontierStack을 페어링하거나, T3 스레드와 승인에 대한 접근 권한을 부여하지 않습니다. macOS 및 iOS 플릿 목록에서 해당 서버에 T3 표시가 나타납니다. 원격 워커의 경우 FrontierStack은 존재 여부만 보고합니다.
15.8.2이 Mac의 T3 Code
에이전트 플랫폼의 T3 Code 패널은 ~/.t3/userdata/server-runtime.json을 따라 로컬 서버를 찾아가며(해당 포트가 사용 중이면 서버는 :3773보다 높은 포트로 이동합니다), 서버의 공개 환경 디스크립터인 버전, 가동 시간, 프로세스 ID를 읽습니다.
- T3 Code 패널을 여십시오. T3 Code가 설치되어 있지 않으면 설치 / 실행에서
brew install --cask t3-code,npx t3@latest, 헤드리스t3 serve, 백그라운드 LaunchAgent용t3 service install을 제공합니다. - 읽기 전용으로 연결을 클릭하십시오. FrontierStack이
t3 auth pairing create를 실행하여 5분 후 만료되는 일회용 자격 증명을 받고, 이를orchestration:read로 제한된 토큰으로 교환합니다. 데스크톱 앱만 설치되어 있다면 페어링 링크로 연결을 열고 대신 T3 Code 설정의 페어링 링크를 붙여넣으십시오. - 이제 패널에 사용자를 기다리는 스레드(승인 또는 질문), 작업 중인 스레드, 실패한 스레드가 프로젝트, 제공업체, 모델, 브랜치와 함께 나열됩니다. 또한 오늘의 토큰 사용량과 모델별 예상 비용, T3 Code 및 T3 Code가 실행하는 모든 에이전트의 CPU와 메모리도 표시됩니다.
사용자를 기다리는 스레드는 활동 ▸ 확인 필요, 페어링된 iPhone, 서버 활동 윈도우의 AI 에이전트 보드에도 표시되며, 이 보드에서 T3 Code는 서버처럼 CPU와 메모리가 표시되는 타일을 갖습니다. 승인에 대한 응답은 T3 Code 자체에서 합니다.
에이전트 운영의 모든 워커 행에는 셸 버튼이 있습니다. FrontierStack은 로컬에서는 로그인 zsh를, 원격에서는 서버에 구성된 SSH/mosh/SSH3 명령을 앱의 다른 곳에서도 쓰이는 동일한 SwiftTerm PTY 안에서 엽니다. 터미널 스타일에서는 iTerm2(.itermcolors), Ghostty, Alacritty, Warp 테마를 가져올 수 있습니다.
옆에 있는 터미널 세션 버튼은 해당 호스트에서 지속되는 tmux, GNU screen, Zellij 세션을 찾아냅니다. 범위가 제한된 읽기 전용 목록 조회만 사용하며, 터미널 화면, 스크롤백, 명령 기록, 프로세스 환경, 명령을 읽는 일은 없습니다. FrontierStack의 실제 PTY에서 세션에 연결하거나, 확인 후 이름이 지정된 세션 하나를 종료할 수 있습니다. 세션 이름과 관리자는 엄격하게 검증되며, 종료는 호스트가 세션이 사라졌음을 확인한 후에만 성공으로 보고됩니다.
iPhone과 iPad에서는 더 보기 ▸ 에이전트 활동에서 페어링된 Mac의 상태 전용 뷰를 제공하며, 실행 중인 에이전트 프로세스, FrontierStack 세션 및 작업, 구성된 런타임, 감지된 워커 머신을 보여 줍니다. 프롬프트, 명령줄, 기록, 환경 변수, 터미널 내용, 자격 증명은 의도적으로 제외됩니다. 서버 ▸ 호스트 ▸ 터미널 세션에는 같은 지속 세션이 나열됩니다. 목록 조회와 종료는 페어링된 Mac을 통해 이루어지며, 전체 화면 연결은 Direct SSH가 이 iPhone의 키를 설치하고 서버 신원을 확인한 경우에만 제공됩니다.
15.4로컬 모델 실행
클라우드 모델에 아무것도 보내지 않아도 됩니다. FrontierStack은 로컬 추론 서버를 관리하며, 관리자가 그중 하나를 사용하도록 지정할 수 있습니다. 대표적인 세 가지 로컬 앱은 정식으로 지원됩니다.
- Ollama — 가장 간단한 로컬 모델 러너입니다. 모델을 받아 제공하고, 그중 하나를 관리자의 엔진으로 선택할 수 있습니다.
- LM Studio — LM Studio 패널은 설치를 감지하고,
lmsCLI를 통해 로드된 모델과 다운로드된 모델을 나열하며, 헤더에 “N개 모델 로드됨” 또는 “로드된 모델 없음”을 표시합니다. - LocalAI — 포트 8080에서 카탈로그 서비스로 실행하는 자체 호스팅 OpenAI 호환 서버입니다.
- MLX 패널: MLX-LM, oMLX 및 Splash — 하나의 패널에서 Apple 실리콘으로 모델을 제공하는 세 가지 방법입니다. Splash(Inco AI)는
brew install incoai/tap/splash로 설치하고 패널에서 포트 8100으로 시작하므로 포트 8000의 oMLX와 충돌하지 않습니다. OpenAI API와 Anthropic API를 모두 제공하며, M3 이상, macOS 26.4, 36 GB 메모리가 필요합니다.
이 밖에도 AI / LLM 카테고리에는 자체 호스팅 추론 도구가 모두 갖춰져 있습니다. vLLM, llama.cpp, Apple의 MLX-LM 서버, Jan, LiteLLM(100개 이상의 제공업체 앞단에 서는 프록시), Open WebUI, AnythingLLM, PrivateGPT, 그리고 RAG/벡터 도구입니다. 로컬에서 실행하는 목적은 개인정보 보호와 비용입니다. 관리자의 엔진이 로컬 모델(Ollama, 루프백 엔드포인트, Apple의 온디바이스 모델)이면 Mac 밖으로 나가는 것이 없으므로 아무것도 가려지지 않습니다. 클라우드 엔진을 보호하는 비밀 값 제거 처리가 아예 필요하지 않기 때문입니다.
15.5코드 샌드박스 및 브라우저 자동화
에이전트에게는 코드를 안전하게 실행할 장소와 실시간 웹을 읽을 수단이 필요합니다. FrontierStack은 두 가지를 모두 관리합니다.
코드의 경우 E2B 패널이 e2b CLI를 통해 안전한 클라우드 샌드박스를 관리합니다. API 키를 입력하거나(키체인에 E2B_API_KEY로 저장됨) e2b auth login으로 한 번 인증한 다음, 실행 중인 샌드박스를 나열하고, 템플릿에서 생성하고, 강제 종료할 수 있습니다. 정리용 모두 강제 종료와 “일시 정지 포함” 토글도 있습니다. 녹색 점은 실행 중인 샌드박스, 주황색 점은 일시 정지된 샌드박스를 나타냅니다. 이는 에이전트가 사용하는 일회용 격리 머신으로, 에이전트의 코드가 사용자의 서버에 닿지 않게 합니다.
웹의 경우 AI 카테고리에 브라우저 및 크롤링 도구가 포함되어 있습니다. Browserbase(관리형 헤드리스 브라우저), 사이트를 모델이 바로 쓸 수 있는 깔끔한 텍스트로 바꾸는 Crawl4AI, Firecrawl, Apify, 그리고 스크립트 자동화를 위한 Playwright입니다. 이 도구들 덕분에 에이전트는 API가 없는 페이지도 볼 수 있습니다.
15.6GPU 인프라 및 클러스터
AI를 실제 GPU에서 실행한다면 GPU Fabric 패널에서 하드웨어 상태를 읽기 전용으로 확인할 수 있습니다. 연결된 서버를 선택하고 SSH로 진단을 실행하십시오. GPU 인벤토리와 온도(nvidia-smi), NVLink 상태, GPU 토폴로지 매트릭스, NVSwitch Fabric Manager 상태, DCGM 인벤토리(dcgmi), InfiniBand 및 RoCE/RDMA 링크, Slurm GPU 할당, 컴포저블 패브릭 CLI(WEKA, Liqid, GigaIO)를 확인할 수 있습니다. GPU는 Linux 호스트에 있으므로 플릿의 서버를 대상으로 하며, GPU가 없는 머신에서는 도구가 단순히 “찾을 수 없음”을 보고합니다. 검사를 하나씩 실행하거나 모든 검사 실행으로 한꺼번에 실행하십시오.
에이전트가 설치되어 있으면 호스트의 GPU 온도와 부하도 표준 호스트 모니터(8장)를 통해 표시되므로, 과열된 GPU 머신은 다른 머신과 마찬가지로 알림을 발생시킵니다. 스케일아웃을 위해 AI 클러스터 카테고리에는 Exo(여러 대의 Mac에서 하나의 모델 실행), Petals, Distributed Llama, Ray, Slurm, Run:ai가 있고, ML 워크벤치 카테고리에는 학습 쪽을 위한 실험 추적 및 파이프라인 도구(MLflow, ClearML, Weights & Biases, Kubeflow, JupyterLab)가 있습니다.
15.7AI 거버넌스 및 안전
프로덕션에서 에이전트를 운영한다는 것은 에이전트가 하는 일을 감시하고 할 수 있는 일을 제한한다는 뜻입니다. FrontierStack은 AI 거버넌스 및 안전 도구군을 카탈로그에 수록하여 이 도구들을 감시 대상 런타임 바로 옆에 둡니다. LLM 관측성과 추적을 위한 Langfuse, Helicone, Arize Phoenix, 평가와 레드팀 테스트를 위한 Promptfoo, Ragas, garak, 입출력 검증과 프롬프트 인젝션 방어를 위한 Guardrails AI, NeMo Guardrails, Lakera Guard, 그리고 Credo AI와 Holistic AI 같은 거버넌스 플랫폼이 있습니다. 이들을 카탈로그 서비스로 설치하고 모니터링하십시오. 위 보드에 있는 에이전트의 감사 기록이자 안전벨트 역할을 합니다.
15.8AI 비용 모니터
어시스턴트, 직접 만든 에이전트, 여러 로컬 모델, 외부 하네스를 운영하면 여러 곳에서 비용이 발생합니다. AI 모델 비용은 이를 하나의 뷰로 모읍니다. 헤더에는 이번 달 합계와 예산 대비 비율이 표시되며, 색상으로 구분된 막대가 80%에서 주황색, 100%에서 빨간색으로 바뀝니다. AI 도구 get_ai_costs가 같은 수치를 관리자에게 제공합니다.
대시보드는 네 가지 흐름을 함께 추적합니다.
- 종량제 API 지출 — 제공업체 및 모델별로, 편집 가능한 가격표(100만 토큰당 USD)로 계산하거나 청구서에서 직접 입력합니다. 계정 연결은 OpenAI, Anthropic, OpenRouter, DeepSeek, 자체 호스팅 LiteLLM 프록시에서 이번 달 누적 지출을 자동으로 가져옵니다. 제공업체당 여러 계정을 연결할 수 있으며, 각 계정은 별도의 비용 행이 됩니다.
- 모든 정기 결제 — AI만이 아닙니다. 프리셋은 주요 AI 플랜, 클라우드 및 호스팅(Cloudflare, Vercel, DigitalOcean, Hetzner, Backblaze…), SaaS 도구(Apple One, Google Workspace, 1Password, Figma, Adobe…), 그리고 도메인 갱신, Apple Developer, TLS 인증서 같은 연간 비용을 다룹니다. 또한 어떤 이름이든 직접 입력할 수 있으므로, API가 없는 서비스도 앱이 조회할 수 있는 서비스와 똑같이 추적됩니다. 각 항목은 주간, 월간 또는 연간으로 청구되며, 행에는 실제 지불액이 표시되고 합계는 월간 금액으로 환산됩니다. 항목은 카테고리별로 묶여 각각 소계가 표시되고, 헤더에는 월간 합계와 연간 합계가 모두 표시됩니다. 행을 끄면 삭제하지 않고 합계에서만 제외되므로, 무엇을 해지할지 따져 볼 때 유용합니다. FrontierStack 라이선스는 등급에 맞는 가격으로 자동 추가됩니다.
- 로컬 CLI 사용량 — 이 Mac의 Claude Code 및 Codex 로그를 클릭 한 번으로 스캔하여 이번 달 모델별 토큰을 추정치로 합산합니다.
- 의사 결정 모델 — TypeSafe의 Jev와 Cloudflare의 Clef / Clef-flash는 정형화된 질문에 텍스트가 아니라 확률로 답하며, 입력 토큰에 대해서만 과금하고, 사용량 API를 제공하지 않습니다. 이들의 키는 AI 모델 › 의사 결정 모델에 보관됩니다(채팅 모델 선택 목록에는 절대 나타나지 않습니다). FrontierStack이 하는 모든 호출은 응답에 포함된 토큰 수를 바탕으로 이곳에 자동으로 기록되며(모델별·월별 한 행), AI 모델 행에는 이번 달의 토큰과 비용이 표시됩니다. KeyRotate가 두 키를 모두 동기화합니다.
비용은 각 서비스가 청구하는 통화 그대로 들어옵니다. 미국 SaaS는 달러, 유럽 등록 대행업체는 유로, FrontierStack 라이선스는 엔화입니다. 모든 항목은 원래 금액과 통화를 유지하며, 합계는 모두 선택한 표시 통화로 환산됩니다. 환율은 편집할 수 있고 날짜가 기록되며, 필요할 때 ECB 일일 고시 환율로 새로 고칠 수 있고, 변경하면 과거 내역의 금액도 즉시 다시 계산됩니다. 이는 회계 기장이 아니라 예산 수립용 추정치입니다. 대부분의 서비스 패널에도 플랜 및 비용 섹션이 있으므로, 서비스를 관리하는 바로 그 자리에서 지불 금액을 기록하면 즉시 이 합계에 반영됩니다.
모든 구독에는 갱신일을 지정할 수 있습니다. 갱신일이 지정되면 예정된 갱신에 표시되고, 알림 기간(기본 7일, 행마다 조정 가능)에 들어서면 도메인 및 TLS 만료와 같은 경로로 알림을 발생시킵니다. 자동 갱신 행은 날짜가 스스로 앞으로 넘어가며, Mac이 몇 달 동안 꺼져 있었더라도 따라잡습니다. 수동 행은 그대로 남아 연체로 표시됩니다. 아무것도 청구되지 않았기 때문입니다. 행을 무료 체험으로 표시하면 유료로 전환되는 날까지 합계에 전혀 포함되지 않으며, 청구되기 전에 경고합니다. 특정 날짜부터 해지됨으로 표시하면 그날까지는 계속 집계되다가 그 후 중단되므로, 절감액이 실제로 발생하는 시점에 반영됩니다. 무엇으로 대체되었는지 지정하면 대체 항목을 상계하므로, $20 플랜을 $15 플랜으로 바꾼 경우 $20가 아니라 $5 절감으로 표시됩니다. 갱신 편집기에서 가격을 변경하면 이전 가격이 기록되므로, 슬금슬금 오른 플랜은 오른 것이 눈에 보입니다.
이미 오픈 소스 자체 호스팅 구독 관리 도구인 Wallos로 구독을 관리하고 있다면 두 번 입력할 필요가 없습니다. 카탈로그에서 Wallos를 추가하고, 프로필 페이지에서 받은 API 키로 패널을 사용자의 인스턴스에 연결한 다음, 지출 및 청구로 가져오기를 실행하면 구독(가격, 통화, 청구 주기, 다음 결제일, 해지일)이 복사됩니다. 가져온 구독은 다른 모든 항목과 함께 하나의 합계에 포함되며 같은 갱신 알림을 받습니다. 다시 가져오면 중복을 만드는 대신 앞서 만든 행을 업데이트하므로, Wallos가 변경될 때마다 안심하고 실행할 수 있습니다. FrontierStack은 Wallos에서 읽기만 하고 다시 쓰지 않으므로, 여기서 실수하더라도 그쪽 데이터에는 영향이 없습니다.
제공업체별 내역(도넛 차트), 예산선이 포함된 6개월 추이, 지출 내역을 비용 최적화 어드바이저에게 넘기는 AI에게 묻기 버튼이 화면을 완성합니다. 결제 상태 감시자는 연결된 유료 서비스에서 크레딧 소진, 하드 한도 도달, 연체, 정지 상태를 확인하여 알림을 발생시키므로, 곧 작동을 멈출 키를 멈추기 전에 잡아냅니다. 지출 임계값 알림이 이를 보완합니다. 월간 예산의 80% 또는 100%를 넘으면 알림이 발생하고(복구 알림 포함), 동기화된 각 AI 계정에 별도의 월간 한도를 설정할 수 있으며, DigitalOcean, Vultr, Linode 패널은 제공업체 API에서 이번 달 요금을 읽어 각자의 임계값을 적용합니다.
제V부
FrontierStack을 업종에 맞게 조정하는 방법과, 실무를 마무리하는 설정, 라이선스, 업데이트, 단축키, 문제 해결을 다룹니다.
제16장
비즈니스 및 업종별 솔루션
FrontierStack은 이미 천 개가 넘는 서비스를 다룰 줄 압니다. 프리셋은 비즈니스에 중요한 몇 가지만 드러내 주고, 몇 개의 패널이 이를 실제로 돌아가는 백오피스로 바꿔 줍니다.
6장의 카탈로그는 일부러 방대하게 만들어졌습니다. 그래프 데이터베이스, 렌더 팜, 호텔 채널 매니저를 한꺼번에 운영하는 사업은 없습니다 — 그러므로 이 장의 요점은 폭이 아니라 초점입니다. FrontierStack에는 프리셋과 저장된 셋업이 함께 제공되어, 관련 없는 항목은 모두 숨기고 특정 업종에 실제로 필요한 십여 개의 서비스만 앞으로 꺼내 보여 줍니다. 이 장에서는 앱이 맞춰져 있는 업종을 차례로 살펴보고, 각 업종에서 어떤 서비스가 표시되는지 보여 줍니다.
새로운 제품이 아니라 하나의 렌즈라고 생각하십시오. 앞에서 살펴본 웹 스택, 모니터링, 스크립트, AI 관리자는 그대로이며, 프리셋은 무엇을 먼저 보여 줄지만 결정합니다.
16.1프리셋, 셋업, 그리고 업종별 렌즈
앱을 맞춤 구성하는 방법은 두 가지입니다. 프리셋은 기본 제공되는 출발점입니다. 프리셋 ▸ 드롭시핑 또는 프리셋 ▸ 소규모 비즈니스를 선택하면 사이드바가 해당 업종에 맞게 바뀝니다 — 알맞은 서비스 카테고리가 나타나고, 엄선된 모니터 패널이 플로팅으로 떠오르며, 나머지 900개 서비스의 잡음은 뒤로 물러납니다. 셋업은 그 화면을 직접 저장해 둔 스냅샷입니다(표시할 서비스, 고정할 서비스, 플로팅 팔레트 레이아웃, 그리고 선택적으로 연결할 네트워크 위치). 셋업은 셋업 패널에서 만들고 프리셋 메뉴에서 전환하며, 자세한 내용은 3장에서 설명한 그대로입니다.
아래의 모든 업종에서 작업 흐름은 같습니다. 프리셋을 적용하고, 실제로 사용하는 두세 개의 서비스를 설정한 다음(API 키를 붙여넣고 채널을 활성화), 그 결과를 셋업으로 저장하십시오. 그러면 “모두 표시”로 잠시 돌아다닌 뒤에도 곧바로 원래 화면으로 되돌아올 수 있습니다.
16.2소규모 비즈니스 프리셋
전통적인 macOS Server 사용 사례를 현대적으로 바꾼 것입니다. Mac mini 한 대가 상점, 스튜디오, 개인 사무소의 백오피스를 운영합니다. 소규모 비즈니스 프리셋은 매장 운영에 필요한 카테고리를 표시하며, 그 모두를 눈앞의 Mac에서 직접 호스팅할 수 있고, 그 아래에는 제2~3부에서 다룬 백업, 모니터링, 보안 강화가 받쳐 줍니다.
| 필요한 기능 | 표시되는 서비스 |
|---|---|
| POS(판매 시점 관리) | Square(기본 제공 패널), Toast, Lightspeed, Floranext |
| CRM 및 로열티 | SuiteCRM, EspoCRM, Odoo CRM(자체 호스팅), HubSpot, Zoho, Pipedrive, Square Loyalty, VoucherVault |
| 전자상거래 및 CMS | WooCommerce, Medusa, Saleor, WordPress, Drupal, Ghost, Stripe / PayPal / Square 결제 |
| 메일링 리스트 | Listmonk, Mautic(자체 호스팅), Mailchimp, Brevo, SendGrid |
| 메일 서버 | 기본 제공 메일 서버 패널, mailcow, Modoboa 및 SPF/DKIM/DMARC 도구 |
| 캘린더 | Radicale, Baïkal, SOGo(CalDAV/CardDAV), 캘린더 상태 패널 |
| 회계 | ERPNext, Xero, QuickBooks, freee, Money Forward |
| 헬프데스크 | Zammad, osTicket(자체 호스팅), Freshdesk(실시간 티켓 수) |
이 중 상당수는 단순한 카탈로그 항목 이상입니다. 키 기반의 간단한 API를 갖춘 CRM, 헬프데스크, 스토어, 메일링 리스트 서비스는 패널에 실시간 지표를 표시합니다 — Freshdesk는 미해결/보류/기한 초과 티켓을, Shopify는 미처리 주문을, Mailchimp는 구독자 총수를 보여 줍니다 — 또한 임곗값과 함께 “알림 받기”를 켜 두면 처리가 밀렸을 때 평소 사용하는 채널로 알림이 전달됩니다(11장).
16.3숙박업 및 단기 임대
휴가용 임대 숙소와 소규모 호텔을 위해 FrontierStack에는 기본 제공 Channel Manager 패널(카테고리 PMS)이 있어, 사용 중인 숙소 관리 플랫폼을 실시간 대시보드로 바꿔 줍니다. 숙박업 프리셋의 핵심 엔진입니다.
Channel Manager를 열고 PMS 상태에서 사용 중인 플랫폼 하나를 활성화한 뒤 자격 증명을 붙여넣으십시오 — 필드 레이블은 플랫폼마다 달라집니다. Hostaway는 Account ID, Lodgify는 API 키, Guesty는 클라이언트 ID와 비밀 값, Cloudbeds는 Bearer 토큰, Beds24는 API 토큰, 직접 만든 사용자 지정 AppSheet 앱은 Application Access Key를 입력합니다. 확인은 API 엔드포인트에 연결할 수 있는지 확인하고, 동기화는 실시간 예약을 가져오며, 예약(플랫폼 API) 섹션에는 투숙객, 채널, 날짜, 금액이 나열되고 맨 위에는 매출과 객실 점유율 다이얼이 표시됩니다.
바로 아래의 OTA 상태에는 Airbnb, Booking.com, Vrbo, Expedia 등 모든 OTA가 나열됩니다. OTA는 파트너 승인 없이는 API를 제공하지 않으므로, 확인은 채널의 iCal 내보내기를 가져와 실제 캘린더인지 확인하고 예약 수를 셉니다. iCal URL이 설정되어 있지 않으면 대신 엑스트라넷이 응답하는지 확인합니다. 캘린더 동기화를 실행할 때마다 부수적으로 이 상태 표시도 새로 고쳐집니다.
모든 OTA에 플랫폼 API가 필요한 것은 아닙니다. 캘린더 동기화 섹션은 각 채널의 iCal 내보내기를 가져옵니다 — 채널에 iCal URL을 지정하거나, ICS 피드에서 가져오기로 ICS 피드 패널에 추가해 둔 Airbnb, Booking.com, Vrbo, Expedia 피드를 불러오면 됩니다 — API 키 없이 이들을 하나의 캘린더로 병합하며, 합쳐진 .ics를 저장하거나 복사하여 Apple, Google, Outlook에 공유할 수 있습니다.
객실 정비(턴오버)로 흐름이 마무리됩니다. 청소 및 턴오버 — Turno 섹션에서는 Turno의 API에 직접 연결하거나, 더 간단하게 Turno용 예약 iCal 복사를 사용할 수 있습니다 — 그 캘린더를 Turno에 추가하면 체크아웃이 있을 때마다 청소가 자동으로 예약됩니다.
정숙 시간도 감시할 수 있습니다. Minut 패널에서 Minut 소음 및 재실 센서를 연결하면, 소음 문제가 진행 중일 때, 센서가 오프라인이 될 때, 배터리가 부족할 때 FrontierStack이 알림을 보냅니다. 이 알림은 알림 기능을 거치므로 연락처 프리셋을 통해 당번인 숙소 관리자에게 전달할 수 있습니다. 먼저 Minut 측에서 계정에 API 접근 권한을 부여해야 합니다(Minut은 이를 Enterprise 플랜에 묶어 두고 있습니다).
직접 예약 사이트를 Lodgify로 만들었다면, Lodgify 웹사이트 도메인 섹션에서 자신의 도메인이 그 사이트를 가리키도록 설정할 수 있습니다. Lodgify에서 도메인을 추가한 뒤(Website Builder ▸ Settings ▸ Domains), Lodgify가 보여 주는 DNS 레코드를 붙여넣으십시오. FrontierStack은 도메인의 DNS가 어디에서 호스팅되는지(Cloudflare, DNSimple, GoDaddy 또는 Hostinger) 감지하고, 확인을 거친 뒤 레코드를 설정하며, 공개 DNS와 HTTPS를 통해 설정 결과를 점검합니다. Cloudflare에서는 Lodgify가 인증서를 발급할 수 있도록 레코드가 DNS 전용으로 유지됩니다. 변경 사항이 전파되기까지 최대 48 시간이 걸릴 수 있습니다.
16.4드롭시핑 및 전자상거래 주문 처리
드롭시핑 프리셋은 전자상거래 플랫폼 및 SEO 도구와 함께 다섯 가지 전용 카테고리 — 소싱 및 공급업체, 주문형 인쇄, 배송 및 주문 처리, 재고 동기화, 수익 분석 — 를 표시하고, 드롭시핑 상태 모니터를 플로팅으로 띄웁니다.
| 단계 | 표시되는 서비스 |
|---|---|
| 소싱 및 공급업체 | AliExpress, Alibaba, CJdropshipping, Spocket, Zendrop, SaleHoo, DSers |
| 주문형 인쇄 | Printful, Printify, Gelato, Gooten |
| 배송 및 주문 처리 | AfterShip, ShipStation, Easyship, Shippo, Pirate Ship |
| 재고 동기화 | SkuVault, Cin7, Zoho Inventory, Katana, zaiko Robot |
| 수익 분석 | Triple Whale, Lifetimely, BeProfit |
실시간으로 동작하는 부분은 배송 추적입니다. 드롭시핑 상태는 AfterShip의 추적 API를 직접 읽어(키는 한 번만 저장하면 됩니다) 배송 건을 상태별로 집계합니다 — 배송 중, 배송 완료, 대기 중, 그리고 멈춰 있거나 예외로 표시된 건의 문제 목록 — 그래서 고객이 이메일을 보내기 전에 지연된 소포를 발견할 수 있습니다. 재고, 마켓플레이스, 수익 섹션은 틀만 갖춰진 자리 표시자로, 해당 카탈로그 서비스를 연결하면 활성화됩니다. 현재 실시간으로 연동되는 것은 AfterShip이며, 나머지는 각 서비스의 패널에서 사용할 수 있습니다.
16.5교육
학교와 캠퍼스는 전혀 다른 카테고리 묶음을 사용합니다. 하나로 된 “교육 프리셋” 버튼은 없지만, 카탈로그가 구성 요소를 깔끔하게 분류해 두었으므로 셋업으로 기관에서 사용하는 항목만 정확히 고정할 수 있습니다.
| 기능 | 표시되는 서비스 |
|---|---|
| 학생 정보 | PowerSchool, Infinite Campus, Veracross, openSIS, RosarioSIS(자체 호스팅) |
| 학습 관리 | Canvas, Schoology, Google Classroom, Moodle, Open edX, ILIAS, BigBlueButton |
| 디지털 도서관 | Koha, DSpace, Greenstone(자체 호스팅), EBSCOhost, JSTOR, ProQuest |
| 캠퍼스 및 학교 운영 | Slate 및 OpenApply 입학 관리, FACTS 학비 관리, StarRez 기숙사 관리, FET 시간표 작성, ParentSquare |
각 행의 오픈 소스 항목 — Moodle, Koha, openSIS — 은 4장의 스택에서 실행할 수 있는 완전한 자체 호스팅 웹 앱으로, 다른 사이트와 마찬가지로 모니터링하고 백업할 수 있습니다. 클라우드 항목은 자격 증명 패널을 통해 연결되어 상태를 한눈에 확인할 수 있습니다.
16.6비즈니스 메시징 및 고객 커뮤니케이션
고객이 이미 있는 곳에서 고객에게 다가가는 것은 그 자체로 하나의 카테고리입니다. 비즈니스 메시징에는 지역마다 중요한 매장-고객 간 채널이 모여 있습니다. WhatsApp Business, LINE Official Account, WeChat 및 Zalo 공식 계정, KakaoTalk Channel과 알림톡, Messenger, Instagram DM, 그리고 Intercom, ManyChat, Respond.io, WATI, Gorgias 같은 받은 편지함 및 봇 도구입니다.
현재 이 중 세 가지는 실시간 연결 확인을 제공합니다 — WhatsApp Business는 인증된 이름과 품질 등급을 표시하고, Intercom과 ManyChat은 토큰이 작동하는지 확인합니다 — 나머지는 자격 증명과 해당 콘솔로 가는 딥 링크를 저장합니다. AI 관리자도 이 상황을 파악할 수 있습니다. AI 관리자의 get_messaging_channels 도구는 어떤 채널이 연결되어 있고 어떤 알림 게이트웨이가 실제로 발송할 수 있는지 보고하므로, 공지를 어디로 보낼 수 있는지 AI 관리자에게 확인을 요청할 수 있습니다.
16.7캘린더, 계정 및 Apple 서비스
Mac 기반 사업은 곧 Apple 기반 사업이기도 합니다. 여러 기본 제공 패널이 Apple 생태계 중 서버와 맞닿는 부분을 관리합니다.
- 캘린더. 캘린더 검색은 일반적인 CalDAV 포트(Radicale 5232, Apple 8008/8443, SOGo 20000, 80/443)와
/.well-known/caldav경로를 스캔합니다. 엔드포인트를 캘린더 상태에 추가하면 계속 감시합니다. 오래된 macOS Server CalDAV를 계속 살려 두거나, Radicale 또는 Baïkal을 새로 구축할 때 이 방법을 사용하십시오. - 계정. 계정 패널은 Open Directory와 LDAP를 읽고, 내보낸 항목을
ldapadd를 통해 대상 디렉터리로 마이그레이션할 수 있습니다 — 레거시 Apple 디렉터리 서버에서 사용자를 옮겨 오기 위한 다리 역할을 합니다. - Apple 서비스. Apple 서비스 패널은 로그인된 Apple 계정, 활성화된 iCloud+ 서비스, 나의 Mac 찾기 상태를 보고합니다 — 이 컴퓨터가 무엇에 연결되어 있는지 빠르게 점검할 수 있습니다.
- Apple 홈. HomeKit 데이터베이스는 시스템 앱 전용이므로, Apple 홈 패널은 단축어 브리지를 통해 이를 제어합니다. 홈 동작을 포함한 단축어로 감싼 장면이나 자동화는 모두 FrontierStack에서 실행할 수 있으므로, 사업장 자동화를 운영 업무와 연계할 때 유용합니다.
16.8회계, 의료, AV 및 인쇄
카탈로그를 완성하는 몇 가지 업종이 더 있으며, 각각 셋업에 고정할 수 있는 카테고리로 제공됩니다.
- 회계 및 ERP. 자체 호스팅 ERPNext, API로 연결하는 Xero, QuickBooks, freee, Money Forward, Plaid, Expensify — 스토어 옆에 장부를 둡니다.
- 의료. 자체 호스팅하는 의원을 위한 오픈 소스 임상 시스템: OpenEMR, OpenMRS, GNU Health, LibreHealth, Orthanc DICOM/PACS 서버, 일본의 OpenDolphin과 ORCA. 이들은 10장의 보안 원칙에 따라 다루십시오. 환자 데이터는 위험 부담을 크게 높입니다.
- AV 및 무대. 공연장과 제작 현장을 위한 기능입니다. DJ 플레이어, 조명, LED, NDI, 타임코드를 감독하고 쇼가 시작된 뒤 무엇이든 연결이 끊기면 알림을 보내는 Show Network 패널(9장)과 AV 피드 패널, 그리고 Dante 오디오 오버 IP, Q-SYS, QLC+ 및 grandMA 조명, OBS, NDI, Resolume, 디지털 사이니지, Chromecast 제어가 있습니다 — 쇼와 그 뒤의 네트워크를 하나의 윈도우에서 다룹니다. 클럽 및 바와 무대 및 공연 프리셋은 이 모두를 표시하며, Show Supervisor 애드온을 사용하면 다른 어떤 셋업에도 이 기능을 넣을 수 있습니다.
- 인쇄 제작. 인쇄 및 프리프레스 업체를 위한 기본 제공 패널로, 플릿 및 원격 그룹에서 렌더 팜과 나란히 있습니다.
여기서는 이들 중 어느 것도 깊이 있는 사용법을 다루지 않습니다 — 서비스별 세부 사항은 6장에 있습니다. 이 장의 역할은 어떤 사업을 하든 FrontierStack이 이미 그 사업이 의존하는 서비스를 알고 있으며, 프리셋이나 셋업 하나만으로 딱 그 서비스만 표시할 수 있다는 것을 보여 주는 것입니다.
제17장
설정, 라이선스 및 업데이트
하나의 설정 패널에 모든 환경설정이 모여 있습니다. Ed25519 라이선스는 오프라인으로 등급을 잠금 해제하고, Sparkle은 앱을 최신 상태로 유지하며, 스위치 하나로 원격 측정을 끌 수 있습니다.
FrontierStack이 관리하는 서비스가 아니라 FrontierStack 자체에 대해 구성할 수 있는 거의 모든 것은 한곳, 즉 설정 패널에 모여 있습니다. 이 장은 그 패널과, 그것을 둘러싼 세 가지 시스템에 대한 참조입니다. 앱의 라이선스 방식, 앱이 스스로 업데이트하는 방식, 그리고 사용 방식에 관해 무엇을 보내고 무엇을 보내지 않는지를 다룹니다. 이 중 몇몇 제어 항목은 AI 관리자에도 영향을 주므로 13장을 함께 참조합니다. 문제가 생긴 경우에는 18장을 참조하십시오.
17.1설정 패널
사이드바에서 열거나 앱 메뉴에서 ⌘,로 여십시오. 표준 macOS 설정 윈도우는 같은 패널을 여는 Full Settings 버튼만 있는 안내판에 불과합니다. FrontierStack은 환경설정을 두 윈도우로 나누지 않고 모두 한곳에 두기 때문입니다. 이 패널은 섹션별로 묶인 하나의 스크롤 양식입니다. 일반, 라이선스 및 구독, 업데이트, 개인정보 보호 및 진단, 위치, 텍스트 편집기, 이미지, 메뉴, 기능, 그리고 클라우드/백업 대상 섹션이 있습니다.
일반 섹션의 토글 중 두 가지는 AI도 설정할 수 있으므로(아래 참조) 주의를 기울일 만합니다. 앱 내 콘솔에서 명령 실행은 기본적으로 켜져 있습니다. 설치와 셸 명령이 FrontierStack 윈도우에서 실시간으로 표시되며, 명령이 끝나면 패널이 자동으로 새로 고쳐집니다. 이 옵션을 끄면 해당 명령이 대신 Terminal.app으로 전송됩니다. SSH나 REPL 같은 대화형 세션은 항상 실제 터미널에서 열립니다. 함께 있는 외부 터미널 선택기(텍스트 편집기 아래)는 “터미널에서 열기” 동작이 어떤 터미널 앱을 사용할지 선택합니다. Terminal과 iTerm은 명령을 직접 실행하고, 다른 앱은 실행 가능한 .command 파일을 엽니다.

17.2AI가 변경할 수 있는 앱 설정 키
이 환경설정 중 몇 가지는 get_app_settings 및 set_app_setting 도구를 통해 AI 관리자에게 공개되므로, “기본 브라우저를 Firefox로 바꿔 줘”나 “프리셋 메뉴를 더 이상 표시하지 마”처럼 간단히 요청하면 됩니다. 어시스턴트는 아래 표에 있는 키만 읽고 씁니다. 설정의 그 밖의 어떤 항목도 프롬프트로는 접근할 수 없습니다.
| 키 | 유형 | 제어 대상 |
|---|---|---|
defaultBrowserBundleID | 번들 ID | 모든 “브라우저에서 열기” 동작에 사용되는 브라우저. 비어 있으면 시스템 기본값. |
showInMenuBar | bool | 전역 메뉴 막대 항목의 표시 여부. |
preferInAppConsole | bool | 명령을 앱 내 콘솔에서 실행(켬)하거나 Terminal.app으로 전송(끔). |
menu.showPresets | bool | 메뉴 막대에 프리셋 메뉴 표시. |
menu.showLocations | bool | 메뉴 막대에 위치 메뉴 표시. |
마지막 두 항목은 패널의 메뉴 섹션에도 앱 설정… (⌘,) 버튼과 함께 있습니다. 사용하지 않는 메뉴는 숨기고, 필요해지면 바로 다시 표시하십시오.
17.3계정 및 고급 설정
설정 바로 바깥에 있는 두 패널도 여기서 언급할 만합니다. 계정 패널(사이드바 ▸ 계정)은 청구와는 관계가 없습니다. 이 패널은 FrontierStack을 디렉터리 서비스(Active Directory, Microsoft Entra ID, Okta, OpenLDAP, FreeIPA, 389 Directory Server, Jamf 또는 로컬/원격 Open Directory)에 연결하고, 바인딩을 테스트하며, 사용자 계정을 가져옵니다. Open Directory를 운영하는 Mac에서 OD 사용자와 그룹을 관리하는 Open Directory 편집기도 포함되어 있습니다. 디렉터리 작업은 다른 ID 관련 내용과 함께 10장에서 다룹니다.
FrontierStack에서 “고급 설정”은 웹사이트별 고급 설정 시트를 뜻합니다. 이는 Apache <Directory> 및 <VirtualHost>의 전체 편집기입니다(Options 플래그, AllowOverride, Require 규칙, ServerAdmin, 사용자 지정 ErrorDocument). 사이트 패널에서 사이트를 선택하여 열 수 있으며, 양식에서 다루지 않는 내용은 텍스트로 편집…을 통해 편집할 수 있습니다. 웹 스택과 함께 7장에서 설명합니다.
17.4AI용 사용자 지정 지침
AI에 대한 가장 강력한 “설정”은 설정 패널에 있지 않습니다. 바로 AI 관리자 패널 하단의 사용자 지정 지침 막대입니다. 여기에 작성한 텍스트(frontierstack.md로 저장됨)는 어시스턴트 채팅, 단발성 AI에게 묻기, 스킬, MCP 서버 등 모든 AI 요청에 덧붙여집니다. 따라서 지속적인 선호 사항을 한 번에 밝혀 두기에 알맞은 곳입니다. 선호하는 언어와 어조, 어시스턴트가 항상 하거나 절대 하지 말아야 할 일, 그리고 어시스턴트가 전제로 삼아야 할 사용자 환경에 관한 사실 등을 적으십시오.
사용자 지정 지침을 클릭하여 편집기를 펼치고, 모든 AI 프롬프트에 내 지침 추가를 켠 다음 입력하십시오. 효과가 좋은 예: “항상 일본어로 답할 것”, “Docker보다 Homebrew를 우선할 것”, “업무 시간(09:00–18:00)에는 MySQL을 절대 재시작하지 말 것”, “내 프로덕션 플릿 호스트는 web1.example.com”. 저장 버튼으로 저장하거나 외부 편집기에서 파일을 여십시오. 이 파일은 하네스 체인 전체를 거쳐 전달되므로 13장의 신뢰 모델을 보완하지만 대체하지는 않습니다. 지침은 AI의 행동을 이끌고, 읽기 전용 기본값과 동작별 승인은 AI가 무엇을 할 수 있는지를 규정합니다.
DB_PASSWORD)만 볼 수 있습니다. 값은 실행 시 환경 변수로 주입되며 클라우드 모델로 전송되지 않습니다. 스크립트에서는 비밀 값을 $NAME으로 참조하십시오. 13장을 참조하십시오.17.5명령줄 PATH와 Homebrew
2장의 두 참조 패널도 같은 앱 수준 제어 항목 계열에 속합니다. 명령줄 PATH 패널(사이드바 ▸ 명령줄 PATH)은 로그인 셸이 명령을 찾는 디렉터리를 보여 주며, ~/.zprofile(또는 선택한 프로필)의 관리 블록에 직접 디렉터리를 추가할 수 있게 합니다. 추가한 항목은 PATH 앞쪽에 붙으며 새 터미널에서 적용됩니다. 앱은 이미 셸을 통해 도구를 깊이 찾아내므로, 이 패널은 주로 mlx_lm.server 같은 명령을 즉시 찾을 수 있게 하는 용도입니다. Homebrew 패널은 Homebrew 자체와 여러 서비스의 기반이 되는 formula를 설치하고 업데이트합니다. 두 패널 모두 앱을 처음 설정할 때 자세히 다루며, 이 장에서는 명령 환경을 관리하는 곳으로서 설정과 나란히 있다는 점만 언급합니다.
17.6라이선스
FrontierStack은 무료로 다운로드할 수 있으며 유료 등급이 있고, Square를 통해 판매 및 청구됩니다. 카드 데이터는 Square가 보관하며 FrontierStack은 결코 볼 수 없습니다. 구매 후에는 FSK-XXXX-XXXX-XXXX 형식의 라이선스 코드를 받습니다. 설정 ▸ 라이선스 및 구독 ▸ 라이선스 활성화…를 열고 코드를 붙여넣으면 이 Mac이 플랜에 연결됩니다. 프로모션 코드는 웹사이트의 결제 단계에서 적용됩니다.
| 등급 | 가격 | 서버 | 참고 |
|---|---|---|---|
| 무료 모드 | 결제 플랜 아님 | 1 | 유료 권한이 없을 때의 기본 폴백. 기능이 제한됩니다. |
| Standard | 연 ¥15,000 또는 일회성 ¥45,000 | 10 | Mac 3대에서 실행. 10팩 추가 기능으로 모든 한도가 늘어납니다. 일회성 구매에는 Lifetime 상태가 부여됩니다. |
| Standard — Bleeding edge | 연 ¥7,500 | 10 | 캠페인 구독으로, 유지되는 동안에는 첫해 이후에도 가격이 오르지 않습니다. |
| Full Fleet | 연 ¥45,000 | 무제한 | 모든 기능과 Wild Frontier 업데이트 채널 포함. 일회성 또는 Lifetime 옵션 없음. |
Standard 라이선스는 Mac 3대에서 실행되며 정해진 범위를 다룹니다. 서버 10대, 라우터 5대, 프린터 5대, 스위치 10대, Wi-Fi 액세스 포인트 10대, 위치 10곳, KVM 10대, UPS 10대, IoT 기기 및 카메라 20대, 도메인 또는 DNS 영역 20개, 서버의 컨테이너 및 VM 25개, 페어링된 iPhone 또는 iPad 5대입니다. 10팩을 추가하면 이 모든 항목이 기본 할당량만큼 늘고 Mac이 1대 추가됩니다. 따라서 팩 2개는 기본의 3배와 Mac 5대가 됩니다. Full Fleet은 모든 항목이 무제한입니다. 전체 비교는 frontierstack.app/compare에 있습니다.
이 섹션에는 등급, 상태 표시(Active, Lifetime, Past due, Canceled), 갱신 날짜, 라이선스 코드, 이 Mac의 서버 한도가 표시됩니다. 관리 / 갱신…과 구매 / 업그레이드…는 웹사이트를 엽니다. ⋯ 메뉴에는 지금 상태 확인, 이 Mac 비활성화, 로그아웃이 있습니다. 활성화된 Mac은 라이선스를 사용하는 모든 Mac을 활성화 날짜와 함께 나열하며, 하나를 해제하여 그 자리를 비울 수 있습니다. 이 Mac의 비활성화는 즉시 이루어지지만, 다른 Mac을 해제하면 라이선스 소유자에게 확인 링크가 이메일로 전송됩니다. 따라서 코드를 안다는 것만으로는 다른 사람의 Mac을 제거할 수 없습니다. 연간 제한된 횟수만큼 직접 이전할 수도 있으며, 자리를 잃은 Mac은 다음 확인 시 조용히 무료 모드로 전환됩니다. 같은 셀프서비스 상태와 자리 목록은 frontierstack.app/license의 My Licence 웹 페이지에서도 볼 수 있습니다. 동일한 제어 항목은 사이드바 개요 그룹의 전용 라이선스 패널에도 있습니다.
17.8.1Full Fleet이 필요한 기능
Standard는 체험판이 아닌 완전한 제품입니다. 로컬 스택 전체, 로컬 사이트, DNS와 인증서, macOS Server 및 MAMP에서의 마이그레이션, 로컬 상태와 알림, 기기 검색, Homebrew와 로컬 Docker, 데이터베이스 클러스터 상태, 원격 KVM과 전원 제어, 고급 원격 에이전트, 감사 및 변경 로그, 수정안을 제시하는 AI 진단, 그리고 한 번에 서버 한 대씩 수행하는 원격 진단이 모두 포함되어 있습니다.
Full Fleet은 여러 기기에 한꺼번에 작업하는 것, 그리고 다른 시스템이 FrontierStack을 조작하게 하는 것에 관한 플랜입니다. 모든 서버에 대한 Fleet Run, Fleet Push 및 프로덕션으로 승격, 원격 호스트의 Service Guardian, AI 자동 복구와 예약된 AI 보고서, 플릿 전체 보안 감사, EDR 집계, Kubernetes 플릿 작업, 프로덕션 프린트 플릿, 라우터 및 방화벽 플릿 대시보드, 대규모 SNMP와 PoE 전원 순환, SaaS 및 비즈니스 모니터링, 클라우드 인벤토리와 비용 집계, MCP를 통한 외부 AI 제어, Fleet Skill, iPhone 원격 제어, 팀 및 관리자 제어, 알림 라우팅과 에스컬레이션, 컨테이너 플릿 모니터링, GPU 워크로드, 프로덕션 배포 워크플로가 이에 해당합니다.
machine_id = SHA-256(IOPlatformUUID + bundle id)로 이 기기에 연결되므로, 앱을 다른 Mac에 복사해도 라이선스는 복사되지 않습니다. 앱은 토큰이 만료되고 유예 기간이 지날 때까지 토큰을 신뢰한 다음 갱신합니다. 유료 플랜이 만료되면 무료 모드로 전환됩니다. Lifetime은 Standard 일회성 구매에만 적용되며 만료되지 않습니다. Full Fleet에는 Lifetime 옵션이 없습니다. 이는 억지 수단일 뿐 강력한 DRM이 아닙니다. 읽기는 계속 작동하며, 한도와 프리미엄 기능만 제한됩니다.17.7업데이트
FrontierStack은 앱 내 UpdateManager가 구동하는 Sparkle로 스스로 업데이트합니다. 설정의 업데이트 섹션이 제어의 전부입니다. 업데이트 자동 확인과 백그라운드에서 업데이트 다운로드는 기본적으로 켜져 있습니다. 새 빌드가 조용히 다운로드된 다음 업데이트 버튼이 나타나며, 이 버튼을 누르면 설치 후 앱이 다시 실행됩니다. 언제든 지금 확인을 누를 수 있으며, 그 옆에 현재 버전이 표시됩니다.
업데이트 확인 메뉴는 백그라운드 확인 주기를 설정합니다. 어떤 선택이든 하루에 최소 두 번은 확인합니다. 자동(기본값)은 12시간마다(Wild Frontier에서는 약 4시간마다) 확인하며, 하루 두 번, 6시간마다, 4시간마다, 1시간마다는 간격을 고정합니다. 따라서 수정 사항을 빨리 받고 싶다면 더 일찍 받을 수 있습니다. 자동 확인이 꺼져 있으면 이 설정은 효과가 없으며, 지금 확인은 간격과 관계없이 항상 작동합니다.
채널은 두 가지입니다. Stable은 기본값이며, 업데이트할 만한 변경이 충분히 쌓였을 때만 배포됩니다. Wild Frontier는 대략 이틀에 한 번꼴로 버그 수정 빌드를 자주 제공합니다. 변경을 요청했고 수정을 빨리 받고 싶다면 켜십시오. 전환하려면 업데이트 채널 선택기에서 고르십시오. Wild Frontier 조기 빌드에는 Full Fleet 플랜이 필요합니다. 그 밖의 모든 플랜은 항상 Stable 업데이트를 받으며, 해당 등급으로 선택할 수 없는 경우 패널에 그렇게 안내됩니다.
17.8원격 측정 및 개인정보 보호
FrontierStack은 의도적으로 적은 양의 익명 사용 데이터를 수집하며, 이를 모두 끌 수 있습니다. 개인정보 보호 및 진단 섹션에는 두 개의 토글이 있으며 둘 다 기본적으로 켜져 있습니다. 익명 사용 분석 공유는 하루에 한 번 frontierstack.app으로 작은 핑을 보냅니다. 충돌 보고서 보내기는 기술적인 백트레이스를 추가하며, 앱이 충돌했을 때 나타나는 확인 창에서 승인한 경우에만 전송됩니다.
분석 핑에는 무작위 설치 ID(계정이나 로그인 정보 없음), 앱 및 macOS 버전, 하드웨어 모델과 로캘 지역, 업데이트 채널, AI 기능 사용 여부가 담깁니다. 국가는 Cloudflare가 서버 측에서 IP로부터 판단합니다. 문서, 파일 내용, 구성, 키, 암호 또는 개인 데이터는 결코 전송되지 않습니다. 충돌 보고서에는 종류, 메시지, 스택 트레이스만 추가되며, 먼저 로컬에 기록되므로 Mac 밖으로 무엇이든 나가기 전에 거부할 수 있습니다.
두 섹션이 더 있어 패널을 마무리합니다. 기능 섹션은 외부 AI 엔진에 넘겨줄 수 있도록 모든 서비스와 AI 도구에 대한 완전한 실시간 설명인 CAPABILITIES.md와 capabilities.json을 내보냅니다. 그리고 클라우드 서비스, 백업(로컬 Git), Amazon S3, 클라우드 동기화(rclone) 섹션은 설정 백업과 사이트 파일을 저장할 위치를 구성합니다. 설정, 라이선스, 업데이트, 개인정보 보호를 이해했다면 키보드 단축키, URL 스킴, 문제 해결에 관해서는 18장으로 넘어가십시오.
제18장
키보드, URL 스킴 및 문제 해결
빠른 길과 안전망 — 단축키, 딥 링크, 앱 자체 로그, 그리고 가끔 생기는 몇 가지 문제에 대한 차분한 해결책을 다룹니다.
이 마지막 장은 FrontierStack으로 무엇을 할 수 있는지 이미 알고 있고 그 작업을 더 빨리 하고 싶을 때, 또는 무언가가 빨간색으로 표시되어 가장 빠르게 녹색으로 되돌리고 싶을 때 펼쳐 보는 참고 자료입니다. 키보드 단축키, frontierstack:// URL 스킴, 앱이 자체 로그를 보관하는 위치, 그리고 실제로 자주 발생하는 문제에 대한 증상별 해결 표를 모았습니다. 반드시 읽어야 하는 내용은 아니지만, 모두 시간을 절약해 줍니다.
18.1키보드 단축키
FrontierStack은 네이티브 Mac 앱이므로 이미 익숙한 시스템 단축키 — 윈도우를 닫는 ⌘W, 설정을 여는 ⌘,, 종료하는 ⌘Q — 가 모두 동작합니다. 여기에 앱 자체의 단축키가 소수 추가되어 있습니다. 기본 방침은 절제입니다. 대부분의 동작은 이름이 분명한 버튼에 있고, 거의 모든 대화상자가 Return으로 확인하고 Esc로 취소하는 Mac의 관례를 따르므로 따로 외울 것이 거의 없습니다.
| 단축키 | 동작 | 해당 메뉴 |
|---|---|---|
| ⌘F | 검색 팔레트를 엽니다. 서비스, 도구, 패널, 동작을 이름으로 찾아 바로 이동합니다. | 도구 막대의 돋보기 버튼 |
| ⌘? | 앱 내 도움말 윈도우를 엽니다. | 도움말 ▸ FrontierStack 도움말 |
| ⌘⌥⇧W | 모든 플로팅 팔레트를 한 번에 닫습니다. | Palettes ▸ Close All Palettes |
| Return | 시트의 기본 버튼(저장, 확인, 추가, 설치…)을 실행합니다. | 강조 표시된 버튼 |
| Esc | 현재 시트나 팔레트를 취소하거나 닫습니다. | 취소 / 완료 버튼 |
나머지 기능은 메뉴 막대에서 다룹니다. 전용 Services, Locations, Monitors, Presets, Palettes 메뉴를 사용하면 키보드에서 손을 떼지 않고 서비스를 전환하고, 위치를 바꾸고, 모니터를 켜고 끄고, 저장된 프리셋을 적용하거나 플로팅 팔레트를 띄울 수 있습니다. 이들은 실제 메뉴 명령이므로 시스템 설정 ▸ 키보드 ▸ 키보드 단축키 ▸ 앱 단축키에서 원하는 단축키를 지정할 수 있습니다. FrontierStack을 추가하고 메뉴 항목의 정확한 이름을 입력한 다음 키를 고르십시오.
여러 윈도우나 팔레트가 서로를 가릴 때는 Palettes › Organize Windows & Palettes를 선택하십시오. FrontierStack은 연결된 각 디스플레이에서 보이는 크기 조절 가능한 윈도우를 메뉴 막대와 Dock을 제외한 영역에 디스플레이별로 따로 배치합니다. 일반 윈도우는 주 영역을, 플로팅 팔레트는 공간이 허락하면 옆쪽 레일을 사용하고, 미니 팔레트는 작은 크기를 유지합니다. 윈도우는 현재 디스플레이에 그대로 머물며, 확인·승인 패널 등 일시적인 패널은 이동하지 않습니다. 정리된 팔레트 위치는 수동으로 배치한 레이아웃과 마찬가지로 활성 셋업에 저장됩니다.
18.2frontierstack:// URL 스킴
FrontierStack은 frontierstack:// URL 스킴을 등록하여 어떤 패널, 서버, 서비스로든 바로 딥 링크할 수 있습니다. 이러한 URL을 열면 앱이 앞으로 나오고 해당 위치로 이동합니다. 알맞은 사이드바 그룹을 펼치고 목적지까지 스크롤합니다. 이 방식으로 메모 속 링크, 단축어 동작, 스크립트의 한 줄이 여러분(또는 팀원)을 정확히 필요한 화면으로 보낼 수 있습니다.
터미널에서는 open으로, 단축어에서는 URL 열기 동작으로 실행하며, 메모나 웹 페이지에서는 일반 링크로 사용합니다. 형식은 다음과 같습니다.
| URL | 이동 위치 |
|---|---|
frontierstack://server/<name-or-id> | 해당 플릿 호스트의 패널(알 수 없는 경우 로컬 상태로 이동). |
frontierstack://website/<domain> | 사이트 패널. |
frontierstack://container/<name> | Docker 패널. |
frontierstack://pane/<Name> | 표시 이름으로 지정한 임의의 패널(예: pane/Security, pane/Apache, pane/Alerts). 공백은 URL 인코딩(%20)합니다. |
frontierstack://service/<catalog id> | ID로 지정한 카탈로그 서비스. |
frontierstack://kube/<context> | Kubernetes 컨텍스트(인수가 없으면 Clusters 패널). |
frontierstack://security · ://alerts · ://health | 보안, 알림, 로컬 상태 패널로 가는 바로 가기. |
frontierstack://device/<id> · ://wifi/<ssid> · ://zone/<id> | 검색된 기기, Wi-Fi 네트워크, Cloudflare 영역. |
frontierstack://open?sel=<raw> | 정확한 우회 수단: 그대로 왕복되는 내부 선택 값. |
몇 가지 예시입니다.
open "frontierstack://pane/Security"
open "frontierstack://server/mac-mini-office"
open "frontierstack://website/example.com"
딥 링크는 FrontierStack 자동화를 이어 주는 연결 조직입니다. 프리셋에는 해당 대시보드로 이동하는 링크를 넣을 수 있고, Notes의 런북은 각 단계를 그 작업을 수행하는 패널에 연결할 수 있으며, 알림 메시지는 장애가 난 서비스를 가리킬 수 있습니다. 같은 스킴은 MCP 서버가 공개하는 AI용 읽기 전용 리소스 두 가지 — frontierstack://capabilities와 frontierstack://health — 의 이름으로도 쓰입니다(14장 참조).
frontierstack:// URL은 잠금을 해제할 수 있도록 윈도우를 앞으로 가져오지만, 이동은 하지 않습니다. 외부 자동화가 잠금 화면 뒤에서 앱을 조작할 수는 없습니다.18.3앱 자체 로그 읽기
Logs 패널은 이 Mac뿐 아니라 어떤 기기의 로그든 읽습니다. 상단의 Machine 선택기로 연결된 서버로 전환하면 그 서버의 로그를 SSH로 가져옵니다. 해당 서버에 FrontierStack 모니터가 설치되어 있다면 모니터를 통해 가져오며, 모니터는 root로 실행되므로 sudo 없이도 권한이 필요한 로그에 접근합니다. 소스 메뉴에는 선택한 기기에서 실제로 실행 중인 서비스(Apache, Nginx, MySQL, PHP-FPM, PostgreSQL, Redis, Ollama)가 먼저 나오고, 이어서 발견된 그 밖의 로그 파일, 마지막으로 충돌 보고서 및 진단 정보가 나옵니다. 이는 콘솔이 보여 주는 .ips, .crash, .panic 파일로, 사용자 및 시스템 DiagnosticReports 폴더 양쪽에서 최신순으로 표시됩니다.
서비스가 아니라 FrontierStack 앱 자체가 무엇을 했는지 알아야 할 때는 살펴볼 곳이 세 군데 있으며, 아래로 갈수록 자세합니다.
- 변경 로그(감사). Logs 패널에는 모든 설정 및 구성 변경을 책임 주체와 함께 기록하는 변경 로그가 있습니다. 주체는 User, AI 하네스, Web 제어판, MCP, Automation 중 하나입니다. 서비스가 중단되었을 때 무엇이 그 서비스를 건드렸고 누가 또는 무엇이 책임이 있는지 정확히 알려 주므로, 어떤 장애에서든 가장 먼저 확인할 곳입니다.
- 앱 내 콘솔. 설치와 셸 명령은 앱 안의 실제 터미널 윈도우(PTY이므로 암호 입력 요청과 y/n 질문도 동작)에서 실행되며 출력이 실시간으로 표시됩니다. 앱은 명령이 끝나는 시점을 알기 때문에 명령을 실행한 패널을 새로 고칩니다. 콘솔의 동작 막대에서 기록을 내보낼 수 있습니다. 테마는 Overview의 Terminal Style에서 설정합니다.
- 로그 파일. FrontierStack은 자체 로그를
~/Library/Logs/FrontierStack에 기록합니다. 원본 기록이 필요할 때는 Finder에서 이 폴더를 열거나 Console.app에서 읽으십시오. 앱이 무엇을 하고 있었는지 가장 자세히 알 수 있는 기록입니다. 자동 내보내기 기능(Overview ▸ 설정)을 사용하면 이 로그와 변경 로그, 설정 백업을 일정에 따라 폴더로 복사할 수 있습니다.
read_log 도구는 source로 "frontierstack"(~/Library/Logs/FrontierStack의 끝부분 읽기), "os"(시스템 로그), 또는 "nginx", "postfix" 같은 서비스 이름을 받습니다. 연결된 서버에서는 SSH로 읽으며, 출력은 클라우드 모델에 전달되기 전에 길이가 제한되고 비밀 값이 가려집니다(13장).18.4자주 발생하는 문제와 해결 방법
FrontierStack에서 겪는 문제는 대부분 몇 가지 익숙한 유형에 속하며, 앱이 대개 번거로운 작업 대신 버튼으로 해결책을 제시합니다. 아래 표는 보이는 증상에서 녹색으로 돌아가는 가장 빠른 방법을 연결해 줍니다.
| 증상 | 가능한 원인 | 해결 방법 |
|---|---|---|
| 서비스가 시작되지 않습니다. | 포트가 이미 사용 중이거나, 바이너리가 설치되지 않았거나, 구성이 잘못되었습니다. | 서비스 패널을 열고 상태 세부 정보를 읽으십시오. Ports in Use로 충돌을 찾고, Homebrew로 설치하거나 복구하십시오. 웹 서버라면 다시 로드하기 전에 구성을 검증하십시오. AI 관리자의 repair_service는 일반적인 경우를 진단하고 승인을 받아 수정할 수 있습니다. |
| 연결된 서버의 상태 점이 빨간색이며 “Permission denied (publickey)”가 표시됩니다. | 서버가 재설치되었거나, 호스트 키가 바뀌었거나, 앱의 SSH 키가 설치된 적이 없습니다. | Repair SSH access(AI의 repair_ssh_access 도구, 8장)를 실행하십시오. 오래된 호스트 키를 지우고, 보관함 비밀 값으로 저장된 일회용 로그인 암호를 사용해 앱의 관리 키를 다시 설치합니다. 암호는 로컬에서 읽히며 모델에 전송되지 않습니다. 성공하면 점이 녹색으로 바뀝니다. |
| 알림이 도착하지 않습니다. | 채널 구성이 잘못되었습니다. 토큰이 틀렸거나, 발신자가 인증되지 않았거나, 웹훅이 잘못되었습니다. | 알림을 여십시오. 전송별 Delivery Errors 섹션에 어느 채널이 왜 실패했는지 정확히 나옵니다. 자격 증명을 고친 뒤 Clear delivery errors를 누르십시오. 실제로 의존하기 전에 테스트를 보내 확인하십시오(11장). |
| AI가 동작을 거부합니다. | 기본값이 읽기 전용이거나, 특정 서버의 토글이 꺼져 있습니다. | AI 관리자에서 Allow changes(스크립트를 실행하려는 경우 Allow scripts도)를 켜거나, 해당 서버별 토글을 켜십시오. 거부 메시지에 정확한 설정 이름이 나옵니다. 아래를 참조하십시오. |
| Homebrew가 없습니다. | 여러 서비스가 의존하는 패키지 관리자가 설치되어 있지 않습니다. | Homebrew 패널(Overview)을 여십시오. 앱이 Homebrew를 대신 설치해 주며, 이후 각 서비스 패널에서 formula를 클릭 한 번으로 설치할 수 있습니다. |
| 인증서를 신뢰할 수 없습니다. | 시스템이 아직 신뢰하지 않는 자체 서명 인증서나 로컬 인증서입니다. | 로컬 개발용이라면 신뢰할 수 있는 로컬 CA를 설치하는 mkcert로 발급하고, 공개 사이트라면 Let's Encrypt를 사용하십시오. 둘 다 Certificates와 사이트 ▸ TLS 탭에서 관리합니다(7장, 10장). |
| macOS가 FrontierStack에 “호환되지 않는 소프트웨어가 포함되어 있다”고 표시합니다. | 함께 제공되는 El Capitan/Sierra용 모니터 빌드 때문입니다. macOS 26/27은 10.14 이전 로드 명령을 사용하는 이 파일을 경고 대상으로 표시합니다. | 조치할 필요가 없습니다. 이 경고는 참고용이며 앱에는 영향이 없습니다. 아래 참고를 확인하십시오. |
LC_VERSION_MIN_MACOSX 로드 명령을 여전히 출력합니다. 이 파일은 페이로드입니다. 여러분의 Mac에서는 절대 실행되지 않으며, Install & Enroll 중에 SSH를 통해 오래된 Intel 서버로 복사될 뿐입니다. 유니버설 및 Intel 바이너리가 원인이 아닙니다. 앱의 다른 모든 실행 파일은 arm64이거나 최신 유니버설 빌드이며, 앱에는 32비트 코드가 전혀 없습니다. 경고를 닫으십시오. 아무런 문제도 생기지 않습니다.18.5MCP 온보딩과 조치 가능한 거부 메시지
앱은 기회가 처음 생겼을 때 외부 AI 도구가 FrontierStack을 사용할 수 있도록 MCP 서버를 시작할지 — 단 한 번 — 묻습니다. 이 안내는 동작 방식을 알기 쉽게 설명합니다. 서버는 localhost 전용이며 기본적으로 읽기 전용입니다. Start MCP server를 누르면 서버가 켜지고, 같은 시트의 선택형 토글로 그 자리에서 변경을 허용할 수도 있습니다. Not now를 누르면 질문을 받았다는 사실만 기억합니다. 직접 바꾸기 전까지 서버는 꺼진 상태로 유지됩니다(14장).
MCP 패널의 Detected AI clients는 Amp, Grok, Codex CLI, Cursor, Gemini CLI, Claude Code, Claude Desktop, Xcode를 인식합니다. 클라이언트를 하나씩 구성하거나, Set Up Detected를 사용하거나, 실행 시 설정을 활성화하십시오. FrontierStack은 관련 없는 MCP 항목을 모두 그대로 두고 소유자 전용 브리지만 설치하며, Bearer 토큰은 클라이언트 구성이 아니라 키체인에 보관됩니다. Amp 설정은 Amp의 원격 스레드나 터미널 기능을 활성화하지 않습니다. 네트워크에 공개하는 MCP는 별도의 명시적인 선택이며, 페어링되고 범위가 지정된 호출자에게만 TLS로 제공됩니다.
클라이언트가 “connection refused”를 보고하거나 FrontierStack 브리지를 시작하지 못하는 경우(~/Library/Application Support/FrontierStack/mcp-bridge).브리지 자체에는 문제가 없습니다. FrontierStack이 종료되어 있고 백그라운드 서비스도 실행되지 않아 MCP 포트에서 응답하는 프로세스가 없었던 것입니다. 이제 브리지는 첫 호출 시 FrontierStack을 숨긴 상태로 시작하고 기다리므로, 재시작 후 첫 요청은 최대 1분까지 걸릴 수 있습니다. MCP 패널에 백그라운드 서비스를 시작할 수 없다는 경고가 표시되면 Repair Background Service를 클릭하십시오. macOS가 서비스가 등록된 앱 사본에서 실행하기를 거부하고 있었던 것이며, 이는 다시 빌드하거나 앱을 옮긴 뒤에 발생합니다. 이제 각 클라이언트 행에 개별 복구 결과가 표시되며, 설치되지 않은 클라이언트에는 Install…이 표시됩니다.
MCP 패널에 “Address already in use”가 표시되는 경우. 다른 프로세스가 아직 MCP 포트를 점유하고 있습니다. 대개 충돌했거나 멈춘 FrontierStack(이전 빌드 또는 멈춰 버린 백그라운드 서비스)이 포트를 해제하지 않은 경우입니다. FrontierStack은 먼저 몇 초 동안 다시 시도합니다. 그래도 포트가 사용 중이면 Restart 옆의 Free Port…를 클릭하십시오. 해당 프로세스를 찾아 아직 응답하는지 확인합니다. 더 이상 응답하지 않는 FrontierStack 사본이면 확인 대화상자에 이름을 표시한 뒤 중지하고, 해제된 포트에서 MCP를 재시작합니다. 아직 응답하는 사본이나 FrontierStack이 아닌 프로그램은 절대 중지하지 않습니다. 패널에 그 이름이 표시되므로 직접 종료하거나 다른 포트를 선택하십시오.
이는 앱 전체에 걸친 작은 설계 원칙과 연결됩니다. MCP 서버, 앱 단축키, AI 등 외부 접점이 변경을 거부할 때는 단순히 “안 됩니다”라고만 말하지 않습니다. 이유와 어디에서 켜야 하는지를 알려 줍니다. 예를 들어 거부 메시지는 “변경이 꺼져 있습니다 — AI 관리자에서 활성화하십시오”라고 하거나, MCP의 경우 Remote Control & Lock ▸ MCP에서 활성화하십시오라고 안내합니다. 스위치를 직접 켜 주겠다고 제안하는 대신 앱으로 안내하는 이유가 바로 신뢰 모델의 핵심입니다. 원격 에이전트는 요청할 수 있지만, 허가할 수 있는 것은 이 Mac 앞에 있는 여러분뿐입니다. 따라서 거부는 결코 막다른 길이 아니라, 막힌 곳을 풀어 줄 토글 하나를 가리키는 이정표입니다.
18.6메일 문제 해결: 클라이언트가 메일을 보낼 수 없는 경우
메일 장애는 겹겹이 쌓입니다. 인증서 문제가 TLS 문제를 가리고, TLS 문제가 로그인 문제를 가리며, 로그인 문제가 발신자 문제를 가립니다. 순서대로 해결하고, 서버를 조사하기 전에 클라이언트가 이미 가지고 있는 증거부터 읽으십시오.
클라이언트 자체의 기록부터 확인하십시오. Apple Mail에서 윈도우 › 연결 진단 › 세부사항 보기를 선택하십시오. 연결 로깅을 켜 두면 Mail은 모든 기록을 ~/Library/Containers/com.apple.mail/Data/Library/Logs/Mail/에 서버 및 계정별 파일로 보관하므로, 한 시간 전에 실패한 전송도 읽을 수 있습니다. 중요한 줄은 RCPT TO 다음의 응답입니다.
| 기록에 나타나는 내용 | 의미 | 해결 방법 |
|---|---|---|
| 응답이 없고 연결 시간이 초과됩니다. | 발신 서버 이름이 메일을 실행하지 않는 곳을 가리키거나 포트가 차단되어 있습니다. 흔한 원인은 Cloudflare를 통해 프록시되는 DNS 레코드입니다. 주황색 구름은 웹 트래픽만 전달합니다. | dig로 이름을 조회하십시오. Cloudflare 주소가 반환되면 레코드를 DNS only로 설정하십시오. |
| 포트 465에서 연결이 거부됩니다. | 서버가 SMTPS를 제공하지 않습니다. | TLS를 켜고 포트 587 또는 25를 사용하십시오. |
보내기가 회색으로 비활성화되어 있고, 오류도 250-AUTH 줄도 없습니다. | 클라이언트에서 TLS가 꺼져 있고, 서버는 STARTTLS 이후에만 로그인을 제공합니다. | TLS를 켜고, 인증을 암호로 설정하고, 연결 설정 자동 관리의 선택을 해제하십시오. |
554 … Forged sender … must be authenticated | 클라이언트가 로그인하지 않았습니다. 사무실에서는 사무실 네트워크가 신뢰되기 때문에 동작했을 뿐이며, VPN 주소는 대개 신뢰되지 않습니다. | 인증을 암호로 설정하십시오. |
235 Authentication successful 직후의 553 … not owned by user X | 로그인은 성공했지만 X는 해당 From 주소로 보낼 수 없습니다. Mail이 다른 계정의 발신 서버로 대체했거나, 서버의 발신자-로그인 매핑에서 그 주소의 줄에 X가 없는 경우입니다. X는 서버가 로그인에 붙인 이름이며 입력한 이름과 다를 수 있습니다. | 계정 자체의 발신 서버를 바로잡거나, AI 관리자에게 X 추가를 요청하거나(mail_relay › add_sender_login, 여러분의 승인 필요), 매핑에 이미 있는 이름으로 로그인하십시오. |
454 TLS not available due to local problem | 서버의 TLS 구성이 손상되었습니다. | 오래된 서버에서는 프로토콜을 하나하나 지정하십시오. >=TLSv1.2는 절대 쓰지 마십시오. |
| 인증서 경고. | 이름이 인증서의 subjectAltName에 없거나, 유효 기간이 398일을 넘습니다. | 클라이언트가 사용하는 모든 호스트 이름을 넣고 최대 397일로 다시 발급하십시오. |
250 2.0.0 Ok: queued as … | 수락되었습니다. | 아직 배달된 것은 아닙니다. 도착했는지 확인하십시오. |
mynetworks에 등록된 호스트는 발신자 및 로그인 검사를 완전히 건너뛰므로, 사무실에서 한 테스트는 집에 있는 노트북에 대해 아무것도 증명하지 못합니다. 또한 집에서 한 테스트는 로그인한 사용자에 대해 아무것도 증명하지 못합니다. 양쪽 모두 시도하십시오.서버 쪽은 FrontierStack이 대신 처리합니다. 읽기 전용 Scripts 프리셋 Mail: why modern clients can't send (legacy Server.app)은 서버 측 결함을 모두 수정 순서대로 점검하고, 서버의 Mail Server Policy 섹션은 SMTP 정책 전체를 감사하며, AI 관리자는 서버의 로그인 실패를 읽고 위의 수정 사항을 적용할 수 있습니다. 각 변경은 승인 카드를 거칩니다.
18.7메일 암호 추측 공격 차단
인터넷에 노출된 메일 서버는 IMAP, POP, SMTP로 암호를 추측하는 봇에게 24시간 내내 공격을 받습니다. 해법은 fail2ban으로 널리 알려진 방식입니다. 로그인 실패를 감시하다가 계속 실패하는 주소를 차단하는 것입니다. 중요한 것은 임계값을 올바르게 정하고, 자기 쪽 사람은 절대 차단하지 않는 것입니다.
차단하기 전에 측정하십시오. AI 관리자에게 서버의 로그인 실패 기록을 읽도록 요청하십시오. 오래된 Apple Server.app 호스트에서는 /Library/Logs/Mail/mail-err.log에 있으며, Postfix가 Dovecot을 통해 암호를 확인하므로 세 프로토콜이 모두 기록됩니다. 느린 분산 공격을 예상하십시오. 백 개 이상의 주소가 각각 5분에서 30분마다 한 번씩만 시도합니다. fail2ban의 일반적인 규칙인 10분 내 5회 실패로는 거의 잡히지 않으므로, 24시간 기준으로 집계하십시오.
| 서버 | 사용 도구 | 설정 |
|---|---|---|
| Linux | dovecot 및 postfix-sasl jail을 사용하는 fail2ban(또는 CrowdSec). | findtime = 1d, maxretry = 3, bantime.increment = true. 사설 대역과 사무실 IP는 ignoreip에 넣습니다. |
| 오래된 Apple Server.app Mac | Scripts 프리셋 Mail: block password-guessing, fail2ban-style (legacy Server.app). | 기본 내장: 24시간 내 3회 실패 시 1일, 다음은 7일, 그다음은 30일 차단. |
프리셋을 사용하려면 메일 서버를 대상으로 지정하고 Run as root를 켜십시오. 처음에는 시험 실행으로 동작합니다. 차단할 주소를 모두 나열할 뿐 아무것도 변경하지 않습니다. 그 목록을 읽은 다음 MODE를 install로 바꾸고 다시 실행하십시오. 차단 목록은 pf 앵커에 들어가므로 /etc/pf.conf는 전혀 편집되지 않으며, 백그라운드 작업이 1분마다 다시 확인하므로 재부팅해도 차단이 풀리지 않습니다. 시스템 Python을 사용하며 Homebrew가 필요 없습니다.
절대 차단되지 않는 주소도 있습니다. 사설 주소(사무실 네트워크, VPN, Tailscale), /var/db/mailguard/ignore에 있는 모든 주소, 그리고 최근 14일 이내에 로그인에 성공한 주소입니다. 따라서 집에서 암호를 잘못 입력한 사용자는 안전합니다.
실제 트래픽으로 확인하십시오. 10분이 지나면 차단된 주소에서는 새 실패가 없어야 하며, 남은 실패는 아직 확인되지 않은 주소에서 온 것뿐이어야 합니다. 평소에는 sudo /usr/local/mailguard/mailguard.py status로 차단 목록을 보고, unban으로 하나를 해제하며, /var/log/mailguard.log에 각 판단이 기록됩니다. 봇은 포트 25로도 로그인하므로 차단된 주소는 수신 메일을 포함한 모든 포트에서 차단되며, 모든 차단에는 만료 기한이 있습니다. AI 관리자의 Mail Password-Guessing Block 스킬이 이 과정 전체를 안내합니다.
18.8도움 받기
다음 세 가지 자료가 여러분을 지원하며, 바로 이용할 수 있는 순서로 나열했습니다.
- 앱 내 도움말 윈도우. ⌘?를 누르거나 도움말 ▸ FrontierStack 도움말을 선택하면 내장 설명서가 열립니다. AI 기능을 먼저 소개하고 모든 패널과 서비스를 다룹니다. 많은 패널에는 도움말의 해당 섹션을 여는 ? 버튼도 있습니다. 도움말의 “앱에서 열기” 링크를 누르면 설명하는 패널로 바로 이동하며, 도움말은 열린 채로 주 윈도우가 앞으로 나옵니다.
- 웹사이트 도움말 및 FAQ. frontierstack.app/help는 앱 내 설명서를 탐색하기 쉬운 형태로 제공하며, FAQ는 새 사용자가 가장 많이 묻는 질문에 답합니다. 마이그레이션 가이드는 frontierstack.app/migrate에 있습니다.
- 지원 및 피드백. frontierstack.app/support에서 두 가지 간단한 양식으로 팀에 직접 연락할 수 있습니다. 문제가 있을 때는 지원 요청(macOS 버전을 기재하십시오)을, FrontierStack을 더 좋게 만들 아이디어가 있을 때는 기능 요청을 보내십시오. 둘 다 앱을 만드는 사람들에게 바로 전달됩니다.
이것으로 이 설명서를 마칩니다. 여러분은 FrontierStack을 제어판으로, 모니터링 시스템으로, 그리고 AI 관리자로 만나 보았습니다. 웹 스택을 구축하고, 플릿을 연결하고, 경계를 강화하고, 알림을 연결했으며, 서버를 보고 고칠 수 있는 어시스턴트에게 — 신중하게, 여러분의 조건으로 — 열쇠를 넘겨주었습니다. 나머지는 실천입니다. 앱 내 도움말을 위해 ⌘?를 가까이 두고, 최신 정보가 필요하면 frontierstack.app을 방문하고, 다음에 원하는 기능이 있으면 지원을 통해 알려 주십시오. FrontierStack으로 서버를 운영해 주셔서 감사합니다.