본문 바로가기

programming

(21)
Destructure Swap과 temp 변수를 사용한 Swap의 차이 입력값이 커서 최적화가 필요한 알고리즘 문제를 풀다가 아무리 해도 시간초과 문제가 해결되지 않아, Destructure assignment(구조 분해 할당)를 사용하는 swap의 문제인가 싶어서 찾아보니 temp 변수를 활용한 swap과 비교해서 많이 느리다고 한다. Destructure assignment swap let a = 1; let b = 2; [a, b] = [b, a] console.log(a) // 2 console.log(b) // 1 이런식으로 구조 분해 할당하여 각 변수 값을 바꾸는 방식을 말한다. 파이썬과 같은 다른 언어처럼 직관적인 교환이 가능하다. Temp variable swap let temp; let a = 1; let b = 2; temp = a; a = b; b = t..
[운영체제] 프로세스 스케줄링 프로세스 스케줄링이란? 프로세스 스케줄링은 CPU를 사용하려고 하는 프로세스들 사이의 우선순위를 관리하는 작업이다. 즉, CPU가 할 일을 적절하게 스케줄링해준다고 볼 수 있다. 예를 들어, CPU가 하나뿐인 시스템인 단일 처리 시스템에서는 운영체제의 CPU 등의 자원을 얻으려는 작업 A와 B가 있을 때, A가 이미 실행 중일때는 이 작업이 끝나야 B작업을 수행할 수 있다. 반면에 CPU가 여러 개인 다중 처리 시스템에서는 운영체제의 스케줄러가 자원을 사용하려는 프로세스들에 자원을 적절히 분배해서 할당한다. 결국 CPU가 놀지 않도록 이거해라 저거해라 해준다는 의미이다. 스케줄링을 통해서 우리가 가지는 이점은 CPU의 처리율 증가 : 같은 시간 동안 프로세스를 처리하는 비율 증가 CPU 이용률을 증가 :..
HTTP란 HTTP HTTP는 Hypertext Transfer Protocol의 약자이고, 주로 HTML 문서같은 데이터를 요청하여 가져올 수 있도록하는 프로토콜을 말한다. 프로토콜(Protocol)은 A와 B사이에서 데이터를 주고 받기위한 일종의 통신상 약속을 말한다. 미리 어떻게 주고, 어떻게 받는다고 약속을 해둔다는 말이다. 웹에서는 클라이언트(보통 웹 브라우저)와 서버(데이터 요청에 대해 응답)간에 데이터를 주고 받기위해 HTTP 프로토콜을 사용한다. 여기서 데이터는 보통 문서를 말하는데 문서안에 포함되는 텍스트, 이미지, 비디오, 스크립트 등을 포함한다. 클라이언트는 브라우저를 통해 어떤 사이트에 접속하게 되면 서버에다가 해당 페이지를 '요청'하게 되는 것이다. 그러면 서버는 요청을 받아서 클라이언트가 ..
XSS, CSRF 공격 XSS 공격 XSS(Cross Site Scripting) 공격은 웹 사이트의 관리자가 아닌 사람이 특정한 악성 스크립트를 삽입할 수 있는 공격이다. 쉽게 말하면 다음과 같다. 보안이 취약한 웹사이트에서 게시판에 글을 쓴다고 생각하자. 근데 어떤 악성 사용자가 게시글의 내용에 저런 스크립트를 작성했다고 생각하면, 저 게시글을 여는 순간 alert 함수가 막 실행된다는 것이다. 생각만해도 끔찍하다. 다른 예시를 보자 이번에는 위와 같이 해커의 서버로 피해자의 쿠키를 get 요청으로 보내버리는 경우도 있다. 쿠키에는 Session ID와 같은 사용자 로그인에 대한 정보를 갖고 있을 수 있고 해커는 Session ID를 이용해서 사용자의 정보를 탈취할 수 있다. 이런 경우는 브라우저 버전을 최신으로 업데이트 ..
프로세스, 스레드 프로그램 프로그램은 보통 하드디스크나 보조기억장치에 저장된 실행가능한 코드를 말한다. 프로세스 프로세스란 CPU에 의해 처리되는 사용자 프로그램, 시스템 프로그램, 즉 실행중인 프로그램을 의미하고 작업(Job) 또는 태스크(Task)라고도 한다. 운영체제로부터 자원을 할당받는 작업의 단위라고도 할 수 있다. 프로세스가 여러 개가 된다면 멀티프로세스라고 한다. 프로세스 상태 하나의 프로세스는 여러가지 이벤트에 의해 일련의 서로 구분되는 상태 변화를 겪는다. 생성, 준비, 실행, 대기, 완료 상태를 가질 수 있다. 프로세스 상태 설명 생성(Create) 상태 사용자에 의해 프로세스가 생성된 상태 준비(Ready) 상태 CPU를 할당 받을 수 있는 상태. 준비 리스트 : 각각 우선순위를 부여하여 가장 높은 우..
자바스크립트 this Java와 같은 언어의 this는 그 쓰임새가 명확하고 간결하다고 할 수 있다. 근데 Javascript의 this는 어디서 어떻게 함수 호출에 쓰이느냐에 따라 가리키는 곳이 다양하다. 즉, 함수 호출방식에 따라서 this에 바인딩(묶일) 될 객체가 동적으로 결정된다. 그 부분에 대해서 정리를 해보려한다. 함수가 호출 되는 방식은 아래와 같은 방법이 있다. 함수 호출 메서드 호출 생성자 함수 호출 apply, call, bind를 이용한 호출 1. 함수 호출 console.log(this) // window function func() { console.log(this) // window function inner() { console.log(this) // window } } func() 기본적으로 t..
Rest syntax VS Spread syntax (...) 나머지 연산자 vs 전개 연산자 자바스크립트 개발을 할 때 ' ... ' 연산자는 매우 유용하게 쓰인다. 쓰임에 따라서 나머지 연산자 혹은 전개 연산자라고 불리는데, 말 그대로 나머지를 가져오거나 어딘가에 배열이나 객체를 펼쳐놓을 때 많이 썼다. 쓸 줄도 알고 이름도 알았지만 이렇게 분류해서 생각해본 적은 처음이다. 그냥 같은 것이라고 생각만하고 썼는데, 직접 분류하려고 보니 명백하게 다른 쓰임새를 갖고 있었다. 그래서 한번 정리를 해보려한다. Rest syntax (나머지 구문) Rest Parameter 와 Rest Property로 나누어 진다. 이름 그대로 생각하면 된다. 전자는 매개변수이고 후자는 객체의 프로퍼티이다. rest parameter (나머지 매개변수) 매개변수의 이름 앞에 ... 를..
자바스크립트 클로저(Closure) 클로저 클로저란 어떤 함수에다가 그 함수가 선언된 환경(렉시컬 환경, lexical environment)에 대한 참조가 결합된 형태를 얘기한다. 다시 말해서, 클로저는 이미 호출이 완료된 외부함수의 스코프에 내부함수가 접근이 가능하도록 한다. C와 같은 언어를 사용하다가 자바스크립트 클로저를 본 사람들은 이상하게 생각할 수도 있다. 왜 함수가 끝났는데 함수 내부 변수에 접근이 가능한거지? C언어에서는 정적변수를 함수내에서 선언하지 않는 이상, 함수 호출이 끝나면 그 내부 변수에 대해서는 참조를 할 수 없다. 근데 자바스크립트는 가능하다. 알아보자. 렉시컬 스코프 (lexical scope) 렉시컬 스코프란 쉽게 말하면 함수가 어디서 호출되는지에 따라서가 아닌 함수가 선언된 위치를 따라 스코프가 결정되는..