Apple이 맥용 WSL을 만들었습니다 (컨테이너 머신)

BBetter Stack
컴퓨터/소프트웨어AI/미래기술

Transcript

00:00:00올해 WWDC에서 애플 인텔리전스 관련 소식들에 가려져,
00:00:03애플은 조용히 '컨테이너 머신(Container Machines)'이라는
00:00:06자체적인 Windows Subsystem for Linux 버전을 출시했습니다. 이는 매우 간편한
00:00:10방식으로 Mac에서 가볍고 지속적인 리눅스 환경을 제공하며,
00:00:14작년에 출시된 도커(Docker) 대안인 애플의 컨테이너 프로젝트 기반으로 만들어졌고,
00:00:18물론 모두 애플 실리콘에 최적화되어 있습니다. 그럼 컨테이너 머신이 무엇이고,
00:00:21어떻게 작동하는지 살펴보고, 놓치신 분들을 위해 애플 컨테이너도 간단히 정리해 보겠습니다.
00:00:29먼저 컨테이너 머신을 설정해 보고, 이것이 어떻게 작동하는지 설명해 드리겠습니다.
00:00:32저는 우분투 리눅스 환경을 원합니다. 그래서 간단히
00:00:37우분투 이미지가 담긴 도커 파일과 몇 가지 일반적인 도구를 설치하는 설정 파일이 여기 있습니다.
00:00:41이것은 OCI 호환 이미지라면 무엇이든 작동하므로, 도커와 함께 사용하는
00:00:46거의 모든 이미지에서 작동합니다. VM이 되기 위해 포함되어야 할 유일한 것은 시스템 초기화
00:00:50프로그램뿐입니다. VM으로 사용할 도커 파일 이미지가 준비되면, 필요한 것은
00:00:54애플의 컨테이너 도구를 사용하여 빌드하는 것뿐입니다. 보시다시피 제가 사용하는 명령어는 이렇습니다.
00:00:58이 폴더에 도커 파일이 있으니 단순히 이것을 'local
00:01:01Ubuntu machine'으로 태그하고 엔터를 눌러 빌드하겠습니다. 참고로 컨테이너 도구는
00:01:05macOS 26 이상에서 작동하며, GitHub 저장소의 릴리스 페이지로 이동하여
00:01:09최신 패키지를 다운로드하여 간단히 설치할 수 있습니다. 이미지 빌드가
00:01:13끝났네요. 도커와 매우 비슷하게 작동하며, OCI 이미지를 빌드하는 것뿐입니다.
00:01:17컨테이너 머신에 필요한 것은 그게 전부입니다. 이제 단순히 'container machine create'를 실행하고,
00:01:21컨테이너 머신에 사용할 이미지와 기억하기 쉬운 이름을 지정한 다음,
00:01:24기본값으로 설정하겠습니다. 그러면 명령어를 실행할 때마다 이름으로
00:01:27일일이 지정하지 않아도 이 컨테이너 머신에서 실행된다고 가정하게 됩니다. 이 상태로 엔터를 치면
00:01:31말 그대로 몇 초 만에 모든 설정이 완료됩니다. 'container machine list'를 실행하면
00:01:35방금 생성한 컨테이너 머신에 대한 정보를 확인할 수 있습니다. 보시다시피
00:01:38방금 만든 우분투 환경, IP 주소, CPU 7개, 메모리 18GB가 표시됩니다. 참고로 CPU와 메모리는
00:01:44설정할 수 있지만, 기본값은 Mac 메모리의 절반을 사용합니다. 컨테이너 머신을 실제로 사용하려면
00:01:48단순히 'container machine run'을 입력하면 됩니다.
00:01:51대화형 터미널로 진입하려면 이를 비워두거나, 리눅스 머신에서 명령어를
00:01:54실행하고 싶다면 명령어 뒤에 추가할 수도 있습니다. 여기서는 단순히 엔터를 눌러
00:01:58리눅스 환경의 대화형 터미널로 진입했습니다. 'uname -a'와 같은 명령어를 실행하여
00:02:02확인할 수 있는데, Mac에서 실행할 때 나오는 Darwin 대신 Linux Ubuntu가 출력되는 것을 볼 수 있습니다.
00:02:06이제 컨테이너 머신의 멋진 기능 중 하나는 자동 사용자 공유입니다. 제 Mac의
00:02:10사용자 정보가 리눅스 환경으로 복사되었고, 홈 디렉토리도 마찬가지입니다.
00:02:14사용자의 전체 홈 디렉토리가 읽기-쓰기 권한으로 마운트되므로, Mac에 있는 모든
00:02:18파일에 리눅스 환경에서 접근할 수 있습니다. 'container run'을 실행했을 때 리눅스 환경의
00:02:23해당 파일로 바로 진입했는데, 이미 파일들이 그 안에 있는 것을 볼 수 있죠.
00:02:27자체 볼륨도 가지고 있어서, 우분투 머신의 홈 디렉토리로 이동해 보면
00:02:31현재 아무것도 없는 것을 확인할 수 있습니다. Mac에는 파일이 있는데도 말이죠.
00:02:35왜냐하면 이곳은 리눅스 환경이고, 리눅스 전용 도트 파일(.files)을 넣는 곳이기 때문입니다.
00:02:39폴더 공유 기능 덕분에 Mac의 모든 일반적인 도구를 사용하여 개발하고,
00:02:43심지어 macOS에서만 호환되는 도구를 사용할 수도 있으며, 테스트가 필요할 때는 단순히 리눅스로 전환하면 됩니다.
00:02:48예를 들어, 저는 여기 아주 간단한 BUN 애플리케이션이 있는데,
00:02:52이것을 리눅스에서 작동하는 단일 실행 파일로 컴파일하고 싶지만, macOS에서는 리눅스를 테스트할 수 없습니다.
00:02:56그래서 이것을 실행하면 작동하는지 알 수 없습니다. 컨테이너 머신으로 전환하면,
00:03:01파일을 전송할 필요 없이 바로 명령어를 실행할 수 있습니다.
00:03:04파일 시스템을 공유하기 때문이죠. 여기서 엔터를 치면 아주 잘 작동합니다.
00:03:08이 애플리케이션은 간단한 웹 서버와 웹 페이지로 되어 있는데,
00:03:12현재 무엇이 실행 중인지 출력합니다. 우분투 24에서 실행 중이네요.
00:03:16구독 버튼도 보이는데, 여러분도 꼭 구독해 주세요. 지금 리눅스 환경에서
00:03:20BUN 개발 서버를 실행해 보고 있는데 아주 잘 작동합니다.
00:03:23여기 보시다시피 'BUN dev'로 실행 중이고 컴파일된 상태는 아닙니다.
00:03:27하지만 Mac에서 소스 파일 중 하나를 수정하면,
00:03:31예를 들어 'subscribe' 대신 'hello'로 바꾸면 핫 리로딩이 작동하지 않아서
00:03:35변경 사항을 적용하려면 BUN 개발 서버를 재시작해야 합니다.
00:03:39됐네요. 이제 'hello'라고 나옵니다. 핫 리로딩도 중단점(breakpoint)과 마찬가지로
00:03:43macOS 버전 코드에서는 제대로 작동하지 않는 것 같습니다. 하지만 편집기를 사용하여
00:03:47SSH로 컨테이너 머신에 연결한 후 파일을 편집하면 중단점과 핫 리로딩이 아마도 잘 작동할 겁니다.
00:03:52문서에 이 방법에 대한 튜토리얼도 있습니다. 컨테이너 머신을 사용할 때
00:03:55알려드릴 내용은 기본적으로 이게 전부입니다. 그냥 우분투 환경이고,
00:03:59솔직히 전체적인 경험은 꽤 매끄럽습니다. 머신 하나만 사용할 수 있는 것은 아니라는 점도 알아두세요.
00:04:03Alpine, Ubuntu, Debian 머신을 나란히 두고
00:04:08타겟당 하나씩 운영할 수 있어 교차 타겟 작업을 할 때 정말 좋습니다.
00:04:12게다가 이 머신들은 실제 'SystemD'를 실행할 수 있어서 적절한 서비스 스택을 테스트할 수 있습니다.
00:04:17Postgres를 앱 옆에 실제 서비스로 실행하여 배포할 리눅스 서버와 똑같이
00:04:22동작하게 할 수 있죠. 단순함은 애플이 컨테이너 머신을 개발할 때
00:04:26밀어붙인 핵심 설계 원칙 중 하나입니다. 그들은 빠르고 가벼운 VM이
00:04:30기존 워크플로우에 통합되고, 필요할 때 즉시 생성할 수 있으며,
00:04:34시간이 지나도 유지되는 VM을 원했습니다. Windows Subsystem for
00:04:39Linux가 달성하고자 했던 것과 꽤 비슷합니다. 이것이 어떻게 만들어졌고,
00:04:42도커나 OrbStack과 어떻게 비교되는지 이해하려면, 작년에 출시된 컨테이너 도구를 먼저 이해해야 합니다.
00:04:47이것은 Swift로 작성되었으며 컨테이너를 실행할 수 있는 도커 대안을 목표로 합니다.
00:04:51표준 OCI 이미지를 실행하므로 Docker Hub에서 가져온 것이라면 무엇이든 작동합니다.
00:04:55애플의 접근 방식 중 독특한 점은 각 컨테이너가
00:04:59가상화 프레임워크를 통해 각자의 가벼운 가상 머신을 가진다는 점입니다.
00:05:04도커 데스크톱처럼 하나의 큰 리눅스 VM을 컨테이너들이 공유하는 것과는 다르죠.
00:05:08이러한 방식의 장점으로는 각 컨테이너가 완전한 VM 수준의 격리 특성을 가지므로 보안성을 높일 수 있습니다.
00:05:13또한 필요한 데이터만 각 VM에 마운트하므로 프라이버시 측면에서도 유리합니다.
00:05:17공유 VM에서는 모든 데이터를 그 VM에 마운트한 뒤 개별 컨테이너로 선택적으로 마운트해야 하기 때문입니다.
00:05:22마지막으로, 애플 컨테이너를 사용하여 생성된 컨테이너가
00:05:27전체 VM보다 메모리를 덜 사용하고, 부팅 시간도 도커 등 다른 도구와 비슷하다는 성능상의 이점도 있습니다.
00:05:31RepoFlow가 수행한 애플 컨테이너와 OrbStack, 도커 데스크톱을 비교한 벤치마크 결과를 보면
00:05:36결과가 나쁘지 않습니다. 여기서는 확인하기 어렵지만, 애플 컨테이너는
00:05:41가장 높은 단일 스레드 CPU 점수를 기록했으며, OrbStack도 거의 차이가 없었습니다.
00:05:46다중 스레드에서도 마찬가지로 모두 매우 뛰어난 성능을 보여줍니다.
00:05:50애플이 조금 앞서는 부분은 메모리 처리량인데, OrbStack이 2위, 도커 데스크톱이
00:05:55마지막입니다. 하지만 작은 컨테이너의 시작 시간 측면에서는 애플이 개선할 점이 있어 보입니다.
00:06:00물론 1초 미만이긴 하지만 도커 데스크톱과 OrbStack은 0.25초 이내에 완료하니까요.
00:06:04더 많은 벤치마크 결과가 있으니 링크를 남겨두겠습니다.
00:06:09기본적으로 OrbStack이 파일 시스템과 작은 파일 처리에 뛰어난 성능을 보이지만,
00:06:14애플 컨테이너도 도커 데스크톱과 비슷하거나 더 나은 수준임을 보여줍니다.
00:06:17하지만 컨테이너 머신을 사용하기 전에 몇 가지 알아야 할 단점이 있습니다.
00:06:22첫 번째는 메모리입니다. 앞서 언급했듯이 머신은 시스템 RAM의 절반을
00:06:27기본으로 사용하는데, 실제로는 이 메모리를 절대 반환하지 않는다는 점을 알아야 합니다.
00:06:30따라서 대규모 빌드처럼 메모리를 많이 사용하는 작업을 할 때, 해당 메모리는
00:06:35머신을 재시작하기 전까지 계속 점유됩니다. 이는 동적 메모리 기능을 갖춘
00:06:39OrbStack의 독보적인 장점이죠. 사용하지 않는 메모리를 macOS로
00:06:43돌려줍니다. 제가 알기로는 다른 도구는 이런 기능이 없습니다.
00:06:47두 번째는 GPU 및 USB 패스스루가 없습니다. GitHub에서 이에 대한 오픈 이슈를
00:06:53봤으니 미래에는 지원될지도 모르겠네요. 세 번째는 GUI 앱을
00:06:57실행하는 것이 조금 복잡해 보입니다. 리눅스 버전 VS Code 등을 실행하고
00:07:02싶을 때 말이죠. 확실히 매끄러운 경험은 아니니 다른 것을 쓰는 게 낫겠네요.
00:07:06마지막으로 보안상 주의할 점이 있습니다. 아까 말씀드린 홈 디렉토리 마운트가
00:07:11기본적으로 읽기-쓰기 권한이라, 리눅스 머신 안에서 실행하는
00:07:15모든 것이 여러분의 Mac에 있는 SSH 키나 클라우드 자격 증명 등에 접근할 수 있다는 뜻입니다.
00:07:20마운트를 읽기 전용으로 설정하거나 완전히 끌 수는 있는 것 같은데,
00:07:25특정 폴더만 마운트하는 기능은 없어 보입니다. 전반적으로 애플
00:07:29컨테이너 머신을 써본 결과, 저는 여전히 OrbStack을 계속 사용할 것 같습니다.
00:07:33더 나은 리소스 관리와 많은 기능을 갖춘 더 세련된 옵션이라고 생각하기 때문이죠.
00:07:37상업적 이용을 하려면 OrbStack이 유료라는 점을 싫어하시는 분들도 계시겠지만,
00:07:40OrbStack을 제외한다면 저라면 도커 데스크톱보다는 애플 컨테이너를 선택할 것 같고,
00:07:45Lima라는 또 다른 좋은 대안도 있습니다.
00:07:49여러분은 무엇을 사용하시나요? OrbStack, 도커 데스크톱, 아니면 Lima인가요?
00:07:53댓글로 알려주시고 구독도 잊지 마세요. 그럼 다음 영상에서 뵙겠습니다.

Key Takeaway

애플의 컨테이너 머신은 macOS에서 리눅스 환경을 네이티브하게 구현하는 가벼운 VM 솔루션으로, 격리된 가상화 환경을 제공하지만 메모리 관리 및 보안 정책 측면에서 기존 서드파티 도구와 차별화된다.

Highlights

  • 애플은 macOS에서 OCI 호환 이미지를 실행하는 가벼운 리눅스 환경인 '컨테이너 머신(Container Machines)'을 출시했다.

  • 각 컨테이너는 애플 가상화 프레임워크를 통해 독립적인 가상 머신(VM)에서 실행되어 VM 수준의 격리성과 보안을 제공한다.

  • 기본 설정 시 Mac 시스템 메모리의 절반을 사용하며, 컨테이너 머신을 재시작하기 전까지 점유된 메모리를 macOS에 반환하지 않는다.

  • 기본적으로 Mac의 전체 홈 디렉토리가 읽기-쓰기 권한으로 마운트되어 리눅스 환경에서 Mac 파일에 직접 접근할 수 있다.

  • 실제 SystemD 실행을 지원하여 배포 환경과 동일한 서비스 스택 테스트가 가능하다.

Timeline

컨테이너 머신 개념 및 설정

  • 컨테이너 머신은 OCI 호환 이미지를 사용하여 가벼운 리눅스 환경을 생성한다.
  • macOS 26 이상 환경에서 별도의 패키지 설치를 통해 즉시 사용할 수 있다.
  • 명령어 한 번으로 시스템 초기화 프로그램을 포함한 VM을 수 초 내에 생성 가능하다.

애플 실리콘에 최적화된 이 기능은 도커와 유사한 방식으로 동작하며, OCI 호환 이미지를 사용하여 시스템 초기화 프로세스가 포함된 VM을 구성한다. 설정 과정은 매우 간소화되어 있어, 이미지 빌드 후 'container machine create' 명령어를 실행하면 즉시 환경 구축이 완료된다.

파일 공유 및 개발 워크플로우

  • Mac 홈 디렉토리가 읽기-쓰기 권한으로 컨테이너에 자동 마운트된다.
  • 교차 타겟 작업을 위해 여러 리눅스 배포판 머신을 동시에 실행할 수 있다.
  • 실제 SystemD 서비스를 실행하여 배포 환경과 동일한 테스트를 수행할 수 있다.

Mac과 리눅스 환경 간의 파일 시스템 공유는 별도의 파일 전송 없이 개발 및 테스트를 가능하게 한다. 리눅스 전용 개발 도구 테스트를 위해 맥에서 소스 파일을 수정하면 리눅스 환경에서 즉각 반영되며, 여러 개의 배포판 머신을 병렬로 운용하여 복합적인 서버 환경을 구축할 수 있다.

성능 벤치마크 및 기술적 차별점

  • 각 컨테이너가 개별 VM을 가지는 구조로 보안성과 프라이버시가 향상된다.
  • 단일 스레드 CPU 성능에서 타 도구 대비 우수한 벤치마크 결과를 기록했다.
  • 메모리 처리량에서 도커 데스크톱 및 OrbStack보다 앞선 수치를 보인다.

도커 데스크톱과 달리 컨테이너마다 가상화 프레임워크 기반의 VM을 할당하여 격리 수준을 높였다. 벤치마크 결과, 메모리 처리와 단일 스레드 성능에서 강점을 나타내지만, 초기 구동 시간은 0.25초 수준인 타 솔루션에 비해 다소 개선이 필요한 상태다.

단점 및 사용 고려 사항

  • 기본 할당된 메모리를 재시작 전까지 macOS로 반환하지 않는 리소스 관리 문제가 있다.
  • 현재 GPU 및 USB 패스스루 기능이 지원되지 않는다.
  • 홈 디렉토리의 기본 읽기-쓰기 권한 마운트로 인해 보안 설정 확인이 필요하다.

동적 메모리 할당을 지원하는 OrbStack과 달리 메모리 점유 방식이 정적이어서 대규모 빌드 시 리소스 효율이 낮을 수 있다. 또한 GUI 앱 실행의 복잡성과 보안상 이유로 홈 디렉토리 마운트 권한을 조정해야 하는 등 상업적 활용 시 고려해야 할 기술적 제약들이 존재한다.

Community Posts

View all posts