개발자 99% 커뮤니티에서 수다 떨어요!
2023.11.21
에피소드 35. 비밀번호는 어떻게 저장될까?
에피소드 36. 객체 지향 프로그래밍이 뭐죠? ①
에피소드 37. 객체 지향 프로그래밍이 뭐죠? ②
에피소드 38. 함수형 프로그래밍이 뭐죠?
IT 쿠키 상식 개발자의 번아웃, 이렇게 대처해 봐!
비밀번호는 원문 상태로 DB에 저장할 수 없다. 또한 데이터베이스 자체를 암호화하는 방법도 키를 잃어버리거나 키를 훔치는 경우를 생각하면 좋은 방법이 될 수 없다.
해시 함수를 통해 비밀번호를 더욱 안전하게 구현할 수 있다. 해시 함수의 경우 동일한 입력값에 대해 동일한 출력값을 가지며, 입력값이 아주 살짝만 바뀌어도 출력값은 크게 바뀌고, 반대로 입력한다고 해서 원래 값이 나오지 않는다. 그러나 해시 함수 또한 레인보우 테이블의 존재 때문에 완벽하지는 않다. 레인보우 테이블을 막기 위해 솔트라는 조그마한 무작위 텍스트를 첨가한다.
프로그래밍 패러다임은 프로그래밍 관점 및 방식을 뜻한다.
객체 지향 프로그래밍의 경우 클래스를 활용하여 프로그래밍을 한다.
이 객체 지향 프로그래밍에는 상속이라는 개념이 있다. 클래스 간의 중복을 하나의 기본 속성으로 나타낸 채 자신만의 속성을 추가하는 방식이다.
선언형 프로그래밍은 원하는 결괏값을 선언한다.
명령형 프로그래밍은 결괏값에 도달하는 방법을 선언한다.
예방법
휴식 시간을 가져라
일하는 시간을 제한하라
몸을 움직이고 건강한 음식으로 활력을 찾아라
한때 암호학에 관심을 가졌던 적이 있다. 해시 함수의 설명을 읽으며 2차 세계 대전 당시의 에니그마와 비슷하다는 생각을 했으나, 기술이 더욱 발전해버리는 바람에 이 또한 브루트 포스로 뚫을 수 있게 된 모양이다. 책에서 소개된 솔트를 제외하고도 방어법이 있는데, 우리도 익히 아는 것들이다.
적당한 길이와 다양한 조합(영문, 숫자, 특수문자 조합 등)
시간, 횟수에 따른 로그인 실패 시 차단
2FA
OTP
명령형 프로그래밍의 하위 분야가 절차형 프로그래밍과 객체 지향 프로그래밍이고, 선언형 프로그래밍의 하위 분야에 함수형 프로그래밍이 포함되어 있다.
기존의 명령형 프로그래밍의 경우 전역변수와 함수의 Side Effect를 적극적으로 활용하였다. 따라서 함수의 결과와 실행을 마친 후 프로그램 및 변수의 상태가 기존의 상태와 달라질 수 있었다. 이는 디버깅을 어렵게 만드는 요소 중 하나였다.
함수형 프로그래밍은 이를 막기 위해 Side Effect가 없는 Pure Function을 활용하고, 전역변수 대신 지역변수를 활용하여 함수에 의해 외부 요소가 변하는 것을 철저하게 막으며, a라는 값이 함수에 들어가면 반드시 b가 나올 것이 보장되도록 하는 것을 신조로 삼는다. 이 immutability 덕분에 예측이 쉬워 버그가 적다.
물론 함수형 프로그래밍 또한 단점은 있다. 작성도 어렵고, 이해도 어렵고, 양이 많아지면 많아질수록 유지도 어렵다.
둘 다 일장일단이 있으며 우열을 가릴 수 있는 분야가 아니니 적절히 사용하면 될 것 같다.
딱 내 생각대로!
meongjinki91 님의 TIL https://nomadcoders.co/community/thread/8731
jan 님의 TIL https://nomadcoders.co/community/thread/8732
rabitmyo 님의 TIL https://nomadcoders.co/community/thread/8734
tommya98 님의 TIL https://nomadcoders.co/community/thread/8735
skd0529 님의 TIL https://nomadcoders.co/community/thread/8736