iOS 개발일지
0812 새싹 30회차 정리 - Content-Type, MIME Type 본문
iOS 앱 개발자 데뷔 과정 30회차
#0. Memo
- 카메라 기능 사용하기 : YPImagePicker
- 카메라 기능 사용하기 : UIImagePickerController
#1. Checklist
클라이언트에서 서버에 요청만 하는 것이 아닌, 이미지나 PDF 등을 업로드해야 하는 일도 있을 수 있다.
이 때 이미지 파일 자체가 전송되지는 않기 때문에, 파일을 텍스트 형태로 인코딩하여 HTTP Body에 담아 서버로 전송해야 한다.
- Content-Type
어떤 종류의 파일(이미지, 비디오, json, pdf 등)을 서버에 전달할 것인지 명시하기 위해 사용한다.
THHP Header에서 MIME 타입을 표현하며, 하나의 파일만을 서버에 업로드한다면 명확한 타입으로 설정한다.
- Multipart / form-data
사용자가 양식을 작성한 결과 값의 집합을 번들로 만드는데 사용한다.
만약 여러 파일을 서버에 업로드하는 경우라면 단일 타입 표현이 어렵기 때문에 Content-Type을 multipart / form-data 로 설정한다.
form이란 입력 양식 전체를 감싸는 태그이며, Multipart 메세지는 서로 붙어있는 여러 개의 메세지를 포함하여 하나의 복합 메세지로 보내진다.
- MIME Type
Multipurpose Internet Mail Extensions : HTTP에서 전송되는 모든 파일들에 대한 데이터 포맷 라벨이다.
서버와 브라우저가 처리할 동작을 위해 MIME 타입을 명시해주는 것이 좋다.
MIME 타입의 구조는 매우 간단한데, '/'로 구분된 두 개의 문자열인 타입과 서브타입으로 구성된다.
type은 카테고리를 나타내며 개별(discrete) 혹은 멀티파트 타입이 될 수 있고, subtype 은 각각의 타입에 한정된다.

https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP/MIME_types 참고
- UIImagePickerController
#0. Memo 카메라 기능 사용하기 : UIImagePickerController 참고
사진 촬영, 동영상 녹화, 사용자 미디어 라이브러리(갤러리)에서 사진을 선택하기 위한 시스템 인터페이스로 제공되는 컨트롤러
UINavigationController를 상속받고 있으며, UIImagePickerControllerDelegate의 delegate 속성은 UIImagePickerControllerDelegate와 UINavigationControllerDelegate 프로토콜을 모두 구현하는 객체로 정의되어 있다.
따라서 UINavigationControllerDelegate 프로토콜도 함께 채택해야 picker.delegate = self가 가능하다.
photoLibrary와 savedPhotosAlbum은 iOS14 이상부터 Deprecated 되었기 때문에 해당 구현을 구현하기 위해서는 iOS14 이상부터 제공되는 PHPickerViewController가 필요하다.
- Privacy
info.plist에서 Camera Usage Description과 Photo Library usage Description를 추가해 카메라와 갤러리에 접근할 수 있다.

만약 오픈소스 라이브러리를 사용했다면, 오픈소스에 들어있는 기능 중 사용하지 않는 기능이 있더라도 권한을 요청해야 한다.
사용하지 않는 기능에 대한 코드가 작성되어 있는 것은 리젝 사유이기 때문이며, 오픈소스를 사용한다면 어쩔 수 없는 부분이다.
오픈소스 파일을 수정하여 사용하는 것도 가능하지만, 아예 오픈소스를 사용하지 않는 것보다 시간이 더 걸릴 수도 있다.
참고로 갤러리에서 사진을 선택해 가지고 오는 기능만 구현하고 싶다면, 권한 요청을 할 필요가 없다.
이 경우, 사용자가 직접 특정 사진을 선택하기 때문에 사용자가 충분히 인지하고 있다고 판단하기 때문이다.
하지만 가져온 사진을 다시 저장하려고 한다면 이때는 권한이 필요하다.
- (참고) PHPickerViewController
UIImagePickerController와 다르게, UIViewController를 상속받고 있다.
UIImagePickerController의 대안으로 PHPickerViewController를 소개하고 있으며, PHPickerViewController에는 카메라 기능은 포함되어 있지 않고 Photo Library 기능을 가지고 있다.
UIImagePickerController로 구현하기 어려웠던 검색, 줌 확대/축소, 다중 선택 기능 등을 쉽게 구현할 수 있도록 지원한다.
- Button Configuration
iOS15부터는 업데이트된 스타일을 채택해서 사용자 인터페이스에 더 적합한 버튼을 제공하고, Mac Catalyst도 지원하고 있다.
많은 변경 지점이 생김에 따라 iOS15부터는 Deprecated된 Button의 메서드들도 있다.
Deprecated ex. contentEdgeInsets, titleEdgeInsets 등...
#2. Assignment
[6주차 마무리] 참고
- iOS15+ UIButton
iOS 15부터 새롭게 업데이트된 버튼 실습
# 유용한 오픈소스
YPImagePicker : https://github.com/Yummypets/YPImagePicker
인스타와 비슷한 형태의 갤러리, 필터 등 지원
TLPhotoPicker : https://github.com/tilltue/TLPhotoPicker
갤러리와 사진 선택 기능 지원
'SeSAC iOS 데뷔과정 2기' 카테고리의 다른 글
0816 새싹 31회차 정리 - 접근제어자, UIPageViewController (0) | 2022.08.16 |
---|---|
0815 새싹 6주차 마무리 (0) | 2022.08.15 |
0811 새싹 29회차 정리 - iOS Privacy, CLLocation (0) | 2022.08.11 |
0810 새싹 28회차 정리 - TableView/CollectionView Cell (0) | 2022.08.10 |
0809 새싹 27회차 정리 - XIB UIView Custom Class (0) | 2022.08.10 |