일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Elasticsearch
- 그리디
- Baekjoon
- cleancode
- 데이터베이스
- Java
- 백준
- 개발
- mongoDB
- 개발자
- 읽기쉬운코드
- ES
- 엘라스틱서치
- 스프링
- API
- 코딩
- database
- JPA
- 코딩테스트
- 애자일기법
- spring boot
- 프레임워크
- 그리디알고리즘
- 알고리즘
- 자바
- framework
- 클린코드
- 코드
- 애자일프로그래밍
- Spring
- Today
- Total
목록메모리 (4)
튼튼발자 개발 성장기🏋️

데이터를 보다 효율적으로 처리하기 위한 많은 방법이 있지만 그 중에서 OS 캐시를 살펴보려한다. OS캐시는 어떻게 동작하며 만약 제대로 처리되지 않았을 때 분산에 대해서 어떻게 고려해야하는지 알아본다. OS는 메모리를 이용해서 디스크 액세스를 줄이는데, 그 원리가 OS 캐시다. 리눅스의 경우에는 페이지 캐시나 파일 캐시, 버퍼 캐시라고 하는 캐시 구조를 가지고 있다. OS는 가상 메모리 구조를 가지고 있으며 이는 흔히 말하는 '스왑'과 다른 말이다. 스왑은 물리 메모리가 부족할 때 2차 기억장치를 메모리로 간주해서 외형상의 메모리 부족을 해소하는 원리를 말한다. 가상 메모리 구조를 기반으로하는 페이징 구조는 논리 어드레스를 물리 어드레스로 변환한다. 물리적인 하드웨어를 OS에서 추상화하기 위해서 '가상 ..

트래픽이 증가하게되면서 우리는 장비의 성능을 끌어올리거나 개수를 늘릴 수 있고, application의 캐시 등 성능개선, DB서버의 I/O 최소화 등 작업을 진행하면서 기본적으로 알아야할 사항들이 상당히 많다. 일전에 언급했던 스케일업과 스케일아웃이 많이 볼 수 있는 대응 방법인데, 보통은 스케일아웃을 많이 채택한다. 그 이유는 많은 것들이 있을 수 있지만 웹 서비스에 적합하고 비용이 저렴하며 시스템 구성에 유연성이 있다는 점이 높게 평가되고 있다. 스케일아웃의 특징은 하드웨어를 횡으로 전개해서 CPU 부하의 확장성을 확보하기 쉽다. 하지만 DB 서버 측면에서는 I/O 부하가 잦게 일어난다. [그림 1]을 보면 알 수 있듯이 프록시의 요청이 AP 서버를 거처 DB에 도달해서 DB측에 I/O가 발생한다...

대규모 데이터의 처리는 왜 소규모 데이터보다 어려운가? 데이터는 디스크에서 로드해서 메모리에 저장한다고 이전 토픽에서 언급한 바있다. 속도를 따지고 보자면 메모리가 디스크보다 훨신 빠르기 때문에 메모리에서 계산해야 빠른 결과를 볼 수 있는 것이다. 이 부분이 포인트가 된다. 메모리는 비교적 디스크보다 크기가 작기 때문에 대규모 데이터를 처리하기엔 적합하지 않다. 그러나 속도 측면에서 볼 때는 디스크보다 메모리에서 계산하는 것이 효율적이다. 이 사실에서 알 수 있는 부분은 메모리 내에서 계산할 수 없는 정도의 데이터라면 디스크에 두고 특정 데이터를 검색한다는 것이다. 디스크는 왜 메모리보다 느린가? 디스크는 물리적인 탐색을 통해 검색하기 때문에 속도에 영향이 있을 수 있다. 디스크에는 헤드라고 하는 녀석과..

언제나 그렇듯 대부분의 언어는 컬렉션이라 불리는 데이터 구조를 제공한다. 우리가 공부했던 튜플과 배열과는 다르게, 힙 영역에 저장된다. 즉, Compile Time에 데이터 크기를 알 필요가 없다는 뜻이 되며, 크기 확장 혹은 축소가 가능하다는 이야기다. (우리가 공부할 각 컬렉션의 성격이 조금씩 다르니, 적절하게 사용할 수 있는 능력을 기르는 것이 옳다고 생각된다.) 이번 장에서 다룰 컬렉션은 Vector(벡터)다. 메모리상에서 이웃되도록 모든 값을 넣는 단일 데이터 구조에 하나 이상의 값을 저장할 수 있도록 한다. 같은 타입의 값만을 저장 가능하다. 벡터 정의 및 사용 fn main() { // vector 정의 let mut vector: Vec = Vec::new(); // vector에 값 삽입..