카테고리 없음

[TIL] IT 5분 잡학사전 #35 - #38

diligentCat 2025. 1. 15. 00:36

Day 10

📜오늘 읽은 범위 :

에피소드 35 비밀번호는 어떻게 저장될까? ~ 에피소드 38 함수형 프로그램이 뭐죠?

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