[취준 | 노개북] IT 5분 잡학사전 - DAY12

Youngseo Lee·2023년 2월 28일
0

TIL 3줄 요약

  • 단방향 암호화는 해시 함수와 솔팅을 사용해 보안을 높인다.
  • 객체지향 프로그래밍은 클래스와 상속이라는 대표 특징을 가지고 있다.
  • 함수형 프로그래밍은 선언형 프로그래밍 기반으로 함수 중심으로 코드를 구성한다.

TIL 날짜
2023. 02. 28

오늘 읽은 범위

에피소드 35: 비밀번호는 어떻게 저장될까?

에피소드 36 - 37: 객체 지향 프로그래밍이 뭐죠?

에피소드 38: 함수형 프로그래밍이 뭐죠?


책에서 기억하고 싶은 내용을 써보세요.

  • 비밀번호 시스템을 구현할 때 해시 함수 를 사용한다.

    • 해시 함수 : 비밀번호를 무작위 값으로 변환
      • 동일한 입력값에 대해 동일한 출력값을 가진다.
        • 입력값이 아주 살짝만 바뀌어도 출력값이 크게 변한다.
        • 반대로 입력한다고 해서 원래 값이 나오지 않는다.(복호화 불가능)
  • 해시 함수는 완벽하지 않고 레인보우 테이블의 공격에 취약하다. 그런 이유에서 솔트(Salt)를 사용해서 보안을 강화 한다.

    • 레인보우 테이블

      • 해시 함수가 변경한 값을 원래의 값과 연결한 표
      • 해시 함수를 통과한 값을 레인보우 테이블에서 찾아볼 수 있다.
    • 솔트(Salt)

      • 아주 조그만 무작위 텍스트로, 비밀번호와 솔트를 합쳐서 해시 함수를 통과 시켜 변환한다.

  • 프로그래밍 패러다임 : 프로그래머가 프로그래밍을 할 때의 관점, 방식
    - 명령형 프로그래밍 : 결과 값에 어떻게 도달하는지 선언한다. 개발자가 실수하기 쉽고, 동료들이 이해하는데 어려움이 있다.
    - 선언형 프로그래밍 : 결과 값을 선언한다, 결과 중심의 코드 작성

    // 명령형 프로그래밍 
    function spaceToStar(text){
    let result = "";
    for (let i = 0; i < text.length; i++){
     if(text[i] === " "){
       result += "*"
     }else {
       result += text[i]
     }
    }
    return result
    }
    
    // 선언형 프로그래밍 
    function spaceToStar(text){
     return text.replaceAll(" ", "*")
    }
  • 객체 지향 프로그래밍 : 클래스와 상속이라는 대표적 특징을 가지고 있다.

    // 특징 : 클래스와 상속 
     class Human {
    constructor(name){
     this.name = name;
     this.arms = 2;
     this.legs = 2;
     }
    }
    
    // 클래스 상속을 통해 코드의 간결성 확보 
    class Baby extends Human{
    constructor(name){
     super(name)
     this.cute = true;
    }
    cry(){
     return 'waa waa'
    }
    }
  • 함수형 프로그래밍 : 버그가 발생하기 어려운 구조

    • 함수 중심으로 코드를 적는 방식으로 선언형 프로그래밍 방식을 유지한다.

      function checkForOdd(item){
      return item % 2 === 0;
      }
      
      function removeOdd(items){
       return items.filter(checkForOdd);
      }

오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요
기술 면접에서 bcrpyt 암호화에 대한 질문을 받은 적이 있다. 개념을 알고 있었지만 나의 언어로 쉽게 설명하지 못해 아쉬웠었다. 오늘 해당 내용을 읽으면서 어떻게 비유하고 설명하면 좋을지 아이디어를 얻게 된것 같다✨

그리고 함수형 프로그래밍 사용에 익숙한 개발자가 되고 싶다. 그렇게 하기 위해서는 명령형 기반에 만들어지는 선언형 프로그래밍에 익숙해져야겠지?

profile
백엔드 개발자 영서뤼

0개의 댓글