zhaoJian의 기술 노트

Defaultly로 Mac 기본 앱을 한 번에 설정하고 .env, Dockerfile 같은 확장자 없는 파일도 편집기로 열기

기술 약 6520자 · 17분 소요 - 조회

Mac에서 코드를 쓰다 보면 .env, .gitignore, Dockerfile처럼 확장자가 없는 파일이 늘 골칫거리였습니다. 더블 클릭하면 텍스트 편집기로 열리거나 아예 열리지 않습니다. Finder의 ‘정보 가져오기 › 다음으로 열기 › 모두 변경…’으로 VS Code나 Zed로 바꿔도 소용이 없고, ‘항상 선택한 응용 프로그램으로 열기’는 선택한 파일 하나에만 적용됩니다.

이유는 macOS가 확장자 없는 파일 대부분을 public.data로 분류하고, 어떤 앱도 이 유형의 기본 앱이 되지 못하게 막기 때문입니다. 명령줄 도구로 바꾸려 해도 -50 오류만 납니다.

또 하나의 문제는 파일 연결을 자주 빼앗긴다는 점입니다. 새 앱(대표적으로 Xcode)을 설치하면 설정해 둔 파일 연결을 그 앱이 가져갈 수 있는데, macOS는 알려 주지도 않고 한 번에 되돌릴 방법도 없습니다. 형식 하나하나 다시 바꿔야 하고, macOS 26.4부터는 유형을 하나 바꿀 때마다 확인까지 해야 합니다.

그래서 Defaultly를 만들었습니다. 무료 오픈 소스 macOS 기본 앱 관리 도구로, 파일 유형, 확장자, 링크의 기본 앱을 윈도우 하나에서 모두 관리합니다.

Defaultly 메인 윈도우 스크린샷: 파일 유형 탭에 텍스트, Markdown, 코드, 설정 및 데이터, 확장자 없는 파일, PDF, 문서 등의 그룹이 있고 각 그룹 오른쪽에서 기본으로 열 앱을 선택

Defaultly로 할 수 있는 것

  • 그룹별 기본 앱 설정: 파일 유형은 용도에 따라 텍스트, Markdown, 코드, 설정 및 데이터, 확장자 없는 파일, PDF, 문서, 이미지, 비디오, 오디오, 압축 파일로 나뉘고, 그룹마다 앱 메뉴가 하나씩 있습니다. 그룹 전체를 한 번에 설정하며 하나씩 확인할 필요가 없고, 몇 초 안에 반영됩니다.
  • 확장자 없는 파일: .env, Dockerfile, .gitignore, .npmrc를 원하는 편집기로 열 수 있습니다. 그 편집기가 이런 파일 지원을 선언하지 않았더라도 상관없습니다.
  • 형식별 예외: 그룹을 펼쳐 .md, .py 같은 개별 형식에 따로 앱을 지정할 수 있고, 나중에 그룹의 앱을 바꿔도 영향을 받지 않습니다.
  • 사용자 지정 확장자: 목록에 없는 확장자를 추가할 수 있습니다. macOS가 임시 유형으로만 인식하는 .go, .rs, .kt, .dart, .lua도 포함됩니다.
  • 링크의 기본 앱: 웹(http, https), 이메일(mailto), 캘린더 구독(webcal), 전화, 문자 메시지, FaceTime, SSH, FTP, 화면 공유 모두 기본 앱을 고를 수 있습니다. ‘열지 않음’을 선택해서, 예를 들어 웹 페이지의 전화번호를 클릭해도 전화가 걸리지 않게 할 수도 있습니다.
  • 진단: 파일을 끌어다 놓으면 왜 특정 앱으로 열리는지 확인하고 그 자리에서 다른 앱으로 바꿀 수 있습니다. 폴더를 끌어다 놓으면 개별로 ‘다음으로 열기’가 설정된 파일을 찾아 지울 수 있습니다.
  • 연결을 빼앗겼을 때 알림: Xcode, 브라우저 등이 설정해 둔 연결을 가져가면 Defaultly가 배너를 띄우고, 클릭 한 번으로 되돌릴 수 있습니다.
  • 실행 취소와 복원: 변경할 때마다 미리 스냅샷을 저장합니다. ⌘Z로 실행 취소할 수 있고, Defaultly를 처음 열기 전 상태로 복원할 수도 있으며, 복원 전에 각 변경 사항을 미리 보여 줍니다.
  • 깔끔한 제거: 내장된 제거 기능이 모든 연결을 원래 앱으로 되돌린 다음 자기 자신을 휴지통으로 옮깁니다.
  • 15개 언어: 인터페이스는 중국어 간체, 중국어 번체, 영어, 일본어, 한국어 등 15개 언어를 지원하며 앱 안에서 바꿀 수 있습니다.

Defaultly는 백그라운드에서 실행되지 않고, 로그인 항목도 없으며, 네트워크에 연결하지 않고, 데이터도 수집하지 않습니다.

Defaultly 설치

macOS 26 Tahoe 이상이 필요합니다.

  1. Releases 페이지를 열고 최신 버전의 Assets에서 Defaultly-<version>.dmg를 다운로드합니다.
  2. DMG를 더블 클릭해 열고, Defaultly를 같은 윈도우에 있는 ‘응용 프로그램’ 폴더로 드래그합니다.
  3. DMG를 추출하고 ‘응용 프로그램’ 폴더에서 Defaultly를 엽니다.

설치 프로그램도 없고 관리자 암호도 필요 없습니다. 업데이트할 때는 새 DMG를 받아 다시 드래그해서 이전 버전을 덮어쓰면 되고, 설정, 규칙, 스냅샷은 모두 유지됩니다.

처음 실행: 공증되지 않은 앱 허용하기

Defaultly는 아직 Apple의 공증을 받지 않아서 처음 열 때 macOS가 차단합니다. 한 번만 허용하면 됩니다.

  1. Defaultly를 더블 클릭하고, macOS가 확인할 수 없다고 하면 ‘완료’를 클릭합니다. 파란색 ‘휴지통으로 이동’은 누르지 마세요.

    macOS가 Defaultly를 확인할 수 없다고 표시하는 대화상자, 완료 버튼 클릭

  2. ‘시스템 설정 › 개인정보 보호 및 보안’을 열고 ‘보안’까지 스크롤한 다음, Defaultly 옆의 ‘그래도 열기’를 클릭합니다. 이 버튼은 1단계 후 약 1시간 동안 표시됩니다.

    시스템 설정의 개인정보 보호 및 보안 화면, 보안 항목에서 Defaultly가 차단되어 있고 옆에 그래도 열기 버튼이 있음

  3. 로그인 암호를 입력하거나 Touch ID를 사용한 뒤, 이어서 나오는 대화상자에서 ‘그래도 열기’를 한 번 더 클릭합니다.

    확인 대화상자, 그래도 열기를 클릭해 Defaultly 실행

이후에는 Defaultly가 정상적으로 열리고, 내장된 도우미도 함께 허용되어 확장자 없는 파일을 열 때 더 이상 묻지 않습니다. 스크린샷은 영어 화면이며, 한국어 macOS의 버튼 이름은 위에 적은 것과 같습니다.

사용 방법

.env, Dockerfile을 편집기로 열기

‘파일 유형’ 탭에서 ‘확장자 없는 파일’ 그룹을 찾아 오른쪽 메뉴에서 편집기(VS Code, Zed, Sublime Text 등)를 선택하고, 윈도우 아래쪽의 ‘적용’을 클릭합니다. 그다음부터 .env, Dockerfile 같은 파일을 더블 클릭하면 바로 그 편집기로 열립니다.

코드 파일의 기본 편집기 한 번에 설정하기

같은 방법으로 ‘코드’, ‘설정 및 데이터’, ‘Markdown’ 같은 그룹에 앱을 고르고 ‘적용’을 클릭합니다. 코드 그룹은 JavaScript, TypeScript(.tsx), Python, Java, C, C++, C#, PHP, Ruby, Swift, Go, Rust, Kotlin, Dart, Lua, Shell, PowerShell, SQL 등 자주 쓰는 언어를 다루며, macOS 공식 유형이 없는 .go, .rs도 포함됩니다.

특정 형식만 예외로 두고 싶으면 그룹 행을 클릭해 펼치고 그 행의 메뉴에서 다른 앱을 고르면 됩니다. 해당 행에는 ‘개별 설정’ 표시가 붙습니다. 다시 그룹을 따르게 하려면 ‘그룹 설정 따르기’를 선택합니다.

확장자 검색하고 추가하기

오른쪽 위 검색 필드에 py나 env 같은 확장자를 입력하면 해당 행으로 바로 이동합니다. 어떤 그룹에도 없는 확장자라면 검색 결과에 ‘추가…’가 나타납니다. 확장자를 입력하면 Defaultly가 macOS에서 그것을 무엇으로 인식하는지 보여 주고 넣을 그룹을 추천해 주니, ‘추가’를 클릭하면 끝입니다.

기본 브라우저와 이메일 앱 설정하기

파일 유형 아래에 ‘링크’ 카드가 있어서 웹 브라우저, 이메일, 캘린더 구독, 전화, SSH 등의 링크를 어떤 앱으로 열지 정할 수 있습니다. 브라우저를 바꿀 때는 macOS가 여전히 시스템 대화상자로 확인을 요청하는데, 브라우저가 몰래 하이재킹되는 것을 막기 위해서입니다.

적용, 실행 취소, 복원

모든 변경 사항은 먼저 대기 상태로 보관되고, 윈도우 아래쪽에 적용 대기 중인 변경 사항 수가 표시됩니다. ‘적용’을 누르면 반영되고 ‘버리기’를 누르면 취소됩니다.

  • ‘편집 › 실행 취소’(⌘Z)로 마지막 적용을 취소할 수 있고, 연속으로 여러 번 취소할 수 있습니다.
  • 도구 막대의 둥근 화살표 버튼이 ‘초기 상태로 복원’입니다. Defaultly가 바꾼 모든 파일 유형과 링크를 Defaultly를 처음 열었을 때의 앱으로 되돌리며, 실행 전에 각 변경 사항을 나열해 줍니다.
  • ‘설정 › 기록’에 최근 스냅샷 20개가 저장되어 있고, 어느 것이든 복원할 수 있습니다.

파일이 왜 이 앱으로 열리는지 진단하기

‘진단’ 탭으로 전환해 파일을 점선 상자에 끌어다 놓으면, 어떤 앱이 그 파일을 여는지와 그 이유가 표시됩니다. 이 파일에 Finder에서 개별로 ‘다음으로 열기’를 설정했는지, 이런 종류의 파일에 직접 그 앱을 골랐는지, 아니면 아무것도 설정하지 않아 macOS가 알아서 고른 것인지 알 수 있습니다. 결과 아래에서 ‘대신 사용할 앱’으로 바로 다른 앱으로 바꿀 수 있습니다.

폴더를 끌어다 놓으면 Defaultly가 그 안에서 개별로 ‘다음으로 열기’가 설정된 파일을 모두 나열합니다. 선택한 뒤 ‘개별 설정 제거’를 클릭하면 그 파일들은 해당 유형의 설정을 따르게 됩니다.

Defaultly의 작동 방식

Defaultly 앱 번들 안에는 Defaultly Helper라는 아주 작은 도우미 앱이 들어 있습니다. 확장자 없는 파일에 편집기를 고르면 Defaultly는 public.data를 이 도우미로 지정합니다. 그런 파일을 열면 도우미가 파일 내용을 확인해서 텍스트 파일은 선택한 편집기로 넘기고, 바이너리 파일은 Finder에서 보여 준 다음 종료합니다. 윈도우가 없고 백그라운드에 상주하지도 않으며, 1초도 안 되는 유휴 시간 후에 종료됩니다.

.md, .py처럼 선택한 앱이 원래 지원하는 유형은 도우미를 거치지 않고 그 앱에 바로 지정됩니다.

macOS에는 public.data의 기본 앱을 설정하는 공개 API가 없어서, Defaultly는 모든 파일 유형 변경 사항을 LaunchServices 환경설정에 한 번에 기록하고 lsd 서비스를 한 번 재시작해 반영합니다. 이 방식은 Apple 공식 문서가 없어서 시스템 업데이트 후 동작하지 않을 수 있습니다. 어떤 변경이 반영되지 않으면 Defaultly는 공개 API로 대체하고(하나씩 확인해야 함), 확장자 없는 파일은 ‘설정’의 폴더 규칙을 대신 쓸 수 있습니다.

자주 묻는 질문

Mac에서 확장자 없는 파일의 기본 앱은 어떻게 바꾸나요? Defaultly를 열고 ‘확장자 없는 파일’에 앱을 선택한 다음 ‘적용’을 클릭하세요. 이후 .env, Dockerfile 같은 파일이 그 앱으로 열립니다.

Finder의 ‘모두 변경’이 .env 파일에 먹히지 않는 이유는 뭔가요? macOS는 이런 파일을 일반 데이터(public.data)로 취급하며, 공개 API로 기본 앱을 바꾸지 못하게 막습니다. Defaultly는 도우미 앱으로 이 제한을 우회합니다.

.ts 파일은 왜 코드 그룹에 없나요? macOS는 .ts를 비디오 형식(MPEG-2 전송 스트림)으로 인식하기 때문에, 이것을 바꾸면 실제 비디오 파일에도 영향을 줍니다. 그래서 코드 그룹에는 TypeScript의 .tsx만 들어 있습니다.

모든 변경 사항을 되돌릴 수 있나요? 네. Defaultly는 처음 실행할 때 원래 연결을 기록하고 그 기록을 절대 덮어쓰지 않습니다. ‘초기 상태로 복원’은 바꾼 모든 유형을 원래 앱으로 되돌립니다.

어떻게 제거하나요? ‘설정 › Defaultly가 기록한 항목’ 아래쪽에서 ‘Defaultly 제거…’를 클릭하세요. 바꾼 연결을 모두 되돌린 다음 자기 자신을 휴지통으로 옮깁니다.

개발자 모드, 규칙, 폴더 규칙 등 더 자세한 내용은 프로젝트의 한국어 README를 참고하세요.

GitHub 프로젝트 주소: https://github.com/zhaojiannet/defaultly

공유:

댓글