SeSAC_iOS_Day 19 | TIL

린다·2021년 10월 25일
0

SSAC_iOS_Dev

목록 보기
15/33
post-thumbnail

👩‍💻 수업

📂 네트워킹

클라이언트 → 서버: "해리"가 포함된 영화 알려줘! 요청
서버 → 클라이언트: "해리"가 포함된 영화 찾았어! 데이터 전송
소통이 끝나면 서버는 업무 끝 ,, 안녕 ,, 필요하면 또 불러줘 ,,

📂 서버의 특징(네트워크 통신(HTTP))

  1. 요청이 있어야 응답을 한다.
  2. GET(팔로우하는 사람들의 글 볼때), POST(내가 새로 글 쓸 때), PUT(수정), DELETE(삭제) 세부적으로 명시해줘야함!
    → GET만 있는 경우: 책 정보를 받아오는 것만 가능하고 수정 혹은 추가는 불가능하다.
  3. 인증키(Request + 인증키) 신뢰되는 사람한테만 데이터를 보내주려고~

📂 데이터 형식

  1. JSON {} : 앱에서는 JSON을 조금 더 선호하는 편!
  2. XML <>

서버에서는 json처럼 생긴 문자열을 기준으로 데이터를 날려줌~
→ iOS 입장에서는 이 데이터를 우리가 인식할 수 있게 class, struct, dictionary등으로 변환하는 과정이 필요함!!
→ 데이터를 보낼때도 마찬가지임!!
→ 이 과정: Serialization

📂 OSI 7계층

  • 네트워크에는 7 layer가 있음(통신을 위한 여러 계층, 각각의 역할이 있음)
  • 가장 위에 HTTP(Hyper Text Protocol..?) → ex. 편지 보낼 때 우체국의 시스템에 맞게 정보를 써야 배달이 됨 = 통신할 때 맞춰야하는 형식 : 프로토콜
  • 4계층(전송계층)
    → TCP, UCP (클라이언트와 서버가 통신할때 얼마나 신뢰할건지?)
  • TCP: ex. 등기: 편지를 그냥 보내는게 아니라 받는 사람이 꼭 있는지 확인하고 보냄(TCP) 네트워크가 잘 가고 있는지 늘 추적함!! 1:1로 요청할때 적합하게 사용됨! 신뢰가 높다!
  • UDP: 필요한 데이터를 그냥 요청만 함(택배 문앞 보관ㅋㅋ) 잘 받을 수도 있지만 문제가 생길 가능성을 가지고 있음 1:다 형태에서 많이 사용됨! 신뢰는 낮은 편이나 확인하는 절차가 없어서 속도는 조금 더 빠른 편

📂 HTTP

  • Connectionless / stateless (http의 특성) → 항상 상태가 끊겨서 확인을 계속 해야됨 ?
  • 세션 / 쿠키 (이를 이용해서 사용자를 인증하는 ..) 앱에서는 토큰 사용 → 아니면 계속...로그인해야돼서

📂 Get vs Post

  • www.naver.com/?key=value → 이 뒷 부분 QueryString이라고 부름
    → 위험할 수 있음 서버에 로그가 남을 수 있음 ex. id=1233&pw=1234 → 유출이 될 수 있는...위험한 그래서 중요한 데이터는 쿼리 스트링에 안 담음!
    ex. "해리"포함된 영화 검색~ 이럴때 해리 이런거는 쿼리에 넣음(중요하지않은 정보)
  • 중요한거 주로 바디에 넣어둠!
  • 주소가 무한대로 길어지는 이유: 브라우저상에서 길이를 제한하고 있어서(최대길이 제한)
    http 규약 상에서는 get의 길이를 제한하고 있다!는 아닌데 크롬이나 이런데서 제한하고 있음...
  • 아이디, 비밀번호 같은거는 주로 header에 넣고 바디에 데이터를 넣어서 보냄
  • http (header + body) 주로 header에는 메타 정보, body에 실질정보

📂 애플의 네트워크 구현

URLSession Framework
→ 이거 기반으로 만든 라이브러리가 Alamofire(여기서 제공하는 기능은 urlsession에 다 있음! 구현돼있음!) alamofire가 쓰기 더 쉽긴함

📂 JSON Serialization

Json에ㅓㅅ 원하는 데이터를 뽑아서 사용하기 위한 기술
1. Json Serialization(class)
2. Codable Protocol
3. (Json Serialization 기반) SwiftyJSON 라이브러리

📂 API Key

  1. 단독으로 사용할 스위프트 파일 만들어놓고 이건 깃에 안올리기
  2. git ignore 기능활용
  3. 환경 변수 설정: 내 프로젝트 상에서 api키 숨겨두기~ 엑스코드에서도 처리 가능함

👩‍💻 추가 스터디

📂 HTTP

Hypertext Transfer Protocol

  • 인터넷에서 데이터를 주고 받을 수 있는 프로토콜
  • 클라이언트 → 서버: Request(Post, Get, Put, Delete) + 인증키
  • 서버 → 클라이언트: Response(JSON, XML)

HTTP Method

  • GET, POST, PUT, DELETE
  • GET: url에 데이터가 포함돼있어서 보안에 취약함, 서버에 정보를 요청할 때 주로 사용
  • POST: 데이터를 HTTP Body에 포함하여 정보 전달.

📂 HTTP Header, Body

  • HTTP 메시지는 라인 - 헤더 - 바디구조로 이루어져있음
  • HTTP Header: 메시지 본문에 대한 메타 정보
  • HTTP Body: 실제로 보내고자 하는 메시지 본문 내용

📂 HTTP Request - Response

  • 클라이언트가 요청하면 서버가 응답하는 방식(서버가 먼저 정보를 보낼 수 없음)
  • 새로운 정보를 받고 싶다면 클라이언트가 요청을 해서 데이터를 갱신해야함
  1. Stateless
  • 무상태
  • 서버가 클라이언트 정보를 기억하지 않음 → 클라이언트 식별이 불가능
  • 이를 위해 웹에서는 쿠키, 세션을 활용, 앱에서는 토큰을 사용
  1. Connectionless
  • 비연결성
  • 모든 클라이언트의 요청에 대해 항상 새롭게 연결하고 해제하는 과정을 경험

📂 HTTP Status Code

  • 클라이언트와 서버 간 통신의 성공/실패 여부 및 오류 원인을 알려주는 코드

📂 JSON, XML

JSON

  • Javascript Object Notation
  • XML 단점 해결을 위한 경량 데이터 교환 방식
  • {키 : 데이터} Dictionary 형식 데이터 집한인 JSON 객체와 []로 데이터를 나열하는 JSON 배열로 이루어져있음

XML

  • eXtensive Markup Language
  • 태그로 이루어진 마크업 구조
  • Foundation 프레임워크에서 XMLParser 모듈을 제공하고 있음(데이터 분석이 쉬움)
  • 태그를 모두 포함해서 주고 받다보면 데이터 용량이 늘어남

0개의 댓글