불로소득을 향하여

해시에 대한 마지막 글이다. 1편과 2편을 먼저 보고 읽으면 더욱 좋다. 해시 - 보안 해시는 아래 이유들로 보안 분야에서도 널리 사용된다. 해시 함수가 원래의 문장을 복호화할 수 없게 뭉개버린다. 원문과 해시값 사이에 선형적 관계가 없다. 해시 함수의 결과물은 고정된 길이의 숫자이므로, 원래의 정보는 손실된다. 하나의 원 데이터는 하나의 해시 값만 가지지만, 하나의 해시 값을 만들어낼 수 있는 원본 데이터는 매우 많다. 4번의 이유 때문에 해시 값만 가지고는 이미 뭉개진 원문을 복원해내는 것은 불가능하다. 위와 같은 이유들로, 비밀번호, 전자서명, 전자투표, 전자상거래와 같은 민감한 입력의 무결성을 검증할 때 사용된다. 따라서, 어떤 해시 함수에서 해시 충돌이 일어나기 쉽다는 것은 데이터의 무결성과 직..
- 2021.03.16(화) 추가 faculty.cs.niu.edu/~freedman/340/340notes/340hash.htm Hashing Hashing Hashing can be used to build, search, or delete from a table. The basic idea behind hashing is to take a field in a record, known as the key, and convert it through some fixed process to a numeric value, known as the hash key, which represents the faculty.cs.niu.edu 위 사이트에는 아래 글에서 소개할 두 가지 간단한 충돌 처리 방식 외에 두 ..
얼마 전 있었던 백엔드 직무 면접에서 기초 질문을 받았는데 대답을 잘 못했다. 생각해보면 해시에 대해 자세히 공부해 본 적이 없던 것 같다. 이번 기회에 나무위키와 위키백과의 글을 참고로 공부하여 작성하였다. 해시 - 정의 위키백과에서는 "해시 함수에 의해 얻어지는 값"을 해시(해시 값, 해시 코드, 해시 섬, 체크섬)라고 정의하고 있다. 해시 함수 - 정의 그렇다면 해시 함수(Hash Function)란? 임의의 길이를 갖는 임의의 데이터를 고정된 길이의 데이터(해시 값)로 매핑하는 함수를 말한다. 아래 그림으로 한눈에 이해 가능할 듯싶다. 해시 함수 - 특성 해시 함수는 보통 그리 복잡하지 않은 알고리즘으로 구현된다. 따라서 상대적으로 CPU, 메모리 등의 시스템 자원을 덜 소모하는 특성이 있다. 그..
문제는 여기에서 볼 수 있다. 역시 과거에 풀었던 문제인데, 당시에는 혼자 못 풀었지만 이번에는 용케 혼자 풀었다. 문제 설명 N x N 모양의 matrix가 있고, 각 칸에는 숫자가 채워져 있다. 이를 시계 방향으로 90도 돌렸을 때 나타나는 matrix를 return하면 되는데, 문제에서 주어지는 2차원 배열 말고 다른 2차원 배열을 선언하면 안 된다는 조건이 있다. 즉, 주어진 matrix 배열만 이용하라는 뜻. 해결 과정 1차 시도 처음에는 각 칸의 인덱스를 다 적고 결과적으로 return 해야 하는 matrix에 맞추어 바뀌는 인덱스를 또 적어봤다. 예를 들면, (0, 0)의 숫자는 (0, 2)로, (0, 1)의 숫자는 (1, 2)로, (0, 2)의 숫자는 (2, 2)로 가야 하는 것처럼 00 ..
어쩌다 주워 듣게 된 SQL 작성 표준을 적어둔다. 인터넷에 검색해보면 여러 표준이 나오는데, 거의 대부분이 같다. 존재 이유 어느 회사나 SQL 작성 표준 가이드가 존재하는데, 이러한 표준에 따른 형식화된 SQL 구문은 가독성을 높여서 구현 및 유지보수를 용이하게 한다. SQL 구문 표준 1. SQL 구문은 가로 최대 길이가 80자 이하가 되도록 작성 튜닝 또는 유지보수를 용이하게 한다. 2. SQL 문의 대소문자에 대한 표준을 정하여 준수 예약어는 대문자, 개체명은 소문자 등으로 작성한다. 3. 구문을 구분하는 중요한 절은 항상 새로운 행에서 시작 SELECT, FROM, JOIN, WHERE 등과 같이 중요한 절은 새로운 행에서 시작한다. 4. 쌍(Pair)으로 구성된 구문은 줄을 정렬 BEGIN ..
글 제목에서부터 알 수 있듯이, 순열을 구하는 문제이다. 자세한 내용은 여기에서 볼 수 있다. 풀이 방법은 총 두 가지를 소개할 예정이다. 하나는 DFS, 다른 하나는 반복문을 사용한 방법이다. 첫 번째 방법 - DFS 아마 많이들 생각할 방법일 것 같다. 순열을 만들 숫자 N개를 담은 리스트를 nums이라 했을 때, N!개의 원소를 담은 리스트를 최종 리턴해야 하니까 말이다. 코드는 Discuss의 글에서 찾았고, 아래와 같다. def permute(self, nums): res = [] self.dfs(nums, [], res) return res def dfs(self, nums, path, res): if not nums: res.append(path) for i in range(len(nums)..
거의 한 달만에 포스팅하는 알고리즘 코딩 글이다. 바빴기도 하지만, 나태해진 이유도 있는 것 같다. 이 문제는 Solution이 있는 문젠데, 개인적으로 좋은 문제라고 생각되어서 Solution에 있는 풀이 중 한 방법에 대해 작성해봤다. 문제는 여기에서 볼 수 있다. 문제 문제 설명에 나오는 그림만 봐도 어떤 문제인지 알 수 있다. N개의 기둥들의 높이가 담긴 배열이 주어질 때, 하늘에서 비가 내린다고 가정하면 얼마나 많은 양의 물이 기둥들 사이에 갇히는 지에 대한 문제이다. 풀이 사실 이 문제도 두 번째 풀어보는 것인데, 두 번의 풀이 모두 Brute Force로 해결하려 했었다. 하지만, Solution만 봐도 Dynamic Programming(DP)나 Stack을 이용한 풀이 등 다양한 풀이가 ..
일주일 전쯤, MS SQL의 BEGIN TRAN 덕분에 겪었던 삽질에 대해 글을 쓰며 트랜잭션의 개념에 대해 잘 모른다는 생각이 들었다. 그래서 아래 글들을 참고하여 공부하였고, 정리 글을 남긴다. 출처) 1. 위키백과) 데이터베이스 트랜잭션 2. Naver D2) DBMS는 어떻게 트랜잭션을 관리할까? 3. Tistory) 트랜잭션(Transaction)이란? 4. Tistory) [DB기초] 트랜잭션이란 무엇인가? 데이터베이스 트랜잭션? 위키백과에서는 트랜젹션을 아래와 같이 정의하고 있다. "데이터베이스 관리 시스템 또는 유사한 시스템에서 상호작용의 단위" 여기서 "유사한 시스템"이란 트랜잭션의 성공과 실패가 분명하고, 트랜잭션이 상호 독립적이며, 일관되고 믿을 수 있는 시스템을 의미한다. 조금 더 ..
이 글을 읽기 전에 트랜잭션에 관해 작성한 글을 읽는 것을 추천한다. 오늘 회사에서 운영 업무를 하며, 게시글 하나를 지워 달라는 요청이 들어왔다. 해당 게시글이 DB에서 갖고 있는 Column 중 하나를 UPDATE만 해주면 되는 간단한 요청이었다. 그런데 두 시간 걸렸다. 데이터 수정 작업이다 보니 BEGIN TRAN을 사용하여 데이터를 바꾸고 애플리케이션 작동이 잘 되는지 확인하려고 했다. 그런데 해당 데이터를 사용하는 화면의 게시글들을 불러오는 쿼리에서 계속 멈춰있었다. 해당 쿼리를 SSMS나 DBeaver같은 DB 클라이언트 툴에서 실행해보면 잘 돌아가는데 말이다. BEGIN TRAN ? Begin Transaction이라는 뜻으로, MSSQL에서 제공하는 보호 기능이다. (MS 공식 문서) 무..
대흉근
'분류 전체보기' 카테고리의 글 목록 (9 Page)