본문 바로가기

반응형

항해99

(46)
node.js와 스레드, non-blocking I/O Node.js는 기본적으로 싱글스레드다. Node.js를 구성하는 libuv라이브러리가 스레드 풀을 제공하는 것처럼 보이지만, 실제로 사용하는 애플리케이션은 한 개다. worker_threads 등장 (https://nodejs.org/api/worker_threads.html) Node.js는 CPU intensive한 작업에 취약하다 i/o intensive한 서비스에 적절한 한편, cpu intensive한 작업에 취약하다. 예를 들면, - 피보나치수열과 같은 복잡한 연산 - for(let i = 0; i
프로세스와 스레드 프로세스 : 프로그램이 돌아가고 있는 상태, 메모리에 올라와 실행되고 있는 프로그램의 인스턴스 스레드 : 프로세스 내에서 실행되는 여러 흐름의 단위 현재 실행 중인 프로세스로 브라우저가 있다고 가정한다. 유튜브에 접속해서 영상을 시청한다. 이때 유튜브 영상을 받는 동시에 영상도 함께 재생해야 하는데, 이렇게 여러가지 작업을 동시에 진행할 수 있는 것은 다수의 스레드가 흐르기 때문이다. 프로세스는 컴퓨터의 자원을 분할해서 사용, 스레드는 프로세스에 주어진 자원을 공유하며 작업한다. 단, 같은 변수에 다수의 프로세스가 동시에 접근하는 경우 에러가 발생할 수 있다. 참조 : ttps://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html [OS] 프로세스와 스레드..
가비지 컬렉션 - 마크앤 스윕 래퍼런스 카운트는 순환참조의 오류를 해결하지 못함. 따라서 일정 주기, 메모리의 사용량에 따라 마크앤 스윕을 실행해서 가비지 컬렉션을 보완 => 변수 선언 후 출처와 연결해준다. => 출처를 연결한 그래프를 순회한다. => 루트 출처와 연결이 끊긴 객체는 지워버린다.(스윕) => 우측 하단과 같이 순환참조하는 객체를 가비지로 인식하고 스윕해준다. => 주의! 선언한 객체 전체를 순회하기 때문에 무거운 작업이다. 참조 : https://www.youtube.com/watch?v=tTH4WdpRC2k
가비지 컬렉션 - 레퍼런스 카운팅 자바스크립트는 프로그래머가 직접 메모리를 관리하지 않는다. 사용이 끝난 객체를 가비지 컬렉터가 자동으로 메모리에서 지워주기 때문이다. 작동방식은 레퍼런스 카운팅, 마크앤 스윕 등이 있다. 래퍼런스 카운팅의 작동방식. => 객체마다 래퍼런스 카운트 부여하고 계산하는 방식이다. => 더 이상 참조하는 곳이 없는 변수는 가비지 컬렉션의 대상이 된다. (래퍼런스 카운드 == 0) => 주의! 우측하단과 같이 순환참조가 일어나는 경우 래퍼런스 카운트가 0이 될 수 없음으로 (더이상 접근하지 않지만)가비지 컬렉션이 발생하지 않는다. 참조 : https://www.youtube.com/watch?v=j9Vncn04GsE
자바스크립트 중요 개념 자바스크립트는 런타임에 타입이 결정되는 동적 언어이면서 함수의 선언 위치에 따라 스코프를 결정하는 정적(렉시컬) 스코프를 갖는다. 데이터 타입 - primitive(immutable) type = value => 숫자, 문자열, 불리언, null, undefiend, symbol - reference(mutable) type = reference => array, date, regexp, map, weakMap, set, weakSet *immutable = 스스로 값을 바꿀 수 없음 밸류와 레퍼런스의 차이 call by value = 참조하는 값을 가져온다. call by reference = 참조하는 주소를 가져온다. a1 = [1,2]와 a2 = [1,2]가 있을때 a1 !== a2이다. a1과 a..
[항해99]수료와 앞으로의 계획, 이사 지난 1주일 동안 : 이사준비, 이사, 면접준비, 수료식이 있었다. 1) 항해 99 수료 좋은 사람들과 행복한 99일 이었다. 많은 장면이 스친다. 처음 크롤링해서 데이터 베이스에 사진을 저장하던 그 경이로움과 최초로 로그인을 구현하던 기쁨, 4주차 개인과제 제출 10분전 몽고db연결이 안돼서 키보드를 내려칠뻔한 순간과 cors에러 해결 방법을 몰라 팀원들과 게더에서 새벽 4시까지 삽질하던 밤, 실전프로젝트 기획을 위한 1주일 마라톤 회의, 완성 못할 것 같았던 실전 프로젝트의 mvp 런칭 후 받은 칭찬과 격려, 100여명 청중 앞에서의 최종 발표회 등등 1.1) 수료 후 하지만 취업할때 까지 항해는 끝이 아니다. 우리 1조 백엔드 3명은 각각 계획이 다르기에, 앞으로 5조에 합류해 알고리즘과 타입스크립..
자바스크립트 딥다이브 시작 항해 지원주차를 맞아 이력서와 면접을 준비하고 있다. 예상 질문을 정리하며 자바스크립트의 본질에 대해 깊이있게 배워야겠다는 생각이 들어 딥 다이브를 충동구매했다. 항해 기간동안 작동하는 코드 만들기에 급급해서 놓친 작동원리를 찬찬히 정리해보고자 한다. 90여일간 맨땅에 헤딩만 해서인지, 근본적인 작동원리를 설명해주는 이 책이 상당히 흥미롭다.
캐싱과 레디스 1. 캐싱이란 데이터의 원래 소스보다 더 빠르고 효율적으로 엑세스 할 수 있는 임시 데이터 저장소 속도향상을 위해 사용 원본보다 빠른 접근속도, 동일한 데이터 반복 엑세스 데이터 재사용 횟수가 2회 이상 있어야 캐싱으로 의미를 갖는다 잘 변하지 않는 데이터일수록 효율적이다 2. 레디스란(remote dictionary server) 키-벨류 단순한 구조 인메모리 저장소로 빠른 성능 (평균작업 속도 < 1ms) 캐싱전략(읽기) 데이터 유형과 엑세스 패턴 고려해야함 읽는 작업이 많을때? look aside ⇒ 레디스 를 먼저 찾고 데이터 없으면 db에서 꺼내어 레디스에 탑재 (뽀모모 서비스는 레디스 다운되면 데이터 가져올 수 없다.. db에 접근하는 코드 있어야) db에서 레디스로 미리 데이터 밀어넣는것 ?..

반응형