1. Redis란?Redis는 Key:Value 구조의 비정형 데이터를 저장하고 관리하는 비관계형 데이터베이스이다. 데이터를 디스크가 아닌 메모리에 저장하므로 인메모리 DB(In-Memory DB)라고 부른다. 2. 데이터베이스가 있는데, 왜 Redis를 사용할까?데이터베이스가 있음에도 Redis를 사용하는 이유는 CPU가 계산에 필요한 데이터를 얻기 위한 속도 차이가 발생하기 때문이다. 데이터베이스는 물리 디스크에 직접 데이터를 쓰기 때문에 서버에 장애가 발생하더라도 데이터가 손실되지 않는다. 그러나 데이터가 필요할 때마다 매번 디스크에 접근하게 되면 사용자가 많아질수록 데이터베이스에 부하가 발생하게 된다. 따라서 사용자가 많을 때 데이터베이스의 과부하를 줄이기 위해서 Redis와 같은 캐시 서버를 도..
1. 컴퓨터 시스템에서 연산 속도CPU 레지스터 > CPU 캐시(Cache) > 메인 메모리(RAM) > 하드 디스크(HDD) 2. 캐시(Cache)를 왜 사용할까?메모리가 CPU 속도를 따라오지 못한다.CPU 성능은 빠르게 향상되었지만, 메모리의 처리 속도는 이를 따라오지 못했다. 아무리 CPU의 처리 속도가 빠르더라도 메모리 속도가 이를 따라오지 못한다면 시스템 성능은 저하될 수밖에 없다.메모리와 CPU 간 속도 차이로 작업이 지연된다.CPU는 초당 수십억 개의 명령어를 처리할 수 있지만, 메인 메모리는 그 속도를 따라오지 못한다. CPU가 데이터를 처리하려면 메모리에서 필요한 데이터를 읽어오거나 쓰는 과정이 필요한데, 메모리 속도가 느리면 CPU는 데이터가 도착할 때까지 대기해야 한다. CPU가 메..
프로세스 간에는 기본적으로 자원을 공유할 수 없다. 각 프로세스는 독립된 주소 공간을 가지고 있기 때문에 자신의 메모리 공간에만 접근할 수 있다. 만약 프로세스가 서로의 메모리 공간에 접근할 수 있다면 의도치 않게 데이터를 변경하거나 충돌이 발생할 수 있다.만약 프로세스 간에 데이터를 주고받고 싶다면 IPC(Inter-Process Communication) 방식을 사용해야 한다. 1. 공유 메모리공유 메모리 방식은 사용자 영역 일부를 데이터를 주고받기 위한 메모리 공간으로 사용한다. 프로세스 A는 B에게 전달하고자 하는 데이터를 공유 메모리에 저장하고, 프로세스 B는 공유 메모리에 저장된 데이터를 읽는다. 이렇게 되면 프로세스 A가 B에게 데이터를 전달한 것과 마찬가지가 된다. 공유 메모리 방식은 사용..
1. 커널 영역과 사용자 영역커널 영역에는 프로세스 제어 블록(PCB)이 저장되고, 사용자 영역에는 실행 중인 프로세스를 코드 영역, 데이터 영역, 힙 영역, 스택 영역으로 나뉘어 저장된다.1-1. 코드 영역코드 영역은 CPU가 실행할 명령어가 담겨 있기 때문에 읽기 전용(read-only) 모드로 사용한다. CPU는 코드 영역에 담긴 명령어를 읽고 실행만 하기 때문에, 수정되어서는 안 될 공간이다.1-2. 데이터 영역데이터 영역은 프로그램이 실행되는 동안 사용할 데이터가 저장되는 공간이다. 주로 정적 변수와 전역 변수가 저장된다.전역 변수 : 프로그램 전체에서 사용 가능한 변수이다.자바(Java)는 전역 변수를 지원하지 않는다.정적 변수 : 클래스에 속한 변수로, 클래스의 모든 인스턴스가 공유하는 변수..
1. 외부 단편화란?외부 단편화란 남아 있는 총 메모리 공간이 요청 메모리 공간보다 크지만, 남아 있는 메모리 공간이 연속적으로 위치하지 않아 요청한 메모리를 적재할 수 없는 현상이다. 아래 예시를 보자.남아 있는 총 메모리 공간 : 100MB (50 + 50)요청 메모리 크기 : 80MB총 메모리 공간만 보았을 때 충분히 요청 메모리를 적재할 수 있으나, 남아있는 두 메모리가 연속적으로 위치하지 않아 적재할 수 없다. 1-1. 외부 단편화가 발생하는 이유총 메모리 공간은 충분함에도 남아 있는 메모리들이 연속적으로 위치하지 않기 때문이다. 2. 외부 단편화 해결하기외부 단편화가 발생한 이유는 남아있는 메모리가 연속적으로 위치하지 않았기 때문이다. 그렇다면 남아 있는 메모리를 연속적으로 위치할 수 있도록..