TIL 58일차

안광의·2021년 9월 10일
0

Today I Learned

목록 보기
58/64
post-thumbnail

시작하며

오늘은 어제에 이어서 컴퓨터 공학과 관련된 가비지 컬렉션과 캐시에 대해서 학습하였다. 코스에 있는 내용으로는 이해가 되지 않는 부분이 많아서 구글링하고 관련 문서를 찾아보며 이해하기 위해 노력하였다.

컴퓨터 공학

가비지 컬렉션

정의
가비지 컬렉션은 프로그램에서 더 이상 사용하지 않는 메모리를 자동으로 정리하는 기능으로, 대표적으로 자바, C#, 자바스크립트 등이 이 기능을 지원한다.

  • 트레이싱 : 한 객체에 flag를 두고, 가비지 컬렉션 사이클마다 flag에 표시 후 삭제하는 mark and sweep 방법이다. 객체에 in-use flag를 두고, 사이클마다 메모리 관리자가 모든 객체를 추적해서 사용중인지 아닌지를 표시(mark)한 후 표시되지 않은 객체를 삭제(sweep)하는 단계를 통해 메모리를 해제한다.

  • 레퍼런스 카운팅 : 한 객체를 참조하는 변수의 수를 추적하는 방법이다. 객체를 참조하는 변수는 처음에는 특정 메모리에 대해 레퍼런스가 하나뿐 이지만, 변수의 레퍼런스가 복사될 때마다 레퍼런스 카운트가 늘어난다. 객체를 참조하고 있던 변수의 값이 바뀌거나, 변수 스코프를 벗어나면 레퍼런스 카운트는 줄어든다. 레퍼런스 카운트가 0이 된다는 말은 아무도 그 객체에 대한 레퍼런스를 가지고 있지 않다는 말이므로 그 객체와 관련한 메모리는 비울 수 있다.

캐시

정의
캐시는 많은 시간이나 연산이 필요한 작업의 결과를 저장해두는 것을 의미한다. 컴퓨팅에서 캐시는 일반적으로 일시적인(temporarily) 데이터를 저장하기 위한 목적으로 존재하는 고속의 데이터 저장공간이다. 첫 작업 이후에 이 데이터에 대한 요청이 있을 경우, 데이터의 기본 저장공간에 접근할 때보다 더 빠르게 요청을 처리할 수 있고, 이전에 검색하거나 계산한 데이터를 효율적으로 재사용할 수 있다.

작동원리
캐시의 데이터는 일반적으로 RAM(Random Access Memory)과 같이 빠르게 액세스할 수 있는 하드웨어에 저장되며, 소프트웨어 구성 요소와 함께 사용될 수도 있다. 캐시는 기본 스토리지 계층(SSD, HDD)에 액세스하여 데이터를 가져오는 더 느린 작업의 요구를 줄이고, 데이터 검색의 성능을 높인다.

속도를 위해 용량을 절충하는 캐시는 일반적으로 데이터의 하위 집합을 일시적으로 저장합니다. 완전하고 영구적인 데이터가 있는 데이터베이스와는 대조적이다.

장점

  • 애플리케이션 성능 개선
  • 데이터베이스 비용 절감
  • 백엔드 부하 감소
  • 예측 가능한 성능
  • 데이터베이스 핫스팟 제거
  • 읽기 처리량 증가
    • 읽기 처리량: IOPS; Input/output operations per second. HDD, SSD 등의 컴퓨터 저장 장치의 성능 측정 단위

웹서비스에서 캐시가 적용되는 예시

  • 클라이언트 : HTTP 캐시 헤더, 브라우저
  • 네트워크 : DNS 서버, HTTP 캐시 헤더, CDN, 리버스 프록시
  • 서버 및 데이터베이스 : 키-값 데이터 스토어(e.g. Redis), 로컬 캐시(인-메모리, 디스크)

마치며

이틀 간 컴퓨터 공학 파트를 공부하면서 컴퓨터가 어떤 방식으로 작동되는 지를 알 수 있었다. 개념은 이해했지만 배운 내용을 토대로 어떻게 코딩을 하는 것이 작업을 효율적으로 처리할 수 있는지 적용하기에는 아직 부족하다고 느꼈다. 컴퓨터 공학과 코딩에 대한 이해의 깊이가 아직 얕기 때문에 컴퓨터의 처리방식을 고려해서 잘 짜여진 코드들을 보고 이해하면서 내가 작성한 코드에도 적용할 수 있는 방향으로 공부해야겠다.

profile
개발자로 성장하기

0개의 댓글