Computer science 18

[Network] REST, REST API, RESTful API?

프론트 엔드 개발을 진행하면서, 백엔드 개발자와 협업을 진행하기 위해서는 REST의 개념에 대해서 알아야 할 필요가 있습니다. 오늘은 REST와 REST API, RESTful API에 대해서 알아보겠습니다. 목표 REST의 개념 및 특징을 이해한다 REST API의 개념 및 규칙을 이해한다 RESTful의 개념을 이해한다 REST의 정의 먼저 REST는 ‘Representational State Transfer’의 약자로 자원을 이름으로 구분하여 자원의 상태를 주고받는 모든 것을 의미합니다. REST의 개념 REST는 HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시합니다. HTTP Method(GET, POST, PUT, PATCH, DELETE..

[Tech] 대칭키와 비대칭키

0️⃣ 대칭키와 비대칭키? 대칭키 암호화 방식은 암호화와 복호화에 사용하는 키가 동일한 암호화 방식이다. 비대칭키 암호화 방식은 암복호화에 사용하는 키가 서로 다른 방식이다. 따라서 대칭키(공개키) 암호화에서는 송수신자 모두 한쌍의 키(개인키, 공개키)를 갖고 있게 된다. 1️⃣ 대칭키의 장단점 대칭키는 공개키 암호화 방식에 비해 속도가 빠르지만 키를 교환 해야한다는 문제가 발생한다. 또한 사람이 증가할수록 따로따로 키 교환을 해야 하기 때문에 관리해야 할 키가 많아진다. 장점 : 수행 시간이 짧음 단점 : 키를 교환해야 하기 때문에 보안상 문제 발생, 사람이 많아질 수록 키 관리 어려움 2️⃣ 비대칭키(공개키)의 장단점 키를 교환할 필요가 없는 장점을 갖고 있고, 개인키를 갖고 있는 수신자만이 암호화된..

[Network] URL

💡 URL? 1️⃣ Protocol (통신 규약) 사용자가 서버에 접속할 때 어떠한 방식으로 통신할 것인가에 대한 부분 2️⃣ HTTP(Hyper Text Transfer Protocol) 클라이언트와 서버가 데이터를 주고받을 때 고려하는 통신 규약 3️⃣ Host(domain) 인터넷에 접속되어있는 각각의 컴퓨터 Domain Name System 를 참고하면 domain에 대해서 알 수 있다. 4️⃣ Port 클라이언트가 접속했을 때 어떤 서버와 통신할지를 나타냄 5️⃣ Path 어떤 directory의 어떤 file인지를 나타냄 6️⃣ Query string 내가 읽고 싶은 정보

[Algorithm] 다이나믹 프로그래밍 (Dynamic Programming)

다이나믹 프로그래밍 다이나믹 프로그래밍은 메모리를 적절히 사용하여 수행 시간의 효율성을 비약적으로 향상시키는 방법입니다. 이미 계산된 결과는 별도의 메모리 영역에 저장하여 필요할 때 꺼내서 사용하도록 합니다. 다이나믹 프로그래밍의 구현은 탑다운(Top-down), 보텀업(Bottom-up) 방식으로 구성됩니다. 다이나믹 프로그래밍은 동적 (실행되는 도중에를 의미한다) 계획법이라고도 부릅니다. 다이나믹 프로그래밍을 이용해서 문제를 해결할 때, 사용하는 배열 이름을 캐시(cahse), 메모(memo), 테이블(table), DP 혹은 D라고 설정합니다. 다이나믹 프로그래밍의 조건 1. 최적 부분 구조(Optimal Substructure) 큰 문제를 작은 문제로 나눌 수 있으며 작은 문제의 답을 모아서 큰 ..

[Algorithm] 이진 탐색 (Binary Search)

이진 탐색과 순차 탐색 일단, 이진 탐색과 순차 탐색을 비교해봅시다. 종류 설명 이진 탐색 정렬되어 있는 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법 이진 탐색은 시작점, 끝점, 중간점을 이용하여 탐색 범위를 설정 순차 탐색 리스트 안에 있는 특정한 데이터를 찾기 위해 앞에서부터 데이터를 하나씩 확인하는 방법 이진 탐색은 이처럼 탐색 범위를 좁혀 나가기 때문에 순차 탐색보다 더 적은 시간 복잡도를 가질 수 있습니다. 이진 탐색 동작 예시 아래와 같이, 이미 정렬된 10개의 데이터 중에서 값이 4인 원소를 찾는 예시를 확인해보겠습니다. [Step 1] 시작점 : 0, 중간점 : 8, 끝점 : 18 (소수점 이하는 제거)로 지정할 수 있습니다. 찾고자 하는 값보다 중간점의 위치의 값이 크다..

[Algorithm] 정렬 알고리즘(퀵)

퀵 정렬(Quick) : 기준 데이터를 설정하고 그 기준보다 큰 데이터와 작은 데이터의 위치를 바꾸는 방법이다. 퀵 정렬의 특징 가장 많이 사용된다. 대부분의 프로그래밍 언어의 정렬 라이브러리의 근간이 된다. 가장 기본적인 퀵 정렬은 첫 번째 데이터를 기준 데이터(Pivot)로 설정한다. 퀵 정렬 동작 예시 Step 0 : 현재 피벗의 값은 '5'이다. 왼쪽에서부터 '5'보다 큰 데이터를 선택하므로 '9'가 선택되고, 오른쪽에서부터 '5'보다 작은 데이터를 선택하므로 '4'가 선택된다. 이제 이 두 데이터의 위치를 서로 변경한다. Step 1 : 현재 피벗의 값은 '5'이다. 왼쪽에서부터 '5'보다 큰 데이터를 선택하므로 '7'이 선택되고, 오른쪽에서부터 '5'보다 작은 데이터를 선택하므로 '0'이 선택..

[Algorithm] 정렬 알고리즘 (삽입 정렬)

삽입 정렬 처리되지 않은 데이터를 하나씩 골라 적절한 위치에 삽입한다. 삽입 정렬 과정 Step 0 : 정렬할 데이터를 준비한다. Step 1 : 첫 번째 데이터 '5'가 정렬되어 있다고 판단, 두 번째 데이터인 '1'이 '5'의 왼쪽이나 오른쪽으로 들어갈지 결정한다. 결과적으로 '5'의 왼쪽으로 '1'이 들어가게 된다. Step 2 : 이어서 '4' 가 어디로 들어갈지 판단한다. '4'는 '5'의 왼쪽인 두번째 위치로 들어갈 것이다. Step 3 : 이어서 '3'이 어디로 들어갈지 판단한다. '3'은 '5'의 왼쪽으로 이동, '4'의 왼쪽으로 이동을 통해서 다음과 같이 위치할 것이다. Step 4 : 마지막으로 '2'가 어디로 들어갈지 판단한다. '2'는 3번의 이동을 통해서 다음과 같이 '3'의 왼쪽..

[Algorithm] 정렬 알고리즘 (선택 정렬)

1. 정렬 알고리즘? 데이터를 특정한 기준에 따라 순서대로 나열하는 것을 말한다. 일반적으로 문제 상황에 따라서 적절한 정렬 알고리즘이 공식처럼 사용된다. 데이터의 개수가 적을 때 데이터의 개수가 많으면서 범위가 한정되어 있을 때 이미 데이터가 정렬되어 있을 때 선택 정렬 처리되지 않은 데이터 중에서 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸는 것을 반복한다. 선택 정렬 과정 Step 0 : 정렬할 데이터를 준비한다. Step 1 : 처리되지 않은 데이터 중 가장 작은 '1' 을 선택해 가장 앞의 '5' 와 바꾼다. Step 2: 처리되지 않은 데이터 중 가장 작은 '2' 를 선택해 가장 앞의 '5' 와 바꾼다. Step 3: 처리되지 않은 데이터 중 가장 작은 '3' 을 선택해 가장 앞의 ..

[Network] Domain Name System

1️⃣ Domain Name System : 인터넷에 연결된 컴퓨터 한 대 한대를 host라고 한다. 이 호스트가 서로 통신하기 위해서는 주소가 필요한데, 이를 ip 주소라고 한다. 하지만, 이 ip 주소를 일일이 기억하기는 쉽지 않다. 그래서 등장한 것이 domain name system인 DNS이다. 이 DNS의 핵심은 DNS Server이다. DNS Server 에는 수많은 IP 주소의 domain 이름이 저장되어 있다. 2️⃣ 도메인 이름의 구조 위의 4가지 도메인은 DNS 서버가 각각 담당하고 있다. 전담하는 파트가 다르다고 볼 수 있다. IP 주소를 알기 위해서, 위의 www.blog.dongle.com. 을 예시로 다음의 과정이 진행되는 것이다. 1. Root DNS server에서 Top-..

[Algorithm] BFS (너비 우선 탐색)

1. BFS (Breadth-First Search) 너비 우선 탐색이라고 부르며, 그래프에서 가까운 노드부터 우선적으로 탐색하는 알고리즘이다. 동작 과정에서 큐 자료구조를 이용한다. 탐색 시작 노드를 큐에 삽입하고 방문 처리를 한다. 큐에서 노드를 꺼낸 뒤에 해당 노드의 인접 노드 중에 방문하지 않은 노드를 모두 큐에 한 번에 삽입하고 방문 처리한다. 2번 과정을 더 이상 수행할 수 없을 때까지 반복한다. 그림으로 과정을 나타냈을 때, 다음과 같다. 이러한 과정을 반복하였을 때, 전체 노드의 탐색 순서(스택에 들어간 순서)는 다음과 같다. python 코드로 구현하면 다음과 같다.