본문 바로가기

프로그래머, 보안 관련 지식

payload란? 네트워크 관련 자료나 보안 수업을 듣다보면 페이로드(payload)라는 단어를 많이 듣는다. 페이로드는 크게 2가지의 뜻이 있다. 첫번째, 전송하고자 하는 데이터 그자체이다. 위키 백과에 따르면 웹 서비스 응답(web service response)이 아래의 JSON파일이라고 해보자. 1 2 3 4 5 6 7 { "status":"OK", "data": { "message":"Hello, world!" } } cs 여기서 data란의 안에 있는 메세지 "Hello, world!"가 클라이언트가 관심을 가지는 페이로드라고 한다. 즉 예를 들어서 택배라고 생각하면 페이로드는 택배 상자 안에 있는 내가 주문을 한 상품 그자체이다. 그리고 상품이 깨지지 말라고 넣은 뽁뽁이등은 페이로드 이외의 것이라고 생각하면 .. 더보기
자료구조 : Queue in python Queue(큐) FIFO(first in first out) 의 규칙을 가진 자료구조이다. 즉 먼저 들어온 요소가 먼저 나간다는 뜻이다. 이러한 자료구조를 파이썬 코드로 나타내보자. 1. 일반적인 Queue 자료구조 1 2 3 import queue data_queue = queue.Queue() cs 위와 같이 정의하면 data_queue 라는 이름의 queue 자료구조가 간단하게 완성된다. 이제 data를 집어 넣고 빼는 코드를 짜보자. 1 2 3 4 5 6 7 data_queue.put("a") # a 입력 data_queue.put("b") # b 입력 data_queue.put("c") # c 입력 print(data_queue.get()) # a 출력 print(data_queue.get()).. 더보기
자료구조 : Array in python 앞서 자료구조에서 배웠듯이 array 즉 배열은 같은 type의 데이터를 순서대로 나열한 자료구조이다. 파이썬에서의 배열 사용은 다른 언어들에 비해 매우 간단한 편이다. 먼저 배열의 이름을 설정하고 나열하고자 하는 데이터를 보통 리스트의 형태( [ ] 로 묶어서 ) 로 나타낸다. 배열의 타입이나 크기를 설정해줘야하는 c언어에 비해 간단하게 배열을 표현할 수 있다. 1 2 data = [1,2,3,4,5] char = ['a','b','c'] 이런 식으로 말이다. 각각의 요소는 인덱스를 통해서 접근이 가능하다. ( ex) data[0] = 1, char[2] = 'c') 인덱스는 0부터 시작하게 되어 가장 큰 인덱스는 (배열 요소의 개수 - 1) 가 된다. 가장 간단한 사용법인 배열이지만 이러한 배열의 성.. 더보기
자료구조 : Tree(3) - AVL Tree - 이번 포스팅에서는 다른 Tree 구조를 알아보는 시간을 가지겠다. Contents AVL Tree Idea AVL Tree Definition AVL Tree Height Bound Proof AVL Tree Insertion AVL tree 는 최악의 경우에서 tree height 가 크지 않은 tree 구조이다. 지난번에 다른 BST보다 훨씬 더 어려울 것이다. AVL Tree Idea 아이디어는 다음과 같다. 위의 tree 구조를 살펴 보자. 보기에 아름다운(?) 구조 인가? 아마 대부분 그렇게 생각하지 않을것이다. Tree 가 왼쪽으로 쏠려 있는 모양을 하고 있기 때문이다. 그럼 위의 그림을 직관적으로 봤을떄 어떻게 고치면 높이가 최소화된 Tree 모양이 나올까? 아마 4가 root인 모양으로 변.. 더보기
자료구조 : Tree(2) - Binary Search Tree- 지난 번에 이어서 Binary Search Tree 의 Delete 과정을 자세하게 알아보겠다. 앞의 Search 와 Insert에 비해 복잡하기 때문에 험난한(?) 여정이 될 것이다. Delete Algorithm Do search() first If Search() fails, Delete() also fails If Search() succeeds Case 1 : Node has no Child Case 2 : Node has one Child Case 3 : Node has two Children Case 1 Correctness trivial child가 없는 노드를 지울 때 아무 문제 없는지 살펴보자. 만약 8번 노드 왼쪽에 subtree 가 있으면 지워져도 그 subtree는 child가 없.. 더보기
자료구조: Tree(1) - Binary Search Tree - 오늘은 Search , Insert , Delete 모두 다 빠른 성능을 보여주는 Tree에 대해 알아보겠다. Contents Skip List idea from Linked List Binary Search Tree Definition Search Algorithm, Insert Algorithm, Delete Algorithm Proofs of Correctness and Performance Skip List 지난 포스트의 Skip List의 아이디어를 활용한 것이다. ( 링크드 리스트에서 여러개의 포인트를 설정하고 노드들 Jump 하기 ) Definition of Binary Search Tree 값은 아무거나 넣을 수 있다. 노드 3개를 묶어서 보았을 때 중간 노드의 값보다 큰 값은 오른쪽 작은.. 더보기
자료구조: Linked List Contents Definition of Linked List Implementation Performance Sample Application Definition of Linked List Consists of Nodes Node : unit of storage (item) Nodes are linked with pointers ( what does that mean? ) **Pointer: Simply Stores an Address Linked list는 배열과 다르게 메모리 아무데나 있을 수 있다. 대산 한 노드에 가면(=한 노드의 주소를 알아서 그곳의 내용을 읽으면) 다음에 갈 노드의 주소가 적혀있다. 즉 노드들이 포인터들도 연결이 되어 있는 것이다. Linked List의 노드의 구조를 살펴보.. 더보기
자료구조: Equivalence Relation(동치 관계) 이번 포스트에서는 동치관계에 대해 알아보는 시간을 가지겠다. 지난번에 이이서 stack 과 queue를 활용한 방법들을 보여줄 예정이다. Contents ( 이번 포스트의 내용 ) Another Application of stack and DFS What is an Equivalence Relation? What is an Induced Equivalence Class? How to find the Induced Equivalence Class given an Equivalence Relation? Performance Considerations Definition of Equivalence Relation First, Definition of Relation Given a set A, a Relatio.. 더보기
자료구조: Stack & Queue (3) 오늘은 지난번에 이어서 미로찾기 문제를 Queue를 이용해서 푸는 방법을 알아보겠다. Map 하고 i,j는 지난번 방법과 같다. 다만 지난번 방법하고 다르게 가까운데를 먼저 가보게끔 구현을 하게된다. 이러한 BFS 의 특징중에 하나는 제일 짧은 길을 찾을 수 있다는 것이다. 코드는 다음과 같은 형식을 가지게 된다. BFS 명시적 Queue 1 2 3 4 5 6 7 8 9 10 11 12 13 14 int Map[M][N]; int i, j; int Find() { QueueInsert(0, 0); while( ){ ( i, j ) = QueueDelete() //방문하기 직전, Queue가 Empty이면 실패 //Map[i][j] == 0인 경우만 Map[i][j] = '*'; //목적지 확인 // (i.. 더보기
자료구조 : Stack & Queue(2) 이번 포스팅에서는 앞서 배운 스택과 큐를 응용해서 어떤 것을 할 수 있는지 알아보도록 하겠다. Stack, Queue 응용 # 미로찾기 이런 미로 문제를 해결하는 알고리즘 중에 DFS 와 BFS가 있다. 오늘은 DFS로 미로를 찾는 과정을 알아볼것이다. 먼저 미로길을 찾기 위해서는 크게 2가지 Tool이 있어야 한다. 하나는 실을 풀어서 다시 제자리로 돌아올수 있는 Tool, 그래야 막혔을때 다시 뒤로 돌아올수 있기 때문이다. 이것은 Stack 의 구조를 이용해서 좌표들을 저장해놓고 다시 뒤로 스택에서 뽑으면 뒤로 돌아갈수 있게 할수 있다. 그리고 갔던길을 다시 가지 않도록 하는 Tool 이 필요하다. 갔던길에는 0대신 다른 값으로 채워넣으면 되고 나중에 돌아왔을때 다른값으로 채워진 곳은 가지 않도록 하.. 더보기