우리는 지금까지 프로젝트 파일에 포함된 데이터들만을 뷰에 표현했습니다.
하지만 프로젝트 파일에 포함된 데이터들만을 이용해서 앱을 만들게 될 경우, 데이터의 추가, 삭제에 대한 실시간 대응이 불가능하다는 문제가 있습니다.
❗️새로운 데이터가 추가되면 해당 데이터를 추가해서 앱 업데이트 버전을 배포해야 되는 문제점이 있습니다.
그렇기 때문에 우리는 네트워크 통신
을 통해서 데이터를 추가하고 삭제하는 과정이 필요합니다!
(CS를 공부하면서 더 자세하게 정리할 예정입니다.)
네트워크 통신에서 가장 대표적인 HTTP 통신
에 대해서 하나씩 정리해보겠습니다.
일반적으로 HTTP 통신, Socket 통신을 사용합니다.
- Hyper Text Transfer Protocol
- 인터넷에서 데이터를 주고 받을 수 있는 프로토콜
HTTP 통신과정을 간단하게 그림으로 표현 해보면 위와 같습니다.
앱에서 서버에 어떤 정보를 요청합니다. (통신을 위해서는 인증키가 필요합니다!)
이때 post, get, put, delete
와 같은 HTTP Method
를 통해서 요청합니다.
그리고, 우리가 요청한 데이터를 서버로 부터 json
또는 xml
형식으로 받게 됩니다.
HTTP 통신
의 경우, 클라이언트의 요청이 있을때만 서버가 응답하고 요청과 응답이 끝나면 연결이 끊어지게 됩니다.
그렇기 때문에 서버는 클라이언트의 정보를 기억하지 않아, 클라이언트를 식별할 수 없습니다.
같은 사용자를 구분하기 위해서 토큰, 세션을 사용!
간단한 예제를 통해서 다시 정리해보겠습니다.
1 ) GET
GET
Method 는 위와 같이 URL 에 데이터를 포함해서 요청하는 형태로 주로 서버에 정보를 요청할 때 사용합니다.
(HTTP Header + Query String) 를 사용해서 정보 요청
❗️위와 같이 QueryString 에 API Key 와 같은 개인정보를 넣게되면 보안상 좋지 않음
❗️get 의 경우 일반적으로 Header 에 API Key 를 담음 (but, 그래도 보안문제 존재)
2 ) POST
POST
Method 는 위와 같이 데이터를 HTTP body 에 포함시켜 정보를 전달합니다.
(Header 에 API key - value 가 저장되어 있습니다.)
URL 자체에 API Key 같은 값들이 포함되어 있지 않아, 최소한의 보안 구성이 되어있지만 물론, 유의미 하지는 않습니다.
3 ) xml & json
서버로부터, 우리가 요청한 데이터를 xml, json 형태로 받게 된다고 했는데 실제 값을 확인 해보면 위와 같습니다. (왼쪽: xml, 오른쪽: json)
앱에서는 일반적으로 용량이 작고 {키 : 데이터}
형태의 딕셔너리식 데이터 집합인 Json 을 더 많이 사용합니다.
❗️서버에서 Json 형태로 요청한 자료를 보내줄 때, 어떤 환경을 기준으로 보내주게 될까요?
실제 그 값을 C, Python, Swift 등 다양한 환경에서 확인할 수 있기 때문에 서버에서는 문자열로 데이터를 보내주게 됩니다.
우리는 해당 데이터를 Swift 에서 인식할 수 있게 변환해주는 과정이 필요합니다.
(이러한 과정을 Serialization 이라고 합니다.)
Swift 에서는 Json Serialization
이라는 클래스를 이용하거나 Codable
프로토콜을 이용 할 수 있지만 우리는 익숙해질 때 까지 SwiftyJSON
라이브러리를 사용할 예정입니다.
과제를 끝내면 하루가 삭제되는 삶이 반복되면서 블로그 정리가 밀렸습니다 ㅠㅠ
빨리빨리 까먹기 전에 블로그에 정리하고, 깃허브에도 코드 정리해서 올리도록 하겠습니다!!
Textfield
에 작성된 숫자를 기준으로 PickerView
도 이동하도록 구현하고 싶었서 관련 자료들을 주말에 찾아볼 예정입니다.