비밀번호 암호화는 비밀번호를 지킬 때 필요한 것으로 개인정보보호법에 명시되어 있는 만큼 만약 서비스를 만들어 운영하게 된다면 반드시 해야 하는 부분일 것이다. 비밀번호를 암호화할 때는 SHA-256과 같은 단방향 암호화를 해야하며, 이는 암호화된 비밀번호가 유출되더라도 비밀번호를 찾아내지(복호화) 못하도록 하기 위함이다. * SHA-256 : 암호 알고리즘 중 한 종류 * 단방향 암호화 : 평문을 암호화한 후 암호문에서 평문을 찾을 수 없도록 구현된 암호화 방법 하지만 암호화를 하더라도 레인보우 테이블과 같은 공격을 받게 되면 암호화한 의미가 퇴색된다. * 레인보우 테이블 : 공격자가 단방향 암호화로 암호화한 데이터를 가지고 암호화된 데이터와 비교하여 평문을 찾는 방법 위와 같은 공격을 방어하는 방법으로..
이진 탐색 트리(Binary Search Tree)는 다음과 같은 속성을 가진다. 1. 노드의 왼쪽 서브 트리는 노드의 값보다 작은 값으로 이루어진다. 2. 노드의 오른쪽 서브 트리는 노드의 값보다 큰 값으로 이루어진다. 3. 노드의 좌우 서브 트리는 모두 이진 탐색 트리여야 한다. 4. 중복되는 노드가 없어야 한다. 이진 탐색 트리의 시간 복잡도는 최악일 경우 O(n)이며 최선일 경우 O(log n)이다. 최악의 경우 5 / 4 / 3 / 2 / 1 최선의 경우 10 / \ 5 15 / \ / \ 2 7 12 17 삽입 1. 검색을 수행한다. 2. 검색 중 중복되는 노드가 있는지 확인 3. 검색 중 하위 노드에 노드가 없는 경우 노드를 삽입 삭제 삭제하려는 노드의 자식 수에 따라 방식이 달라진다. 1...
여러 개의 값 중 가장 크거나 작은 값을 빠르게 찾기 위한 완전 이진 트리 형식의 트리로 부모 노드의 값이 항상 자식 노드의 값보다 크거나 작도록 만들어 대소관계를 가지도록 만든다. 따라서 루트 노드는 항상 가장 크거나 가장 작은 값을 가지게되며 최댓값(또는 최솟값)을 바로 찾을 수 있게 된다.( O(1) ) * 루트 노드가 가장 클 때는 최대힙, 가장 작을 때는 최소힙이라고 한다. 노드 간 값의 대소관계는 오로지 부모 노드와 자식 노드 사이에만 성립하며 형제 노드 사이에서는 관계없다. 즉 아래와 같은 트리가 있으면 A와 B(혹은 C) 간에는 대소관계가 성립되어야 하며 B와 C 간에는 성립되지 않아도 된다. A / \ B C 노드 추가 방법 트리의 가장 마지막에 노드 추가 추가한 노드와 추가한 노드의 부..