본문 바로가기

JAVA

Cache, RAM, HDD/SSD

Cache : 자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 장소 이다

또는, 빠른 접근이 가능한 메모리(램, 디스크 등)에 데이터를 저장하여, 나중에 같은 데이터가 요청될 때

기존 저장된 값을 즉시 반환할 수 있도록 하는 방식

 

저장공간이 적고 비용이 비싼대신 빠른 성능을 제공한다.

저장공간 계층구조가 이렇다고 한다!

 

이런 경우에 사용하면 좋다

- 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래걸리는 경우 

--> 서버에서 제공하는 API가 일정한 형식으로 데이터를 반환하는 경우! 

- 반복적으로 동일한 결과를 돌려주는 경우 (이미지나 썸네일 등)

 

캐시를 사용하면, 매번 서버에 요청하지 않고도 이전에 받은 데이터를 저장해두고

빠르게 접근할 수 있다. 

서버에서 데이터를 다시 가져오는데 걸리는 시간을 줄이기 위해 캐시를 이용한다.

 

예로, 

균일한 API데이터 : 예를들어 날씨정보를 제공하는 api는 매번 호출할 때마다 일정한 형식으로 데이터를 반환한다

온도, 습도, 풍속 등이 일정한 데이터구조를 유지하며 반복됨.

캐시의 사용 : 만약 이 api를 매우자주 호출해야하는 상황이라면, 매번 서버에 요청하는대신

한번 가져온 데이터를 일정시간동안 캐시에 저장하고 필요할때 캐시된 데이터를 사용하면

api응답을 기다리는 시간이 절약된다!

 

 

캐시의 기본 흐름

 캐시 조회 : 요청된 데이터가 존재하는지 확인한다

  • Cache Hit : 캐시에 해당 데이터 있으면 반환
  • Cache Miss : 데이터 없으면, 원본 데이터 소스에서 가져오고 , 캐시에 저장한 후 반환

캐시를 활용한 성능 개선의 원리

 - DB나 원격 API에서 데이터를 가져오는 것은 네트워크 대시기간, 데이터 검색 및 처리시간 등으로 인해

시간이 오래걸릴 수 있다. 

그러나 캐시는 주로 "메모리(RAM)" 에 데이터를 저장하기 때문에, 디스크접근, 네트워크통신 보다 빠르게

데이터를 가져올 수 있다.

 

캐시를 사용할 경우, RAM에서 데이터를 꺼내온다.

캐시 X -> DB에서 데이터를 꺼내온다. 서버의 하드드라이브 또는 SSD에서. 영구 저장소 이다.

필요할 때 해당 데이터를 디스크에서 읽어와, RAM으로 불러들인 후 처리한다. 

즉, DB는 디스크에 데이터를 저장하고, 그 데이터를 쿼리할 때 디스크 I/O 가 발생하며

그로인해 RAM에서 데이터를 가져오는 것보다 오래걸린다.

 

RAM과 HDD/SDD(영구저장소)

 RAM : 휘발성 메모리로 전원이 꺼지면 저장된 데이터가 사라진다. 주로 실행중인 프로그램이나 자주 사용되는 데이터를 임시로 저장해 빠르게 처리할 수 있도록 한다.

 

영구저장소 : 비휘발성 저장소로 전원이 꺼져도 데이터 유지된다. 주로 파일, 데이터베이스, 운영체제 등의 데이터를 장기적으로 보관하는 데 사용된다.

 

각 입출력 원리

RAM : 직접 접근이 가능하며 CPU가 데이터에 즉시 접근하여 읽고 쓸 수 있다. 데이터를 연속된 주소공간에 저장하고 특정 주소에 직접 접근하여 빠르게 데이터를 입출력한다.

 

HDD : 디스크의 물리적 회전과 헤드의 이동을 통해 데이터를 읽고 쓴다. 물리적 움직임이 필요하므로 느리다. 

CPU가 직접 접근하지 않고, I/O컨트롤러를 통해 데이터를 전송받아 이를 RAM으로 불러와 처리한다.

 

SSD : 플래시 메모리를 이용해 데이터를 전자적으로 읽고 쓰며, HDD보다 빠르지만 여전히 램 보다는 느리다.

 

즉, HDD/SSD에서 데이터가 필요할 경우, CPU는 먼저 디스크 컨트롤러에 요청을 보내고, 그 데이터를 RAM으로 불러온 후 처리를 진행

 

 

속도 차이가 발생하는 부분

램은 메모리셀에 직접 접근해 데이터를 읽고 쓰기 때문에 물리적 움직임이 없고 매우 빠르다.

HDD는 디스크회전과 헤드이동에 시간이 걸려, 물리적 지연 때문에 느리다.

SSD는 전자적 데이터 처리를 하지만, 데이터 관리 구조와 입출력 처리방식에서 복잡성이 높다.

 

CPU : Central Processing Unit

컴퓨터 시스템의 중앙 처리 장치로, 컴퓨터에서 명령을 처리하고 연산을 수행하는 핵심부품이다.

컴퓨터의 두뇌 역할을 하며, 모든 프로그램 명령어를 해석하고 실행한다. 

주요 역할:

  • 연산: 산술 연산 및 논리 연산을 수행합니다.
  • 명령어 실행: 프로그램 명령어를 순차적으로 실행합니다.
  • 데이터 처리: 메모리에서 데이터를 읽고, 필요한 계산을 수행한 후 결과를 다시 메모리에 저장합니다.

 

'JAVA' 카테고리의 다른 글

컬렉션 : List  (0) 2024.11.01
다형성 : 상속과 인터페이스  (0) 2024.11.01
JVM의 영역별 저장  (0) 2024.06.29
오버로딩/오버라이딩  (0) 2024.06.22
jwt와 springsecurity?  (0) 2024.06.15