Swifter {Swift Developer}

메뉴

APFS와 Swift 3.0

지난번 WWDC2016에서 발표된 내용중 신제품발표는 없었지만 신제품같은 것이 하나 있었는데 그것이 바로 APFS이다. 이는 현재 HFS+를 대체하는 새로운 파일시스템이다.

파일시스템의 역사

애플 제품의 파일시스템이라고 하면 1998년이후 HFS+를 사용해 왔다. (고)스티브잡스가 복귀하면서 NeXT를 인수하면서 macOS 9이후 NextStep으로 바뀌면서 바뀌지 않는 것 하나가 바로 HFS+이다. 이때 NextStep에서 나온 UFS(Unix File System)이 나왔지만 OS X가 나올 당시에 UFS가 HFS+를 대체할 것이라고 예상했었지만, HFS+가 살아남았다. HFS+는 사용자별 소유권 및 권한등을 가지고 있고 OS X는 유닉스에 필요한 기능을 모두 갖추고 있었다. UFS에는 있고 HFS+에는 없는 파일명 대소문자 구분정도는 크게 필요가 없었다.

이후 ZFS가 나왔는데 ZFS는 지금까지의 파일시스템의 상식을 뒤집어버리는 획기적인 파일시스템이었다. fsck를 필요로 하는 트랜젝션 파티션 개념을 과거의 유물로 만드는 데이터셋, 파일 시스템자체의 되돌리기등을 할 수 있는 스냅샷 오류 자동감지하고 되도록 복구체크섬, RAID-Z라는 것까지 지원하였고 지금은 오라클에 인수된 Sun Microsystems의 유물이기도 했다.

획기적이었던 것은 기술만으로 평가하지 않고 ZFS를 오픈소스화했다는 것이다. 그 덕분에 Solaris OS가 아닌 환경에도 포팅되었다. 이에 가장 적극적이던 곳이 바로 FreeBSD는 ZFS의 가장 큰 고객이었고 라이선스가 GPL이 아닌 Linux조차 커널모듈을 커널자체와 다른 배포를 통해 사용할 수 있게 되었다. 그리고 OS X도 공식지원을 10.5버전에서 읽기전용으로 ZFS가 추가되었다. 그러나 애플은 10.6버전에서 ZFS지원을 중단한다.

중단한 이유에 대해서는 애플이 크게 밝히지 않고 있지만 가장 설득력이 있었던 가설은 오라클로 Sun Microsystems가 인수되었기 때문에 애플측에 라이선스를 요구했을 것이라는 가설이다.

파일시스템의 라이브 업그레이드를 크게 두번 했었다. 1998년 Mac에서 사용하던 HFS에서 HFS+로 업그레이드한 것과 WIndows의 FAT에서 NTFS로 업그레이드 한것을 말할 수 있는데 이 두가지 모두 새로운 파일시스템이 이전 파일시스템의 모든 기능을 상위호환으로 지원한 것이다. 예로 파일명이 긴 경우, ZFS는 255바이트이지만 HFS+(NTFS도 동일함)는 UTF-16에서 255자 바이트길이가 배나 되기 때문이다. 반면에 ZFS는 스토리지에 기록된 정보에 모두 체크섬을 붙이고 있지만 APFS에서는 메타데이터만 넣는다. 만약 ZFS처럼 APFS도 데이터의 체크섬을 넣는다면 파일 시스템 업그레이드를 할 때 사용블록 정보를 읽어야 한다. 이는 업그레이드에 몇분에서 몇시간까지 필요로 하기 때문에 요즘 많이 사용하는 스마트폰이나 태블릿등의 사용자에게는 스트레스를 받게 되 것이다.

apfs

APFS가 발표될 당시 필자는 이게 과연 ZFS와 다른 것이 무엇을까?였다. 특히 Copy-on-write기능이 ZFS의 핵심이기도 하기 때문에 이를 애플은 뚜렸하게 밝혔다.

“18개월 이후 모든 애플 기기의 기본파일시스템을 APFS로 변경한다. 기존 장치는 그대로 업그레이드한다”

이는 ZFS와 APFS의 기술은 같아도 사용하는 경우는 180도 다른 것이라고 할 수 있다. 사실 ZFS가 가장 크게 유용한 곳은 서버 대규모 스토리지이고 APFS는 개인기기의 내부 스토리지용이다. ZFS에게 있어서 SSD는 디스크어레이의 캐시역할이고 APFS의 입장에서 보는 SSD는 유일한 스토리지이고 ZFS에게  암호화는 있어도 그만인 기능이지만 APFS는 필수기능이라고 할 수 있다.

APFS는 오픈소스로 공개될까?

앞에서 애플이 주장했듯이 APFS는 애플기기에 최적화되어 있다는 것을 강조했다. 지금까지 애플은 운영체제의 기반이 되는 부분을 Darwin으로 오픈소스로 공개해왔다. HFS+기반 스소코드도 그것의 일환으로 공개되어 있다. 파일시스템이 없는 운영체제는 있을수 없고 HFS+와 APFS에서 모두 부팅할 수 있다면 APFS코드는 사실상 Darwin에 포함시킬 필요가 없어진다. 이 예측은 아쉽게도 크게 바뀌지 않을것 같다. 이미 Mac에서는 이미 플로피디스크(FDD), CD-Rom, DVD-Rom 및 이동식디스크는 사라져 버렸다. 그리고 심지어 아이폰이나 아이패드에는 USB메모리나 SD카드를 바로 사용할 수 없다. 그리고 그런것들을 크게 신경쓰지 않는 애플제품에 최적화된 파일시스템을 지원하는 장점은 크지않다. HSF+조차도 애플 외부에서는 대부분 지원한다고 말하기도 어렵다. 그렇지만 애플기기 기반의 앱이나 서비스를 개발하는 개발자라면 APFS기능을 배우지 않으면 안된다. 특히, 개발자입장에서 복제 및 스냅샷과 같은 HFS+에는 없는 특징을 활용하기 위해 APFS의 API는 Swift언어용으로도 제공될 것이기 때문에 기대감이 높다.

swift.version++ 및 폐지되는 기능

며칠전 Xcode8이 정식 출시됨에 따라, Swift 2.x를 사용하는 독자라고 한다면, Swift 3.0에서 폐지가 되는 기능에 대해 경고로 표시되기 때문에 Swift 3.0으로 바로 넘어가지 않는다면, Swift 2.3기반이라고 해도 경고는 미리 체크해서 정리해두자.

++/–

가장 크게 알려진 내용중 하나는 SE-0004에 대한 폐지로 대부분의 경우 +=1로 해결하면 된다. 그렇지만 되도록 연산자로 정리하길 권장한다. 그러면 Swift 3.0에서도 경고없이 사용가능하다.

C언어스타일의 for

SE-0007도 SequenceType으로 Sequence프로토콜이 Swift는 거의 불필요해질 것이다.

인수 var

SE-0003 매개변수 중 var사용이 금지되었다는 것인데 코드를 보면 알것 같다. var를 사용하고 싶으면 블록으로 구성해서 다시 사용해야 한다.

Swift 2

Swift 3

커리문

SE-0002 다음과 같은 소스코드를 사용할 수 없게 되었다.

Swift 2

Swift는 블록을 활용하면 되기 때문에 아래 소스코드를 참고하자.

Swift 3

사실 커리문은 — 제품코드 –를 사용하는 분이 적다고 생각되지만 만약을 위해 준비해 두자.

매개변수의 튜플로 전달

거의 알려진 기능은 아니지만, Swift 2.x까지는 아래와 같은 형태로 사용되었다.

Swift 2

매개변수 전체를 튜플로 만들고 그 튜플을 하나로 넘기면 모든 매개변수로 전달하는 것과 같은데 버그가 발생할 소지가 높아 SE-0029에서 폐지되었다.

Swift 3

다음으로 가기 위해

이런 이유로 Swift 3.0에서 폐지된 기능만 설명하였지만 오픈소스화가 되었기 때문에 Swift 3.0의 변경사항은 Github의 Swift-evolution에서 미리 확인할 수 있다. 그리고 이미 구현된 기능에 대해서는 IBM Swift Sandbox에서 실제로 실행해볼 수 있다.

Facebook Comments

카테고리:   Swift 3.0

댓글

죄송하지만 댓글은 닫혀 있습니다.