개발자 99% 커뮤니티에서 수다 떨어요!
오늘 TIL 3줄 요약
일주일에 하루정도 코딩 안하고 쉬는거에 죄책감 들 필요 없다
비밀번호도 개발자가 알 수 없도록 해주는 시스템이 있다
나는 개발의 세계 0.01%도 아는 것 같지 않다
TIL (Today I Learned) 날짜
2023.09.05 (화)
오늘 읽은 범위
Episode 35 ~ 38
책에서 기억하고 싶은 내용을 써보세요.
비밀번호 시스템
해시 함수
데이터베이스 앞에 입력한 값을 무작위 값으로 둔갑 시켜 줌
ex) 12345 -> 3!@axE
동작 규칙:
동일한 입력값에 대해 동일한 출력값을 가짐
1:1 대응 관계 지속
입력값이 아주 살짝만 바뀌어도 출력값은 엄청 크게 바뀜
12346 -> c0#acS
해시 함수는 엄청난 무작위성을 지님
반대로 입력한다고해서 원래 값이 나오지 않음
c0#acS -> 12346 X
비밀번호가 해시 함수에 통과하여 얻은 무작위 결괏값을 데이터베이스에 저장
BUT 완벽하지 않음 -> Why? 레인보우 테이블 (rainbow table) 때문에
해시 함수가 변경한 값을 원래 값으로 연결한 표
레인보우 테이블로 원래 비밀번호를 알 수 있음
최종병기 = 솔트 (salt)
아주 작은 무작위 테스트
비밀번호를 무작위 테스트 솔트와 합쳐서 해시 함수에 통과
레인보우 테이블이 있어도 원래 비밀번호를 찾을 수 없음
프로그래밍 패러다임 (programming paradigm)
프로그래머가 프로그래밍을 할 때의 관점, 방식, 등 (프로그래밍을 하는 사고의 틀)
대표적인 프로그래밍 패러다임: 절차 지향 프로그래밍, 객체 지향, 프로그래밍, 함수형 프로그래밍
객체 지향: 자바
함수형 프로그래밍: 자바, 자바스크립트, 파이썬, 등
객체 지향 프로그래밍
클래스: 속성은 같지만 데이터는 다른 재료를 위한 공장
상속: 기본이 되는 클래스를 나머지 클래에 상속 시킴
함수형 프로그래밍
버그가 발생하기 어려운 구조
선언형 프로그래밍
원하는 결괏값을 선언
결과 중심으로 코드를 작성하여 실수도 적고 동료가 코드를 위해하기 쉬움
자바스크립트: replaceAll("공백", "하트");
모든 공백을 하트로 바꿔줘
명령형 프로그래밍
원하는 결괏값에 어떻게 도달하는지 선언
할 일을 세세하게 지시할 수 있지만 개발자가 실수하기 쉽고 동료가 이해하기 어려움
자바스크립트: for (let i = 0; i <text. lenght; i++) {if (text[i] === "공백") {result += "하트";} else {result += text[i];}}
글자를 1개씩 다 비교해서 공백이면 하트로 교체하고 공백이 아니면 패스해
함수 중심으로 코드를 적는 방식으로 선언형 프로그래밍 콘셉트를 유지
홀수를 제거하는 코드: function checkForOdd(item) {return item % 2 === 0;} function removeOdd(item) {return items.filter(checkForOdd);}
filter의 인자로 checkforOdd라는 함수를 보냄
오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요
함수형 프로그래밍은 꼭 배워야한다
주로 번아웃이 왔다고 느끼면 잠시 휴식을 취했지만 (근데 휴식을 취하면서 우울했다) 이건 이미 늦은거였다. 번아웃은 미리 예방해야 한다.
궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.
선언형 프로그래밍 혹은 명령형 프로그래밍을 반드시 사용해야하는 경우가 있을까?
오늘 읽은 다른사람의 TIL
X