HTTPS HTTPS란? HTTP 프로토콜의 보안버전 - S(Secure) HTTP의 약점 암호화가 되지 않은 평문 통신으로, 도청이 가능하다. 통신하려는 상대를 확인하지 않는다 HTTP의 약점을 보완하기 위해선 암호화가 필요하다 🔑 암호화 알고리즘 1. 대칭키 암호화와 복호화에 동일한 키를 사용하는 것 대칭키의 장점 송신자와 수신자가 동일한 키를 가지고 있기 때문에, 암호화 - 복호화 과정이 단순하며 속도가 빠르다. 대칭키의 단점 어쨌든 송신자와 수신자 간 키 교환이 이루어져야한다. 키 교환 과정에서 키가 노출되면 암호가 무력해진다. 수신자와 송신자가 늘어날수록 그만큼 관리해야할 키가 하나 씩 증가해 관리가 어려울 수 있다. 2. 비대칭키(공개키) 암호화와 복호화에 다른 키를 사용하는 것 비대칭키의 장..
그 외 공부
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..