동시성(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++의 경우 메모리를 관리하기 위해 코드 레벨에서 메모리를 동적으로 할당받고 해제해야 했습니다.이렇게 메모..
인증/인가를 구현하는 Session(세션)과 Token(토큰) 방식의 차이
·
Server
인증과 인가가 무엇인지 알고, 이를 구현하기 위한 세션과 토큰 방식을 알아보고 차이를 비교해 보겠습니다. 인증인증은 식별 가능한 정보로 사용자의 신원을 확인하는 과정입니다.예시로는 로그인을 들 수 있습니다. 구체적으로 어떤 사이트의 회원일 경우 로그인을 통해 회원이 맞음을 인증하고, 인증 절차가 성공할 경우에만 서비스 이용이 가능한 경우를 말합니다.인가인가는 사용자가 특정 자원에 접근할 권한이 있는지를 확인하는 과정입니다. 인가는 인증을 바탕으로 사용자가 시스템 내에서 할 수 있는 행동을 결정합니다.예시로는 사용자 페이지와 관리자 페이지의 접근 여부를 들 수 있습니다. 일반 사용자는 관리자 페이지에 접근할 수 없지만, 관리자는 접근이 가능한 것을 말합니다. 추가적으로 이 접근 여부는 로그인한 사용자를 바..
동시성 이슈가 발생하는 이유와 해결방법(내부자원, 외부자원)
·
Java
동시성 이슈는 백엔드 개발자라면 알아야 하는 중요한 개념 중 하나입니다.동시성 이슈를 해결하는 방법은 무수히 많기 때문에 이를 정리하고자 해당 글을 작성하게 되었습니다. 동시성 이슈란?동시성 이슈란 하나의 자원에 대해서 여러 스레드가 동시에 접근하여 수정하는 경우 발생하는 문제입니다.이는 곧 스레드의 안정성이 깨졌다고 말할 수 있습니다. 동시성 이슈가 발생하는 예시조회수 증가 프로그램을 통해 동시성 이슈가 발생하는 상황을 확인해 보겠습니다. 해당 코드를 실행시켰을 때 100*100인 10000 조회수 값이 나오기를 기대하지만 기대와는 다른 결과 값인 9800이 나오게 됩니다.이는 동시성 이슈가 발생했기 때문에 기대와 다른 결과 값이 나오는 것입니다. 🤔 그럼 동시성 이슈는 왜 발생하는 것일까요?Cont..