4주차 정리

lyoodong·2023년 8월 8일

HTTP request/response

  • http란?

→ 데이터 전송을 위한 프로토콜, hpyer text transfer protocol의 약자.

  • http의 특징
  1. 비연결성
    서버는 클라이언트의 요청에 응답만 할 수 있다. 따라서 클라이언트의 요청에 따라 연결 상태가 시작되고 데이터 송/수신이 끝나면 연결은 해제된다.
  2. 무상태
    서버는 클라이언트의 정보를 소유하지 않는다. 이는 서버의 확작성 측면에서는 용이하지만, 클라이언트의 상태 정보를 소유해야하는 특정 상황(로그인 등)에서는 추가적인 작업이 필요하다. 이러한 단점을 극복하기 위한 수단이 토큰, 세션, 쿠키 등이 있다.
  • HTTP Method
  1. get
    → 서버에 정보를 요청할 때 사용한다. 이때 요청할 데이터의 정보를 Query String과 http Header에 포함시켜서 보낸다.
  2. POST
    → 데이터를** http body에 포함시켜 서버에 전송한다.

JSON, XML

  • XML
  1. "<"로 시작해 ">” 끝나는 마크업 언어의 일종. 마크업 언어란 태그 등을 활용해 데이터 구조를 기술하는 언어의 일종이다.
  2. 데이터의 의미 전달을 위해 태그를 사용하기 때문에, 데이터 용량이 비대하다는 단점이 존재한다.
  • JSON
  1. {키 : 데이터}로 이루어진 json 객체와 데이터를 나열하는 json 배열로 이루어졌다. 이를 통해 데이터를 계층적으로 구조화할 수 있다.
  2. xml에 비해 경량화 되어 xml의 단점을 보완한다.

URL

  • URL이란?

→인터넷에서 리소스의 위치를 가리키는 문자열

  • URL Encoding(PercentEncoding)

→ URL은 기본적으로 아스키 코드 값만 사용가능하다. 즉, 한글 특수 문자와 같은 문자들은 모두 인코딩으로 변환해줘야 한다. 예를 들어 URL 파라미터에 “뉴진스”라는 단어를 쿼리 스트링으로 넘기면 Invalid url…. 과 같은 오류가 발생한다. 따라서 16진수 값으로 인코딩 후 리퀘스트를 전송한다.

  • 한글 인코딩 예시

Pagenation

대량의 데이터, 리소스를 분할해서 가져오는 방식을 말한다.

목적

유저가 소프트웨어를 사용할 때, 유저에게 꼭 필요한 정보만을 서버에 호출하는 것이 경제적이다. 따라서, 가능한 낮은 빈도로, 꼭 필요한 만큼만의 데이터를 호출하도록 할 필요가 있다.

방식

  1. Offset Based Pagination
    → 데이터를 호출할 특정 범위/개수 등을 지정하고 한번에 조회하는 방식이다.
  • 장점: 호출 횟수를 최소화할 수 있다. 빠른 속도를 낼 수 있다.
  • 단점: 페이지 단위로 데이터를 전달하기 때문에, 서버의 변화에 빠르게 대응하지 못한다. 의존성이 비대해질 수 있다.
    (예를 들어 서버에 정보를 요청하는 사이에 서버의 데이터가 변화하면 데이터 중복 등의 문제가 발생할 수 있다. )

→ 따라서, 비교적 데이터 변화가 적은 구조의 사용에 적합하다. (인터넷 서점 등)

  1. Cursor Pagination
    → 클라이언트가 가지고 있는 마지막 데이터를 기준으로 다음 데이터를 조회하는 방식이다.
  • 장점: 실시간으로 데이터가 변화하는 환경에서 비교적 유연하게 대응할 수 있다. 의존성을 최소화할 수 있다.
  • 단점: 그럼에도, 서버에 정보 요청 시 데이터 변화가 발생하면 이 또한 대응할 수 없고, 현재 데이터를 기반에 전/후 데이터만 조회 가능하기 때문에 데이터를 건너띌 수 없다. 즉, 속도가 안 나올 수 있다.

Pagenation 구현 방식

  1. TableView willDisplayCell Method

테이블 뷰의 cell이 구성되기 전의 시점에 데이터를 호출하는 메서드

→ 하지만, 구성되기 전의 시점이라는 것을 명확하게 지정할 수 없다

→ 따라서, 화면에 보이지 않는 데이터도 유저의 행위와 무관하게 호출될 수 있기 때문에 권장되는 방식은 아니다.

  1. UITableViewDataSourcePrefetching Protocol

TableView CellForRowA 메서드가 호출되기 전에 미리 필요한 데이터를 호출하는 메서드(Prefetching)

→ iOS 10부터 등장, prefetchDataSource 프로토콜을 채택 후 prefetchRowAt 메서드 선언

CellForRowAt 메서드가 실행되기 직전에 미리 데이터를 로딩

CellForRowAt 메서드가 실행되면 미리 로딩한 데이터를 cell에 뿌려줄 수 있다.

→ 만약 빠른 스크롤 등으로(예를 들어 유저가 단순히 하단에 있는 데이터를 찾기 위해 스크롤하는 상황) 데이터를 보여줄 필요가 없을 경우, cancelPrefetchingForRowsAt메서드에 관련 작업을 수행할 수 있다.
→ 이때, 데이터를 보여줄 필요가 없다는 판단은 시스템에서 한다. 개발자는 해당 상황에서 실행할 로직만 처리해주면 된다.

일급 객체

  • 일급 객체란?

일급 객체first-class object)란 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 말한다.

→ 여기서 ‘일급’이라는 단어의 의미는 ‘특권’과 같은 것을 의미하는 것이 아니라, 일반적으로 객체가 지원하는 연산을 모두 지원한다는 의미로 ‘범용성’에 초점이 있는 단어이다.

→ 프로그래밍적인 관점에 초기의 프로그래밍 언어에서는 함수는 일급 객체가 아니였다. 즉, 매개변수 타입, 리턴값, 바인딩같은 기본적인 연산에 함수라는 객체를 활용하는 것은 불가능하다는 말이다.

→ 그래서, ‘함수를 일급 객체처럼 활용할 수 있도록 하냐’에 대한 관점에서, 일급 객체 == 함수로 여기고 조건이나 부가 설명을 한다. (엄격하게 일급 객체와 함수가 동일한 것은 절대 아니다. )

  • 일급 객체의 조건
  1. 일급 객체는 바인딩할 수 있어야 한다. (객체 자체를 변수나 상수에 할당할 수 있어야 한다. )
  2. 일급 객체는 함수의 매개변수가 될 수 있다.
  3. 일급 객체는 함수의 리턴값이 될 수 있다.
  4. 일급 객체는 동적으로 프로퍼티를 추가할 수 있다.

→ 여기서 4번의 경우, 스위프트에서는 지원하지 않는 기능이라 언급하지 않는다.

  • 일급 객체의 바인딩
func checkBank(bank:String) -> Bool {
   let bankAry = ["우리","신한","하나"]
    
    return bankAry.contains(bank)
}

let function = checkBank

//checkBank와 동일하다. 리턴값으로 bool값 날릴 것임.
function(bank:String)
  • 함수 타입의 종류

→ 함수 자체적으로 가질 수 있는 기본 타입은 4가지이다.

//1. 매개변수X, 반환값O
func myName() {
    
}

//2. 매개변수O, 반환값X
func myName(name:String) {
    
}

//3. 매개변수X, 반환값O
func myName() -> String {
    
}

//4. 매개변수O, 반환값O
func myName(name:String) -> String {
    
}
  • 일급 객체를 함수의 매개변수, 리턴값으로 활용

→ 함수 자체를 매개변수로 받거나 리턴값으로 활용할 수 있다.


func plus(_ a: Int, _ b: Int) -> Int {
	return a + b
} 

func minus(_ a: Int, _ b: Int) -> Int {
	return a - b
} 

func caculate(operand:(Int, Int) -> Int, a:Int, b:Int) -> Int {
	
	return operand(a.b)
}

let sum = caculate(operand:plus, a:4, b:3)
// 7

let minus = caculate(operand:minus, a:4, b:3)
//1

POST 실습

  1. 링크 url에 대한 정보를 표기
  2. method를 지정해줬다.(get, post…)
    • post는 헤더에 요청 정보를 넣어서 보내준다. 멍청하게 url 쿼리에 보내서 1시간 날린사람? 그게 접니다.
  3. key : value를 해더에 지정해준다.


  4. post 할 내용은 아래과 같이 from url ENCODE 방식으로 보내준다.
    업로드중..

1개의 댓글

comment-user-thumbnail
2023년 8월 14일

잘봤습니다 :)

답글 달기