✔ 오늘의 3줄 요약
- 비밀번호 시스템은 salt가 안전하다. 개발자라면 구현해 보자.
- 프로그래밍 패러다임에 대한 내용을 공부하자.
- 대표적인 프로그래밍 패러다임에는 절차 지향, 객체 지향, 함수형 패러다임이 있다.
✔ 오늘 읽은 범위
EP.35 비밀번호는 어떻게 저장될까?
EP.36 객체 지향 프로그래밍이 뭐죠? 1
EP.37 객체 지향 프로그래밍이 뭐죠? 2
EP.38 함수형 프로그램이 뭐죠?
✔ 기억하고 싶은 내용
1. 비밀번호 시스템의 잘못된 예 2가지와 괜찮은 시스템의 예: 해시 함수
- 잘못된 예 1) 비밀번호를 데이터베이스에 그대로 저장한다.
비밀번호 시스템을 구축한 사람도 비밀번호를 볼 수 있어서는 안 된다.
- 잘못된 예 2) 데이터베이스 자체를 암호화해서 아무도 볼 수 없게 만든 후 비밀번호를 저장한다.
사용자는 회사에서 주는 Key로 DB를 해제한 후 로그인한다. key로 자신의 비밀번호가 저장된 부분을 해제하고 나서 입력한 비밀번호와 대조해서 맞으면 로그인되게 한다. 로그인을 마치면 DB의 비밀번호 부분을 잠근다.
- 해시 함수 이용
해시 함수는 비밀번호 DB 앞에 살고 있는 마법사!
내가 입력한 값을 무작위 값으로 둔갑시켜 준다.
해시 함수 규칙 3가지
1. 동일한 입력값에 대해 동일한 출력값을 가진다.
비밀번호 12345가 !kwf1Z&^ 의 일대일 대응 관계가 유지된다.
2. 입력값이 아주 살짝만 바뀌어도 출력값은 엄청나게 크게 바뀐다.
해시함수에 12345가 아니라 1234가 입력되면 출력값은 약간만 달라지는 것이 아니라 완전히 다른 결과가 나온다.
해시 함수는 무작위성을 갖고 있다.
3. 반대로 입력한다고 해서 원래 값이 나오지 않는다.
해시 함수는 한쪽 방향으로만 설계된 함수이다.
12345를 넣어서 만든 값 !kwf1Z&^를 다시 해시 함수에 넣으면 12345가 나오지 않는다.
- 레인보우 테이블
해시 함수도 완벽하지 않다.
레인보우 테이블이라는 것이 있기 때문.. 레인보우 테이블은 해시 함수가 변경한 값을 원래의 값과 연결한 표이다.
해시 함수를 통과한 값은 레인보우 테이블에서 찾아보면 원래 값을 알 수 있다.
- 최종 병기, 솔트(salt)
솔트는 아주 조그마한 무작위 텍스트이다.
12345와 같은 비밀번호를 무작위 텍스트인 솔트와 합쳐서 해시 함수에 통과시키는 것
그러면 레인보우 테이블이 있어도 원래 비밀번호를 못 찾게 된다.
2. 객체 지향 프로그래밍
- 프로그래밍 패러다임이란?
프로그래머가 프로그래밍을 할 때의 관점, 방식, 프로그래밍을 하는 사고의 틀
프로그래밍 언어는 프로그래밍 패러다임을 하나 or 하나 이상을 지원한다.
Java - 객체 지향 프로그래밍, 함수형 프로그래밍 지원
대표적인 프로그래밍 패러다임
- 절차 지향 프로그래밍
- 객체 지향 프로그래밍
- 함수형 프로그래밍
게임 캐릭터의 데이터 프로그래밍 예
const hero_1 = {
name: 'nunu',
health: 100,
skill: 'iceball'
};
const hero_2 = {
name: 'timo',
health: 90,
skill: 'arrow shot'
};
이렇게 하면 비효율..
const Hero = {
constructor(name, health, skill) {
this.name = name;
this.health = health;
this.skill = skill;
this.xp = 0;
}
};
객체 지향 프로그래밍의 클래스(class)라는 개념을 이용해 개선..
속성은 같지만 데이터는 다른 이들을 위한 공장 같은 것
const nunu = new hero('Nunu', 120, 'Ice Ball')
const timo = new hero('Timo', 100, 'Poison mushroom')
클래스를 이용하여 영웅을 이렇게 생성할 수 있다.
Hero 클래스를 보면 constructor라는 것이 있는데, 여기가 재료를 넣어 주는 코드
xp의 경우 모든 영웅이 똑같은 값으로 시작하는 요소이기에 처음부터 0으로 설정하도록 했다.
- 코드의 효율을 높여주는 상속
심즈를 예로 든 상속의 개념
클래스의 상속으로 표현해 보자
성인, 청소년, 아기 클래스
코드 중복 문제가 생긴다. 성인과 청소년 아기는 다르지만 결국은 인간인 것
팔과 다리가 2개씩 중복되는데 상속으로 해결한다.
Human 클래스를 나머지 클래스에 상속시킨다. Human 클래스의 기본 속성을 가지며 자신만의 속성을 추가할 수 있다.
이렇게 객체 지향 프로그래밍의 유용성을 알게 된다.
3. 함수형 프로그래밍
개발자라면 반드시 배워야 할 함수형 프로그래밍
객체 지향 프로그래밍과 마창가지로 프로그래밍 패러다임 중 하나이다.
함수형 프로그래밍은 버그가 발생하기 어려운 구조이기에 매우 필수이다.
함수형 프로그래밍을 지원하는 언어 - Java, Javascript, python 등
- 샌드위치 만들기로 배우는 함수형 프로그래밍
함수형 프로그래밍 패러다임은 선언형 프로그래밍과 명령형 프로그래밍이 있다.
- 선언형, 명령형 프로그래밍의 차이
선언형 프로그래밍은 샌드위치를 만들 때 이렇게 한다.
BLT 샌드위치를 만들어 줘!
선언형 프로그래밍은 원하는 결괏값을 선언한다.
- 명령형 프로그래밍
1. 토스트 빵 2개를 꺼내서 구워
2. 양상추 씻고, 토마토 얇게 썰어서 2조각 준비하고, 구운 베이컨 3개를 준비해라
3. 1의 토스트 빵 1개 위에 2의 재료를 올린 다음 나머지 토스트 빵 1개로 덮어라
명령형 프로그래밍은 원하는 결괏값에 어떻게 도달하는지 선언한다.
선언형 프로그래밍의 대표적인 예는 CSS가 있다.
- 자바스크립트로 보는 명령형 프로그래밍과 선언형 프로그래밍 차이
명령형 프로그래밍 - 공백을 ❤로 바꾸기
export default App;
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;
}
명령형 프로그래밍은 입력한 thext의 글자를 1개씩 비교하면서 공백이면 ❤로, 공백이 아니면 result에 이어 붙이도록 코드를 작성하라 지시
텍스트의 공백을 어떻게 해야 하는지 하나씩 알려준다.
선언형 프로그래밍 - 공백을 ❤로 바꾸기
function spaceToHeart(text) {
return text.replaceAll(' ', '❤');
}
바꾸고 싶은 text를 spaceToHeart 함수에 넣어 주면 text의 공백을 replaceAll로 ❤라고 교체하는 것 말고 없다.
모든 선언형 프로그래밍은 명령형 프로그래밍 위에 쓴다고 이야기할 수도 있다.
결론
명령형 프로그래밍은 할 일을 세세하게 지시할 수 있는 대신 개발자가 실수하기 쉽고 동료가 이해하기 어려울 수도 있다는 특징이 있다.
선언형 프로그래밍은 결과 중심으로 코드를 작성하니 실수도 적고, 동료가 코드를 이해하기도 쉽다.
홀수를 제거하는 코드를 함수형 프로그래밍으로 작성해 보기
function checkForOdd(item) {
return item % 2 === 0;
}
function removeOdd(items) {
return items.filter(checkForOdd);
}
filter의 인자로 checkForOdd라는 함수를 보냈다는 게 핵심
함수형 프로그래밍에서 자주 쓰는 방식이다.
함수형 프로그래밍은 함수 중심으로 코드를 적는 방식으로 선언형 프로그래밍 콘셉트를 유지한다.
✔ 소감 및 떠오르는 생각
요즘은 어떤 사이트나 어플이든 가입할 때 sns, 구글 로그인, or 복잡한 비밀번호 등으로 사용해야 안심
salt를 사용하는 사이트나 어플은 어떤 게 있고 그것을 어떻게 확인하는지 궁금하다..
✔ 과제
'Book > IT 5분 잡학사전' 카테고리의 다른 글
[IT 5분 잡학사전- Final Mission] DAY14, 후기 (0) | 2024.02.23 |
---|---|
[IT 5분 잡학사전 - 최신 기술 편] DAY13, EP.35 ~ EP.45 (0) | 2024.02.22 |
[IT 5분 잡학사전] Day11, github 업로드 (0) | 2024.02.19 |
[IT 5분 잡학사전 - 컴퓨터 공학 편 2] DAY 10, EP.30 ~ EP.34 (2) | 2024.02.18 |
[IT 5분 잡학사전 - 컴퓨터 공학 편] DAY9, EP.26 ~ EP.29 (0) | 2024.02.17 |