@19.1 ~
-
스레드와 잠금장치@19.1 ~ /동시성 모델 2020. 7. 4. 11:04
스레드와 잠금장치를 이용하는 프로그래밍은 마치 포드 모델 T와 비슷하다 그차로 A라는 장소에서 B라는 장소까지 운전해서 갈 수는 있지만 원시적이고 어려운 운전이 될 것이며, 새로운 기술과 비교하면 안전성도 떨어지고 위험하기까지 하다 하지만 많은 문제점에도 스레드와 잠금장치는 많은 동시성 소프트웨어를 작성할 때 기본 선택이 되고 있다 스레드와 잠금장치는 실제 하드웨어가 동작하는 방식을 그대로 옮긴것과 크게 다르지 않다 이들은 너무 단순하여 대부분의 언어가 어떠한 형태로든 이런 기능을 제공하고 있다 상호배제란? 잠금장치를 사용하는 것은 특정한 데이터에 접근하는 스레드가 한 번에 하나만 존재하도록 강제한다 경쟁조건이나 데드락처럼 상호배제가 정상 동작하지 못하게 만드는 상태에 대해서도 알고 있을 것이다 하지만 ..
-
동시성 혹은 병렬성?@19.1 ~ /동시성 모델 2020. 7. 1. 21:20
동시성 혹은 병렬성? 내 아내는 교사다. 다른 교사들과 마찬가지로 그녀는 멀티태스킹에 능숙하다. 어느 한 시점에서 보면 그녀는 한 가지 일을 수행하지만 언제나 여러 일을 한꺼번에 다루어야 한다. 한 학생이 책을 읽는 것을 듣는 동시에 떠들썩한 교실을 진정시키거나 다른 학생의 질문에 답을 주는 식이다 이것은 동시성이지 병렬성이 아니다. 즉 내 아내는 한명 뿐이다 그녀는 돕는 조교가 같이 있다면(한사람이 책읽는걸 듣고 지도하는 동안 다른 사람이 질문에 답하는 식으로) 동시성과 병렬성이 모두 가능해진다 아내의 학급이 연하장 카드를 디자인해서 생산한다고 생각해보자 학생 한 명당 다섯 개씩 만들도록 할당하는 방법을 쓸 수 있을 것이다. 이렇게 하는 것은 (상위의 수준에서 바라보았을 때) 카드를 만드는 한가지 일만..
-
프록시 패턴@19.1 ~ /Nodejs 2020. 6. 19. 01:36
프록시는 각 작업을 대상(Subject)으로 전달하여 추가적인 전처리 또는 후처리로 동작을 향상시킵니다. 여러 상황에서 유용하다 데이터 유효성 검사 : 프록시가 입력을 대상(Subject)으로 전달하기 전에 유효성을 검사 보안 : 프록시는 클라이언트가 작업을 수행할 수 있는 권한이 있는지 확인하고 검사 결과가 긍정적인 경우에만 요청을 대상으로 전달 캐싱 : 프록시가 내부 캐시를 유지하여 데이터가 캐시에 아직 존재하지 않는 경우에만 대상에서 작업이 실행되도록 한다 지연 초기화 : 대상의 생성 비용이 비싸다면 프록시는 그것을 필요로 할 떄까지 연기할 수 있다 로깅 : 프록시는 메소드 호출과 상대 매개 변수를 인터셉트하고 이를 기록한다 원격 객체 : 프록시는 원격 위치에 있는 객체를 가져와서 로컬처럼 보이게 ..
-
노드 Promise 패턴@19.1 ~ /Nodejs 2020. 6. 11. 00:04
1 순차패턴, 순차적으로 반복하는 패턴 let tasks = [ ... ] let promise = Promise.resolve(); tasks.forEach(task => { promise = promise.then(()=>{ return task(); }); }); promise.then(()=>{ //모든 작업들이 완료 }); //foreach 대신에 reduce()함수 사용 let tasks = [ ... ] let promise = tasks.reduce((prev, task) => { return prev.then(()=>{ return task(); }); }, Promise.resolve()); promise.then(()=>{ //모든 작업들이 완료 }); 이 패턴을 간단히 적용하면 모든..
-
모듈 정의패턴@19.1 ~ /Nodejs 2020. 6. 3. 00:42
1. exports 지정하기 public API를 공개하는 가장 기본적인 방법은 export로 명기하는 것입니다 이것은 exports에서 참조하는 객체의 속성에 공개할 모든 값을 할당하는 것입니다 이렇게 하면 외부에 공개된 객체가 일련의 관련 기능들에 대한 컨테이너 또는 네임스페이스가 됩니다 //logger.js exports.info = (message)=>{ console.log('info:' + message); }; exports.verbose = (message) =>{ console.log('verbose:' + message); }; //아래처럼 사용이 가능하다 const logger = require('./logger'); logger.info('this is time'); logger.v..
-
콜백 규칙 및 예외처리@19.1 ~ /Nodejs 2020. 5. 31. 23:40
Nodejs에서 연속 전달 스타일(CPS)의 API 및 콜백은 일련의 특정한 규칙을 따릅니다 이 규칙은 Nodejs 코어 API에 적용되지만 대다수의 사용자 영역 모듈과 어플리케이션에도 적용됩니다 1. 콜백은 맨 마지막에 모든 Nodejs 함수에서 표준 규칙은 함수가 입력에서 콜백을 허용한다면 맨 마지막 인자로 전달되어야 한다는것 fs.readFile(filename, [options], callback) 함수 호출의 가독성을 좋게하기 위해서.. 2. 오류는 맨 앞에 CPS에서는 오류가 다른 유형의 결과처럼 전달되므로 콜백 사용이 필요합니다. Nodejs.에서 CPS함수에 의해 생성된 오류는 항상 콜백의 첫번쨰 인수로 전달되며 실제 결과는 두번쨰 인수에서부터 전달됩니다. 동작이 에러없이 성공하면 최초의 ..
-
Map, WeakMap@19.1 ~ /Nodejs 2020. 5. 31. 22:11
ES2015에서는 보다 안전하고 유연하며 ㅈ기관적인 방식으로 해시 맵 컬렉션으 ㄹ활용하도록 Map이라는 새로운 프로토타입을 도입했습니다 const profiles = new Map(); profiles.set('twitter', '@adalovelace'); profiles.set('facebook', 'adalovelace'); profiles.set('googleplus', 'ada'); profiles.size; //3 profiles.has('twitter'); // true profiles.get('twitter'); //"@adalovelace" profiles.has('youtube'); //false profiles.delete('facebook'); profiles.has('faceboo..
-
* 무엇인가?@19.1 ~ /리눅스 2019. 4. 14. 13:53
임의의 문자를 대체하는 메타문자이다 여러가지 파일을 특정폴더로 이동해야하는 상황에서 mv test* 특정폴더 test로 시작하는 모든 문자를 대체한다는 의미로 test로 시작하는 모든파일을 특정폴더로 옮긴다. test12 testabc test32ab 이런 파일 모두를 뜻한다. a*b일경우 a로 시작해서 b로 끝나는 모든 이름을 대체 *문자와는 다르게 ?문자는 정확히 한개의 문자만 대체한다. a?b일경우 a로시작하고 중간에 임의의 문자하나만 있고 b로 끝나는것 (a2b 이런것)