그 외 공부

HTTP HTTP란? HyperText Transfer Protocol의 약자로, HyperText 문서(HTML)의 리소스들을 가져오거나 보낼 때 사용하는 통신규약 TCP / IP 위에서 이루어짐 HTTP는 요청 & 응답 구조로 이루어져있다 Client가 Request & Server가 Response HTTP의 특성 ✅ Stateless하다! 각각의 요청(Request)와 응답(Response)는 독립적인 행위이다. Ex) 클라이언트가 요청을 보낸 후 응답을 받고, 얼마 후에 또 다른 요청을 보낼 때 클라이언트와 서버는 둘 다 이전에 보냈던 요청 / 응답에 대해 기억하지 못한다. Stateless하기 때문에 다수의 Request가 서버로 들어와도 부하를 줄일 수 있다. (연결 정보를 저장할 필요가 없..
TCP란 연결 지향형 프로토콜로, 연속성 있는 데이터 패킷을 주고 받을 때 사용한다. TCP 특징 전송되는 데이터의 신뢰성 보장 (흐름 제어, 혼잡 제어, 오류 제어) 파일전송에 주로 사용 가상 회선을 만들어 신뢰성을 보장 TCP 3 way handshake 연결하고자 하는 두 장치 간의 논리적 접속을 성립하기 위해 사용하는 연결 확인 방식으로, 3번의 확인 과정을 거친다고 해서 3 way handshake라고 부른다. TCP 3 way handshake를 간단히 표현하면 다음과 같다. A -> B : 내 말 들려? B -> A : 잘 들려. 내 말은 들려? A -> B : 잘 들려! SYN (synchronize sequence numbers) - 연결 확인을 위해 보내는 무작위의 숫자값 (내 말 잘 ..
힙이란? 힙은 트리 형태로 만들어진 자료구조 중 하나이다. 힙은 트리 중에서도 두 가지 조건을 만족해야 하는데, 첫 번째는 완전이진트리여야 한다는 것 두 번째는 부모 노드의 값이 항상 자신의 자식노드들보다 커야한다는 것이다. (힙의 예시) 위 트리는 트리의 높이 - 1 까지 모두 빈 노드 없이 차 있으며 마지막 높이의 데이터들 역시 왼쪽부터 오른쪽으로 차례대로 채워져있으므로 완전이진트리의 속성을 만족시킨다고 할 수 있다. 또한, 모든 노드들이 자신의 자식노드들보다 큰 값을 가지기 때문에 힙의 성질 역시 만족시킨다고 할 수 있겠다. 힙 자료구조의 구현 힙 자료구조는 기본적으로 완전이진트리이기 때문에, 특정 노드의 위치를 알면 그 노드의 부모 노드의 위치와 두 자식 노드의 위치를 알 수 있다. 이를 활용하면..
1) 이진트리 이진트리는 부모 하나 당 최대 2개까지의 자식노드를 가질 수 있는 트리를 말한다. 따라서 이진트리의 각 노드 인스턴스는 자신의 부모 노드에 대한 레퍼런스와 두 자식노드에 대한 레퍼런스를 가지게 된다. 이진트리의 노드 클래스를 구현하면 다음과 같다. # 이진트리의 노드 class Node: def __init__(self, data): # 파라미터로 받은 데이터를 삽입 self.data = data # None으로 초기값을 지정 후, 노드 생성 후에 지정 self.left_child = None self.right_child = None 이후, 각 데이터를 담은 노드 클래스를 만들어주고 자식 관계를 설정해주고 나면 노드를 통해 그 노드의 부모노드와 자식노드를 모두 호출할 수 있게 된다. 2)..
트리 자료구는 이전에 살펴봤던 링크드 리스트, 해시테이블과는 다르게 데이터들을 계층적으로 저장하여 관리한다. 이말은 즉, 삽입된 데이터 간에 높낮이 혹은 서열이 있다는 뜻으로 이해할 수 있겠다. 링크드 리스트의 노드를 정의할 때 데이터 값과 다음 노드에 대한 레퍼런스를 next 라는 이름으로 저장한 것과 반대로, 트리의 경우 노드에 데이터값과 자신의 윗 노드, 아랫 노드에 대한 레퍼런스를 저장하고 이를 각각 부모노드, 자식노드라 칭한다. root 노드 트리의 맨 시작점이 되는 노드이다. 링크드 리스트에서 head 노드를 따로 관리해줬던 것처럼 트리에서는 제일 윗 노드를 root라는 이름으로 따로 관리해준다. 형제노드(자매노드) Siblings 동일한 부모를 공유하는 다른 노드들을 말한다. 위 트리에선 F..
큐와 유사한 자료구조 중 스택 자료구조가 있다. 스택은 큐와 다르게 LIFO (Last-in First-out) 의 방식으로 데이터를 관리한다. 즉, 마지막에 들어온 데이터가 먼저 아웃된다. 이러한 방식의 데이터 관리는 여러 방식에서 다양하게 쓰일 수 있는데, 우리가 흔히 컴퓨터 작업에서 사용하는 실행취소 및 복원 잡업 등에서 사용할 수 있다. 스택을 통해 구현할 수 있는 작업은 다음과 같다. 1) 맨 뒤에 새로운 데이터 추가 - append 2) 맨 뒤의 데이터 삭제 후 삭제된 데이터 리턴 - pop 3) 맨 뒤의 데이터에 접근 - stack[-1] 스택 또한 collections의 deque를 이용할 수 있다. 그러나, 큐의 경우와는 다르게 맨 뒤의 값에 접근하는 연산은 동적배열과 링크드 리스트 모두..
큐는 데이터를 FIFO (First-in First-out) 방식으로 관리하는 자료구조이다. FIFO라는 말 그대로 처음 들어온 데이터를 먼저 나가는, 우리가 아는 마트 계산대나 은행 창구에서 고객을 처리하는 방식과 동일하게 작동한다. 실제로 대기줄 자체를 영어로 큐 (Queue)라고 부르기도 하며, 이 특성 덕분에 서로 다른 데이터 간의 순서를 유지할 수 있다. 큐에 구현되어 있는 대표적 기능은 다음과 같다. 1) 맨 뒤에 데이터를 추가 - append 2) 맨 앞 데이터에 접근 - deque[0] 2) 맨 앞 데이터를 삭제 후 삭제한 값을 리턴- popleft 파이썬에서는 collections에서 제공하는 deque를 이용해 큐를 이용할 수 있다. from collections import deque..
Chaining 이외에도 해시테이블의 충돌을 해결하는 방식 중 Open Addressing이 있다. Open Addressing의 개념은, 해시테이블에 동일한 해시함수 값을 가진 데이터들이 저장될 경우 다른 비어 있는 자리를 찾아 해당 데이터를 삽입한다는 것이다. Open Addressing은 선형탐사(Linear probing), 제곱탐사(Quadratic probing), 그리고 이중해싱(Double hashing)가 있다. 1. 선형탐사 (Linear probing) 선형탐사는 데이터가 삽입될 자리에 이미 다른 데이터가 있다면, 한 칸씩 내려가며 빈 자리에 데이터를 저장한다. 76, 93, 40은 각각의 해시함수값이 6, 2, 5로 서로 겹치지 않아 해당 인덱스에 저장된다. 다음으로 삽입되는 47은..
SeongOnion
'그 외 공부' 카테고리의 글 목록 (3 Page)