-
Web 개발 시 주의할 점 (1) - 해쉬Today_I_Learned/Web 개발 2024. 10. 18. 13:21
1. hash 를 잘 활용하자.
TestModel.objects.filter(column_name=value)
를 작성한 나에게 상사가 말했다.여기서 사용하려고 hash를 넣은거에요 text로 비교하지말고 hash로 비교해요
hash 를 직접 사용해 본적이 없었기에 hash 를 사용해야 하는 이유를 일아보았고 조사 결과를 정리한 내용은 다음과 같다.
조건)
model 이 자신을 어느 정도 식별할 수 있는 column 을 가지면서, 해당 값을 hash 로 변환
한 값도 갖는 경우. 혹은 그렇게 기획되었거나 그렇게 바뀔 예정인 경우.
(여기서 '어느 정도' 라는 모호한 표현을 사용한 이유는 id 처럼 완벽하게 고유한 값이 아닌 경우도 포함하기 위함이다.)ex)
| id | name | name_hash | age |
| ----- | ----- | ----------------------- | --- |
| 68421 | Bob | 0c9d3d7e1d8e8b0b3b1c1.. | 10 |
| 52121 | Smith | 8e2e6c3f1c1e... | 15 |
| 32325 | Jay | f0a1d2a1b5e3e1e5d5e1.. | 12 |Students DB Table 의 schema 가 위와 같을 때,
name
이 'Bob' 인 record 에 해당하는 model 을 찾고 싶을 경우 가장 쉬운 방법은 다음과 같다. (Django 기준)Students.objects.all().filter(name='Bob')
그러나 위 Table 에는
name
을 hash 로 변환한name_hash
가 존재하므로 위 방식보다는 다음 방식을 사용하는 것 이 더 좋다.Students.objects.all().filter(name_hash=hashlib.{해쉬알고리즘}}('Bob'.encode()).hexdigest()
hash 사용이 일반 텍스트 기반 column 값보다 더 좋은 이유는 다음과 같다.
- 단순 텍스트 기반 문자열을 비교하는 것보다 길이가 고정된 hash 로 비교하는 것이 수행 시간이 더 빠르다.
- hash 는 동일한 문자열에 대해 항상 동일한 값이 반환되므로 hash 검사를 통해 데이터 무결성을 확보할 수 있다.
hash 의 특징으로는 고유성, 보안 등의 이유가 있지만 'model 식별' 이라는 상황에서는 위의 두 가지의 이유가 가장 주요하다고 생각한다.
'Today_I_Learned > Web 개발' 카테고리의 다른 글
아키텍처 이론은 실제 실무에선 어떻게 적용될까? (feat. 레이어드 아키텍처, 클린 아키텍처, 항해플러스) (1) 2025.03.23 브라우저의 번역 기능을 사용하면 가끔 서버 기능이 오동작 하는 이유 (0) 2024.11.18