CS - Ram vs Disk and Cache


1. 메인메모리(RAM)와 하드디스크(Disk)

1.1. RAM

  • 메인메모리는 RAM이라고 불리며, OS나 캐시메모리 CPU등이 많이 사용하는 주 기억장치이다.
  • RAM은 빠른 접근을 위해 데이터를 임시로 저장하는 저장소이며, 메모리에 올라간 데이터는 PC 종료시 휘발되는 특성이 있다.
  • 대신 그만큼 접근이 빨리 작업도 빠르게 할 수 있다.


1.2. Disk

  • 디스크는 하드디스크, SSD처럼 데이터를 영구적으로 저장하는 스토리지를 말한다.
  • 디스크에 있는 데이터를 처리하는건 RAM보다 느릴 수 밖에 없다.
  • 그러나 저장할 수 있는 용량이 크도, PC를 종료해서 데이터 손실없이 보관할 수 있다.


1.3. RAM vs Disk 차이

  • 속도 : 메모리는 데이터에 직접 엑세스하고, 디스크는 데이터에 접근하기 위해 디스크 헤드를 움직이면서 찾는다. 그렇기 때문에 속도는 메모리가 디스크보다 빠를 수 밖에 없다.
  • 용량 : 메모리는 디스크에 비해 용량이 많이 작다. ( 요즘 디스크는 못해도 500GB는 사용하는데, RAM은 8GB 이나 16GB를 보통 사용한다.)
  • 휘발성 : 위에서 말했듯, 메모리는 PC를 종료하면 데이터가 날아간다. 그러나 디스크는 우리가 지우거나, 디스크가 파괴되지 않는한 영속적으로 저장된다.
  • 비용 : 비용은 비교적 램이 더 비싸다. 두 저장소가 제조되는데에 걸리는 시간이나 기술이 다르기 때문이다.



2. 개발 실무에서 RAM과 Disk는 어떻게 사용될까?

  • RAM과 Disk는 Local Cache의 영역으로 사용된다.
  • 이 영역은 데이터나 값을 미리 복사해 놓는 임시 장소가 된다.
  • Cache는 원래 데이터를 접근하는 시간이 오래 걸리는 경우나, 값을 다시 계산하는 시간등을 절약하고 싶을 때 사용한다.
  • Cache에 데이터를 미리 복사해 놓으면 더 빠른 속도로 데이터에 접근할 수 있다.


2.1. Cache란?

  • 데이터의 원래 소스보다 더 빠르고 효율적으로 엑세스 할 수 있는 임시 저장소이다. 사용되었던 데이터는 재사용될 가능성이 높다는 개념을 이용한 것이며, 더 빠르게 접근할 수 있도록 저장소를 사용하는 개념이다.
  • 단순한 데이터나, 동일한 데이터를 반복적으로 제공해야하는 경우 (ex. Session) 그리고 데이터의 변경주기가 빈번하지 않고 단위 처리 시간이 오래걸리는 경우, 데이터의 최신화가 반드시 실시간으로 이뤄지지 않아도 서비스 품질에 영향을 거의 주지 않는 데이터들을 대상으로 Cache는 좋은 효과를 발휘한다.


2.2. Cache의 장점

  • 서버간 불필요한 트래픽을 줄일 수 있으며, 웹 애플리케이션의 서버 부하가 감소한다.
  • 속도가 빨라 고객에게 쾌적한 서비스를 제공해 줄 수 있다.


2.3. Cache의 종류

  • Cache는 크게 Local Cache와 Global Cache(Remote Cache) 로 나뉜다.


Local Cache

  • Local Cache를 보면, 로컬 장비 내에서만 사용되는 캐시 방법으로, Local 장비의 Resource를 사용한다. 즉, 로컬 PC의 RAM이나 디스크를 사용한다는 것이다. ( 그래서 우리가 위에서 RAM과 Disk를 본 것이다. )
  • 특징
    • Local에서 동작하는만큼, Global Cache보다 빠르고, 네트워크 단절 이슈등에도 문제가 없다.
    • 서버 애플리케이션과 생명주기가 같다.
    • 간단한 Cache는 이렇게 Local RAM 기반으로 동작하는 것이 효율적이다.
    • 휘발성 메모리이므로, 애플리케이션 다운 시 전부 사라진다.
    • 여러 서버가 있을 시 서버간 데이터가 불일치하다.
    • 메모리가 금방 부족해질 수 있다.


  • 또한 우리가 RAM과 Disk로 Local Cache를 이용할 수 있는 방법이 있다.
  • RAM을 이용하는 경우에는, Java에서 HashMap을 활용하서나, 카페인과 같은 Cache 라이브러리를 사용하면 되고, Object pool 이라는 디자인 패턴으로 개발을 진행하는 방법이 있다.
  • 그리고 Disk를 이용하는 방법으로는 txt 파일을 만들어 그 안에 문자열을 넣고 빼는 원시적인 방법이 있고, 객체 직렬화 방식을 사용하는 방법도 있다.
    • 여기서 객체 직렬화는 Object나 Data를 자바 외부에서도 쓸 수 있도록 byte 형태로 변환하는 것을 말하며 반대의 경우는 객체 역직렬화 라고 한다.
    • ObjectOutputStream ObjectInputStream을 활용하여 할 수 있다. 즉, JVM의 스택이나 힙에 있는 객체 데이터를 byte로 변환하거나, byte되어있는 데이터를 객체로 변환해서 JVM으로 넣어주는 걸 의미한다.
  • 마지막으로 DB 캐싱도 Disk 방식에 속한다.
    • 우리가 자주 사용하는 데이터를 새로운 임시 테이블에 넣어두는 방법이다. 튜플이 1,000,000개 있는 테이블에서 찾는 것보다 100개 있는 테이블에서 데이터를 찾는 것이 훨씬 빠를 것이다. ( 궁금한 점은, DB도 Redis 처럼 IP와 기타 정보만 알면 원격으로 접근이 가능한데, 이것도 글로벌 캐시 방법의 하나가 아닌지 궁금하긴 하다. 이 부분은 DB테이블을 활용한 캐시 방법이라고만 알고 있으면 좋을 것 같다. )


Global Cache(Remote Cache)

  • 데이터를 분산하여 저장 가능
  • 별도의 캐시 서버로 접근하는거라, 여러 서버가 있어도 동기화가 가능
  • 확장성 좋음
  • Local Cache에 비해 상대적으로 느림
  • 네트워크 단절 시 이슈가 생길 수 있음.
  • 대표적인 Global Cache 방법에는 Redis를 사용하는 방법이 있다.






results matching ""

    No results matching ""