패스워드는 어째서 암호화를 사용하지 않고 해시를 사용하는 걸까?로그인 기능을 만들기 위해서는 아이디와 패스워드가 필요합니다. 아이디야 평문으로 해도 상관없지만, 패스워드는 보안상 평문으로 저장하면 안 됩니다. 그렇다면 평문을 다른 사람이 알아볼b-programmer.tistory.com생각보다 많은 곳에서 해시를 사용합니다. 그중 하나가 패스워드이고, 이는 위 포스트에서 확인할 수 있습니다. 해시의 핵심 성질은 크게 두 가지입니다. 하나는 데이터의 지문을 만드는 것이고(패스워드가 여기에 해당합니다), 다른 하나는 키로 위치를 계산하는 것입니다. 해시 함수를 통과시키면 정수 값이 나오는데(흔히 16진수로 표기합니다), 이 값을 이용해 데이터를 어느 서버에 저장할지 계산할 수 있습니다.해시가 어떤 값을 뱉는..
로그인 기능을 만들기 위해서는 아이디와 패스워드가 필요합니다. 아이디야 평문으로 해도 상관없지만, 패스워드는 보안상 평문으로 저장하면 안 됩니다. 그렇다면 평문을 다른 사람이 알아볼 수 없게 만들어야 합니다. 이를 위해 암호화를 사용하거나, 해시 함수를 이용해 평문을 해시값으로 변경합니다. 그리고 로그인 시 동일한 해시값이라면 로그인이 성공하고, 다르다면 실패합니다. 일반적으로 해시를 많이 이용하지만, 해시에는 치명적인 문제가 있습니다. 바로 중복 문제입니다. 즉, 서로 다른 평문에 해시 함수를 적용한다고 해서 그 결과가 서로 다르다는 보장은 할 수 없습니다. 이렇게 되면 해시 결과값만 같다면 로그인이 된다는 것인데, 보안상 나쁜 게 아닐까요?그렇다면 어째서 로그인에는 해시를 사용하는 걸까요? 암호화를 ..
레디스에는 다양한 명령어와 자료구조가 존재합니다. 하지만 막상 어떤 자료구조들이 있는지 하나씩 찾아보며 학습하는 경우는 많지 않습니다. 제가 그 이유를 생각해 보니 크게 두 가지였습니다. 첫 번째는, 프로그래밍을 학습하면서 리스트, 집합, 맵과 같은 기본적인 자료구조를 이미 익혔다고 생각했습니다. 그래서 자료구조 자체는 이미 알고 있다고 생각하며, 굳이 다시 학습할 필요성을 느끼지 못했습니다. 두 번째는, 세상에는 수많은 자료구조가 존재하기 때문에 모든 것을 미리 학습하는 것은 비효율적이라고 생각했습니다. 필요할 때마다 찾아보고 사용하는 것이 더 효율적이라고 판단하게 된다고 생각하였습니다. 그럼에도 제가 레디스의 자료구조를 학습하기로 마음먹은 이유가 있습니다. 레디스의 자료구조는 단순히 데이터를 저장하는..
일반적으로는 싱글 스레드보다 멀티 스레드가 더 빠르다고 생각합니다. 실제로도 혼자 일하는 것보다 여러 사람이 함께 일하는 편이 더 많은 일을 처리할 수 있습니다. 하지만 우리가 간과하기 쉬운 사실이 하나 있습니다. 바로 락(Lock) 입니다. 멀티 스레드는 여러 작업을 동시에 처리할 수 있지만, 공유 자원에 접근하는 순간 락이 발생합니다. 락 경쟁이 심해질수록 스레드는 대기하거나 문맥 교환을 반복하게 되고, 기대했던 성능 향상을 얻지 못하는 경우도 적지 않습니다. 그렇다면 락을 사용하는 멀티 스레드보다, 락 자체가 필요 없는 싱글 스레드가 더 효율적일 수도 있지 않을까요? 오늘날 Redis, Nginx, Node.js처럼 싱글 스레드 기반의 이벤트 루프를 활용하는 기술들은 이러한 질문에 대한 하나의 답을..