GitIgnore는 가장 먼저 처리되어야 한다
gitignore 파일명 앞에 . 을 붙여 숨김파일로 지정한다.(.gitignore)
empty파일을 가장 상위에 생성하고 .gitignore에 APIKey.swift와 같은 위험부담이 큰 파일명을 입력한다.
편리하게 gitignore를 관리하고싶다면
https://www.toptal.com/developers/gitignore
"생성"버튼을 클릭하면 아래와같은 페이지를 볼 수 있는데
당황하지않고 페이지에 있는 내용을 모두 복사한다.
이후 과정으로는 구글링을 통해서도 충분히 알 수 있기 때문에 간단히 과정을 텍스트로 기입하겠다.
1. terminal을 실행시켜 프로젝트 폴더의 git repository로 경로변경을 해준다.(프로젝트 처음 만들때 git repository를 생성해야함. 혹은 프로젝트 내에서 깃 레포를 직접 만든다)
2. vim .gitignore 입력.
3. 입력모드로 전환(i키 -> INSERT)
4. git ignore.io 사이트에서 복사 연타한 내용을 입력한다.
5. esc버튼을 누른 후 :wq! 입력 후 엔터.
6. git에 push하면 마무리
데이터가 많은 리소스 -> 사용자 스크롤 시점 기능 구현
페이지 네이션 동작 방식
1.OffsetPageNation
Offset방식
전체 데이터 3000개 중에서 30개를 가져오라고 요청
(예를들면 "사과"에 대한 리소스를 검색했는데 3000개의 데이터가 존재하는데 그 중 30개 데이터만 화면에 표시)
활발한 SNS에서는 요청(30번째 데이터 중에서 28번째 데이터를 보는상황)중에 글이 20개 이상이 쓰이면
28번째 데이터의 열람이 끝난 후 다음 데이터가 기존 0~20번째 사이 데이터가 보여질 수 있으므로 데이터 중복의 위험이 있음
start1~30 30번에 다가가면 31~60 > 61~90 다음 데이터가 필요한 상황을 인지하고 다음 데이터 30개를 준비함
즉 몇 번째 페이지에서 몇 개의 데이터를 URL에 담아서 가져올지,
3000개의 데이터가 잘 안변할 경우에 주로 쓰이는 방식
2.CursorPagenation
Cursor방식
최근에 추가된 글을 볼 수 없지만 SNS같이 글이 실시간으로 많이 올라오는 방법에 사용되어 데이터 중복을 방지할 수 있다.
마지막 데이터를 기준으로 요청한 수 많큼 요청한다
사용자가 1~30번 글을 보던 와중에 30번글을 보고있는데 20개의 글이 추가되어도 추가된 글을 고려하지않고 항상 마지막 데이터를 기준으로 삼는다
타입 어노테이션 vs 타입 추론
빌드 속도가 더 짧은 방식은?
let num: Int = 30 <타입 어노테이션>
let num = 30 <타입 추론>
>타입 추론방식
ex)검색할 때 클라이언트가 서버에게요청을 하고 응답을 함
사용자가 더이상 요청하지 않는다면 연결을 끊어버림
HTTP특성 중 무상태, 비연결성에 해당한다.(2022.08.02 TIL 참고)
ex)음악 스트리밍(유xx 뮤직, 멜x) -> 요청방법? -> 음악 끝나가니까 다음 음악 준비해라(지속적으로 요청?)
ex)채팅 -> 상대방이 채팅하고 내가 응답하고 -> 서버에게 카톡 온건지 요청(얼마나 자주 요청할까? 3초마다 request를 보내도 되지만 상대방이 읽을때까지 ㅇ, 이모티콘을 무한으로보내는건? > 응답시간을 0.5초로 처리? 카톡 이용자는 나만 있는 것도 아닌데?
-> 소켓을 활용함
소켓 방식
채팅방이 열리는 순간 이용자 - 서버간 네트워크 통로를 지속적으로 유지시킨다
소켓의 특성
실시간 채팅, 스트리밍 음악, 유xx 라이브영상 -> 지속적으로 요청하기 부담스러운 네트워크 통신에서 사용됨.
그래서 필요한 순간에 연결을 끊지않고(비연결성x) 필요한 정보가 유입되는 순간 클라이언트에서 서버에 먼저 요청을 해준다.
대표적으로 많이 사용되는게 실시간 채팅.
커넥션을 지속적으로 유지되기 때문에 부화가 높지만 채팅에서는 필수 기능
연결이 되어있어서 서버가 먼저 이용자에게 데이터를 전송해줄 수 있다.
일반적 통신은 HTTP로 하는데 실시간 통신은 소켓을 통해서 이루어진다.
카xx톡 채팅방이 열려있는 순간에 상대방이랑 연결 -> 뒤로가기를 하면 연결이 끊김
다른 채팅방에 들어가면 새로운 링크 생성 --> 이런 과정이 반복된다.
HTTP 방식은 서버에서 데이터를 먼저 못준다
노티(실시간 알림)를 받는다? -> 소켓방식을 활용.
소켓을 쓰면 먼저 데이터를 받을 수 있다.
(http - 단방향 통신) VS (소켓 - 양방향 통신)
스위프트에서 객체란 보통 -> 클래스의 인스턴스
first class object 객체,함수형, 프로토콜 객체지향
swift에서 함수는 일급객체의 특성을 갖고있다.
일급객체의 특성 3가지
1.변수나 상수에 함수를 넣을 수 있다.
2.함수의 반환 타입으로 함수를 사용할 수 있다
3.인자값에 함수를 넣을 수 있다
//1번 특성
func checkBankInformation(bank: String) -> Bool {
let bankArray = ["은행1", "은행2", "은행3"]
return bankArray.contains(bank) ? true : false
}
//단순히 변수나 상수에 함수를 실행해서 반환된 반환값을 대입한 것 (1급 객체만의 특성은 아님)
let checkResult = checkBankInformation(bank: "우리") //checkResult : Bool
print(checkResult)
//변수나 상수에 함수 '자체'를 대입할 수 있다(1급 객체의 특성)
//단지 함수만 대입한 것으로, 실행된 상태는 아님
let checkAccount = checkBankInformation
//checkaccount 타입 -> (String) -> Bool // Function Type (ex. Tuple)
let tupleExample: (Int, Int, String, Bool) = (1, 2, "Hello", true) //튜플은 여러가지 형식을 하나에 넣을 수 있다. 타입 어노테이션도 가능
tupleExample.2 // 호출 -> 튜블의 2번 인덱스 값을 가져온다.
//함수를 호출을 해줘야 실행이 된다.
checkAccount("신한")
//Swift3 부터 타입을 적을때 꼭 괄호를 명시해준다.
//Function Type : (String) -> String (스트링 타입이고 스트링 값을 반환한다)
func hello(useranme: String) -> String {
return "저는 \(useranme)입니다."
}
//Function Type : (String, Int) -> String (스트링, 인티져 타입이고 스트링 값을 반환한다)
func hello(nickname: String, age: Int) -> String {
return "저는 \(nickname), \(age)살 입니다."
}
//오버로딩 특성으로 함수를 구분하기 힘들 때, 타입 어노테이션을 통해서 함수를 구별할 수 있다.
//하지만 타입 어노테이션만으로 함수를 구별할 수 없는 상황도 있다.
//함수 표기법을 사용한다면 타입 어노테이션을 생략하더라도 함수를 구별할 수 있다. let result2 = hello(nickname: ) //함수표기법
let result: (String) -> String = hello
result("양동이")
let ageResult: (String, Int) -> String = hello
ageResult("박갑근", 23)
func hello(nickname: String) -> String {
return "저는 \(nickname)입니다."
}
let result2 = hello(nickname: ) //함수표기법
result2("고무대야")
//2번 특성
//() -> () 매개변수도 반환값도 없다
func oddNumber() -> Void {
print("홀수")
}
func evenNumber() {
print("짝수")
}
func resultNumber(number: Int, odd: () -> (), even: () -> ()) {
return number.isMultiple(of: 2) ? even() : odd() //2가 아니면 다른 메소드를 선언해라
}
//매개변수로 함수를 전달한다
resultNumber(number: 9, odd: oddNumber, even: evenNumber)
//두번째 매개변수에서 엔터
//익명변수 == 클로져
resultNumber(number: ) {
} even: {
}
//=> 얼럿 호출 함수, 알라모파이어와 유사한 형태를 가진다
//일급객체 사용이유 - 코드를 사용한 원리에 대한 이해와 스위프트에서 자주 쓰인다.
[SeSAC] 20220808_TIL (API관련 파일 관리하기) (0) | 2022.08.08 |
---|---|
[SeSAC] 220805_TIL (클로저, Sync, Async) (0) | 2022.08.05 |
[SeSAC] 220804_TIL (Serialization, Pagenation) (0) | 2022.08.04 |
[SeSAC] 220802_TIL (json구조분석, API KEY, REST API) (0) | 2022.08.02 |
[SeSAC] 220801_TIL (깔끔한 코딩, StoryBoard Identifier, UserDefaults, 서버통신, Insomnia, json) (0) | 2022.08.01 |