[OS] CPU 스케쥴링
2023. 1. 30. 23:40
Today I learned
CPU 스케쥴링 알고리즘 등장배경 프로세스가 CPU를 점유하여 작업을 수행하는 도중 I/O 또는 Interrupt가 발생하면 일시적으로 프로세스는 CPU를 사용하지 않게 된다. 하지만 계속해서 CPU를 점유하고 있다. 이러한 상황을 줄여, CPU를 최대한 활용하면 시스템의 성능을 끌어올릴 수 있다. 어떻게 프로세스들이 CPU를 효율적으로 사용할 것인가? 라는 고민에서 CPU 스케쥴링 알고리즘이 시작되었다. 스케쥴링 알고리즘은 한정된 자원으로 최고의 성능을 내기 위해 자원을 어떤 프로세스에 얼마나 할당할 지 정책을 만드는 것을 말한다. CPU 스케쥴링 방식의 종류 CPU 스케쥴링 방식은 크게 선점 스케쥴링과 비선점 스케쥴링으로 구분된다. 선점 스케쥴링은 가장 자원이 필요한 프로세스에게 CPU를 먼저 분배하..
[JavaScript] require/exports 와 import/export 차이
2023. 1. 29. 14:48
Today I learned
require/exports require/exports 방식은 기존에 Node.js 에서 사용되던 CommonJS 모듈 방식으로, module.exports 객체에 모듈 전체를 담아 내보내고 require를 통해 해당 모듈을 불러오는 방식이다. 따라서 require를 사용하면 모듈 전체를 불러오게 되는데, 불필요한 모듈이 로드되기도 하고 어떤 부분을 모듈 내에서 사용했는지 알 수 없다. import/export import/export 방식은 ES6에 새로 등장한 ES 모듈 방식으로, import를 사용해 모듈을 가져온 뒤 만든 객체를 내보내기 위해 export를 사용하는 방식이다. 실제로 쓰이는 부분만 불러와 사용하기 때문에 메모리를 절약할 수 있다. export 를 사용하는 방식은 require와는..
[데이터베이스] 정규화
2023. 1. 8. 19:31
데이터베이스
들어가며 이번에 새로 팀 프로젝트를 시작하며 데이터베이스 모델링을 맡게 되었다. 개념적 데이터 모델링을 통해 서비스에 필요한 엔티티 도출부터 시작해서 어느 정도 데이터 모델링을 끝마쳤다. 내가 한 데이터 모델링에 대한 확신이 없어 좀 더 좋은 데이터베이스 설계에 대한 고민이 들기 시작했다. 자료를 찾아보던 중 정규화 작업을 통해 데이터 모델링이 단계적으로 잘 이루어졌는지 점검할 수 있다는 것을 알게 되었다. 정규화라는 단어에 대해서만 들어보았지 실제로 어떤 과정을 거쳐 정규화 작업이 이루어지는지 몰라 이번 기회를 통해 공부하게 되었고, 공부한 내용을 잊지 않고자 이렇게 글로 남긴다. 이 글은 여러 블로그 자료를 공부하며 나름대로 이해한 바를 바탕으로 정리한 내용이니 내용 상에 오류가 발견될 수 있다. 치..
[JavaScript] 반복문
2022. 11. 5. 19:38
프로그래밍 언어/JavaScript
반복문이란? 일반명사) 되풀이하는 것 고유명사) 프로그램 소스 코드 내에서 조건을 만족할 때까지 특정한 부분의 코드가 반복적으로 수행될 수 있도록 하는 구문 반복문의 종류 for 문 for 문은 조건식이 거짓으로 판별될 때까지 코드 블록을 반복 실행한다. 문법 : for (초기화식; 조건식; 증감식) { // ... 조건식이 참인 경우 반복 실행될 코드 ... } 예시) for (let i = 0; i < 3; i++) { // 0, 1, 2 가 출력된다. console.log(i); } 초기화식 let i = 0 반복문에 진입할 때 단 한 번 실행됨. 조건식 i < 3 반복마다 해당 조건이 확인됨. false 이면 반복문을 멈춤. 본문 console.log(i) 조건이 true 일 동안 계속해서 실행된..
[JavaScript] 호이스팅
2022. 11. 5. 19:28
프로그래밍 언어/JavaScript
호이스팅이란? 일반명사) 끌어 올리기 고유명사) 선언한 위치와 상관없이 함수, 변수의 선언부를 인접한 스코프의 최상단으로 끌어올려 스코프 내 어디서든 해당 식별자를 관측할 수 있는 현상 호이스팅은 어떻게 발생하는가? 하지만 자바스크립트 엔진은 실제로 코드를 실행하는 시점에 함수, 변수의 선언부를 인접한 스코프의 최상단으로 끌어올릴 만한 능력이 없다. 단지 코드 실행 전에 어떤 과정을 거쳐서 변수, 함수에 대한 전체적인 정보를 미리 알고 있을 뿐이다. 여기서 말하는 어떤 과정이란 참고) 자바스크립트는 코드 실행 전 따로 컴파일 과정을 거친다. 컴파일 : 사람이 이해하는 언어로 이루어진 코드를 컴퓨터가 이해할 수 있도록 쪼개고, 체계적인 구조로 재가공하여 전체를 분석하는 일련의 과정 자바스크립트 엔진은 코드..
[JavaScript] 실행 컨텍스트
2022. 11. 5. 19:15
프로그래밍 언어/JavaScript
실행 컨텍스트(Execution Context) 란? 실행할 코드에 제공할 환경 정보들을 모아 놓은 객체이다. 전역 코드 : 전역 영역에 존재하는 코드 함수 코드 : 함수 영역에 존재하는 코드 일반적으로 실행할 코드는 전역 코드와 함수 내 코드이다. 자바스크립트 엔진이 코드를 실행하기 위해 필요한 모든 정보를 하나의 객체로 묶어 놓은 것이다. 실행 컨텍스트 생성 과정 1. 실행 컨텍스트 생성 2. 스코프 체인의 생성과 초기화 실행 컨텍스트가 생성된 이후 가장 먼저 스코프 체인의 생성과 초기화가 실행된다. 이때 스코프 체인은 전역 객체의 레퍼런스를 포함하는 리스트가 된다. 3. 변수 객체화 실행 스코프 체인의 생성과 초기화가 종료하면 변수 객체화가 실행된다. 변수 객체화는 변수 객체에 변수, 매개변수와 인..
[JavaScript] Primitive Type(원시 타입) 과 Reference Type(참조 타입)
2022. 11. 5. 17:59
프로그래밍 언어/JavaScript
자바스크립트의 자료형은 크게 원시 타입 과 참조 타입 으로 나뉜다. 원시 타입 (Primitive Type) 모두 하나의 값을 담고 있다. 값 자체에 대한 변경이 불가능(immutable) 하다. 예시) let myString = "hello"; myString[0] = 'B'; // 원시 타입이기 때문에 Bye 로 변경 불가능. 오류는 Throw 되지 않는다. console.log(myString); // bye 변수에 데이터를 재할당할 수 있다. 예시1) 문자열을 담고 있던 변수에 다른 문자열을 담을 수 있다. let myString = "hello"; myString = "bye"; // 재할당 가능 console.log(myString); // bye 예시2) 문자열을 담고 있던 변수에 숫자를 담..
[JavaScript] 자바스크립트 언어의 특징
2022. 11. 5. 17:54
프로그래밍 언어/JavaScript
자바스크립트의 특징 자바스크립트는 컴파일 언어이다. (자바스크립트는 코드 실행 전 코드 평가 과정을 거친다. 이 과정에서 선언된 모든 식별자에 대한 정보를 미리 수집해 메모리에 매핑시키는데, 이로 인해 코드 실행 시 호이스팅 문제가 발생한다.) 자바스크립트는 Lexical-Scoped 언어이다. (자바스크립트에서 함수 선언 시점에 스코프가 생겨나며, 함수를 선언하는 순간 함수 내부의 변수들은 자기 스코프로부터 가장 가까운 곳(상위 스코프에서) 에 있는 변수를 계속 참조하게 된다. 자바스크립트의 이런 특성으로 인해 생성되는 함수는 모두 클로저 함수라고 말할 수 있다.) 자바스크립트는 dynamically-typed 언어이다. (자바스크립트는 코드 실행 시점에 변수의 타입이 결정되고 변수 타입에 해당하는 메..