![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/baYm3I/btq9JL8jH48/QciqzkpqI0glBrWjcrc2kk/img.png)
전송계층 - 데이터의 신뢰성 있는 전송을 담당하는 계층이다. - 데이터를 송수신 할 때 송신측에서 데이터 쪼갠 후 수신측에서 데이터를 다시 조립하여 수신하는 형태로 송수신한다. - 데이터의 송수신자 간 데이터 처리 속도 차이 또는 네트워크 상태 불안정 등의 여러가지 요인으로 데이터 유실 또는 데이터 변형이 일어날 수 있는데 이를 신뢰성 있는 통신을 하도록 담당하는 계층이다. - 전송계층의 프로토콜에는 TCP와 UDP가 있다. TCP (Transmission Control Protocol) - 컴퓨터 사이의 통신을 위한 규약(protocol)이다. - 데이터의 순차 전송을 보장한다. - 흐름제어, 혼잡제어, 오류감지를 한다. - 3way-handshake를 한다. 1. client는 server에 접속을 ..
시스템 디자인 스터디를 진행하며 배운 내용을 정리해놓으려고 한다. 시스템 디자인 이란? 시스템이 특정 요구사항을 충족하도록 아키텍처, 모듈, 인터페이스, 데이터를 정의하는 과정이다. 예를 들어 김장을 한다고 가정했을때 김치를 만드는데 필요한 배추, 고추가루, 소금을 갖다 놓는다고 김치가 되지는 않는다. 김치를 만들기 위해 배추를 다듬고 행구고 소금과 물을 이용하여 절이고, 고추가루와 젓갈 등을 이용하여 양념을 만들고 버무리는 과정으로 김치가 완성된다. 김치가 완성되었다고 끝나는것이 아닌, 김치냉장고를 이용하는 등의 보관하는 방법도 필요하다. 또한 김치는 배추김치 뿐만아니라 깍두기, 겉절이, 물김치, 오이소박이 등 종류에 따라 재료와 만들고 보관하는 과정이 크게 차이 날 수 있다. 시스템 디자인도 이와 비..
https://leetcode.com/problems/pascals-triangle/ Pascal's Triangle - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com input: integer number output: 2d-array ex) input : 5 output 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 n번째의 m은 n-1의 m-1+m 의 값을 가져옴 time complexity : O(n^2) space comlexity : O(n*m..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/LAzK7/btq8DdY0pZd/s62gikfjcpp5KdKHrVyczk/img.png)
정렬 알고리즘 시리즈를 시작해보려고 한다. 기초 정렬 알고리즘인 selection sort부터 시작해서 Insertion sort, merge sort, heap sort, bubble sort 등등.. 오늘은 그 첫번째인 선택정렬이다. Sorting algorithm 1. 선택정렬 선택정렬은 가장 작은 수를 선택하여 교환을 반복하는 정렬이다. interger type 배열의 정렬으로 예를 들어보자. 아래와 같은 배열이 있다. 이 배열을 순차적으로 돌며 가장 작은 값을 교환해줄 것이다. 1. 0번째 index부터 시작하여, 0번째 이후의 원소 중 가장 작은 값을 찾아서 값을 교환한다. 2. 1번째 index를 가리키며 1번째 이후의 원소 중 가장 작은 값을 찾아서 값을 교환한다. 3. 1번과 2번을 반복..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/b9I25O/btq8cFapiQu/Jwof2AWio4GlZnQCkwmHl1/img.png)
다른 함수를 parameter로 받거나 함수를 반환하는 함수를 고차함수(higher-oreder function)라고 한다. (React library에서는 어떤 컴포넌트를 받아 새로운 컴포넌트를 반환하는 고차컴포넌트(HOC)란것도 있다..) 고차함수를 응용하는 함수형 프로그래밍 방법 중 하나로, parameter를 여러개 가진 함수를 한개의 parameter만 받는 함수의 조합으로 표현하는 기법을 currying이라고 한다. Currying Currying이란 1967년 Christopher Strachey가 Haskell Brooks Curry의 이름에서 착안한것이다. 수학과 컴퓨터 과학에서 Currying이란 다중인수를 갖는 함수를 단일 인수를 갖는 함수들의 함수열로 바꾸는 것을 말한다. -위키백과..
비동기란? 특정 코드의 연산의 종료를 기다리지 않고 다른 코드를 먼저 실행 하는 특성이다. 만약 동기적으로 코드가 실행된다면 특정코드의 연산이 끝나고 다음 코드가 실행이 되는것이다. 비동기 처리를 통해 여러가지 작업을 동시에 할 수 있다. Javascript에서의 비동기 javascript 코드는 동기적으로 실행되며, hoisting이 된 이후부터 차례대로 코드가 실행된다. 그렇다면 javascript에서는 어떻게 비동기 프로그래밍을 할 수 있을까? 일반적인 javascript로 연산하는 작업은 비동기 작업을 할 수 없다. 하지만 외부api(서버 등)에 연동할 때 비동기적인 코드를 작성할 수 있다. 외부 api가 실행되는 동안 다른 작업을 할 수 있도록 하는 것이다. 이는 javascript engine..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/VtZDn/btq6qh9GppX/Z1Yz5UqRqVxhtk4oqWUcjK/img.png)
Javascript에서 this의 값은 함수를 호출한 방법에 의해 결정된다. 실행중에는 할당으로 설정할 수 없고 함수를 호출할 때 마다 다를 수 있다. ES5에서 함수를 어떻게 호출했는지 상관없이 thist 값을 설정할 수 있는 bind method를 도입했고, ES2015는 스스로의 this 바인딩을 제공하지 않는 arrow function을 추가했다. this this는 상황에 따라 다른 값을 반환하므로 우리를 어렵게 한다. this는 어떤 객체에 호출되느냐에 따라 의미가 달라진다. 실행 컨텍스트의 property는 비엄격 모드에서 항상 객체를 참조하며, 엄격모드에서는 어떠한 값이든 될 수 있다. - 전역 문맥에서 this는 전역객체를 참조한다. window를 참조하는 것이다. - 함수 문맥에서는 함..