Home IT 5분 잡학 사전 8
Post
Cancel

IT 5분 잡학 사전 8

TIL - DAY 8

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

35. 비밀번호는 어떻게 저장될까?

비밀번호 시스템 구현, 어떻게 해야 할까?

비밀번호 시스템의 잘못된 예

  • 비밀번호를 데이터베이스에 그대로 저장하는것 (비밀번호 시스템을 구축한 사람도 비밀번호를 볼 수 있어서는 안됨)
  • 데이터베이스 자체를 암호화해서 아무도 볼 수 없게 만든 후 비밀번호를 저장
    • 사용자는 회사에서 주는 키로 데이터베이스를 해제한 후 로그인, 키로 비밀번호가 저장된 부분을 해제하고 나서 입력한 비밀번호와 대조해서 맞으면 로그인 성공, 로그인 마치면 다시 데이터베이스의 비밀번호 부분을 잠금
    • 키를 잃어버리거나 키를 누군가 훔쳐갈 수 있다.

비밀번호 시스템의 좋은 예

  • 해시 함수 사용 (비밀번호 데이터베이스 앞에 살고있는 마법사 같은 녀석, 비밀번호 입력시 무작위 값으로 변경)

마법사 해시 함수는 어떻게 동작하지?

  1. 동일한 입력값에 대해 동일한 출력값을 가진다. (일대일 대응 관계가 계속 유지됨)
  2. 입력값이 아주 살짝만 바뀌어도 출력값은 엄청나게 바뀐다.
  3. 반대로 입력한다고 해서 원래 값이 나오지 않는다. (한쪽 방향으로만 설계된 함수)

해시 함수도 완벽하진 않다, 레인보우 테이블(rainbow table)

  • 해시 함수가 변경한 값을 원래의 값과 연결한 표 (마법사의 비밀 책 같은것)
  • 해시 함수를 통과한 값은 레인보우 테이블에서 찾아보면 원래 값을 알 수 있다.

최종 병기, 솔트(salt)

  • 솔트 = 무작위 텍스트
  • 비밀번호와 솔트를 합쳐서 해시 함수에 통과시키기
  • 비밀번호와 무작위 텍스트 솔트를 합치면 레인보우 테이블이 있어도 원래 비밀번호를 찾을 수 없다.

36. 객체 지향 프로그래밍이 뭐죠? (1)

프로그래밍 패러다임(programming paradigm)이란?

  • 프로그래머가 프로그래밍을 할 때의 관점, 방식, 프로그래밍을 하는 사고의 틀
  • 프로그래밍 언어는 프로그래밍 패러다임을 하나 또는 하나 이상을 지원한다. (자바: 객체 지향 프로그래밍, 함수형 프로그래밍)
  • 대표적 프로그래밍 패러다임
    • 절차 지향 프로그래밍
    • 객체 지향 프로그래밍
    • 함수형 프로그래밍

게임 만드는 과정으로 이해하는 객체 지향 프로그래밍

유명인 대전 게임 플레이어

1
2
3
4
5
6
7
const player = {
	name: "Bill Gates",
	health: 85,
	skill: "Programmer",
};

// 딱 한 명만 만들 계획이라면 OK, 보통 혼자는...

플레이어를 3명으로 계획

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const player1 = {
	name: "Bill Gates",
	health: 85,
	skill: "Programmer",
};
const player2 = {
	name: "Elon Musk",
	health: 90,
	skill: "Tesla",
};
const player3 = {
	name: "Warren Buffett",
	health: 100,
	skill: "Investor",
};

// 뭔가 비효율적, 같은 속성 name, health, skill 추후에 속성이 추가 된다면?

플레이어 공장, 클래스 등장!!

플레이어를 인형처럼 찍어준다, 재료만 넣어주면 나머지 코드 ok

직접 입력하는 양도 줄고, 속성도 오타가 나지 않도록 피할 수 있다.

→ 객체 지향 프로그래밍의 클래스(class)라는 개념

1
2
3
4
5
6
7
8
9
10
11
12
class player {
	constructor(name, health, skill) {
		this.name = name;
		this.health = health;
		this.skill = skill;
		this.xp = 0; // xp는 기본값이 0이므로 재료로 받을 필요가 없다! 공장에서 기본으로 제공!!
	}
};

const bill = new Player("Bill Gates", 85, "Programmer")
const elon = new Player("Elon Musk", 90, "Tesla"
const warren = new Player("Warren Buffett", 100, "Investor")

37. 객체 지향 프로그래밍이 뭐죠? (2)

이름 그대로 상속해 주는 개념, 상속

심즈 게임을 만들며 배우는 상속

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Human {
	constructor(name) {
		this.name = name;
		this.arms = 2;
		this.legs = 2;
	}
}
class Teenager {
	constructor(name) {
		this.name = name;
		this.arms = 2;
		this.legs = 2;
		this.emotional = true;
	}
	curse() {
		return `%^$@#$`;
	}
}
class Baby {
	constructor(name) {
		this.name = name;
		this.arms = 2;
		this.legs = 2;
		this.cute = true;
	}
	cry() {
		return `waa waa`;
	}
}
// 중복 해결??
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 기본이 되는 Human 클래스를 나머지 클래스에 상속
class Human {
	constructor(name) {
		this.name = name;
		this.arms = 2;
		this.legs = 2;
	}
}
class Teenager extends Human {
	constructor(name) {
		this.emotional = true;
	}
	curse() {
		return `%^$@#$`;
	}
}
class Baby extends Human {
	constructor(name) {
		this.cute = true;
	}
	cry() {
		return `waa waa`;
	}
}
// 중복 해결

38. 함수형 프로그래밍이 뭐죠?

지원하는 언어: 자바, 자바스크립트, 파이썬…

버그가 발생하기 어려운 구조

샌드위치 만들기로 배우는 함수형 프로그래밍

선언형 프로그래밍 → 원하는 결과값 선언

  • BLT 샌드위치 만들어줘!
  • 대표적인 예: CSS

명령형 프로그래밍 → 원하는 결과값에 어떻게 도달 하는지 선언

  1. 토스트 빵 2개를 꺼내서 구워!
  2. 양상추 2-3장을 씻고, 토마토를 얇게 썰어 2조각 준비하고, 구운 베이컨 3개를 준비해!
  3. 1의 토스트 빵 1개 위에 2의 재료를 쌓은 다음, 나머지 토스트 빵 1개로 덮어!

자바스크립트로 보는 명령형 프로그래밍과 선언형 프로그래밍의 차이

명령형: 할 일을 세세하게 지시할 수 있는 대신 개발자가 실수하기 쉽고, 작성한 코드를 동료가 이해하기 어렵다:

선언형: 결과 중심으로 코드를 작성, 실수 적고, 동료가 코드를 이해하기 쉽다.

명령형 프로그래밍 - 공백을 ❤️로 바꾸기

1
2
3
4
5
6
7
8
9
10
11
function spaceToHeart(text) { // text 가져와
	let result = "";
	for (let i = 0; i < text.length; i++) { // 글자 1개씩 다 비교해
		if (text[i] === " ") {
			result += "❤️"; // 만약 공백이면  ❤️로 교체해
		} else {
			result += text[i] // 공백이 아니면 패스
		}
	}
	return result;
}

선언형 프로그래밍 - 공백을 ❤️로 바꾸기

1
2
3
function spaceToHeart(text) {
	return text.replaceAll(" ",  "❤️");
}

홀수를 제거하는 코드를 함수형 프로그래밍으로 작성해 보기

1
2
3
4
5
6
7
function checkForOdd(item) {
	return item % 2 === 0;
}

function removeOdd(items) {
	return items.fillter(checkForOdd); // checkForOdd라는 함수를 인자로 보냈네!
}

🔥 오늘 TIL 3줄 요약

  • 비밀번호와 무작위 텍스트 솔트를 합치면 레인보우 테이블이 있어도 원래 비밀번호를 찾을 수 없다.
  • 프로그래밍 패러다임은 프로그래머가 프로그래밍을 할 때의 관점, 방식, 프로그래밍을 하는 사고의 틀
  • 대표적 프로그래밍 패러다임: 절차 지향 프로그래밍, 객체 지향 프로그래밍, 함수형 프로그래밍

🤩 오늘 읽은 소감은? 떠오른 생각을 가볍게 적어보세요

거의 끝나간다!!!

🔖 궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.

Reference

IT 5분 잡학 사전

This post is licensed under CC BY 4.0 by the author.

IT 5분 잡학 사전 7

IT 5분 잡학 사전 9

Comments powered by Disqus.