오늘은 CS 지식과 관련한 수업들이 듣었다. 기술면접 대비를 하기 위해 간단하게 공부한 적이 있어서 익숙한 단어들도 있었지만 깊게 들어가면 갈수록 어려웠다. 특히 네트워크 기초에 대해 파면 팔수록 새로운 지식들이 뿜어져 나왔다🙄🙄. 네트워크 말고도 다양한 주제들의 CS를 배웠지만 자세한건 개인 노션에 작성하고 중요한 것만 velog에 간단하게 써보려한다. 모던 JS 딥 다이브 스터디가 끝나면 CS 스터디도 만들어서 다시 반복학습을 해야겠다.
❓ 브라우저에 URL을 입력하면 무슨일이 발생할까요?
1. URL 해석
scheme://<user>:<password>@<host>:<port>/<url-path>
예시) http://example.com:8761/members
- scheme = 프로토콜이 들어가는 영역
- 계정정보 - 인증이 요구되는 경우 id와 pw를 입력해 접속허가를 받는 것
- //는 생략 가능
2. DNS 조회
DNS = 도메인과 IP 주소를 서로 변환해주는 시스템
브라우저에서 DNS로 요청을 보내기 전에 먼저 해당 도메인을 알고 있는지 브라우저 캐시를 찾아보고 없다면 로컬 컴퓨터에서 호스트 파일을 참조합니다.
이미 정의가 되어있다면 내부적으로 ip를 반환하고 위 과정에서 없다면 DNS를 호출해 RootServer-TLD Server - Authoritative Server 순으로 탐색한다.
DNS는 보통 통신사(ISP)에서 제공하는 것을 사용한다.
DNS를 운영하는 서버를 보통 Name Server라고 부른다.
💡 도메인과 호스트의 차이
도메인 : present.do
호스트(서브도메인): www.present.do, gateway.dev.present.do
3. 해당 IP가 존재하는 서버로 이동
= 정확히 해당 IP가 할당된 서버가 존재하는 대역으로 이동하는 것을 말한다.
💡 부산에서 서울로 택배를 보내야 할때 옥천 Hub, 군포 Hub등을 거치는데
이때 이 Hub들을 라우터라고 비유할 수 있다.
4. ARP를 이용하여 MAC 주소 변환
ARP = Address Resolution Protocol
논리 주소인 IP 주소를 물리 주소인 MAC 주소로 변환하는 프로토콜
실제 통신을 위해 변하지 않는 고유한 MAC 주소가 필요하다.
네트워크 내에 ARP를 Broadcasting하면 해당 IP 주소를 가지고 있는 기기가 MAC 주소를 반환한다.
MAC 주소가 필요한 이유
IP는 논리적인 주소고 MAC은 물리적인 주소인데 이때 기계의 실제 위치를 알기 위해서는 MAC주소가 필요하다. 그렇다면 논리적 주소와 물리적 주소로 왜 나눈걸까? 왜 IP주소만로는 왜 안되는걸까?
용도가 다르기 때문이다.
예시를 들자면 어떤 주소가 있을 때 우리는 도로명 주소, 지번 주소로 나누어 표현할 수 있는데 실제 위치를 알기 위해서는 GPS가 필요한것 처럼 물리적 주소가 따로 필요하다
5. TCP 통신을 위해 Socket을 열어야 한다
= Socket을 열어 허락을 받아야 데이터를 전달 할 수 있다.
6. 서버는 응답을 반환한다
7. 브라우저는 렌더링을 한다
프로그램은 순차, 분기, 반복, 참조로 구성된다
let a = [1,2,3,4,5,6,7];
for (let i = 0; i< 5; i+= 1){
if(a[i]%2 === 0 ){
console.log(a[i]);
}
}
[1,2,3,4,5,6,7]
.filter((item) => item % 2 === 0 )
.forEach((item) => console.log(item));
객체지향 추상화의 최소 단위가 객체인 것처럼 함수형은 함수가 최소 단위다.
함수 단위로 나눠지므로 재사용성이 매우 높다
👉 재사용을 위해 함수를 잘게 쪼개야 한다는것이 단점이 될 수 있다.
데이터의 불변성을 지향하기에 동작을 예측하기 쉽고 이펙트를 방지한다.
👉 스레드를 통해 동시성 문제를 해결해준다.
객체 지향은 순차,분기,반복,참조 네가지 제어 흐름에 전환을 객체를 통해 간접적으로 통제하고
함수는 변수 할당을 통제하여 네가지 제어 흐름을 통제한다
상태가 없기 때문에 사이드 이펙트가 없다.
👉 변수 조작을 하기 위해 메모리와 성능을 사용하는 단점이 될 수 있다.
코드가 짧고 간결하다
👉 많은 숙련도를 요구한다.
프로트타입이란 기존의 객체를 복사하여 새로운 객체를 생성하는 방식을 말한다.
💡 프로토타입이 필요한 이유?
객체를 생성하고 인스턴스들을 여러개 만들 때 메모리 낭비가 생길 수 있다.
이를 보완하기 위해 프로토타입을 사용하면 된다!
function Person(name, age) {
this.name = name;
this.age = age;
this.getName = function () {
return this.name;
};
this.setName = function (name) {
this.name = name;
};
}
const Park = new Person("홍길동", 26);
const Kim = new Person("김은하", 24);
console.log(Park);
console.log(Kim);
function Person(name, age) {
this.name = name;
this.age = age;
Person.prototype.getName = function () {
return this.name;
};
Person.prototype.setName = function (name) {
this.name = name;
};
}
const Park = new Person("홍길동", 26);
const Kim = new Person("김은하", 24);
console.log(Park);
console.log(Kim);
이렇게 생성하면 하위 객체들은 상위객체를 바라보게 되고 객체들은 각자 proto라는 객체를 내부적으로 갖게 되는데 이 내부에서 상위 객체를 링크한다.