2021. 10. 17. 23:38ㆍiOS/iOS
이 포스팅은 꼼꼼한 재은씨의 Swift 기본편 - chapter09 네트워크 통신과 API편을 참고하였습니다.
안녕하세요 bannavi입니다^ㅅ^
아래는 네트워크와 전혀 상관없는글인데 읽을분만 읽으세요 ^ㅅ^
지금 iOS개발자 취준 처음을 돌이켜보면,
저는 제가 상상한걸 직접 앱으로 만든다는게 매력적으로 보여 iOS개발자가 되고 싶었어요.
swift언어를 통해 개발을 처음 공부하고 이후 iOS를 공부하면서 앱을 만들고.... 현재는 애플의 심사를 기다리고 있습니다.
처음 개발 공부를 시작할땐 그래도 앱출시까지 해보면 어느정도 iOS를 마스터했다고 볼 수 있겠지? 라는 마음으로 시작했습니다.
근데 막상 그 단계가 되니, 잘모르겠네요!ㅋㅋㅋㅋ
오히려 ㅋㅋㅋ 개발 처음 시작할때가 제일 의기양양했던것 같습니다ㅋㅋㅋ
가끔 iOS공부를 하면서 구글링을 해보다가 '이러다가평생공부만할듯' 이런 비슷한 문구를, 블로그의 모토로 달고 계신분을 봤는데
약간 ㅎㅎ 무슨 의미로 블로그 이름을 그렇게 설정하셨는지 조금 공감이 되는 바입니다.
제가 이런글을 쓰는 이유는 왜 네트워크의 중요성을 지금 알게 됐을까? 라는 생각이 들었기 때문입니다.
이렇게 공부하다가 나중엔 왜 패턴의 중요성을 지금알게됐을까 하겠죠.ㅎㅎ
오늘은 이전 포스팅에서 LLDB를 공부했는데 사실 100프로 이해는 안된거같아요 그래서 또 좌절......할뻔했지만
일단 모르는걸 알게된다는건, 그사람은 공부를 하고 있는 사람이기 때문에, 모르는게 뭔지도 알게되는것 같다는 생각이 들어요.
그래 맞아 나 공부하고 있는"중"이지. 그러니까 모르는게 뭐였는지도 알게 되는거지 하고 생각해봅니닷
일단 포기를 안하면 되는거같아요. 그래서 조금 다행이라는 생각도 듭니다. 삽질은 있었지만 열심히 안한 순간은 없었기 때문에ㅎ
(방향을 몰랐을뿐 나 놀지 않았는데!) 열공할 수 있을거같아요ㅎ
제가 입행 포기할때 딱 이런느낌이었거든요 "이 이상 더 열심히 할 수 없다."
그렇다고 개발을 포기한다는건 아니고요ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
그냥 제가 원래 제 감정을 블로그에 혼잣말 하면서 풀어내는 편이라 주절주절 해봤습니다. 어차피 보는사람도 많이없공 헤헤
저는 결국 잘할거에염. 미래에서 보고 왔그든요!!!vV 그럼 네트워크 공부 시작해볼게요ㅎㅎ
네트워크 통신과 API
tableView, collectionView의 기초를 공부할땐 몰랐어요.
그렇게 데이터를 하드코딩하면서 옮기는건... 연습일때만 그렇다는 것을..!
그냥... 가볍게 생각해보면 영화예매앱만 보더라도, 인기 영화 순위 1위 2위가 바꼈다고 해서
새벽에 개발자를 호출한다음에 "야야야야 큰일났다 1위랑 2위 바꼈대. 빨리 코드 수정해 빨리" 하는 일은 ㅋㅋㅋ없을거잖아요
최신 데이터를 지속적으로 제공하면서, 앱이 자주 업데이트 되는것을 피하기 위해
대부분의 앱은 서버를 통해 데이터 파일만 내려받는 방식을 사용합니다.
왜 앱에 자주 업데이트 되는걸 피하냐고요. 저만해도 자주 업데이트 되는 앱은 귀찮아서 지워버립니다..ㅎㅎ
이로써 앱 자체의 업데이트는 피하고? 콘텐츠는 최신의것을 유지할 수 있게됩니다. 오....
단순히 앱만 작성할때랑은 또 다릅니다.
1. 네트워크 서버와 데이터베이스 서버를 갖추고
2. 이를 안정적으로 운영하기 위해 IDC에 관리를 위탁
3. 방화벽설치
4. 대량의 요청 처리를 위해 부하분산장치 추가까지..!(SLB: Server Load Balancer)
근데 다행이에요! 요즘은 서비스포탈이나 공공기관에서 다양한 데이터를 API형태로 제공하고 있거든용.
이걸 잘 활용하면 서버를 운영하지않아도 양질의 콘텐츠를 보유한 앱을 제작할 수 있게됩니다.
네트워크 통신의 종류
앱과 서버간 네트워크 통신이 이뤄지는 방식은 크게 두가지로 구분해볼 수 있습니다.
1. TCP/UDP를 사용하는 소켓 방식의 연결성 통신
2. HTTP, HTTPS, SMTP등 프로토콜을 이용한 비연결성 통신
1. TCP/UDP를 사용하는 소켓 방식의 연결성 통신
소켓(Socket)을 이용한 네트워크 방식은 앱과 서버가 연결되면 한쪽에서 명시적으로 끊을때까지 지속해서 연결을 유지함
장점: 연결 종료 전까지 통신을 계속 유지하므로 재연결할 필요X, 원하는 만큼 빠르게 메시지를 주고받을 수 있음
단점: 연결 정보를 유지하기 위해 네트워크 대역을 많이 소모함, 서버 부하도 큼
소켓을 이용한 연결방식은 또 두가지로 나뉘어집니다.
1. 데이터 유실을 방지하고 완전한 전송을 보장하지만 느린 TCP연결
2. 데이터의 완전한 전송을 보장하진 않지만 상대적으로 더빠른 UDP연결.
(근데 완전한 데이터를 전송도 안해주는데 빠른게 의미가있나... 전 TCP가 더 좋아지려고 하네용)
2. HTTP, HTTPS, SMTP등 프로토콜을 이용한 비연결성 통신
1. http등 프로토콜을 사용해서 메시지를 주고받는 방식
2. 요청이 들어오면 이에 맞는 응답을 보낸 후 바로 연결을 종료
3. 다시 요청을 하기 위해서는 새롭게 연결을 맺어야 함
"비"연결 통신이 아예 연결을 하지 않는단게 아니라, 연결을 유지하지 않는다는걸 의미하는거네요.
단점: 매번 요청할때마다 해결해야하므로 소켓 방식에 비해 속도에 제약이 있음
장점: 불필요한 네트워크 대역 소모를 줄일 수 있고 서버 부하를 낮출 수 있음(범용적 모바일 서비스에서 많이 사용)
동일한 HTTP/HTTPS 프로토콜을 사용하지만 일반 HTML을 제공하는 웹페이지와 달리,
데이터만을 주고받을 수 있도록 설계된 모듈을 웹서비스라고 합니다.
웹서비스는 다시 아키텍처 구조에 따라 SOAP과 RESTFul 방식으로 나눌 수 있고,
데이터 타입에 따라서는 XML과 JSON방식으로 나눌 수 있습니다.
이런게 있다. 알아두고 공부해보세요. 저는 따로 공부하고 있다는!
1. SOAP방식
1. 통신구조는 Envelope/Header/Body의 세가지 영역으로 구분
2. HTTP/HTTPS/SMTP 등 프로토콜을 통해 양쪽에서 XML형태의 메시지를 주고받도록 구현된 프로토콜
2. Restful방식
1. Rest란 웹 형식을 빌어 데이터를 전송하되, SOAP나 쿠키 등 별도의 전송 프로토콜 없이 전송하기 위해 만들어진 간단한 형식의 인터페이스
2. HTTP프로토콜을 바탕으로 필요한 데이터를 별도의 규약없이 주고받기만 하면됌
3. 특정 웹 페이지를 보기위해 웹 브라우저에 URL을 입력하는것처럼 데이터를 요청하는 URI를 네트워크를 통해 서버에 전달하면 서버에서는 그에 맞는 응답데이터 전송
4. 네트워크 서버를 통해서 뿐만 아니라, 일반 웹 서버를 통해서도 약간의 설정만으로 쉽고 간단하게 구현할 수 있는 장점
5. 일반적으로 웹에서 사용되는 HTTP메서드의 종류는 GET(데이터 요청), POST(데이터 전송) 두가지
메소드(전송 방식) | 목적 |
Get | 특정 리소스의 대표적인 정보를 요청 |
Post | ID 없이 리소스를 생성하거나 수정할 때 |
PUT | ID 기반으로 리소스를 생성하거나 수정할 때 |
DELETE | 리소스를 삭제할 때 |
HEAD | GET방식의 요청이지만 내용없이 메타 정보만 요청할 때 |
OPTIONS | 특정 URL에 대한 보조 메서드 역할 |
6. URL에 CRUD 동작을 포함하는 대신, URL 헤더에 이들 메서드를 사용하여 동작을 정의하는것으로, RESTful API는 동일한 URL라 하더라도 처리할 액션을 구분할 수 있다.
(이 아래 두개는 데이터 형식에 따른 구분으로 매우 중요!)
3. XML방식
1. 서로 다른 시스템에서 인터넷을 통해 데이터를 쉽게 주고받을 수 있도록 하여 HTML의 한계를 극복할 목적으로 만들어짐.
2. 요청에 대한 응답 데이터를 XML포맷으로 제공하는 것을 말함
3. 임의의 자료구조를 표현하는데에 장점
시작태그 | <element> |
끝태그 | </element> |
빈요소 태그 | <element/> |
4. XML형식의 마크업으로 전달된 데이터는 데이터를 형식에 맞게 분석하는 과정이 필요
(이를 파싱Parsing이라고 함. 파싱을 처리하는 모듈은 파서Parser라고함)
5. iOS에서는 파운데이션 프레임워크를 통하여 XMLParser 모듈을 제공하므로 이를 사용하면 손쉽게 데이터를 분석할 수 있음.
6. XML은 시스템에 의존적이지 않은 마크업 형식을 통해 데이터를 주고받을 수 있어서 데이터 교환의 표준으로 삼을 수 있음.
7. 대신 데이터의 의미를 전달하기 위해 마크업 태그를 사용하므로 전체 데이터 용량이 지나치게 커진다는 단점!
4. JSON방식
1. JavaScript Object Notation의 약자
2. JSON에 사용되는 데이터 구조는 아래 표와 같다
구분 | 형식 | 명칭 |
여러 속성을 정의하는 순서 없는 집합 | {키:값, 키:값,,,,} | JSON객체 |
비슷한 객체가 반복 나열되는 순서화된 리스트 | [객체1, 객체2, 객체3,,,] | JSON배열 |
3. JSON객체는 {}로 표현하며 {키:데이터} 형태로 이루어진 사전식 데이터 집합임
4. 문자열을 표현할때 큰 따옴표를 붙여주는데 이를 쿼우팅(Quoting)이라고 함.
5. 데이터가 많아지면 가독성이 떨어진다는 단점
6. 복잡한 구조의 데이터를 그룹으로 묶어 계층화할 수 있다는 점
7. NSMutableDictionary 자료형 : 저장된 데이터를 얼마든지 수정/삭제 가능
8. NSDictionary 자료형 : 한번 데이터가 정의되고 나면 새로운 데이터를 추가하거나 수정/삭제할 수 없음
9. Swift언어에서 제공하는것이 X, 파운데이션 프레임워크를 통해 제공되기 때문에 항상 파운데이션 프레임워크를 import후 사용
* JSON 표준 규격 제공 http://json.org
'iOS > iOS' 카테고리의 다른 글
앱을 testflight버전으로 배포해서 테스트 요청하기(feat. 참교육) (2) | 2021.10.22 |
---|---|
iOS 네트워크 통신과 API 살펴보기 5(재사용 메커니즘, 비동기 처리하기) (0) | 2021.10.21 |
iOS 네트워크 통신과 API 살펴보기 4(thumbnail처리, 더보기 기능 구현 ) (0) | 2021.10.19 |
iOS 네트워크 통신과 API 살펴보기 3(Json Parsing) (0) | 2021.10.18 |
iOS 네트워크 통신과 API 살펴보기 2(Open API와 공공콘텐츠) (0) | 2021.10.18 |