TIL-53, 컴퓨터 공학 기초2
오늘은 어제에 이어
컴퓨터 공학의 기초를 학습해보자.
가비지 컬렉션 (Garbage Collection)
프로그램에서 더이상 사용하지 않는 메모리를 자동으로 정리하는 것.
자바, C#, Javascript들이 이 기능을 가지고 있다.
가비지 컬렉션 방법
- 트레이싱: 한 객체에 flag를 두고, 가비지 컬렉션 사이클마다 flag에 표시 후 삭제하는 mark and sweep. 객체에 in-use flag를 두고, 사이클마다 메모리 관리자가 모든 객체를 추적해서 사용중인지 아닌지 mark한다. 그 후 표시되지 않은 객체를 sweep(삭제) 하는 과정을 통해 메모리를 해제한다.
- 레퍼런스 카운팅: 한 객체를 참조한는 변수의 수를 추적하는 방법 객체를 참조하는 변수는 처음에는 특정 메모리에 대해 레퍼런스가 하나 뿐이지만, 변수의 레퍼런스가 복사될 때마다 레퍼런스의 카운트가 늘어난다. 객체를 참조하고 있떤 변수의 값이 바뀌거나, 변수 스코프를 벗어나면 레퍼런스 카운트는 줄어든다. 레퍼런스 카운트가 0이 되면, 그 객체와 관련한 메모리는 비울 수 있다. 레퍼런스 카운트가 0이 된다는 말은 아무도 그 객체에 대한 레퍼런스를 갖고 있지 않다는 말과 같다.
캐시
캐시란?
- 많은 시간과 연산이 필요한 작업의 결과를 ‘저장’ 해두는 것을 의미한다. 일시적인 데이터를 저장하기 위한 목적으로 존재하는 ‘고속의 데이터 저장공간’이다. 캐싱을 사용하면, 이전에 검색하거나 계산한 데이터를 효율적으로 재사용할 수 있다.
일반적인 작동 원리
- 일반적으로 RAM과 같이 빠르게 액세스할 수 있는 하드웨어에 저장되고, 소프트웨어 구성 요소와 함께 사용될 수도 있다. 캐시는 기본 스토리치 계층(SSD, HDD)에 엑세스하여 데이터를 가져오는 더 느린 작업의 요구를 줄이고, 데이터 검색의 성능을 높인다. 캐시는 시스템의 성능을 위해 데이터를 일시적으로 저장해, 완전하고 영구적으로 저장하는 데이터베이스아와는 상반된다.
캐시의 장점
- 애플리케이션 성능 개선
- 예측 가능한 성능
- 데이터베이스 비용 절감
- 데이터베이스 핫스팟 제거
- 백엔드 부하 감소
- 읽기 처리량 증가
웹 서비스에서 캐시가 적용되는 예
- 클라이언트: HTTP 캐시 헤더, 브라우저
- 네트워크: DNS 서버, HTTP 캐시 헤더, CDN, 리버스 프록시
- 서버 및 데이터베이스: 키-값 데이터 스토어, 로컬 캐시