개발자를 희망하는 초보의 자기개발 이야기

IT 5분 잡학사전 10일차 본문

도서/노개북 IT 5분 잡학사전

IT 5분 잡학사전 10일차

클라우드아실 2023. 10. 17. 21:32
반응형

TIL (Today I Learned)

2023.10.17

오늘 읽은 범위

에피소드 35 ~ 에피소드 38

책에서 기억하고 싶은 내용

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

  • 잘못된 방법 2가지
    • DB(데이터베이스)에 비밀번호를 그대로 저장하는 것 
    • DB 자체를 암호화하고 사용자는 회사에서 제공하는 Key로 DB를 해제 후 로그인.
      키를 잃어버리거나 도난당하면 큰일이다.
  • 괜찮은 시스템의 예시
    • 해시 함수를 이용한다. 해시 함수란 비밀번호 DB 앞에서 입력값을 무작위 값으로 바꿔주는 녀석
  • 해시 함수의 규칙
    • 동일한 입력값은 동일한 출력값을 가진다.
    • 입력값이 살짝만 바뀌어도 출력값은 크게 바뀐다.
    • 한쪽방향으로만 변형 출력되게 설계되어 출력값을 넣는다고 동일한 입력값을 얻을 수 없다.
    • 단, 레인보우 테이블(해시 함수가 변겨한 값과 원래값을 연결한 표)이 유출되면 큰일난다.
  • 솔트
    • 입력값에 무작위의 값을 붙여서 해시 함수를 만들고, 해당 값을 저장하는 형태!

에피소드 36 (객체 지향 프로그래밍이 뭐죠? ①)

  • 게임을 예로 들면 보통 시작시 캐릭터를 만들게 된다.
    이 때 설정 값은 달라질 수 있어도 대부분의 캐릭터는 동일한 속성을 가진다.
    Ex) 이름, 직업, 체력, 근력, 민첩성 등
  • 그런데 100명의 캐릭터가 있는데 새로운 속성이 추가되면 100명의 캐릭터도 모두 수기로 수정해야 한다.
  • 캐릭터마다 동일한 속성명을 사용하고 속성값만 바뀌는 이런 경우 동일한 속성의 구조를 활용하도록 하는 것이다.
  •  이것이 클래스 라는 개념으로 클래스의 구조는 아래와 같다.
class Player {
  constructor(name, health, skill) {
    this.name = name;
    this.health = health;
    this.skill = skill;
    this.xp = 0;
  }
}

여기서 constructor는 속성을 넣어주는 코드, 괄호 안은 공통된 속성명을 의미하고,
xp의 경우는 모든 캐릭터가 공통으로 0부터 시작하도록 설정한 것이다.

에피소드 37 (객체 지향 프로그래밍이 뭐죠? ②)

  • 상속은 동일한 속성명과 속성값을 타 클래스에서 필요로 할 경우 그대로 받아와서 활용하는 개념이다.
  • 그러면 상속을 받는 클래스는 필요한 속성만 추가해서 사용하면 된다. 

즉, 클래스와 상속 모두 중복을 최대한 줄여 효율성을 높이기 위한 방법이다!

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

div { background : red }
  • 선언형 프로그래밍은 CSS처럼 원하는 결과값을 바로 선언한다.
let div = {
  background : undefined}
  
div.background = "pink";

console.log(div.background);
  • 명령형 프로그래밍은 위처럼 결과값을 얻기 위한 방법을 나열하는 것을 말한다.
    • (단순 형식에 대한 비교 예시로 실제 dom을 이용해 div를 변경하고자 하는게 아님)
  • 함수는 명령형 프로그래밍으로 특정한 기능을 하도록 미리 설정해둔 코드모음이다.
  • 즉, 이미 짜여진 코드인 함수를 중심으로 코드를 작성해 선언형 프로그래밍 콘셉트를 유지하는 방법이다.
  • 이 경우 코드 작성시 실수가 적고, 동료가 코드를 이해하기도 쉽다.

오늘 읽은 소감은?

개발에 있어서 보안은 중요한 문제로 비밀번호를 저장하는 방식에 대해 궁금했던 부분을 일부 해결할 수 있었다. 함수형 프로그래밍은 그냥 함수를 많이 쓰는 프로그래밍인가? 라고 단어만 들어본적이 있었는데 이번 에피소드를 통해 선언형 프로그래밍 콘셉의 방식이고, 명령형 프로그래밍으로 생성된 함수를 통한 것이니 결국 모든 선언형 프로그래밍은 명령형 프로그래밍을 바탕으로 한다는 것을 알게 되었다.

궁금한 내용이나 잘 이해되지 않는 내용은?

프로그래밍 패러다임 : 프로그래머가 프로그래밍을 할 때의 관점, 방식 등을 의미한다. 이에 대해 프로그래밍 언어는 하나 또는 그 이상을 지원한다.
대표적으로 절차 지향 프로그래밍, 객체 지향 프로그래밍, 함수형 프로그래밍 등이 있다.

반응형