티스토리 뷰

TIL

[TIL] 2022 / 08 / 01

희철 2022. 8. 1. 22:34

HTTP(Hyper Text Transfer Protocol)

 

 

인터넷에서 데이터를 주고 받을 수 있는 프로토콜

 

모든 프로그램이 규칙에 맞춰 개발해서 상호 간 정보 교환 가능.

 

클라이언트에서 http를 통하여 서버로 부터 데이터를 요청하면 서버는 json, xml 등의 형태로 응답을 줌.

 

 

특징

 

단방향 통신

-> 클라이언트가 요청을 해야만 서버가 리스폰스를 줄 수 있음.

 

Connectionless

-> 모든 클라이언트의 요청이 전부 개별적임

 

Stateless

-> 서버가 클라이언트 정보를 기억하고 있지 않음.

-> 웹에서는 쿠키, 세션을 통해 클라이언트 식별

-> 앱에서는 토큰을 통해 클라이언트 식별

 

 

Method

 

 

GET

 

-> 서버에 정보를 요청할때 사용

-> URL에 데이터를 포함하여 요청하여 보안에 취약

-> 정보를 전달하는 방식으로 query string, Header 사용.

 

* Query String : URL주소에 요청하는 데이터를 파라미터로 넘기는 형태

 

 

POST

 

-> HTTP body에 데이터를 포함해서 정보 전달

-> URL자체에는 데이터 포함되지 않음.

 

이 외에도 데이터를 수정하는 PUT, 삭제하는 DELETE가 있음.

 

 

Status code

 

 

대부분의 사람들이 404에러를 알듯.

 

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

 

보편적인 상태코드가 존재하지만 서버에 따라 달라질 수 있음.

출처: https://www.whatap.io/ko/blog/40/

 

HTTP 메시지

 

라인 - 헤더 - 바디 구조로 이루어져있음.

 

헤더: 메시지 본문에 대한 메타정보

바디: 실제 메시지 본문 내용

 

 

XML

 

<> 로 이루어짐

 

 

JSON

 

XML단점 보완해서 만든 경량의 데이터 교환 형식

{} 안에 딕셔너리 형태로 이루어짐

 

 

URL구조

 

scheme: http, https 같이 사용할 프로토콜

host&port: new.naver.com

path: host와 port 뒤에 이어지는 부분 news.naver.com:80/article/343243 

Query String: ?뒤의 부분

 

 

 

Alamofire와 SwiftyJson을 이용하여 API를 통해 데이터 받아오기

 

 

로또 번호를 받아와서 레이블에 띄워보았음.

AF는 alamofire

validate() 괄호안에 status코드를 정하면되는데 기본적인 것이 있으므로 따로 설정안해도됨.

responseJSON 부분이 SwiftyJson부분.

클로저 안에서 response의 result가 success, faliure이냐에 따라 switch로 나눔.

func requestLotto(number: Int) {
    
    let url = "https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo=\(number)"
    AF.request(url, method: .get).validate().responseJSON { response in
        switch response.result {
        case .success(let value):
            let json = JSON(value)
            
            let bonusNum = json["bnusNo"].intValue            
            let date = json["drwNoDate"].stringValue
            self.numberTextField.text = date
            
        case .failure(let error):
            print(error)
        }
    }
}

 

 

 

Extension에서 protocol채택

 

 

이전에 이렇게 선언해서 뷰컨트롤러마다 채택했었음.

근데 extension에서 protocol을 채택하면 따로 identifier라는 변수를 선언할 필요없음.

 

 

구조체와 열거형에서의 타입 프로퍼티

 

 

enum에 타입 프로퍼티를 선언하면 구조체와 달리 인스턴스 생성을 방지할 수 있음.

 

struct에서도 접근 제어를 이용해 초기화를 막을 수 있음.

private init() {} 을 작성하고 인스턴스를 생성하려고하면 오류가뜸.

 

 

 

enum에서 case와 타입 프로퍼티

 

 

case의 경우는 rawValue가 같을 수 없음.

 

 

Singleton Pattern

 

 

하나의 인스턴스만 생성해서 사용하는 디자인 패턴

 

클래스내에 타입 저장 프로퍼티로 인스턴스를 생성

-> 이때 보통 shared, standard, default로 생성.

 

싱글톤패턴을 이용하면 인스턴스 하나만 메모리에 올려놓고 나머지는 필요할때마다 쓰는거라 메모리 낭비를 방지할 수 있음.

 

싱글톤패턴을 사용중일때 다른 파일에서 인스턴스를 만들게된다면 패턴이 깨짐

-> 위에서 말한 private init() 을 이용해 초기화 구문이 동작하지 않게해서 해결가능.

'TIL' 카테고리의 다른 글

[TIL] 2022 / 08 / 03  (0) 2022.08.04
[TIL] 2022 / 08 / 02  (0) 2022.08.02
[TIL] 2022 / 07 / 31  (0) 2022.07.31
[TIL] 2022 / 07 / 30  (0) 2022.07.30
[TIL] 2022 / 07 / 29  (0) 2022.07.30
댓글
최근에 올라온 글
Total
Today
Yesterday