Day 10
📜오늘 읽은 범위 :
에피소드 35 비밀번호는 어떻게 저장될까? ~ 에피소드 38 함수형 프로그램이 뭐죠?
💡 책에서 기억하고 싶은 내용을 써보세요.
- 먼저 잘못된 방법부터 살펴보면, 비빌번호를 테이터베이스에 그대로 저장하는거야. 이건 상식적으로 생각해도 아주 좋지 않은 방법이야.
- 해시 함수라는 녀석은 동일한 입력값에 대해 동일한 출력값을 가지는 규칙이 있어. 아까 예를 들었던 1234와 !aef3eZ&^의 일대일 대응 관계는 계속 유지된다는 뜻이야.
- 해시 함수는 상상할 수 없을 정도의 무작위성을 갖고 있는거지. 해시 함수는 반대로 입력하면 원래 값이 나오거나 하지 않아. 한쪽 방향으로만 설계된 함수거든.
- 그런데 해시 함수도 완벽하진 않아! 왜냐면 레인보우 테이블이라는 것이 있기 때문이지. 레인보우 테이블은 해시 함수가 변경한 값을 원래의 값과 연결한 표야. 그래서 레인보우 테이블이 털리면? 다시 위험해져.
- 그래서 새로 나온 것이 솔트(salt)야. 솔트는 아주 조그마한 무작위 텍스트야. 이걸 어떻게 이용하냐면 아까 12345와 같은 비밀번호를 무작위 텍스트인 솔트와 합쳐서 해시 함수를 통과 시키는 거야!
- 이렇게 하면 코드를 손으로 직접 입력하는 양도 줄고, 속성도 오타가 나지 않도록 피할 수 있을 거야. 그리고 새 속성을 부여할 때는 공장에 알려 주기만 하면 되는 거지. 바로 이런 자연스런 생각이 객체 지향 프로그래밍의 클래스(Class)라는 개념이야.
- 상속은 그대로 상속이야. '재산을 상속한다'라고 하면 부모가 자식에게 재산을 물려 주는 것을 생각하지? 객체 지향 프로그래밍에서 상속도 마찬가지야.
- 선언형 프로그래밍은 원하는 결과값을 선언한다는 거야. 명령형 프로그래밍은 원하는 결과값에 어떻게 도달하는지 선언해.
💡오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요.
- 예전엔 함수형 프로그래밍, 객체 지향형 프로그래밍이라는 개념이 너무 어렵게 느껴졌다. 그것이 뭔지? 짧막한 유튜브 강의라도 보면 뭔가 핵심은 없고, 주변을 맴도는 느낌이었다. 그런데 계속계속 듣다보니 그게 핵심이라는 걸 요즘 알게 됐다.
- 비단 비밀번호 뿐 아니라 모든 개인정보를 보호하는 것에 사용할 수 있다는 점에서 솔트와 해시 함수는 꼭 알아야하는 개념이라고 생각한다.
🔎궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.