210528 Fri

Sunny·2021년 6월 2일
0

Today I Learned

목록 보기
65/88

1. 첫 번째 학습 내용: 컬렉션 뷰

한 행당 셀 2개씩 나오게 하고 싶은데
어떻게 하는 것일까? 🤔
UI 나중에 다시 찾아서 해보는걸루...!

[iOS] 화면 방향에 따른 collectionView cellSize 변경

Using the Flow Layout

2. 두 번째 학습 내용: 라이브러리 vs. 프레임워크 ⭐️⭐️⭐️

라이브러리: 기능의 단위
레이아웃을 작성하는데 도움을 줄 수 있는 기능의 모음

프레임워크: 기능의 기반이 되는 것
시스템 안에서 구현할 수 있는 접점을 만들어주는 게 프레임워크
라이브러리는 프레임워크 위에서 얘가 필요한 기능들을 좀 더 수행할 수 있게 도움을 주는 역할

e.g. 레이아웃 구성할 떄 오토레이아웃이라는 프레임워크 기능을 이용해서 레이아웃을 구현하는 데 있어서 손이 많이 가니까
손이 덜 갈 수 있게 보조함수를 만들어준게 라이브러리라고 볼 수도 있음

UIKit 들어가면 Framework라고 써있음
Apple document에 가보면
library라고 써있는거 없을 것

프레임워크는 없으면 구현을 못함
라이브러리는 없어도 만들 수는 있음

3. 세 번째 학습 내용: Cache / NSCache

Q. 캐시 서버 vs. 프록시 서버
캐쉬 서버 = 캐시를 하기 위해 구성하는 서버

Q. 캐시란?

자주 사용되는 데이타나 정보들을 임시적으로 저장하는 공간!
하드웨어의 캐시나
소프트웨어의 캐시나 중요한거는
반복되는 데이터의 임시 저장소라는 것!

하드웨어 캐시도
CPU와 메모리 사이의 캐시가 대표적인 캐시 중의 하나

메모리에서 꺼내온 명령어나 데이터를
CPU 옆에 캐시에다가 그냥 갖다 넣는게 아니고
자주 사용되거나 주요한 명령어들을
캐시에다가 담아놓음
캐시메모리가 용량이 그렇게 크지 않음

CPU가 너무 빠르니까
메모리에서 CPU까지 다이렉트로 정보를 줘버리면
메모리에서 불러와서
CPU에게 일 처리를 시키는데
CPU가 노는 시간이 많아짐

CPU 스펙에 보면
L1 캐시, L2캐시
하나씩 붙고 더 용량이 커질 때마다
CPU 가격이 폭등함

Q. 왜 캐시를 사용하느냐?

자주 사용하는 데이터는 계속 느린 디스크에서 꺼내오거나
서버에 계속 요청할 필요가 없음
임시적인 공간에 저장해두면 거기서 꺼내오면 되니까

Q. 캐시는 어디에, 어떻게 구현이 되어있고 어디에 무슨 정보를 저장하나?
네트워크와 통신을 할때
캐시 규칙도 따로 만듦

캐시를 몇일 동안 저장할거냐?
캐시가 만료될거면 날릴거냐?
이런 여러가지 합의를 봄

캐시를 로컬에도 만들어둘 수 있음

혹시라도 이런게 잘 안되면 새로고침 해보세요!
→ 서버랑 클라이언트는 캐시를 갖고 있는데
로컬 캐시를 저장해놓음
= 구글닷컴 치면 구글 서버에까지 요청해서
구글 페이지 보내줘 서버에 요청해야 하는데

내 컴퓨터에 구글 페이지 저장돼있음
구글 서버로 요청을 안보내고
저장되있는 모습 (로컬 캐시)을 보여주는 것

캐시 policy는 서비스마다, 때마다 달라질 수 있음
캐시 policy를 갖고있는 서버에서
혹은 로컬에서
그 페이지를 어차피 이 주소에 해당하는 페이지 내가 갖고 있는데?
그러면 서버까지 요청 안보내고 저장된거 보여줄 수도 있음

브라우저에다가 새로고침을 보낸다
= 로컬 캐시 무시하고 서버에까지 보내줘

서버 컴퓨터에도 마찬가지로
자기 디스크에 있는 정보를 불러다가
사용자한테 돌려줘야 하는데
매번 요청이 오면 힘듦

그래서 자주 들어오는 요청 (e.g. 구글 메인 페이지)
메모리에다가 올려놓고
요청 들어오면 반사! 이런 식으로 보내줌
= 메모리 캐시
(디스크에서 매번 불러오는게 아니고)

캐시만 운용하는 서버만 따로 둘수도 있음
진짜 필요한 데이터 처리하는 서버

캐시에 없는 정보면
여기에 와서 DB에서 처리해가지고 돌려주기도 함

서버에도 캐시서버에
1시간, 몇일 살려둘거냐? 정책이 있음

예시)
넷플릭스 - 메인 서버는 미국에 있고
중계 서버를 각 지역에 놔둠
각 지역의 사용자들은 가까운 지역 중계 서버에 접근하는 것

Q. 쿠키와 캐시의 다른 점?

개인정보 보호 정책 쿠키 사용에 대한 허용이 의미하는 바?

로그인한 사용자는 이 사람이 로그인하고 검색하고 사용하면
그 내용을 사용자 데이터 베이스에 축적할 수 있음
이 사람이 자주 검색하는 키워드에 대한 광고를 나중에 보여줄 수 있음

로그아웃한 사용자 같은 경우에는 추적이 안됨
이 사람의 행위도 트래킹을 해야 함
쿠키처럼 무엇을 검색했는지? 바스락거리게 기록을 남김
쿠키를 먹으면서 돌아다닌다 그러면 조각이 떨어져있음
= 사용자가 동작했떤 흔적들을 남겨뒀다가
우리가 추적을 하겠소

로그인을 하지 않았어도
관심있는 키워드나 그런 것들을 볼 수 있도록
로컬에서 너의 정보를 이용을 할게!
(우리 서버에 저장을 하지 않더라도)

만약에 정보 남기는거 원하지 않으면
Customize settings에서 원하지 않는 것 싹 다 빼버리면 됨

네이버에서 로그아웃해고 검색해도
쿠키랑 IP 정보를 가지고
내 패턴을 파악하고
관련된 광고를 보여줄 수 있음!
로그아웃 했다고 안심하지 말고
쿠키를 어떻게 사용하고 있는지도 알아서 잘 사용해야 함

Q. iOS 환경에서 캐싱을 하는 방법?

Q. NSCashing은 데이타를 어디에다 저장할까?
A. 메모리

Q. 메모리에 저장하면 장단점은 뭐가 있을까?
메모리는 디스크보다는 빠르니까
성능상의 이점은 있는데

프로세스가 종료가 되면
메모리에 있던게 모두 해제되니까
메모리에서 사라진다

Q. NS캐싱을 사용해서
디스크에 저장하는 방법은 없을까?

NS캐시는 메모리만 지원함

앱을 종료하더라도 캐싱된 데이타를 불러오려면
어떻게 해야할지?
나중에 고민해보기!
→ 파일 매니저를 이용할 것

파일 매니저로 어떻게 읽고 쓸 것인지 다양한 방식이 있을 것.
User default, key chain, core data, json file 등
장단점이 다 있음

일단은
메모리 캐싱이 지원되는
NSCache라는 공식적인 방법이 있다
고 정도는 일단 파악해두기

참고) URLSession은 자동으로 캐싱함
우리도 모르는 사이에 캐싱이 되고 있었던 것!
그러니 너무 걱정안해도 됨

NSCache는
네트워크 통해서 이미지 불러올 때
단순히 디스크에서 이미지나 큰 파일을 불러오는 일이 잦을때
NSCache에 넣어두면
그 캐시에서 메모리에 올려두고 쓰면 됨
(매번 디스크에서 불러오기 보다는)

profile
iOS Developer

0개의 댓글