해시 함수
를 사용하면 비밀번호 시스템을 안전하게 구현할 수 있다. 사용자가 입력한 비밀번호를 무작위 값으로 만들어 저장한다. 이는 세가지 규칙을 따른다.
규칙 1. 동일한 입력 값에 대해 동일한 출력 값을 가진다.
규칙 2. 입력값이 아주 살짝만 바뀌어도 출력 값은 완전 다른 값으로 바뀐다.
규칙 3. 반대로 입력해도 원래의 값이 나오지 않는다. (204p)
다만 해시 함수 완벽하지는 않다. 해시 함수가 변경한 값을 원래의 값과 연결한 표인 레인보우 테이블(rainbow table)
이 있기 때문이다. 즉 레인보우 테이블이 노출되면 비밀번호를 알아낼 수 있다는 것이다. (205p)
이를 보완하기 위해 새로 나온 것이 솔트(salt)
이다. 솔트는 아주 작은 무작위 텍스트이다. 비밀번호와 솔트를 더해 해시함수에 통과시키면 레인보우 테이블이 있어도 비밀번호를 찾을 수 없다. (206p)
프로그래밍 패러다임
은 프로그래밍을 할 때의 관점, 방식을 말한다. 프로그래밍 언어는 이런 프로그래밍 패러다임을 하나 또는 하나 이상 지원한다. 대표적인 프로그래밍 패러다임으로는 절차 지향 프로그래밍, 객체 지향 프로그래밍, 함수형 프로그래밍이 있다.
객체 지향 프로그래밍
의 클래스는 속성은 같지만 데이터는 다른 객체에 대해 반복적으로 작성함에서 오는 불편함을 줄여준다.(211p)
상속도 클래스와 동일하게 중복되는 코드를 줄여주는데, 일부분만 재사용하는 데에 유용하다. 기본 속성을 가진 클래스를 나머지 클래스에 상속시키는 방식으로 사용한다. (215p)
BLT 샌드위치를 만드는 프로그램이 있다면 선언형 프로그래밍
에서는 BLT 샌드위치를 만들어 줘!라고 원하는 결과값을 선언하고, 명령형 프로그래밍
에서는 빵을 굽고, 재료를 손질하고, 빵을 쌓는 과정을 거쳐 결과값에 어떻게 도달하는지 선언한다. (218p)
함수형 프로그래밍
에서는 선언형 프로그래밍 콘셉트를 유지하면서 함수 중심으로 코드를 작성한다. (221p)
처음 공부를 시작했을 때는 별 생각 없이 따라치거나, 정말 꼬일대로 꼬여버린 코드를 작성하기도 했었다. 그러나 지금은 다르다. 조금 더 효율적이게 작성하는 법에 대해서도 생각해야 한다. 아직 어떤 코드가 효율적인지 어떤 코드가 클린한 코드인지는 잘 모르겠다. 아마 코드 리뷰와 피드백을 거듭받고, 스스로 공부해나가는 과정에서 답을 찾을 수 있지 않을까 싶다. 정말 공부만이 답이다. 오늘도 화이팅 🔥
객체 지향 프로그래밍이라는 용어를 굉장히 많이 들었는데, 정확한 뜻은 모르고 있었다. 이 책에서도 깊게 알려주지는 않는 것 같아 자세히 알기 위해 추가적으로 공부가 필요할 것 같다.
(요즘 IT) 테오의 프론트엔드 - 자바스크립트에서 객체지향을 하는 게 맞나요?
참고할 링크는 위의 글이며, 책에 나온 개념 외에도 캡슐화,추상화,다형성이라는 개념들이 있다.