동시성(Concurrency)과 병렬성(Parallelism)
·
CS
최근 락을 적용하여 동시성 문제를 해결하면서 동시성과 병렬성의 개념을 혼동하고 있어 각 개념을 정리해 보았습니다. 동시성(Concurrency) 동시성은 하나의 코어(싱글 코어)에서 여러 작업을 번갈아 가면서 처리하는 방식입니다.CPU는 한 번에 하나의 작업만 처리할 수 있기 때문에 여러 작업을 번갈아 가면서 처리하는데, 이를 context switching이라고 합니다.context switching이 빠르게 이루어져 물리적으로 동시에 실행되는 것이 아니어도 작업이 동시에 실행되는 것처럼 보이게 하는 것입니다. 따라서 여러 작업이 동시에 공유된 자원에 접근하는 경우 동기화 문제가 발생할 수 있습니다. 병렬성(Parallelism) 병렬성은 CPU가 여러 개(멀티 코어) 있어서 CPU에서 각 작업을 동시..
Scale up vs Scale out(+Scale out의 데이터 정합성 문제 해결)
·
Server
서버를 운영하다 보면 갑작스러운 이용자의 증가, 사업 확장 등의 이유로 트래픽이 과부하되는 경우가 있습니다. 이 경우 이용에 불편이 생기고 서버에 장애를 일으킬 수 있기 때문에 서버를 확장해야 합니다. 서버를 확장하는 방법에는 Scale up과 Scale out의 방법이 존재합니다. 이 두 가지 방법의 개념과 장단점을 알아보고 세션을 사용하는 경우 Scale out의 데이터 정합성 문제를 어떻게 해결하는지 정리해 보았습니다. 추가적으로 제 개인 프로젝트에서는 왜 Scale out 방법을 선택했으며 Scale out의 데이터 정합성 문제는 어떻게 해결했는지 설명해 보겠습니다.  Scale Up스케일업은 한 대의 서버를 구성하는 부품(RAM/CPU/Disk)을 추가하거나, 기존 서버의 사양을 업그레이드하여 ..
가비지 컬렉션(GC) 개념 및 동작 원리
·
Java
자바의 메모리 관리 방법인 가비지 컬렉션(GC)의 개념과 알고리즘, 동작과정을 알아보도록 하겠습니다. GC란?JVM(Java Virtual Machine)에서 자동으로 메모리를 관리하는 기법 중 하나로 프로그램이 더 이상 사용하지 않는 객체(가비지)를 식별하고 해당 객체가 차지하고 있는 메모리를 회수하여 새로운 객체를 할당할 수 있도록 합니다.  🤔  그럼 GC는 왜 필요할까요?C에서 메모리를 동적으로 할당받는 경우 char *s = malloc(sizeof(char) * 19); strcpy(s, "Garbage Collection"); free(s); // 메모리 해제 C, C++의 경우 메모리를 관리하기 위해 코드 레벨에서 메모리를 동적으로 할당받고 해제해야 했습니다.이렇게 메모..