개요 Cache라는 개념은 많은 곳에 이용됩니다. CPU에도 L1, L2, L3캐시가 있고, 이들의 역할은 메모리를 조회하지 않아도 되도록 하는 것입니다. 같은 정보를 요청했을 때, 주 메모리에서 검색한 뒤 다시 CPU로 로드하는 것은 자원의 낭비이기 때문입니다. 이는 웹 서비스에서도 적용되는 개념입니다. 프론트엔드에서는 브라우저 캐시, HTTP 캐시 등과 같이 백엔드와 통신해서 가져오는 자원을 저장해둡니다. 백엔드에 같은 요청을 보낼 때, 이러한 캐시를 이용해서 통신에 필요한 자원을 절약합니다. 최근 진행한 프로젝트에서 백엔드 포지션을 맡았습니다. 이 때, 사용자와 어울리는 피드를 추천해주는 비즈니스 로직을 작성했습니다. 단순히 피드의 속성들과 사용자의 속성들에 대한 가중치를 연산하는 것이기에, 사용자..
개요(오래된 하드웨어들) 컴퓨터의 발전과 함께 수많은 하드웨어가 등장했습니다. 초기 컴퓨터인 에니악(ENIAC)을 개발하며 발견한 단점을 개선에 폰 노이만 구조가 등장했고 이후 에드삭(EDSAC)부터는 폰 노이만 구조를 사용했습니다. CPU와 주기억장치, I/O장치로 컴퓨터가 세분화되었고 지금의 컴퓨터도 이러한 구조를 채택하고 있습니다. 이후 CPU처리량과 주기억장치 간 속도 차이를 해결하기 위한 CPU캐시가 등장했고, CPU처리량과 주기억장치 용량이 커짐으로 컴퓨터에 대용량 자료를 적재해야 할 상황이 생기자, 이를 해결하기 위해 보조기억장치가 등장했습니다. 반도체는 기본적으로 속도가 빠를수록 가격이 비싸지고, 보조기억장치는 주기억장치보다 저렴한 가격에 많은 자료를 적재할 수 있었습니다. 이 때문에 컴퓨..
개요 C, C++과 같은 언어는 운영체제. 즉, 실행환경에 따라 컴파일러가 그에 맞는 기계어 코드로 변환합니다. Java는 이와 같은 환경 종속성을 어느 정도 해결하기 위해 JVM, Java Virtual Machine이라는 구조를 채용했습니다. JVM은 Java를 실행하기 위한 환경을 제공해줄 뿐 아니라, GC, JIT 등과 같은 기능을 제공하고, 주기억장치를 할당받아 사용하는 역할을 맡고 있습니다. 오늘은 JVM이 주기억장치를 할당받으면 이를 어떻게 나누고 사용하는지 알아보도록 하겠습니다. JVM 메모리구조 JVM은 위와 같은 구조를 가지고 있습니다. 여기서, Java가 실행될 때 클래스, 메서드, 객체 등의 정보를 적재하는 부분은 Runtime Data Area입니다. 이러한 메모리구조는 각 Jav..