네트워크는 따로 조금 더 깊게 배워둬서 훑고 지나갔다.
단, 일련의 흐름은 리마인드할 필요가 있음
마지막엔 숙제를 내주셨다!
https는 http의 보안을 위해 탄생했다. 본래 http는 전혀 암호화되지 않음.
따라서 정보가 노출되면 치명적인 상황이 생길 수 있음.
https://velog.io/@loevray/CS-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC1-Http-IP-DNS#http-hyper-text-transfer-protocol
https://velog.io/@loevray/CS-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC2-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C-%EC%8A%A4%ED%83%9D-%EB%9E%9C-%EC%96%B4%EB%8C%91%ED%84%B0#%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C-%EC%8A%A4%ED%83%9D%EC%97%90-http%EB%A9%94%EC%8B%9C%EC%A7%80%EB%A5%BC-%EB%84%98%EA%B2%A8%EB%B3%B4%EC%9E%90
http 통신방식에 대해서는 자세히 기술해놓았다.
https는 비대칭 공개키방식을 사용하여 전송 내용을 암호화 한다.
이 유형의 방식은 2가지 키를 사용한다.
암호화를 도와주는 계층을 SSL(Secure Sockets Layer)라고 한다.
1999년 이후에는 TLS(Transport Layer Security)라고 불리운다.
어떻게 안전한 통신을 할까?
https://www.cloudflare.com/ko-kr/learning/ssl/what-happens-in-a-tls-handshake/
기존의 3hand-shake가 진행된 뒤 4번의 handshake를 더 거침.
아래는 tls 1.3버전 이전의 교환 방식.
=> 1.3버전 이후에는 4가지로 줄어들었다.
또한, 1.3버전 이후에는 이미 연결된 적 있는 클라이언트-서버는
왕복통신이 필요없이 서로만의 암호를 통해 빠르게 연결함!
그림으로 알기 쉽게 설명되어있는 사이트도 있음!
https://howhttps.works/ko/why-do-we-need-https/
특정 시각을 기준으로 시스템 클럭 틱 세는것으로 결정. === 시스템 시간
값으로 표현하면 TimeStamp. 운영체제마다 다를수 있음.
클럭 틱은 RTC라는 부품으로 셈. 카운터 회로의 결정 진동자가 만드는 주파수를 이용
1클럭에 32.768kHz
=> 32.768khz는 32768hz라고 볼수있음. 보통 실제클럭이 128번뛰면 카운터는 이를 1번이라고 인지함.
32768/128 = 256. 타이머의 카운터는, 오버플로우 인터럽트라는 방식을 사용함
=> 클럭 카운팅의 레지스터값은 보통 8bit임. 0~255니까 256부터 오버플로우발생. 인터럽트해서 카운터 채감 = 그때가 1초.
운영체제가 유닉스면 UNXI TIME을 사용. 기준시 1970-01-01 0시 0분 0초. 이전은 음수
위의 방법만으로는 로컬 컴퓨터 시간만 정확해짐. 통신을 위해서는 서로의 시간이 맞아야 함.
이를 위해 Network Time Protocol이 생김.
NTP서버에서 시간을 뿌려줌. 최상위 서버는 원자시계 이용. 각 PC는 UDP통신으로 시간을 받아옴.
서버가 한정되어있으면 패킷 너무 많이들어온다. => 트리구조로 된 시간서버들이 있음. 거기서 받아옴.
오차가 수ms 이하. 아주 정밀하다.
현실 세계의 시간대 데이터를 모아둔곳이 존재함.
ex)서머타임, 갑자기 시간대를 바꾸는 경우 등.
https://www.iana.org/time-zones
알고보니 최상위 도메인 관리하는 사이트에서 제공해주고 있다!
표기법은 보통 대륙/도시 형태다.
글로벌 서비스를 운영하려면 시간대가 굉장히 중요함.
절대적 시간도 필요함
=> 생일, 기념일, 국경일 등
UTC는 사건이 발생한 시각만 고려할때 사용.
=> 로깅, 감사, 시계열 데이터, 주식
Time zone은 사용자 기준으로 시간을 보여줘야 할 때
=> sns 타임라인, 결제시각, 푸시알림 등.
a라는 유저의 생일은 절대적 시간.
글이 포스팅 된 시각은 UTC
a라는 유저 본인이 보게 될 시각은 UTC에서 계산된 time zone
평문 > 암호 만드는 것. 무전병이었어서 잘 알쥐...
단방향, 양방향 암호화 존재.
단방향부터 살펴보자
대표적으로 MD5, SHA가 있음
이중 MD5, SHA0, SHA1은 해시 충돌이 일어남.
해시충돌이란?
=> 해시함수는 본래 다른 값 입력되면 다른값 출력되어야함. 그런데, 확률적으로 같은값이 출력되버릴 수 있음. 이는 모든 해시함수가 그렇다. 다만 위의 예들은 이미 충돌쌍이 발견 됨.
평문과 해시함수로 이루어진 표, rainbow table유출 주의
유출 되더라도 알아낼수 없게 salt, key stretch같은 기능으로 조치 해야함.
=> 평문에 임의의 문자열 추가해서 해시함수 돌리거나, 해시함수를 반복해서 돌림.
PBKDF2, bcrypt가 있음.
양방향 알고리즘은 대칭 키-비대칭 키둘로 나뉜다.
나도 의문이 들었다. 강사님께서 추측하여서 표를 보여주시긴했지만, 나도 한번 찾아보려고 했다.
보안상 알고리즘을 전부 노출시키진 않겠지만 조금은 나와있겠지?
구글 비밀번호 관리자는 그냥 텍스트로 저장하는거였다.
...??!
프로그램은 순차, 분기, 반복, 참조로 구성된다. 패러다임은 이를 어떻게 이용할지 다루는 것 뿐.
https://velog.io/@loevray/CS-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C5-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EB%8F%99%EA%B8%B0%ED%99%94
https://velog.io/@loevray/CS-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C5-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EB%8F%99%EA%B8%B0%ED%99%942
동시성 문제는 여기...
하지만, 장점이 그대로 단점이 될수도 있다.
함수형 프로그래밍은 선언형 프로그래밍에 가깝다.
예를들어 [1,2,3,4,5]
의 배열을 더하는 작업을 나타내보자
// 명령형
const arr = [1, 2, 3, 4, 5];
let sum = 0;
for(let i = 0; i<arr.length; i++){
sum += arr[i];
}
return sum;
// 선언형
const arr = [1, 2, 3, 4, 5];
return arr.reduce((a,b) => a+b);
비슷하지만 사고방식이 다르다.
명령형 프로그래밍은 데이터의 제어 필요없이 필요한 함수만 뚝딱 사용하면 됨
뭔가 반복문vs재귀 사고방식과 비슷한것 같기도 하고...
사실 JS는 패러다임을 나눌 필요가 없다.
간단하게 객체지향을 다루고 JS에서의 객체지향은 따로 문서를 파놨다.(계속 업데이트중)
객체는 현실을 추상화한것.
내 방식대로 이해한 추상화는 어렵고 복잡한 기능을 사용자가 쉽게 사용할 수 있게 엮어낸 것 이라생각한다.
예를들어 운영체제. 운영체제는 CPU, 메모리 등 하드웨어관리를 한다.
자원분배도 하고, 오류도 검출하고. 사용자가 이를 전부 알 필요는 없다.
그저 작업관리자에서 뚝딱하고, 메모리 많이 잡아먹는건 꺼버리고.
또한 하드웨어 드라이버도 마찬가지다. 사용자가 입-출력장치가 어떻게 돌아가는지는 전혀 알 필요가 없다.
추상화 잘 된 드라이버를 설치해서, 호환되게 한다. 그뿐이다.
잡설은 여기까지 하고.
현대의 웹사이트는 여러개의 JS파일로 이루어져있음.
예전에는 전역스코프에서 파일간 통신했지만, 파일 크기가 커지면서 힘들어짐.
모듈은 스크립트간 의존도 파악, 실행순서 제어에 큰 도움을 줌.
모듈과 컴포넌트는 비슷하게 쓰임
참고로 JS모듈은 로컬환경에서 동작x. http, https에서 동작.
모듈의 특징들은 이렇다
요즘은 webpack으로 번들링(파일 하나로 합쳐줌)하기에 type=module
을 사용하진 않는다.
이모지는 길이 2
한글,영어 등 언어는 길이 1
패턴을 이용하여 문자열 검색
성능이 구리다 => 백트래킹 방식
현업 개발자들도 찾아보면서 사용하기에 외울필요 x(아주좋소)
정규표현식으로 잘라내려면 패턴찾기.
개미수열을 정규식으로 풀어보자
http통신은 기본적으로 stateless.
서버에게 주는 헤더에 쿠키를 담으면, 서버가 어디서 온것인지 파악 가능.
쿠키는 브라우저에서 유지하는 데이터.
수명을 정할수도 있음.
서버에서 set-cookie
로 내려줄수 있음.
쿠키에는 다양한 옵션 존재.
쿠키 탈취 가능. => https로 해결(네트워크 부분에서...)
서버가 사용자를 구분하려면?
session을 사용해 구분. 서버에 기록함.
최근에는 서버 공간복잡도 문제, 다중서버 문제때문에 잘 사용x
html5에서 웹 스토리지가 등장.
로컬,세션 스토리지.
로컬스토리지
저장했던 도메인과 다르면 접근불가능. 키-밸류쌍
세션스토리지.
새 창마다 세션 생김. 브라우저닫으면 삭제. 같은 도메인이어도 세션다르면 접근 x. 키-밸류쌍.
가볍게 다루지만, 깊이있게 공부해야하는 주제만 나온다. 역시 데브코쓰...
아직도 남아있는 것들