프레임워크
는 개발자가 개발을 쉽게 할 수 있도록 뼈대를 제공해준다.
라이브러리
는 개발에 필요한 것들을 미리 구현해놓은 도구라고 할수 있습니다.
프레임워크
와라이브러리
의 가장 큰 차이점은제어 흐름
이 어디에 있냐는 점입니다.프레임워크는 전체적인 흐름을 쥐고 있으며 애플리케이션의 코드는 프레임워크에 의해 사용됩니다. 수동적으로 동작하기 때문에 제어의 흐름은 프레임워크에 있습니다.
반면 라이브러리는 개발자가 전체적인 흐름을 만들며 라이브러리를 가져다 씁니다. 능동적으로 라이브러리를 호출하여 사용한다는 차이점이 있습니다.
프레임워크는 소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 상호 협력하는 클래스와 인터페이스의 집합이라고 할 수 있다.
ex) Java 개발에서 사용되는 Spring 프레임워크나 Python 개발에 사용되는 Django, 안드로이드 앱개발에 사용되는 Android등이 있다.
개발에 필요한 것들을 미리 구현해놓은 도구라고 할 수 있다 재사용이 가능한 기능을 미리 구현해 놓고 필요한 곳에서 호출하여 사용 가능하도록 만들어진 집합이다.
ex) C++의 STL이나 Python의 Pip로 설치한 패키지/모듈(pandas, tnesorflow)등이 있다.
1) 캐시의 장점은 계산이나 접근 시간 없이 더 빠른 속도로 데이터에 접근할 수 있다.
캐시의 단점은 메모리공간이 상대적으로 작기때문에 비용이 비싸다는 점이다.2) 첫 번째로는
브라우저 캐시
가 있다.
웹 페이지에서 사용되는 이미지, 스크립트, 스타일 시트 등의 자원을 브라우저 캐시에 저장합니다. 이를 통해 자원에 대한 요청이 있을 시 서버에 요청하지 않고 브라우저 캐시에서 불러옵니다.
두 번째로는로컬 스토리지 캐시
있다.
로컬 스토리지는 브라우저 내에 데이터를 저장하는 기능이다. 로컬 스토리지를 자주 사용되는 데이터나 사용자 정보 등을 브라우저에 저장해두면, 이후에 같은 데이터나 정보를 요청할 때 서버에 요청하지 않고 기존 로컬 스토리지에서 불러옵니다.
캐시란? 자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 장소이다.
아래와 같은 저장 공간 계층 구조이다. 캐시는 저장 공간이 작고 비용이 비싼 대신 빠른 성능을 제공한다.
무어의 법칙(Moore's law)에 의해 CPU의 처리속도가 급격히 증가했지만, 메모리 접근 속도는 늘어지 못했다.
- 메모리보다는 빠르고 CPU보다는 느린 cache를 메모리와 CPU 사이에 위치, CPU의 데이터 접근 시간을 줄임
- 결과가 나올 때마다 메모리에 저장하는 것보다, cache에 저장 한 번에 메모리를 최신화하는 것이 효율적
파레토 법칙이란
80퍼센트의 결과는 20퍼센트의 원인으로 인해 발생한다는 말
이다.
즉, cache가 효율적일 수 있는 이유가 있다. 모든 결과를 캐싱할 필요는 없으며, 서비스 할때 많이 사용되는 20%를 캐싱한다면 전체적으로 영향을 주어 효율을 극대화 할 수 있다는 말이다.
모든 데이터를 캐시에 담기에는 캐시라는 저장 공간이 작다. 그렇기 때문에 파레토 법칙에 해당하는 소수의 데이터를 선별해야한다 이때 사용되는 것이 지역성
이다.
- 특정 데이터가, 가까운 미래에 또 한 번 데이터에 접근할 가능성이 높은 경우
- 메모리 상의 같은 주소에 여러 차례 쓰기를 수행하는 경우
- 특정 데이터와 가까운 주소가 순서대로 접근된 경우
CPU 캐시
,디스크 캐시
의 경우 한 메모리 주소에 접근 시, 그 주소 뿐 아니라 해당 블록 전부 캐시로 가져옴- 이 때, 메모리 주소를 오름차순이나 내림차순으로 접근하면 캐시에 이미 저장된 같은 블록의 데이터에 접근하게 됨(캐시의 효율성 향상)
- 데이터가 순차적으로 엑세스 되는 경향을 보임. 프로그램 내 명령어가 순차적으로 구성
- 1) 데이터 요청이 들어오면, 먼저 캐시에서 데이터 탐색
- 2) 캐시가 없거나(cache miss)나, 오래된(expiration) 경우 원본 데이터가 저장된 곳에서 데이터 조회 후 캐시에도 데이터를 복사/갱신
- 3) 캐시에 데이터가 있으면(cache hit) 캐시의 저장된 데이터를 제공
- 4) 오래된 데이터는 삭제(eviction)