트렌드브리프
Metal이란? 애플 GPU를 직접 다루는 저수준 API

Metal이란? 애플 GPU를 직접 다루는 저수준 API

게시 · 최종 업데이트 · 약 5분 분량

AI 요약

Metal은 애플이 만든 저수준 그래픽·연산 프레임워크로, iOS와 macOS에서 GPU를 직접 제어해 고성능 렌더링과 병렬 연산을 처리한다. 핵심 개념과 주니어 개발자가 학습을 시작하는 순서를 정리했다.

목차
  1. Metal 프레임워크는 무엇을 하는 도구인가
  2. 언제 Metal을 직접 써야 하나
  3. 핵심 구성 요소 살펴보기
  4. 주니어 개발자가 시작하는 순서

Metal은 애플이 만든 저수준 그래픽·연산 프레임워크다. iOS와 macOS를 비롯한 애플 플랫폼에서 GPU에 가까운 수준으로 명령을 보내 화면을 그리거나 많은 양의 계산을 병렬로 처리한다. 과거 OpenGL이 맡던 자리를 이어받는 흐름에서 등장했고, 지금은 애플 기기에서 고성능 그래픽과 GPU 연산을 다루는 기본 선택지로 자리 잡았다. 애플은 2018년 6월 macOS 10.14 모하비를 발표하면서 OpenGL과 OpenCL을 지원 중단 예정(deprecated) 기술로 분류하고, 그래픽은 Metal, 연산은 Metal Performance Shaders로 옮기라고 안내했다.

Metal 프레임워크는 무엇을 하는 도구인가

GPU를 직접 부리는 도구다. 게임 화면을 초당 수십 번 그려내는 렌더링이 대표적인 쓰임새다. 이미지 필터나 물리 시뮬레이션처럼 같은 연산을 수많은 데이터에 한꺼번에 적용하는 병렬 계산도 여기에 든다. CPU가 일을 순서대로 처리한다면 GPU는 비슷한 작업을 잘게 나눠 동시에 굴린다. Metal은 그 GPU에 무엇을 시킬지 세밀하게 지시하는 통로 역할을 한다.

애플은 Metal을 2014년 세계 개발자 회의(WWDC)에서 공개했다. 이후 셰이더 언어인 Metal Shading Language, GPU 연산을 돕는 Metal Performance Shaders, 화면 출력과 자원 관리를 거들어 주는 MetalKit 같은 요소가 함께 자리를 잡았다. 버전이 올라가면서 지원 범위와 도구도 꾸준히 넓어졌다. 가장 최근 판은 애플이 WWDC 2025에서 공개한 Metal 4로, 애플 개발자 문서에 따르면 A14 비오닉이나 M1 이상 칩에서 동작한다. 하나의 거대한 라이브러리라기보다 그래픽과 연산을 다루는 여러 도구가 묶인 꾸러미에 가깝다. 참고로 크롬·플러터처럼 여러 플랫폼을 지원하는 소프트웨어는 Skia 같은 크로스플랫폼 2D 엔진을 사이에 두고 각 플랫폼의 GPU 층으로 내려가는 구조를 쓴다.

언제 Metal을 직접 써야 하나

대부분의 앱은 Metal을 직접 만질 일이 없다. 버튼과 목록을 배치하고 애니메이션을 넣는 일반적인 화면은 UIKit이나 SwiftUI가 안에서 알아서 GPU를 활용한다. 그 위에서 개발자가 Metal 코드를 손으로 짤 이유는 거의 없다.

직접 써야 하는 순간은 성능의 한계에 부딪혔을 때다. 복잡한 3D 게임을 만들거나, 실시간 카메라 영상에 무거운 필터를 얹거나, 기기 안에서 대규모 연산을 빠르게 돌려야 할 때 Metal이 후보에 오른다. 상용 게임 엔진이나 영상 처리 라이브러리도 안에서 Metal을 쓰는 경우가 많다. 실제로 유니티 매뉴얼은 iOS·tvOS·macOS 빌드에서 Metal이 기본 그래픽 API로 켜진다고 명시한다. 유니티로 만든 아이폰 게임이라면 개발자가 의식하지 않아도 Metal 위에서 돌아간다는 뜻이다. 프레임워크를 직접 다루지 않더라도 무엇이 아래에서 돌아가는지 알아두면 성능 문제를 추적할 때 도움이 된다.

실무에서는 처음부터 Metal을 꺼내 들기보다 상위 프레임워크로 먼저 만들어 보고, Xcode에 포함된 Instruments 같은 프로파일러로 병목을 확인한 뒤 정말 필요한 부분만 Metal로 내려가는 순서가 안전하다. 성급하게 저수준으로 내려가면 코드만 길어지고 유지보수가 어려워질 때가 많다.

핵심 구성 요소 살펴보기

Metal로 무언가를 그리려면 몇 가지 객체가 등장한다. 처음에는 낯설지만 역할을 나눠서 보면 흐름이 잡힌다.

한 프레임을 그리는 과정은 대략 이렇게 흘러간다. 디바이스에서 자원을 준비하고, 커맨드 버퍼에 그리기 명령을 기록한 다음, 커맨드 큐에 실어 GPU로 넘긴다. GPU가 셰이더를 실행해 결과를 화면에 올리면 한 장면이 완성된다. 이 순환을 매 프레임 반복하는 구조로 이해하면 큰 그림이 잡힌다. 시간 예산도 숫자로 잡아 두면 좋다. 60Hz 화면이라면 한 프레임에 쓸 수 있는 시간이 약 16.7ms, 120Hz 화면이라면 약 8.3ms다. 명령 기록부터 GPU 실행까지 이 안에 끝나야 화면이 끊기지 않는다.

진입점을 잡는 코드는 짧다. 디바이스를 얻고 커맨드 큐를 만드는 데서 모든 것이 시작된다.

import Metal

guard let device = MTLCreateSystemDefaultDevice(),
   let queue = device.makeCommandQueue() else {
  fatalError("이 기기는 Metal을 지원하지 않는다")
}

let commandBuffer = queue.makeCommandBuffer()
// 인코더로 그리기·연산 명령을 기록한 뒤 커밋한다
commandBuffer?.commit()

이후의 파이프라인 구성과 셰이더 작성은 애플 Metal 공식 문서의 단계별 안내를 따라가면 된다.

주니어 개발자가 시작하는 순서

기초 없이 Metal 코드부터 붙잡으면 객체 이름에 파묻히기 쉽다. 순서를 밟는 편이 결국 빠르다.

Metal은 저수준 프레임워크라 처음에는 코드가 장황하게 느껴질 수 있다. 그래도 GPU가 화면을 어떻게 만들어 내는지 밑바닥부터 들여다본다는 점이 강점이다. 당장 실무에서 쓰지 않더라도 그래픽과 성능의 원리를 이해하는 밑거름이 된다. 급하게 전부 외우기보다 작은 예제를 굴려 보며 개념과 코드가 맞물리는 지점을 하나씩 확인하는 접근을 권한다.

더 많은 글 보기 RSS 구독