세그먼트(segment)

영어 뜻 자체로 '분할, 단편, 구분' 등의 의미가 있습니다. 기하학에서는 서로 다른 두 점을 연결하는 가장 짧은 선인 선분입니다. CS에서는 구성 또는 분할의 개념에서 사용하는 기본 단위를 의미합니다. transport layer에서는 교환되는 데이터의 단위를 지칭합니다.

TCP 세그먼트

양 끝단 간 연결된 TCP 세션 내 서로 교환, 전달되는 데이터 단위입니다.

OSI 7 Layer

다른 시간과 다른 장소 간에 언제든지 자유롭게 데이터를 주고받고 통신할 수 있는 것은 네트워크로 연결된 수많은 장비들이 끊임없이 데이터를 전달해주고 있기 때문입니다. 하지만 이 과정은 우리 눈에 보이지 않죠. 이런 데이터 통신 과정을 체계적으로 정리하여 표준화시킨 것을 OSI 7 Layer 라고 합니다.

국제표준화기구(International Standard Organization, ISO)에서 1984년에 발표한 네트워크 표준 모델입니다. 네트워크 통신의 각 과정을 계층별로 구분해서 개념화한 모델이기 때문에, 구간별로 데이터의 움직임을 알기 쉽고 장치 간의 데이터 통신을 설명하는데 유용하게 사용됩니다. 덕분에 통신 과정에서 발생하는 문제의 원인을 추적할 수 있게 되었습니다.

1~4계층은 하위계층, 5~7계층은 상위계층으로 분류되고 상위 계층은 하위계층의 기능을 이어받아 사용합니다.

1. Physical Layer

시스템의 물리적 전기적 표현을 나타내는 계층이며, 케이블, 무선 주파수 링크, 핀, 전압 등의 물리적인 요건을 의미합니다.

데이터 링크 계층에서는 연결된 두 노드 사이에 데이터 전송을 가능하게 하고, 물리 계층에서 발생한 오류를 수정하기도 합니다.

3. Network Layer

네트워크의 핵심인 라우팅의 대부분이 네트워크 계층에서 작동하며, 여러 대의 라우터들을 바탕으로 데이터를 패킷 단위로 쪼개어 전송합니다. 대표적으로 IP(Internet Protocol)이 있습니다.

4. Transport Layer

보내고자 하는 데이터의 용량, 속도, 목적지를 처리해줍니다. 대표적으로 TCP(전송 제어 프로토콜)이 있습니다. TCP가 IP 위에 구축되기 때문에 TCP/IP로 가장 잘 알려져 있습니다.

5. Session Layer

실제 네트워크 연결이 일어나고, 하나의 세션을 열어서 프로세스 간의 통신을 제어하고 통신과정이 진행될 때 동기화를 유지하는 역할을 합니다.

6. Presentation Layer

응용 프로그램 형식을 네트워크 형식으로 변환하거나 반대로도 변환합니다. 응용 프로그램 또는 네트워크를 위해 데이터를 표현해주죠. 대표적으로 데이터를 안전하게 주고받기 위한, '암호화, 복호화' 과정이 여기서 이루어집니다.

7. Application Layer

사용자가 네트워크에 접근할 수 있는 인터페이스를 제공합니다. 크롬 같은 브라우저나 다양한 응용프로그램이 동작합니다. 대표적으로 HTTP, FTP 등이 있습니다.

통신계층별 데이터 단위

Layer 5~7 (Session, Presentation, Application Layer)

메시지, 데이터

Layer 4 (Transport Layer)

세그먼트

Layer 3 (Network Layer)

패킷, 데이터그램

프레임

Layer 1 (Physical Layer)

비트

JavaScript

Immutable Type

'불변성'이란 뜻으로 말 그대로 변하지 않는 성질을 의미합니다. JavaScript에서 한번 생성된 후에는 변경될 수 없는 타입들은 다음과 같습니다. 원시 타입의 데이터들은 변수가 정의되어 처음 할당된 때, 완전히 새로운 값이 만들어져 재할당됩니다.

  • Boolean
  • String
  • Number
  • Null, undefined
  • Symbol

Mutable Type

Immutable Type을 제외한 모든 변수들은 변할 수 있는 객체입니다. 새로운 값을 만들지 않고도 기존의 변수를 대응시키는 것만으로도 변경이 가능합니다.

const

let은 재선언 & 재할당이 가능하지만, const는 불가능합니다. 단, const가 참조값이 한번 할당되고 나면 변할 수 없다는 것을 의미할 뿐이지 참조값 내부에 있는 데이터들은 변경될 수 있습니다. 객체 내부의 재할당까지 const가 제어할 수 없습니다.

변수를 추적

코드 작성 시 불변성을 지켜야만, 사용하는데 데이터가 어디서 어떻게 변경되는지 추적하고 관리할 수 있습니다.

export default

export는 파일 내에서 만든 모듈을 외부로 내보내고자 할 때 사용합니다. 단, 하나의 모듈만 존재할 때는 export default를 사용해서 객체가 하나만 있다는 것을 명확히 보여줄 수 있습니다.

export된 모듈을 다른 파일에서 import해서 사용할 때, 중괄호 없이 모듈 이름 자체를 import하면 전체 모듈 자체를 가져올 수 있고, 중괄호를 써서 특정 모듈 내부의 특정한 객체만 import해서 사용할 수도 있습니다.

순수함수 & 함수형 프로그래밍

순수함수는 side effect를 만들지 않고, 동일한 인자를 주었을 때 항상 같은 값을 리턴하는 함수를 의미합니다. 예를 들어 함수에 전달한 인자 외에 전역 변수를 사용해서, 전역 변수가 변경됨에 따라 리턴값에 영향을 받게 되면 순수함수가 아닙니다. 반대로 함수 내에 전역 변수의 상태 또는 인자의 상태를 변경시키는 로직이 있어도 순수함수가 아닙니다.

그러면 순수함수를 유지하며 외부에서 들어오거나 외부에 있는 변수의 값을 변경하고 싶을 때는 직접 그 상태를 변경하지 말고, 새로운 변수를 선언하고 변수값을 할당하여 사용하면 됩니다.

side effect는 함수로 들어온 인자 상태를 함수가 직접 변경하거나, 함수의 외부의 상태를 변경하는 것을 의미합니다. 사이드 이펙트가 발생한다면, 코드의 동작을 예측하기 어렵고 예상치 못한 버그를 만날 수 있습니다. 따라서 항상 순수함수로 컴포넌트를 만드는 것이 중요합니다.

함수형 프로그래밍은 이런 사이드 이펙트를 없애고 순수 함수를 만들어 모듈화 수준을 높이기 위한 프로그래밍 패러다임입니다.

babel

transpiling

상위 버전의 코드로 작성된 javascript 코드를 하위 버전으로 변환해주는 기능입니다.

preset(기본값, 초기설정)
superset(상위 집합)
prefix(접두사)

yarn, npm, npx

3가지 모두 node 프로젝트에서 설치되어 사용하는 패키지들을 관리하는 툴입니다. npm은 node package manager로 입니다. npx는 execute npm package binaries로 npm에 속해 있는 npm 패키지 실행 도구입니다. npx는 패키지 실행 도구라는 것이 npm과 가장 큰 차이점으로, 해당 패키지를 실행만 되게 해주는 기능이기 때문에 가벼운 것이 특징입니다.

yarn은 npm, npx과는 결이 다른 패키지 관리자로서, 속도와 안정성 면에서는 npm과 비슷하지만 버전을 어디에서나 같게 만들어서 버그를 줄이고 보안성을 높였다는 것이 특징입니다.

nvm

nvm은 node version manager로 여러 버전의 node.js를 설치하고, 버전끼리 쉽게 전환할 수 있도록 도와주는 shell script입니다.

shell script

쉘 스크립트는 unix 커맨드 등을 나열하여 실행하는 것입니다. 언제 어떤 조건으로 어떤 명령을 실행시킬 것인지 등에 대해 .sh 파일에 작성할 수 있습니다.

bash, zsh

shell(쉘)은 리눅스에서 명령어와 프로그램을 실행할 때 사용하는 인터페이스입니다. 이는 커널(kernel)과 사용자 간의 다리 역할을 해주며, 사용자의 명령을 받아 해석하고 프로그램을 실행하는 역할을 합니다.

bash(Bourne Again Shell)는 현재 리눅스의 표준 쉘로, 우분투와 페도라에서도 bash를 사용합니다. sh 쉘(Bourne 쉘)을 기반으로 만들어졌습니다.

zsh도 sh 쉘에서 확장된 버전으로, bash 보다 더 많은 기능이 확장된 쉘입니다. zsh은 현재 MacOS의 기본 쉘이며, bash와 호환되지만, 맞춤법 교정 등의 더 많은 기능을 가지고 있기 때문에 가장 인기를 끄는 최신 쉘이라고 할 수 있습니다.

참조링크

네트워크 통신 계층: OSI 7 계층 바로 알기
자바스크립트에서 불변성(Immutability)이란
순수 함수란? (함수형 프로그래밍의 뿌리, 함수의 부수효과를 없앤다)
Bash, Zsh 및 다른 Linux 쉘의 차이점은 무엇입니까?

profile
Front-end | Web Develop | Computer Science 🧑🏻‍💻

0개의 댓글