FrontEnd
스레드와 스케줄링
프로세스는 5가지 상태가 존재한다 ✅ 생성(create): 프로세스가 생성 ✅ 실행(running): 프로세스가 프로세서를 차지하여 명령어들이 실행 ✅ 준비(ready): 프로세스가 프로세서를 사용하고 있지는 않지만 언제든지 사용할 수 있는 상태 ✅ 대기(waiting): 프로세스가 입출력 완료, 시그널 수신 등 어떤 사건을 기다리고 있는 상태 ✅ 종료(terminated): 프로세스의 실행이 종료 🐘 스레드 💡 스레드란 프로세스보다 조금 더 구체적인 개념으로, 하나의 프로세스 안에서 실행되는 작업 단위라고 생각할 수 있다. ✅ CPU 제어의 흐름 ✅ 실행 단위 ✅ 한 프로세스 내부에서 스케줄링이 가능한 개체 보통은 한 프로세스안에 한 스레드가 존재한다. 이를 싱글스레드 라고 하며 이 경우 프로세스와 스..
함수형 프로그래밍
🐘 함수형 프로그래밍 [번역] 함수형 프로그래밍 전문가 되기 (Part 1) 가장큰 도움을 받은 글이었다. 위의 내용과 인터넷의 정보들을 조합하여 정리해 보았다. 🐬 순수 함수 💡 순수 함수 는 매우 간단한 함수라고 생각 할수있다. 단지 입력된 파라미터에 따라 동작된다. let z = 10; function add(x, y) { return x + y; } 위 함수처럼 z변수에 접근하지 않고 독립적으로 진행된다. 또다른 특성으로는 순수함수는 같은 Input엔 같은 Output이 와야 한다는 것이다. writeFile(fileName); updateDatabaseTable(sqlCmd); sendAjaxRequest(ajaxRequest); openSocket(ipAddress); 예를 들어 위 함수들은 ..
XML 파서
브라우저는 사용자가 선택한 자원을 서버에 요청하여 표시한다. 그런데 이 자원들은 html,pdf,image 등등 다양한 형태이다. 즉, 브라우저는 해당 HTML과 CSS 명세 등에 의해서 파일을 해석해서 표시해야한다. 그리고 이 명세 는 웹 표준화 기구인 W3C(World wide web Consortium)에서 정해지게 된다. 예전 브라우저들은 일부만 명세를 따르고 독자적 방법으로 확장했기 때문에 호환성 문제가 심각했다… 이처럼 표준 명세를 따르는건 아주아주 중요한 일이다. 그렇다면 DOM이란 무엇일까 💡 DOM Document Object Mode (문서 객체 모델) 웹 브라우저가 html을 트리구조로 이해하는 모델이라고 생각할 수 있다. 브라우저는 문서를 가지고 어휘분석 ⇒ 구문분석 과정을 거친다...
콜스택, 메모리힙과 메모리모델 구조
일반적인 프로세스 메모리 모델의 구조는 아래와 같다. Text : 프로그램 코드와 상수가 정의되어 있고, 읽기만 가능하다 Data : 전역변수와 정적 변수가 저장되어 있다. Heap : 동적 메모리 호출에 의해 할당되는 메모리 영역 Stack : 함수 값, 지역변수, 반환 주소등이 저장되는 영역이다. ㅋ 그렇다면 Node.js 에서 프로세스 메모리를 관리하는 방법은 어떨까? Node.js에서는 V8메모리 구조를 사용한다. (https://ui.toast.com/weekly-pick/ko_20200228) V8엔진은 힙 메모리에 동적 데이터를 저장하며, 가비지 컬렉션이 발생한다. 이때 모든 영역이아니라, New와 Old 영역에서만 가비지 컬렉션이 발생한다. New : 새로 만들어진 모든 객체를 저장 Old..
캐시교체 정책
캐시란 CPU 칩안에 들어가는 작고 빠른 메모리이다. 프로세서가 매번 메인 모메리에 접근하는것은 시간도 오래걸리고 물리적으로도 거리가 멀다. 하지만 캐시를 이용하면 가깝기 때문에 시간도 매우 절약할 수 있다. =⇒ 결국 캐시메모리도 유한하기때문에 캐시에 어떤 정보를 담아두는지가 매우 중요하다. 그렇다면 이 자주 사용하는 데이터에 관한 판단은 어떻게 정할 수 있을까? 데이터에 관한 판단은 지역성의 원리를 따르며 이는 시간지역성과 공간 지역성으로 구분할 수 있다. 공간지역성 : 최근 접근한 데이터의 주변 공간에 다시 접근하는 경향 시간지역성 : 최근 접근한 데이터에 다시 접근하는 경향 오늘날 CPU 칩의 면적 30~70%는 캐시가 차지한다. 캐시 교체 정책에는 3가지 방식이 있다. FIFO(First in ..
GitHub Pull Request
조금 쉽게 생각하자면 Pull Request는 거대한 프로젝트가 있다 가정할때 사람들이 일부분씩을 바꾸고 합칠때 효율적이고 올바르게 합칠 수 있는 좋은 도구인 것 같다. (https://www.secmem.org/blog/2019/04/10/git_pr/) 내가 어떠한 프로젝트에 Pull Request를 하기위해서는 Fork clone branch 만들기 코드 작성 add,commit,push Pull Request 생성 Merge Pull Reqest Merge이후 branch삭제 와 같은 과정을 통해 진행된다. Fork : 해당 프로젝트의 저장소를 자신의 git으로 가져온다. 해당 기능을 사용하면 다른 계정의 git을 내 저장소로 가져올 수 있다. clone : 결국 코드 작업을 하기 위해서는 로컬 ..