목록이론 (20)
책 읽다가 코딩하다 죽을래
📚 힙 정의 힙은 데이터에서 최댓값과 최솟값을 찾기 위해 고안된 완전 이진 트리이다. 힙은 항상 큰 값이 상위 레벨에 있고 작은 값이 하위 레벨에 있도록 하는 자료구조이다. 즉 부모 노드의 값이 자식 노드의 값보다 항상 커야 한다. 그러면 가장 큰 값이 모든 자식보다 크기 때문에 가장 위로 간다. 바로 루트 노드로 말이다. 이렇게 아래로 갈수록 작고 위로 갈수록 커지는 힙은 Max Heap이라 하고 이와 반대인 경우는 Min Heap이라 한다. 그런데 힙은 항상 큰 값이 상위 레벨에 있고 작은 값이 하위 레벨에 있어야 하는 규칙이 있다. 🤔 그러면 힙에 새로운 노드를 삽입하거나 이미 존재하는 노드를 삭제할 때 규칙을 어기지 않게 하려면 어떻게 해야 할까? 지금부터 노드 삽입과 노드 삭제 과정을 훑어보자 ..
🧾 목차 1. 쿠키(Cookie) 2. 세션(Session) 3. 쿠키와 세션 차이 정리 1. 쿠키(Cookie) 🍪 쿠키 정의 사용자가 방문한 웹페이지에서 이용된 환경설정 및 기타 정보를 사용자의 컴퓨터에 저장하는 작은 파일입니다. 🔗 GoogleAds 고객센터 쿠키는 웹사이트를 방문할 때마다 읽히고 수시로 새로운 정보로 바뀔 수 있는 매개체입니다. 페이티 탐색을 하거나 지역 및 언어, 성능에 대한 보고 혹은 마케팅 용 등 다양한 용도로 사용됩니다. 이처럼 쿠키는 유저들의 효율적이고 안전한 웹 사용을 보장하기 위해 웹 사이트에 많이 사용되고 있습니다. 쿠키는 웹사이트의 접속 시 접속자의 개인장치에 다운로드되고 브라우저에 저장되는 작은 텍스트 파일입니다. 웹사이트는 쿠키를 통해 웹사이트를 접속자를 인식하..
📚 트리의 정의 트리는 뿌리와 가지로 구성되어 거꾸로 세워놓은 나무처럼 보이는 계층형 비선형 자료 구조이다. 트리는 대표적인 사용 예시는 컴퓨터의 폴더 구조이다. 파일이 어느 경로에 있는지 그 경로에는 어떤 폴더들이 포함되는지 나타내야 하기 때문이다. 트리의 구조는 다음과 같다 🧬 트리의 구조 Node : 트리에서 데이터를 저장하는 기본 요소 Root Node : 트리 맨 위에 있는 노드 Level : 최상위 노드를 Level 0으로 하였을 때, 하위 Branch로 연결된 노드의 깊이를 나타냄 Parent Node : 어떤 노드의 상위 레벨에 연결된 노드 Child Node : 어떤 노드의 하위 레벨에 연결된 노드 Leaf Node(Terminal Node) : Child Node가 하나도 없는 노드 S..
오늘은 보안에서 가장 자주 사용되는 해시함수의 근본인 자료구조 해시를 배워보겠다 📚 해시 테이블이란 컴퓨팅에서 키를 값에 매핑할 수 있는 구조인, 연관 배열 추가에 사용되는 자료 구조이다. 해시 테이블은 해시 함수를 사용하여 색인(index)을 버킷(bucket)이나 슬롯(slot)의 배열로 계산한다. 데이터를 다루는 기법 중에 하나로 데이터의 검색과 저장이 아주 빠르게 진행된다. 💡 해시 테이블의 원리 해시 테이블은 파이썬의 딕셔너리(dictionary)와 같다 menu = {"apple": 1000, "potato": 500, "melon": 9000, "iceCream": 1500} 해시 테이블은 자료의 접근이 O(1)이다 menu에서 melon의 가격을 찾고 싶다면 menu의 인덱스를 모두 찾지 ..
목차 1. 프로토콜 2. HTTP 3. HTTPS 4. SSL의 원리 1. 프로토콜 더보기 우리 인간은 인터넷을 통해 서로 필요한 데이터를 수신하고 또 다른 사람들에게 데이터를 송신한다. 그런데 데이터를 주고받을 때 송신한 사람들 자기편한대로 데이터를 보내면 어떻게 될까? 그럼 받는 사람이 이 데이터는 어떤 형식의 데이터이고 데이터가 주고자 하는 메시지는 무엇인지 당연히 모른다. 그래서 우리는 세계적으로 데이터를 주고받는 양식을 일종의 규칙으로 만든 것이 바로 프로토콜이다. 세상 모든 사람들이 한 양식에 맞춰서 데이터를 보내면 나는 지구 반대편에 사람이 올린 블로그 글도 쉽게 볼 수 있는 것이다. 2. HTTP 더보기 프로토콜의 계층은 물리, 링크, 네트워크, 전송, 세션, 표현, 응용으로 이렇게 7 계..
📖 개요 우리는 실생활에서 애플리케이션이나 웹을 통해 자신의 정보와 수많은 데이터들을 다른 서버들과 송수신을 합니다. 하지만 송수신하는 과정에서 누군가가 내 데이터를 도청하거나 위변조를 한다면 대단히 위험해질 것입니다. 그래서 우리는 제 3자가 도청하더라도 무슨 데이터인지 모르게 하기 위해 평문을 암호화해서 암호문으로 바꿔야 하며, 목적지에 도착하면 보내준 데이터를 읽을 수 있도록 암호문을 복호화해서 다시 평문으로 바꿔줘야 합니다. 📖 암호 알고리즘의 종류 암호 알고리즘은 크게 단방향 암호화와 양방향 암호화가 있다. 🔑 단방향 암호화 단방향 암호화는 평문을 암호문으로 암호화하는 것은 가능하지만 암호문을 평문으로 복호화하는 것은 불가능한 암호화 기법입니다. 이렇게 원래의 데이터로 복구가 불가능한 단방향 암..
1. 스택 더보기 스택은 데이터가 아래에서부터 쌓이고 데이터를 꺼내려면 위에서부터 빼야 하는 LIFO(Last In First Out) 구조를 가지는 자료구조입니다. 흔히 쟁반 쌓기, 빨래통에 비유가 되는 이 스택 자료구조는 파워포인트나 word 또는 다양한 프로그램의 되돌리기(ctrl + z), 다시 하기(ctrl + y) 에 쓰입니다 ctrl + z 사용하면 가장 먼저 실행한 명령보다 가장 최근에 실행한 명령을 취소해야 하니까요. 이외에도 많은 부분에 쓰이는 자료구조라서 반드시 배워야 합니다. 스택이라는 자료 구조에서 구현해야할 기능은 다음과 같습니다. push(data) : 맨 앞에 데이터 넣기 pop() : 맨 앞의 데이터를 뽑으면서 그것을 반환해주기 peek() : 맨 앞의 데이터 보기 isEm..
1. 버블 정렬 더보기 버블 정렬은 보시다시피 두 개씩 비교해서 정렬한다는 모양이 마치 거품과도 같다해서 버블 정렬이라고 부릅니다. 맨 왼쪽에서부터 두 가지 수를 비교해서 오른쪽 수가 적으면 서로 자리를 바꾸고 오른쪽 수가 크면 자리를 바꾸지 않는 것입니다. 저 빨간색 네모가 왼쪽에서 맨 오른쪽까지 도착하게 되면 한 번 순회했다고 부르는데 한 번 순회할 때마다 맨 오른쪽에 하나씩 정렬이 됩니다. 왜냐하면 제일 큰 수는 저 빨간색 네모에서 계속 자리를 바꿔 결국에는 맨 뒤로 향하기 때문입니다. 그래서 한 번 순회하면 ~~, 8 두 번 순회하면 ~~7, 8 여섯 번 순회하면 1, 2, 3, 6, 7, 8 이런 식으로 정렬이 됩니다. 이러한 동작을 코드로 구현하면 다음과 같습니다. input = [3, 6, ..