Daehyunii's Dev-blog
[데브코스] TIL-103 HTTP, HTTPS, 함수형 프로그래밍 본문
오늘 강의는 네트워크 지식과 관련된 내용이 많이 있었다. 각각의 개념들에 대해서 한 번은 들어 보어 보았으나 깊게 내용을 이해하는 것은 오늘 하루만에 끝낼 수 있는 양이 아니라고 생각되어 강의를 통해 전반적인 내용은 습득하고 http와 https에 대한 차이를 좀 더 깊게 파악하고 이해하고자 한다.😎
HTTP 란?
Hyper Text Transfer Protocol
HTTP는 서버와 클라이언트 사이에 데이터를 주고 받기 위한 프로토콜, 즉 통신 규약이다.
HTTP는 암호화가 되지 않은 평문 데이터를 전송하는 프로토콜이기 때문에, 이를 통해 비밀번호와 같은 보안이 필요한 내용을 주고 받으면 제3자에 의해서 조회가 가능했다. 이러한 문제점을 해결하기 위해 등장한 것이 HTTPS 이다.
HTTPS 란?
Hypertext Transfer Protocol Secure
HTTPS는 하이퍼 텍스트 전송 프로토콜 보안을 사용하는 HTTP 프로토콜의 보안 버전이다.
HTTPS 프로토콜을 사용하면 웹 사이트 사용자가 인터넷을 통해 신용 카드 번호, 은행 정보와 같은 중요한 데이터를 안전하게 전송할 수 있다. 하지만 오늘날에는 민감한 데이터 정보 여부와 관계없이 빠르게 표준 프로토콜이 되고 있다.
- HTTPS 암호화 방식
HTTPS는 대칭키 암호화 방식과 비대칭키 암호화 방식을 통해 보안 기능을 수행한다.
- 대칭키 암호화 방식이란?
서버와 클라이언트가 동일한 키로 암호화와 복호화를 통해 보안 기능을 수행한다.
비대칭키 암호화 방식에 비해 연산속도가 상대적으로 빠르다는 장점이 있지만, 보안에 상대적으로 취약하다.
- 비대칭키 암호화 방식이란?
공개키와 개인키를 통해 암호화와 복호화를 통해 보안 기능을 수행한다.
대칭키 암호화 방식에 비해 연산속도는 느리지만, 보안에 상대적으로 강하다.
강의를 다 듣고 오늘도 역시나 모던 자바스크립트 딥 다이브를 읽기 시작했다. 그 중에서 저번에는 순수 함수와 비순수 함수의 차이점에 대해서 정확하게 이해하지 못했으나 이번에는 조금 더 명확하게 이해할 수 있었다.
순수 함수란?
어떤 외부 상태에도 의존하지 않으며 외부 상태를 변경하지도 않는 함수를 말한다.
즉, 순수 함수는 어떤 외부 상태에도 의존하지 않고 오직 매개변수를 통해 함수 내부로 전달된 인수에게만 의존해 반환값을 만드는 함수를 말한다. 함수의 외부 상태에 의존하는 함수는 외부 상태에 따라 반환값이 달라지지만, 순수 함수의 경우에는 외부 상태의 영향을 받지 않는 함수이다.
var cnt = 0;
//순수 함수
function increase(n){
return ++n;
}
cnt = increase(cnt); // 순수 함수가 반환한 리턴값을 변수에 재할당해서 상태를 변경한것
console.log(cnt); // 1
위의 increase 함수는 인수로 전달받은 값에만 의존해 반환값을 만들어 반환한다. 그렇기 때문에 외부의 cnt 변수의 상태와는 어떠한 영향도 주고 받지 않는다. 함수가 외부 상태를 변경하면 상태 변화를 추적하기가 어려워진다. 그렇기 때문에 함수 외부 상태의 변경을 지양하는 순수 함수를 사용하는게 좋다.
비순수 함수란?
외부 상태에 의존하거나 외부 상태를 변경하는 함수를 말한다.
즉, 비순수 함수는 함수의 외부 상태에 따라 반환값이 달라지고, 순수 함수와는 달리 함수의 외부 상태를 변경하는 부수 효과가 있다.
var cnt = 0;
//비순수 함수
function increase(){
return ++cnt; //외부 상태에 의존하고 외부 상태를 변경시킨다.
}
increase();
console.log(cnt);
이러한 비순수 함수는 외부 상태를 변경하므로 상태 변화를 추적하기 어려워진다. 또 위 increase 함수와 같은 비순수 함수는 코드의 복잡성을 증가시킨다. 또한 비순수 함수를 최대한 줄이는 것은 부수 효과를 최대한 억제하는 것과 같다. 이러한 개념들은 함수형 프로그래밍과 깊은 관련이 있다.
함수형 프로그래밍이란?
순수 함수와 보조 함수의 조합을 통해 외부 상태를 변경하는 부수 효과를 최소화해서 불변성을 지향하는 프로그래밍 패러다임이다. 로직 내에 존재하는 제어문들을 제거해서 복잡성을 해결하고, 변수 사용을 억제하거나 생명주기를 최소화해서 상태 변경을 피해 오류를 최소화하는 것을 목표로 한다.
즉, 함수형 프로그래밍은 결국 순수 함수를 통해 부수 효과를 최대한 억제해 오류를 피하고 프로그램의 안정성을 높이려는 일환이라고 할 수 있다.
오늘을 마무리 하며
오늘 강의를 들으며 공부한 내용은 네트워크와 관련된 내용이 굉장히 많았다. 기본적인 렌더링 과정에 대해서는 큰 틀은 이해하고 있었지만 DNS의 동작원리 IP주소와 MAC주소와 같은 자세한 개념들에 대해서는 많은 공부가 필요할 것이라고 다시 한 번 반성하는 하루를 보냈다. 하지만 시간적으로도 이 모든 개념을 한 번에 깊게 알고 넘어가는 것은 물리적으로 불가능할 것이라고 생각한다. 그래서 오늘 하루 배운 내용 중에서 조금 더 알아보고 싶은 내용을 중심으로 더 깊게 공부를 했다. 그리고 앞으로 '네트워크'관련 지식들에 대해서 강의 시간 외에도 조금 더 폭 넓게 그리고 깊게 공부를 해야겠다.
'✏️ 2022. TIL > October (데브코스)' 카테고리의 다른 글
[데브코스] TIL-105 이진 탐색 트리, 이진 힙 (0) | 2022.10.21 |
---|---|
[데브코스] TIL-104 스택 (0) | 2022.10.19 |
[데브코스] TIL-102 가비지 컬렉터, 옵셔널 체이닝, null 병합 (1) | 2022.10.18 |
[Git / Github] TIL-101 (0) | 2022.10.08 |
[Git / Github] TIL-100 (0) | 2022.10.08 |