본문 바로가기

분류 전체보기

(149)
경쟁 상태(Race Condition)란? - 경쟁 상태(Race Condition) : 여러 개의 프로세스가 공유 자원에 동시 접근할 때 실행 순서에 따라 결과값이 달라질 수 있는 현상이다. - 즉, 공유 자원에 여러 프로세스가 동시에 접근할 때 자료의 일관성을 해치는 결과나 나타날 수 있다. - 경쟁 상태의 문제를 해결하기 위해 공유 메모리를 쓰는 프로세스끼리 "동기화"를 해줘야 한다. - 동기화 : 쓰레드의 순차적 실행을 보장하는 것 - 동기화를 예를 들어서 설명하면, 탈의실을 생각해볼 수 있다. 탈의실은 한번에 한명만 이용할 수 있고 다른 사람은 사용중인 탈의실의 사용을 기다려야 한다. - 동기화에서는 탈의실을 임계 구역(Critical Section)이라고 하고, 오직 한번에 한명만 들어갈 수 있는 것을 상호 배제(Mutually exc..
뮤텍스(Mutex)와 세마포어(Semaphore) - 동시성 프로그래밍에서의 "공유자원"을 안전하게 관리하기 위해서는 상호배제(Mutal exclusion)를 달성하는 기법이 필요하다. - 뮤텍스와 세마포어는 "공유자원 관리"에 대해 상호배재를 위해 고안된 기법으로 서로 다른 방식으로 상호배제를 달성한다. 1. 뮤텍스(Mutex) - 뮤텍스는 Key에 해당하는 어떤 오브젝트가 있고, 이 오브젝트를 소유한 쓰레드, 프로세스만이 공유자원에 접근할 수 있다. - 만약 1번 프로세스가 자원 접근을 위해 Key를 점유하고 공유 자원 A를 사용하고 있다면, 2번 프로세스가 공유 자원 A 사용을 원하더라도, Key의 점유를 위해 대기해야 한다. - 1번 프로세스가 공유 자원을 다 사용하고 Key를 반환하면, 대기하고 있던 2번 프로세스는 Key를 점유하고 공유자원에..
쿠키와 세션 - HTTP는 Connectionless(비연결지향)과 Stateless(상태 비유지)의 특징을 갖는다. - 하지만, HTTP 통신을 할 때 실제로 데이터 유지가 필요한 경우(로그인 상태와 같은 상태 유지 필요)가 있고 이때 쿠키와 세션을 사용한다. 쿠키(Cookie) * 쿠키란? - 쿠키는 클라이언트(브라우저) 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일이다. - 사용자 인증이 유효한 시간을 명시할 수 있으며, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지된다는 특징이 있다. - 쿠키는 클라이언트의 상태 정보를 로컬에 저장했다가 참조한다. - 쿠키는 사용자가 따로 요청하지 않아도 브라우저가 Request시 Request Header를 넣어서 자동으로 서버에 전송한다. * 쿠키 구성요소..
Prototype을 이용해서 상속을 구현하는 방법 - JavaScript는 객체 기반의 프로그래밍 언어이며 자바스크립트를 이루고 있는 거의 모든 것(원시타입을 제외한 값)이 객체다. - 상속은 어떤 객체의 프로퍼티 또는 메서드를 다른 객체가 상속받아 그대로 사용할 수 있는 객체지향 프로그래밍의 핵심 개념이다. - 프로토타입 객체는 다른 객체로부터 상속된 속성과 메서드를 포함하고 있다. function Student() { this.table = new Array(); this.add = function (name, age) { this.table.push({ name: name, age: age }); }; this.show = function (minAge) { return this.table.filter((student) => student.age ..
this - this는 자신이 속한 객체 또는 자신이 생성할 인스턴스를 가리키는 자기 참조 변수이다. - 자바나 C++ 같은 클래스 기반 언어에서 this는 언제나 클래스가 생성하는 인스턴스를 가리키지만, JavaScript의 this는 함수 호출 방식에 의해 동적으로 결정된다. - 즉, 함수를 선언할 때 this가 바인딩할 객체가 정적으로 결정되는 것이 아닌, 함수를 호출할 때 함수가 어떻게 호출되었는지에 따라 this에 바인딩할 객체가 동적으로 결정된다. * JavaScript에서의 함수 호출 방식에 따른 this - 일반 함수 호출(전역 함수, 중첩 함수, 일반 함수로 호출되는 메서드 내에서 정의한 중첩 함수 내부, 콜백 함수) : 기본적으로 this에는 전역 객체가 바인딩 된다. function foo()..
이벤트 위임 - 이벤트 위임 : JavaScript에서 이벤트 처리를 최적화하고 성능을 향상시키는 패턴 중 하나입니다. 이 패턴은 일반적으로 이벤트가 여러 DOM 요소에 연결되어 있을 때 유용하게 사용된다. - 이벤트 위임의 핵심 아이디어는 이벤트를 여러 개의 하위 요소에 직접 연결하는 대신, 상위(부모) 요소에 하나의 이벤트 핸들러를 연결하고, 그 상위 요소에서 발생한 이벤트를 각 하위 요소에 대한 조건부 처리를 통해 다루는 것이다. - 이벤트 전파 : DOM 트리 상에 존재하는 DOM 요소 노드에서 발생한 이벤트가 DOM 트리를 통해 전파되는 것 버블링 - 버블링 : 하위 엘리먼트에 이벤트가 발생할 때 그 엘리먼트부터 시작해서 상위요소까지 이벤트가 전달되는 방식 예시 document.querySelector("l..
Promise 동작원리와 예시 Promise - 프로미스는 ES6에서 도입된 비동기 처리를 위한 패턴이다. 기존의 콜백 패턴의 콜백 헬로 인한 가독성 문제 및 에러 처리를 해결하기 위해 도입되었다. - Promise 생성자 함수를 통해 인스턴스화 하며, 생성자 함수는 비동기 작업을 수행할 콜백 함수를 인자로 전달받는데, 이 콜백함수는 resolve와 reject 함수를 인자로 전달받는다. - Promise 생성자 함수가 인수로 전달받은 콜백 함수 내부에서 비동기 처리를 수행하고, 비동기 처리가 성공하면 콜백 함수의 인수로 전달받은 resolve 함수를 호출하고, 비동기 처리가 실패하면 reject 함수를 호출한다 - 프로미스는 현재 비동기 처리가 어떻게 진행되고 있는지를 나타내는 상태 정보를 갖는다.(pending : 비동기 처리가 ..
교착상태 교착상태(Dead Lock) - 교착상태란 두 개 이상의 프로세스가 자원을 점유한 상태에서 서로 점유한 자원을 서로에게 요구하고 있어서 그 프로세스들이 무한정으로 기다리고 있는 상태를 말한다. * 교착상태의 발생 조건 4가지 - 교착 상태가 발생하기 위해서는 4가지의 조건이 있고 이 중의 하나라도 만족하지 않으면 교착상태는 발생하지 않는다. 1. 상호 배재(Mutual Exclusion) - 한 리소스는 한 번에 하나의 프로세스만이 사용할 수 있어야 하고, 사용중인 자원을 다른 프로세스가 사용하려면 요청한 자원이 해제될 때까지 기다려야 한다. 2. 점유와 대기(Hold and Wait) - 자원을 최소한 하나 보유하고, 다른 프로세스에 할당된 자원을 추가로 점유하기 위해 대기하는 프로세스가 존재해야 한다..