분류 전체보기
[JS] Javascript에서 동기함수와 비동기함수의 차이
Introduce 자바스크립트에서 동기와 비동기를 이해하는 것은 다른 프로그래밍 언어보다 중요하다. 왜냐하면 자바스크립트는 메일 스레드 하나만을 사용하는 단일 스레드 방식으로 설계되어 있으며 메인 스레드에서 뷰가 렌더링되고 사용자와의 상호작용이 많기 때문이다. 브라우저에서 메인 스레드가 blocking되면 웹페이지가 멈추는 프리징 현상이 발생하기에 사용자 경험에 문제가 생길 수 있다. 따라서 이 글에서는 동기와 비동기의 차이를 알아보고, 브라우저에서 이 두 방식이 어떻게 동작하는지 살펴보고자 한다. PreliminariesCall stackCall stack은 자바스크립트 엔진이 현재 실행 중인 함수와 그 함수들이 호출한 다른 함수들을 추적하는 자료 구조다. 이는 LIFO(Last In, First Ou..
[JS] Javascript에서의 FP
서론 함수형 프로그래밍은 패러다임중의 하나이다. 프로그램이 어떻게 동작해야 할지 일일히 명시하는 명령형 프로그램과 다르게 프로그램의 결과만을 입력하는 선언적 프로그램을 만드는 패러다임이다. 자바스크립트는 세가지 특징때문에 함수형 프로그래밍을 쓰기 편하다. 첫째로 클로저를 통해 외부 변수를 쉽게 참조할 수 있으며, 둘째로 1급 객체로서 함수를 값처럼 사용할 수 있어 코드의 유연성과 재사용성을 높인다. 마지막으로 모나드의 일종인 Promise를 통해 비동기 작업을 체계적으로 처리할 수 있다. 이러한 특징들은 JavaScript를 함수형 패러다임에 매우 적합한 언어로 만든다. 이를 통해 순수 함수로 부작용을 방지하고 불변성을 유지할 수 있어 코드의 안정성과 예측 가능성을 높일 수 있다.함수형 프로그래밍의 주..
[JS] Javascript에서의 모듈 시스템
서론JavaScript는 웹 개발에서 널리 사용되는 언어로, 시간이 지나면서 점점 더 복잡한 애플리케이션을 개발하기 위해 다양한 기능들이 추가되었다. 이 과정에서 모듈 시스템은 코드의 재사용성과 유지보수성을 높이는 중요한 역할을 하게 되었다. 모듈 시스템은 개발자가 큰 프로젝트를 작은 단위로 나누어 작업할 수 있도록 도와주며, 각각의 모듈은 독립적으로 개발되고 테스트될 수 있다. 이번 글에서는 JavaScript의 주요 모듈 시스템에 대해 자세히 살펴보겠다.JavaScript의 모듈 관리CommonJS CommonJS는 서버사이드 JavaScript 환경인 Node.js에서 주로 사용되는 모듈 시스템이다. CommonJS의 기본 아이디어는 각 파일을 독립적인 모듈로 간주하고, 이러한 모듈을 module...
[JS] Javascript에서의 OOP
서론 함수형 프로그래밍은 JavaScript 개발에서 중요한 패러다임이다. JavaScript는 함수형 프로그래밍의 여러 중요한 특징들을 지원하여 개발자들이 더 효율적이고 오류가 적은 코드를 작성할 수 있게 한다. 특히, 클로저를 통해 외부 변수를 쉽게 참조할 수 있으며, 1급 객체로서 함수를 값처럼 사용할 수 있어 코드의 유연성과 재사용성을 높인다. 또한, 모나드의 일종인 Promise를 통해 비동기 작업을 체계적으로 처리할 수 있다. 이러한 특징들은 JavaScript를 함수형 패러다임에 매우 적합한 언어로 만든다. 이를 통해 순수 함수로 부작용을 방지하고 불변성을 유지할 수 있어 코드의 안정성과 예측 가능성을 높일 수 있다. React에서는 이러한 함수형 패러다임을 권장하여 상속보다는 합성을 권장한..
CPU 스케줄링
서론 스케줄러(Scheduler)는 언제, 어떤 프로세스를 선택해서 CPU에서 실행시킬지 결정하는 모듈이다. 멀티프로그래밍의 목적은 CPU 효율을 극대화하는 것이므로 적절한 스케줄링이 필수적이다. 기본적으로 프로세스는 CPU만 사용하는 단계(CPU burst)와 I/O 작업만 하는 단계(I/O burst)의 반복으로 구성된 사이클 형태로 수행된다. 이러한 여러 작업이 혼재되어 있기 때문에 CPU 스케줄링이 필요하다. CPU Scheduler는 메모리에서 Ready 상태의 프로세스 중 어떤 프로세스를 CPU에 할당할지 선택한다. CPU 스케줄링으로 인해 프로세스의 상태는 다음과 같이 변경될 수 있다:Running → Waiting(Blocked): I/O 요청이나 자식 프로세스의 종료를 기다리는 경우Run..
[JS] Javascript에서의 Memory Management
Introduce C와 같은 low-level 언어는 malloc()과 free()와 같은 함수로 수동 메모리 관리가 가능하다. 반면, JavaScript는 객체가 생성될 때 자동으로 메모리를 할당하고 더 이상 사용되지 않을 때 garbage collection를 통해 이를 해제한다. 이러한 자동화는 개발자에게 메모리 관리를 신경 쓰지 않아도 된다는 잘못된 인식을 줄 수 있어 혼란의 원인이 될 수 있다. 이 글에서는 JavaScript에서 메모리 관리가 어떻게 이루어지는지 알아보아 효율적인 메모리 관리를 가능하게 하는데 도움이 되고자 한다. PrelimiaresJavascript data type 자바스크립트에는 기본형, 참조형 자료형이 있다. 기본형과 참조형의 종류들은 아래 그림에 나타내었다. 기본형과..
브라우저 렌더링 과정
1. 서론 웹서버에 요청을 하면 브라우저는 우리가 접근하려는 웹페이지의 HTML 파일을 포함한 응답을 받는다. 유저에게 웹페이지를 보여주기 위해서 브라우저는 파일을 파싱, 렌더링, 페인트 해야 한다. 파싱이란 프로그램을 분석하고 실행 환경에서 실제로 실행할 수 있는 내부 형식으로 변환하는 것이다. 즉, 파싱은 우리가 작성한 코드(HTML, CSS)를 브라우저가 작업할 수 있는 형태로 변환하는 것을 의미한다. 파싱은 브라우저 엔진에 의해 수행된다. 브라우저 엔진에는 Gecko, Webkit, Blink 등이 있다.2. HTML Parsing2.1 Byte Stream Decoder입력: 3C 62 6F 64 79 3E 48 65 6C 6C 6F 2C 20 3C 73 70 61 6E 3E 77 6F 72 6..
왜 리눅스는 서버OS로 많이 사용되는가: 리눅스 커널
서론 서버형 컴퓨터에 OS로는 대부분 리눅스를 사용하는 것을 알 수 있다. 델, 아마존, 애저에서 클라우드 및 네트워크 엔지니어로 일하는 선배들의 말을 들었을 때 대부분의 서버에 OS는 리눅스를 사용한다고 한다. 여태까지 개발자가 리눅스를 사용하는 이유 혹은 서버에서 OS로 리눅스를 선택하는 이유에 대해 막연하게 리눅스가 CLI가 잘 되어 있어서라고 알고 있었는데, 이 글에서는 왜 리눅스가 윈도우보다 서버 OS로 더 많이 선택되는지에 대해서 알아보고자 한다. 물론 OS는 드라이버, 시스템 라이브러리, UI, 커널 등 다양한 요소들로 이루어져 있지만, 이 글에서는 리눅스의 커널에 대해서 알아보고자 한다. 배경지식커널 커널은 운영체제의 핵심 구성 요소 중 하로, 하드웨어와 소프트웨어 간의 중개자 역할을 한다..