개발도서

[IT 5분 잡학사전] - TIL (2023.01.24)

짜잉이 2023. 1. 24. 20:22

📚 Assignment #12

  • 오늘 읽은 범위 : ep.35 비밀번호는 어떻게 저장될까? ~ ep.38 함수형 프로그래밍이 뭐죠?
  • 기억하고 싶은 내용 (간단하게 내용 정리):
    • ep.35 비밀번호는 어떻게 저장될까?
      • 비밀번호 시스템의 잘못된 예 2가지
        • 비밀번호를 데이터베이스에 그대로 저장한다.
          - 데이터베이스에 접근할 수 있는 운영자, 개발자 모두 비밀번호를 알 수 있게 된다. 
          - 비밀번호 시스템을 구축한 사람도 비밀번호를 볼 수 있어서는 안 된다. 이 방법은 좋은 방법이 아니다!
        • 데이터베이스 자체를 암호화해서 아무도 볼 수 없게 만든 후 비밀번호를 저장한다.
          - 사용자는 회사에서 주는 키(key)로 데이터베이스에서 자신의 비밀번호가 저장된 부분을 해제하고, 입력한 비밀번호와 대조해서 맞으면 로그인할 수 있다.
          - 이 방법 역시 사용자가 키를 잃어버리거나 도난 당할 위험이 있기 때문에 좋은 방법이 아니다!
      • 괜찮은 비밀번호 시스템의 예: 해시 함수
        • 해시 함수는 비밀번호 데이터베이스 앞에서 입력한 값을 무작위 값으로 둔갑시켜 주는 역할을 한다. 해시 함수를 사용해 얻은 무작위 결괏값을 데이터베이스에 저장하게 되어 비밀번호 시스템을 더 안전하게 구현할 수 있다.
        • 해시 함수가 동작하는 규칙
          - 규칙 1. 동일한 입력값에 대해 동일한 출력값을 가진다. (일대일 대응 관계)
          - 규칙 2.
          입력값이 아주 살짝만 바뀌어도 출력값은 엄청나게 크게 바뀐다. (눈사태 효과)
          - 규칙 3.
          반대로 입력한다고 해서 원래 값이 나오지 않는다. (단방향 함수로 작용함)
      • 하지만 해시 함수도 완벽한 것은 아니다. 해시 함수가 변경한 값을 원래의 값과 연결한 표인 레인보우 테이블(rainbow table)이 털리게 되면 다시 비밀번호의 보안은 위험해진다.
      • 비밀번호와 무작위 테스트 솔트(salt)를 합쳐 해시함수를 통과시키면 레인보우 테이블이 있어도 원래의 비밀번호를 찾을 수 없다! 더욱 보안에 강력한 비밀번호를 저장할 수 있는 방법이다. 
    • ep.36 객체 지향 프로그래밍이 뭐죠? 1
      • 프로그래밍 패러다임(programming paradigm)은 프로그래머가 프로그래밍을 할 때의 관점, 방식 이런 것들을 말한다. 프로그래밍을 하는 사고의 틀이다. 
        e.g. 절차 지향 프로그래밍, 객체 지향 프로그래밍, 함수형 프로그래밍
      • 객체 지향 프로그래밍의 '클래스(class)'

속성은 같지만 데이터는 다른 녀석들을 위한 공장이 바로 클래스!

    • ep.37 객체 지향 프로그래밍이 뭐죠? 2
      • 객체 지향 프로그래밍의 '상속'
        - 중복되는 코드를 해결하기 위해서 상속을 이용한다. extends 키워드를 사용해 상위 부모 클래스를 상속 받은 하위 자식 클래스에서는 상위 클래스의 기본 속성은 다 가지면서도 자식 클래스 자신만의 속성을 추가할 수 있다.
        - 기존보다 코드의 양을 줄이고 더 의미를 명확하게 할 수 있다. 
    • ep.38 함수형 프로그래밍이 뭐죠?
      • 함수형 프로그래밍은 '버그가 발생하기 어려운 구조'라서 개발자에게 매우 유용하다. (니꼬쌤) 개발자라면 반드시 함수형 프로그래밍을 배워야 한다고 생각함.
        - 함수형 프로그래밍을 지원하는 언어 (e.g. 자바, 자바스크립트, 파이썬 등)
      • 함수형 프로그래밍은 함수를 중심으로 코드를 적는 방식으로 선언형 프로그래밍 콘셉트를 유지한다. 
      • 선언형, 명령형 프로그래밍의 차이
        • 선언형 프로그래밍
          - 선언형 프로그래밍은 원하는 결괏값을 선언한다. (BLT 샌드위치 만들어 줘!)
          - 결과 중심으로 코드를 작성하니 실수도 적고, 동료가 코드를 이해하기 쉽다.
          - 모든 선언형 프로그래밍은 명령형 프로그래밍 위에 쓴다고 이야기할 수 있다.
        • 명령형 프로그래밍
          - 반대로 명령형 프로그래밍은 원하는 결괏값에 어떻게 도달하는지 선언한다. (BLT 샌드위치 만드는 단계를 다 알려준다. 1) ~해라!, 2) ~해라!, ...)
          - 할 일을 세세하게 지시할 수 있는 대신 개발자가 실수하기 쉽고, 내가 작성한 코드를 동료가 이해하기 어렵다는 특징이 있다. 
    • 개발자의 번아웃, 이렇게 대처해봐!
      • 번아웃이 왔다고 스스로 느낄 정도가 되면 그때는 너무 늦은 것이니 번아웃은 미리 예방해야 한다. 번아웃을 예방하는 가장 좋은 방법은 스스로 건강을 챙기는 것이다. 
      • 예방 팁 1. 휴식 시간을 가져라.
      • 예방 팁 2. 일하는 시간을 제한하라.
        - 일하는 스케줄에 시간 제한을 두어서 일하는 시간 동안 집중해서 효율적으로 일할 수 있도록 한다.
      • 예방 팁 3. 몸을 움직이고 건강한 음식으로 활력을 찾아라.
        - 운동과 음식을 신경쓰자. 효율적으로 일하고 싶다면 소화시키는데 에너지가 많이 필요해서 실제로 피곤하게 만들고 몸에 부담을 주는 음식은 멀리하는 것이 좋다.
  • 오늘의 파트에 대한 소감 (떠오르는 생각) :
    • 비밀번호 시스템에서 해시 함수 부분을 읽고 지난 21일 과제 TIL에 정리했던 내용이 떠올라서 다시 돌아가 읽어보았다. 그때는 해시 함수가 해시 테이블에서 검색할 때 쓰는 키를 숫자(인덱스)로 바꿔주는 역할로 나왔는데 이번에는 비밀번호를 무작위 값으로 바꿔주는 역할로 재등장했다. 해시 함수가 한 가지 역할만 하는 함수가 아니구나 싶어서 해시 함수에 대해 좀 더 검색해보았고 다양한 역할을 한다는 것을 알 수 있었다!
      이렇게 책이나 검색 등을 통해 알게 된 내용들을 정리하면..아 이게 진짜 자기 주도 학습 같다. 하지만 시간이 꽤 걸리긴 한다🥲 정리에서 끝나는 게 아니라 자주 보고, 설명해보고, 사용해보기까지 한다면...더 잘 기억나겠지? 
  • 추가로 알게된 것 (책내용+a 로 궁금한 것, 이해가 가지 않는 것 등)
    • 해시 함수
      해시 함수는 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 단방향 함수이다.
      1) 용도 중 하나로 해시 테이블이라는 자료구조에 사용되며 매우 빠른 데이터 검색을 위한 컴퓨터 소프트웨어에 널리 사용된다. 2) 해시 함수는 큰 파일에서 중복되는 레코드를 찾을 수 있기 때문에 데이터베이스 검색이나 테이블 검색의 속도를 가속할 수 있다. 3) 또한 암호학에서도 사용될 수 있다. 암호용 해시 함수는 매핑된 해싱 값만을 알아가지고는 원래 입력 값을 알아내기 힘들다는 사실에 의해 사용될 수 있다.
      - 참고 자료: https://ko.wikipedia.org/wiki/해시_함수
    • 프로그래밍 패러다임! 절차 지향 프로그래밍, 객체 지향 프로그래밍, 함수형 프로그래밍을 구분하고 파악해보기. 객체 지향와 함수형의 차이가 좀 헷갈린다. 흠..🤔
      참고할 영상들! 일단 찜꽁해둠ㅇㅇ
      - 노마드코더 영상: https://youtube.com/watch?v=7aEQLvvnQIY&si=EnSIkaIECMiOmarE
      - 드림코딩 영상: https://youtube.com/watch?v=4ezXhCuT2mw&si=EnSIkaIECMiOmarE
  • 소감 3줄 요약 (오늘 TIL 3줄 요약) :
    • 해시 함수가 동작하는 규칙 3가지! 일대일 대응 관계, 눈사태 효과, 단방향 함수로 작용함!
    • 객체 지향 프로그래밍의 중요한 특징! 클래스와 상속! 
    • 앞으로 이렇게 배운 내용들을 남에게 설명할 수 있을 정도로 잘 익혀두기! (기술면접 대비에도 도움이 될 듯)
연봉이 떡상한다고? 함수형 프로그래밍! 10분만에 이해하기.
함수형프로그래밍이 대세다?! (함수형 vs 객체지향)
 

해시 함수 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 이름을 0~15 사이의 정수값으로 매핑하는 해시 함수의 예. “John Smith”와 “Sandra Dee”라는 두 키 사이에 충돌이 존재한다. 해시 함수(hash function) 또는 해시 알고

ko.wikipedia.org