REST(Representation State Transfer, 자원의 상태 전달) - 웹에 존재하는 모든 자원을 고유이름(URI, Uniform Resource Identifier)으로 구분하여 해당 자원의 상태를 주고받는 모든것 - 자원(Resource - URI), 행위(Verb - HTTP Method), 표현(Representation) - Web Site의 text, image 등과 같은 모든 자원에 고유한 ID(HTTP URI)를 부여 - Json을 통하여 데이터를 주고받는것이 일반적이다. - Web의 기존기술, HTTP를 그대로 활용하는 Architecture - Client ↔ Server 간 통신 방식 중 하나이다. - CURD ▪ Create : 생성(POST) ▪ Read : 조회(..
Greedy - 탐욕스러운, 욕심 많은 그리디 알고리즘은 이름 그대로 선택의 순간이 될때마다 당장 눈앞의 최적의 상황만을 선택하여 최종적인 답에 도달하는 방법이다. 최적의 상황이란? 최적의 상황의 예시를 들어보자 루트노드에서 가장 깊은 레벨의 노드까지의 최대합을 구하는 경로를 구해본다고 생각해보자. 여기서 탐욕스러운 방법을 이용한다면 1부터 시작해서 12보다 큰 23을 선택한다 그리고 36 37 중 더 큰 37을 선택하여 잘못된 값을 선택하게 될것이다. 그래서 실제로 그리디 알고리즘을 활용할 경우는 이러하게 간단히 선택할 수 없다. 그리디 알고리즘으로 문제를 해결하는 방법은 다음과 같다. 선택 : 현재 상태에서 최적의 해답을 고른다. 적절성 검사 : 선택된 해가 문제의 조건을 만족하는지 검사한다. 해답 ..
Same-origin과 Same-site same-site와 same-origin은 다르다. scheme과 host name, port의 조합이 모두 같을 경우 same-origin이고, host name이 같을 경우 same-site라고 한다. origin https://sample.com:8080 라는 사이트가 있다는 것을 기준으로 origin을 비교해 볼 경우 origin compare 내용 https://sample1.com:8080 cross-origin domain이 다름 http://sample.com:8080 cross-origin scheme이 다름 https://sample.com:8081 cross-origin port가 다름 https://blog.sample.com:8080 cro..
캐시 메모리, Cache Memory 캐시 메모리는 CPU와 주 기억장치(Memory, ram)의 속도차이를 극복하기 위하여 CPU ↔ 주기억장치 사이에 존재하는 고속의 버퍼 메모리이다. 캐시 메모리를 사용하여 CPU가 작업을 빠르게 처리할 수 있다. CPU는 캐시 메모리에 접근하여 연산에 필요한 명령과 데이터를 읽어 들인다. 만약, CPU가 캐시 메모리에 접근할 때 원하는 데이터가 없다면 캐시 메모리는 주기억장치에 접근하여 데이터를 캐시 메모리에 올려야 된다. -> CPU가 원하는 데이터가 캐시 메모리에 있을 수 있도록 하는 것을 의미한다. 캐시의 작동 원리 원본 데이터와 별개로 자주 쓰이는 데이터들을 복사해둘 캐시 메모리를 만든다. 데이터 요청이 들어올 경우 캐시 메모리 먼저 탐색한다. 캐시에 원하는..
최단경로 구하기 하나의 정점을 기준으로 다른 정점까지의 최단거리를 측정하는 알고리즘이다. 특정 지역에서 다른 지역까지의 최단 경로를 구하는 지도를 사용하는 application에서 사용할 수 있다. node와 가중치(node 사이의 거리)가 있는 간선으로 표현되는 그래프에서 사용한다. 1번 노드에서 부터 6번 노드까지의 최단거리를 구해야 된다고 생각해보자. 모든 경우의 수에 대하여 계산해보자. (Brute force solution) 1 -> 2 -> 3 -> 4 -> 6 => 20 1 -> 2 -> 4 -> 6 => 15 1 -> 2 -> 5 -> 6 => 9 1 -> 3 -> 4 -> 6 => 13 최단경로는 3번째 경우의 수가 된다. 하지만 모든 경우의 수를 계산하는 방식은 시간이 많이 걸린다. =..
Sorting algorithm 2. 버블정렬 버블정렬은 현재 인덱스와 현재 인덱스 + 1의 원소를 비교하여 정렬하는 방법이다. 1. 0번째 index의 값과 0 + 1번째 index의 값을 비교한다. 2. 0번째 index의 값이 더 클경우 swap을 진행한다. 간단하게 위 과정을 배열의 길이만큼 반복하면 된다. 코드로 구현 rust fn bubble_sort(array: &mut Vec) { for i in (0..array.len()).rev() { for j in 0..i { if array[j] > array[j + 1] { let curr = array[j]; array[j] = array[j + 1]; array[j + 1] = curr; } } } println!("{:?}", array)..
문자열 검색 알고리즘 문자열 검색 알고리즘은 자동완성, ctrl+f를 눌렀을 때 특정 단어를 찾을 경우 등 수많은 곳에서 활용된다. KMP알고리즘은 이 알고리즘을 개발한 사람의 이름을 따서 (Knuth, Morris, Prett) KMP알고리즘이라고 한다. 2개의 문자열간 일치하는 패턴을 확인하는 알고리즘이다. 만약 하나의 문자열과 다른 문자열을 비교할때 가장 단순하게는 문자열 하나하나를 비교해나가는 것일것이다. 단순 검색 문자열1은 "ABABCABCDE"이고 문자열2는 "ABCDE"라고 하자 문자열1을 기준으로 문자열2를 맞추어 나가면서 일치하는 문자열을 찾을때까지 순회할 수 있다. 1번째 비교 0 1 2 3 4 5 6 7 8 9 A B A B C A B C D E A B C D E 2번째 비교 0 1..
전송계층 - 데이터의 신뢰성 있는 전송을 담당하는 계층이다. - 데이터를 송수신 할 때 송신측에서 데이터 쪼갠 후 수신측에서 데이터를 다시 조립하여 수신하는 형태로 송수신한다. - 데이터의 송수신자 간 데이터 처리 속도 차이 또는 네트워크 상태 불안정 등의 여러가지 요인으로 데이터 유실 또는 데이터 변형이 일어날 수 있는데 이를 신뢰성 있는 통신을 하도록 담당하는 계층이다. - 전송계층의 프로토콜에는 TCP와 UDP가 있다. TCP (Transmission Control Protocol) - 컴퓨터 사이의 통신을 위한 규약(protocol)이다. - 데이터의 순차 전송을 보장한다. - 흐름제어, 혼잡제어, 오류감지를 한다. - 3way-handshake를 한다. 1. client는 server에 접속을 ..