P51~ 100
자바스크립트에서 분명히 다른 자료 구조인 set 과 map 임에도 똑같은 for a of b 라는 이터레이터 프로토콜을 통해 순회함.
*이터레이터 프로토콜 = 이터러블한 객체들을 순회할 때 쓰이는 규칙
*이터러블한 객체 = 반복 가능한 객체로 배열을 일반화한 객체
노출모듈 패턴
즉시 실행 함수를 통해 private, public 같은 접근 제어자를 만드는 패턴. 자바스크립트는 private, public 같은 접근 제어자가 존재하지 않고 전역 범위에서 스크립트가 실행됨. 따라서 노출모듈 패턴을 통해 이와 같은 접근 제어자를 구현하기도 함.
*public : 클래스에 정의된 함수에서 접근 가능하며 자식 클래스와 외부 클래스에서 접근 가능한 범위
*protected : 클래스에 정의된 함수에서 접근 가능, 자식 클래스에서 접근 가능하지만 외부 클래스에서 접근 불가능한 범위
*private : 클래스에서 정의된 함수에서 접근 가능하지만 자식 클래스와 외부 클래스에서 접근 불가능한 범위
*즉시 실행 함수 : 함수를 정의하자마자 바로 호출하는 함수, 초기화 코드, 라이브러리 내 전역 변수의 충돌 방지 등에 사용.
MVC 패턴
모델, 뷰, 컨트롤러로 이루어진 디자인 패턴. 애플리케이션의 구성 요소를 분리함으로써 각각의 구성 요소에만 집중해서 개발 가능. 따라서 재사용성과 확장성이 용이하다는 장점이 있는 반면 애플리케이션이 복잡해질수록 모델과 뷰의 관계가 복잡해지는 단점이 있음.
모델
애플리케이션의 데이터인 데이터베이스, 상수, 변수 등을 뜻함. 뷰에서 데이터를 생성하거나 수정하면 컨트롤러를 통해 모델을 생성하거나 갱신함.
뷰
사용자 인터페이스 요소를 나타냄. 모델이 가지고 있는 정보를 따로 저장하지 않아야 하며 화면에 표시하는 정보만 가지고 있어야 함.
컨트롤러
하나 이상의 모델과 하나 이상의 뷰를 잇는 다리 역할을 하며 이벤트 등 메인 로직을 담당. 모델과 뷰의 생명주기도 관리하고 모델이나 뷰의 변경 통지를 받으면 이를 해석하여 각각의 구성 요소에 해당 내용에 대해 알려줌.
MVC 패턴의 예: 리액트
가상 DOM을 사용하여 실제 DOM 을 조작하는 것을 추상화하여 성능을 높임. 대표적인 특성으로는 불변성(immutable)이 있음. (ex. state 는 setState 를 통해서만 수정 가능, props 를 기반으로 만들어지는 컴포넌트인 pureComponent 가 있음.) 단방향 바인딩이 적용되어 있고 잦유도가 높음.
MVP 패턴
MVC 패턴으로부터 파생되었으며 컨트롤러가 프레젠터로 교체된 패턴임. 뷰와 프레젠터는 일대일 관계이므로 MVC 패턴보다 더 강한 결합을 지닌 디자인 패턴임. 뷰와 프레젠터는 일대일 관계이므로 MVC 패턴보다 더 강한 결합을 지님.
MVVM 패턴
MVC 의 컨트롤러가 뷰모델로 바뀐 패턴. 뷰모델은 뷰를 더 추상화한 계층이며 커맨드와 데이터 바인딩을 가지는 것이 특징. 뷰와 뷰 모델 사이의 양방향 데이터 바인딩을 지원하며 UI 를 별도의 코드 수정 없이 재사용할 수 있고 단위 테스팅하기 쉽다는 장점이 있음.
대표 예: Vue.js
반응형이 특징인 프런트엔드 프레임워크로 함수를 사용하지 않고 값 대입만으로 변수가 변경되며 양방향 바인딩, html 을 토대로 컴포넌트를 구축할 수 있다는 점이 특징.
*커맨드 : 여러 가지 요소에 대한 처리를 하나의 액션으로 처리할 수 있게 하는 기법
*데이터 바인딩 : 화면에 보이는 데이터와 웹 브라우저의 메모리 데이터를 일치시키는 기법으로 뷰 모델을 변경하면 뷰가 변경됨.
프로그래밍 패러다임
프로그래머에게 프로그래밍의 관점을 갖게 해주는 역할을 하는 개발 방법론. 크게 선언형, 명령형으로 나누며 선언형은 함수형이라는 하위집합을 갖고 명령형은 다시 객체지향 절차지향으로 나눔.
선언형과 함수형 프로그래밍
선언형 프로그래밍은 무엇을 풀어내는가에 집중하는 패러다임, 함수형 프로그래밍은 작은 순수 함수들을 블록처럼 쌓아 로직을 구현하고 고차 함수를 통해 재사용성을 높인 프로그래밍 패러다임. 자바스크립트는 단순, 유연한 언어이며 함수가 일급 객체이므로 객체지향 보다는 함수형 프로그래밍이 선호됨.
*순수 함수
출력이 입력에만 의존하는 것을 의미
*고차 함수
함수가 함수를 값처럼 매겨변수로 받아 로직을 생성할 수 있는 것
*일급 객체
고차 함수를 쓰기 위해서는 해당 언어가 일급 객체라는 특징을 가져야 하며 그 특징은 1. 변수나 메서드에 함수를 할당할 수 있다. 2. 함수 안에 함수를 매개변수로 담을 수 있다. 3. 함수가 함수를 반환할 수 있다.
객체지향 프로그래밍
객체들의 집합으로 프로그래밍의 상호 작용을 표현하며 데이터를 객체로 취급하여 객체 내부에 선언된 메서드를 활용하는 방식
특징
1. 추상화
복잡한 시스템으로부터 핵심을 간추리는 것
2. 캡슐화
객체의 속성과 메소드를 하나로 묶고 일부를 은닉하는 것
3. 상속성
상위 클래스의 특성을 하위 클래스가 이어받아서 재사용하거나 추가, 확장하는 것
4. 다형성
하나의 메서드나 클래스가 다양한 방법으로 동작하는 것. 오버로딩, 오버라이딩이 있음.
오버로딩
같은 이름을 가진 메서드를 여러 개 두는 것. 메서드의 타입, 매개변수의 유형, 개수 등으로 여러 개 둘 수 잇음. 컴파일 중에 발생하는 정적 다형성임.
오버라이딩
메서드 오버라이딩을 말하며 상위 클래스로부터 상속받은 메서드를 하위 클래스가 재정의하는 것을 의미. 런타임 중에 발생하는 동적 다형성
설계 원칙 -> 객체지향 프로그래밍을 설계할 때는 SOLID 원칙을 지켜주어야 함.
S 단일 책임 원칙
모든 클래스는 각각 하나의 책임만 가져야 하는 원칙
O 개방-폐쇄 원칙
기존의 코드는 잘 변경하지 않으면서도 확장은 쉽게 할 수 있어야 함
L 리스코프 치환 원칙
부모 객체에 자식 객체를 넣어도 시스템이 돌아가게 만들어야 함
I 인터페이스 분리 원칙
하나의 일반적인 인터페이스보다 구체적인 여러 개의 인터페이스 만들기
D 의존 역전 원칙
자신보다 변하기 쉬운 것에 의존하던 것을 추상화된 인터페이스나 상위 클래스를 두어 변하기 쉬운 것의 변화에 영향을 받지 않게 하는 원칙
즉 상위 계층은 하위 계층의 변화에 대한 구현으로부터 독립해야 함.
절차형 프로그래밍
로직이 수행되어야 할 연속적인 계산 과정으로 이루어져 있음. 코드의 가독성이 좋으며 실행 속도 빠름. 그렇기에 계산 많은 작업에 쓰임. 단점은 모듈화가 어렵고 유지 보수성이 떨어짐.
여러 패러다임을 조합하여 상황과 맥락에 따라 패러다임 간의 장점만 취해 개발하는 것이 좋음.
네트워크
노드와 링크가 서로 연결되어 있거나 연결되어 있지 않은 집합체
노드 = 서버, 라우터, 스위치 등 네트워크 장치를 의미하고 링크는 유선 또는 무선을 의미
좋은 네트워크 = 많은 처리량을 처리할 수 있으며 지연 시간이 짧고 장애 빈도가 적으며 좋은 보안을 갖춘 네트워크
처리량
링크를 통해 전달되는 단위 시간당 데이터양
단위로는 bps 를 쓴다. 초당 전송 또는 수신되는 비트 수라는 의미
처리량은 사용자들이 많이 접속할 때마다 커지는 트래픽, 네트워크 장치 간의 대역폭, 네트워크 중간에 발생하는 에러, 장치의 하드웨어 스펙에 영향을 받음.
지연 시간
요청이 처리되는 시간, 어떤 메시지가 두 장치 사이를 왕복하는 데 걸린 시간
네트워크 토폴로지
노드와 링크가 어떻게 배치되어 있는지에 대한 방식이자 연결 형태
트리 토폴로지
노드의 추가, 삭제가 쉬우며 특정 노드에 트래픽이 집중될 때 하위 노드에 영향 끼칠 수 있음
버스 토폴로지
중앙 통신 회선 하나에 여러 개의 노드가 연결됨. 근거리 통신망(LAN)에서ㅓ 사용. 서리 비용이 적고 신뢰성이 우수. 노드 추가 삭제 쉬움. but 스푸핑이 가능함.
스푸핑
올바르게 수신부에 가야 할 패킷이 악의적인 노드에 전달됨. LAN 상에서 송신부의 패킷을 송신과 관련 없는 다른 호스트에 가지 않도록 하는 스위칭 기능을 마비시키거나 속여서 특정 노드에 해당 패킷이 오도록 처리
스타 토폴로지
중앙에 잇는 노드에 모두 연결된 형태. 노드 추가 에러 탐지 쉽고 패킷의 충돌 가능성 적음. 장애 노드가 중앙 노드가 아닐 경우 다른 노드에 영향을 끼치는 것이 적지만 중앙노드에 장애가 발생할 경우 전체 네트워크 사용 불가 및 설치 비용 고가
링형 토폴로지
각각의 노드가 양 옆의 두 노드와 연결된 방식. 노드 수가 증가되어도 네트워크상의 손실 거의 없고 충돌 발생 가능성 적고 노드의 고장 발견쉬움. 그러나 네트워크 구성 변경 어렵고 회선에 장애 발생 시 네트워크 전체에 영향 크게 끼침
메시 토폴로지
그물망처럼 연결. 한 단말 장치에 장애 발생해도 네트워크 사용 가능. 트래픽 분산 처리 가능. but 노드 추가 어렵고 구축 및 운용 비용 고가
병목 현상
토폴로지가 중요한 이유 = 병목 현상을 찾을 때 중요한 기준이므로
전체 시스템이의 성능이나 용량이 하나의 구성 요소로 인해 제한을 받는 현상
네트워크 분류
규모 기반의 분류. 개인 소유 가능한 규모의 LAN, 서울시 등 시 규모인 MAN, 세계 규모인 WAN
LAN
근거리 통신망을 의미, 전송 속도가 빠르고 혼잡하지 않음.
네트워크 병목 현상의 주 원인
1. 네트워크 대역폭
2. 네트워크 토폴로지
3. 서버 CPU, 메모리 사용량
4. 비효율적인 네트워크 구성
네트워크 성능 분석 명령어들
ping
해당 노드의 패킷 수신 상태와 도달하기까지의 시간 등을 알 수 있으며 해당 노드까지 네트워크가 잘 연결되어 있는지 확인 가능
netstat
접속되어 있는 서비스들의 네트워크 상태 표시. 주로 서비스의 포트가 열려 있는지 확인할 때 씀
nslookup
DNS 관련 내용 확인 시 사용. 특정 도메인에 매핑된 IP 확인하기 위해 사용.
tracert
목적지 노드까지 네트워크 경로를 확인할 때 사용하는 ㄴ명령어. 목적지 노드까지 구간들 중 어느 구간에서 응답시간이 느려지는 지 등을 확인 가능
네트워크 프로토콜 = 다른 장치들끼리 데이터를 주고받기 위해 설정된 공통된 인터페이스
인터넷 프로토콜 스위트 = 인터넷에서 컴퓨터들이 서로 정보를 주고받는 데 쓰이는 프로토콜의 집합, TCP/IP 4계층 모델은 네트워크에서 사용되는 통신 프로토콜의 집합으로 계층들은 프로토콜의 네트워킹 범위에 따라 네 개의 추상화 계층으로 구성됨
계층 구조는 4가지, 애플리케이션 계층, 전송 계층, 인터넷 계층, 링크 계층
애플리케이션 계층
응용 프로그램이 사용되는 프로토콜 계층, 서비스를 실질적으로 사람들에게 제공하는 층
전송 계층
애플리케이션과 인터넷 계층 사이의 데이터가 전달될 때의 중계 역할.
TCP, UDP가 대표적.
TCP
패킷 사이의 순서를 보장하고 연결지향 프로토콜을 사용해서 연결을 하여 신뢰성을 구축해서 수신 여부를 확인하며 가상회선 패킷 교환 방식을 사용
UDP
순서를 보장하지 않고 수신 여부를 확인하지 않으며 단순히 데이터만 주는 데이터그램 패킷 교환 방식 사용.
인터넷 계층
장치로부터 받은 네트워크 패킷을 ip 주소로 지정된 목적지로 전송하기 위해 사용되는 계층. 패킷을 수신해야 할 상대의 주소를 지정하여 데이터 전달. 상대방이 제대로 받았는지에 대해 보장하지 않음
링크 계층
실질적으로 데이터를 전달하며 장치 간에 신호를 주고받는 규칙을 정하는 계층.
유선 LAN
전이중화 통신을 사용. 전이중화 통신 = 양쪽 장치가 동시에 송수신할 수 있는 방식
유선 LAN 을 이루는 케이블들
트위스트 페어 케이블
광섬유 케이블 -> 레이저를 이용해서 통신. 100Gbps 의 데이터를 전송함. 빛의 굴절을 이용해 전진시킴
무선 LAN
반이중화 통신을 사용함. 반이중화 통신 = 양쪽 장치는 서로 통신할 수 있지만, 동시에 통신할 수 없으며 한 번에 한 방향만 통실할 수 있는 방식. 충돌 방지 시스템 필요.
CSMA/CA 는 반이중화 통신 중 하나로 장치에서 떼이터를 보내기 전에 캐리어 감지 등으로 사전에 충돌 방지
무선 LAN 을 이루는 주파수
2.4GHz 또는 5GHz 대역 중 하나를 써서 구축. 보통은 5를 사용하는 것이 좋음
와이파이
전자기기들이 무선 LAN 신호에 연결할 수 있게 하는 기술, 무선 접속 장치, 공유기가 있어야 함. 이를 통해 유선 LAN 에 흐르는 신호를 무선 LAN 신호로 바꿔주어 신호가 닿는 범위 내에서 무선 인터넷 사용 가능.
BSS
기본 서비스 집합을 의미. 동일 BSS 내에 있는 AP들과 장치들이 서로 통신이 가능한 구조를 말함. 하나의 AP 만을 기반으로 하므로 사용자가 이동하며 네트워크에 접속하는 것은 불가함.
ESS
하나 이상 연결된 BSS 그룹. 장거리 무선 통신을 제공하며 BSS 보다 더 많은 가용성과 이동성을 지원.
캡슐화 과정
상위 계층의 헤더와 데이터를 하위 계층의 데이터 부분에 포함시키고 해당 계층의 헤더를 삽입하는 과정
애플리케이션 계층의 데이터가전송 계층으로 전달되면서 세그먼트 또는 데이터그램화 되며 TCP헤더가 붙게 됨. 그 이후 인터넷 계층으로 가면서 IP 헤더가 붙여지게 되며 패킷화가 되고 이후 링크 계층으로 전달되며 프레임 헤더와 프레임 트레일러가 붙어 프레임화가 됨.
비캡슐화 과정
하위 계층에서 상위 계층으로 가며 각 계층의 헤더 부분을 제거. 그 후 최종적으로 사용자에게 애플리케이션의 PDU인 메시지로 전달됨.
PDU 네트워크의 어떤 계층에서 계층으로 데이터가 전달될 때 한 덩어리의 단위. 제어 관련 정보들이 포함된 헤더, 데이터를 의미하는 페이로드로 구성되어 있으며 계층마다 부르는 명칭이 다름
애플리케이션 계층: 메시지
전송 계층: 세그먼트, 데이터그램
인터넷 계층: 패킷
링크 계층: 프레임, 비트
네트워크 기기의 처리 범위
상위 계층을 처리하는 기기는 하위 계층을 처리할 수 있지만 그 반대는 불가함.
애플리케이션 계층: L7 스위치
인터넷 계층: 라우터, L3 스위치
데이터 링크 계층: 브리지, L2 스위치
물리 계층: NIC, 리피터, AP
L7 스위치
스위치는 여러 장비를 연결하고 데이터 통신을 중재하며 목적지가 연결된 포트로만 전기 신호를 보내 데이터를 전송하는 통신 네트워크 장비.
L7 은 로드밸런서라고도 하며 서버의 부하를 분산하는 기기. 클라이언트로부터 오는 요청들을 뒤쪽의 여러 서버로 나누는 역할, 시스템이 처리할 수 있는 트래픽 증가를 목표로 함. 정기적으로 헬스 체크를 이용하여 감시하며 장애가 발생한 서버를 트래픽 분산 대상에서 제외함.
헬스 체크
전송 주기와 재전송 횟수를 설정한 이후 반복적으로 서버에 요청을 보내는 것을 말함. 이 요청이 정상적으로 이루어졌다면 정상 서버로 판단.
로드밸런서의 대표적인 기능 = 서버 이중화. 2대 이상의 서버를 기반으로 가상 IP 를 제공하고 이를 기반으로 안정적인 서비스를 제공
'면접을 위한 CS 전공지식 노트' 카테고리의 다른 글
2022.07.23 (0) | 2022.07.24 |
---|---|
2022.07.15 (0) | 2022.07.16 |
2022.07.11 (0) | 2022.07.12 |
댓글