favicon

Jayden { do: smite }

230216(목)

🎄 성장일지 3.1

행복한 이기주의자(웨인 다이어)의 내용에 자극받아 시작하는 소박한 성장기록

살아있는 꽃과 죽은 꽃은 어떻게 구별하는가?<br/> 성장하고 있는 것이 살아 있는 것이다.<br/> 생명의 유일한 증거는 성장이다!

🌳 키워드 (1.0)<br/> 최대한 간단하게 정리, 추후에 보면서 스스로 설명<br/> 🍉 경험 위주로 (2.0)<br/> 단순 정보를 전달하기보다 무엇을 배웠고 어떻게 해결했는지 짧고 간단하게 작성<br/> ❄️ 정해진 템플릿에 맞춰서 (3.0)<br/> 키워드, 경험 모두 좋다. 다만 매일 작성하기로 마음 먹은만큼 핵심만 간결하게 정리할 수 있게 템플릿을 작성 (3.1) 230102부터 시작되는 학습에 관한 내용 추가

🔑 오늘의 키워드

DNS

  • Domain Name System의 약자
  • 단순하게 우리가 요청한 URI(혹은 URL)에 대해 해당하는 IP 주소를 찾아주는 시스템
  • 사람 이름에 따라 전화번호를 찾을 수 있는 전화번호부와 비슷한 기능을 한다.

Socket

  • 프로세스가 네트워크를 통해 서버로 어떤 요청을 전송할 때, 즉 어떤 응답을 받기 위한 실제적인 창구 역할을 한다.
  • 데이터를 보내거나 받기 위해서는 반드시 소켓을 열어서 데이터를 보내거나 읽어들여야 한다.
  • 프로토콜, IP 주소, 포트 넘버로 정의된다.
  • TCP/IP 4계층에서 응용 계층과 전송 계층 사이에 놓인다.

HTTP

  • HyperText Transform Protocol; 즉, HTML을 교환하기 위한 규칙(표준)
  • 웹 초창기에는 간단한 HTML만을 전달했지만, 이제는 사실상 바이트로 표현되는 모든 데이터(html, css, js, 이미지 등등)을 전달할 수 있다.
  • 버전은 0.9 - 1.0 - 1.1 - 2.0 - 3.0 순서로 발전했으며, 사실상 1.1 버전이 제일 중요하다.(기본적인 스펙들이 많이 갖춰졌다.)
  • 이후 2.0, 3.0은 성능 개선에 초점이 맞춰져있다.(물론 3.0은 TCP가 아닌 UDP 위에서 동작한다는 차별점이 존재한다.)
  • 응용 계층의 프로토콜로 활용된다.
  • 사실상 요즘은 보안이 강화된 HTTPS를 더 많이 사용한다.

Request

  • 클라이언트가 서버에게 보내는 신호
  • 요청을 보낼 때는 요청에 대한 정보를 담아서 서버로 보낸다.
  • 메소드에 따라 크게
    • 'GET': 리소스를 얻는다.
    • 'HEAD': 리소스의 body를 제외한 header, code만 얻는다.
    • 'POST': 특정 데이터를 전송하고 서버에 저장한다.(배열에 push하는 느낌)
    • 'PUT': 서버에 있는 특정 데이터를 통째로 대체한다.
    • 'PATCH': 서버에 있는 특정 데이터의 일부분을 수정한다.
    • 'DELETE': 서버에 있는 특정 데이터를 삭제한다.

TCP/IP 4 Layers

  • TCP/IP 4 계층이라고 부르며 OSI 7 계층 모델을 대체한다.
  • 크게 4개의 계층으로 나눠져 있다.
    • [4] 응용 계층: 주로 앱(프로세스)에 구축되기 때문에 사용자가 상호작용하기 가장 쉬운 계층. HTTP가 응용 계층에 해당.
    • [3] 전송 계층: TCP(Transmission Control Protocol)이 존재, 말 그대로 전송을 담당하는 계층.
      • UDP(User Datagram Protocol)도 존재, TCP보다 단순하고 비교적 안전하게 보호되지 않아도 되는 데이터를 전송한다. ex) 실시간 응용 프로그램
    • [2] 인터넷 계층: IP(Internet Protocol)이 존재, 네트워크 간 데이터 패킷의 전송 관리
    • [1] 데이터 링크 계층: 원하는 기기의 MAC 주소 확인, 이더넷 케이블 및 와이파이를 통해 데이터 전송 관리

OSI 7 Layers

  • OSI 7 계층이라고 부른다.
  • 크게 7개의 계층으로 나눠져 있다.
    • [7] 응용 계층: 이메일, 파일 전송, 사이트 조회 등 어플리케이션에 대한 서비스 제공
    • [6] 표현 계층: 문자 코드, 압축, 암호화 등의 데이터 변환
    • [5] 세션 계층: 세션 체결, 통신 방식 결정
    • [4] 전송 계층: 신뢰할 수 있는 통신 구현
    • [3] 네트워크 계층: 다른 네티워크와 통신하기 위한 경로 설정, 논리 주소 결정
    • [2] 데이터 링크 계층: 네트워크 기기 간 데이터 전송 및 물리 주소 결정
    • [1] 물리 계층: 시스템 간의 물리적인 연결, 전기 신호를 변환 및 제어
  • 현재는 거의 TCP/IP 4 계층 모델을 사용하고 있다.

nodejs - url module

  • string 타입의 url을 파싱해주는 모듈
import { URL } from 'url'; const myURL = new URL('https://jaydenlee1116.github.io/'); console.log(myURL.hostname); console.log(myURL.pathname); // 이 외에도 정말 많은 부분을 파싱해준다.

nodejs - dns module

  • url을 파라미터로 ip를 찾아주는 모듈
async function getIp(host: string): Promise<string> { return new Promise((resolve, reject) => { dns.lookup(host, (err, address, family) => { resolve(address); }); }); }

nodejs - net module

  • nodejs 빌트인 모듈로서, TCP 서버와 클라이언트를 만드는 방법을 제공한다.
  • http, https 모듈을 구현하는데도 사용되며 더 low-level api이다.
// 정말 간단한 예시 const socket = new net.Socket(); socket.connect({ host: ip, port: 80 }, () => { console.log('연결 성공'); console.log(`ip: ${ip}`); });

참고

📝 요약 및 하루 간단 회고

보통 http, https, fetch, axios 등과 같은 응용 계층에서 서버에서 요청을 보내는 모듈(라이브러리)를 사용한다. 오늘은 전송 계층 위에서 socket을 만들고 header를 전달하여 get 요청을 보내는 httpRequest 모듈을 만들어보았다. 그리고 wire shark를 통해서 내가 보낸 요청에 대한 패킷을 각 계층에서 볼 수 있는 게 신기했다.<br/> 전반적으로 cs가 생각보다 재미있지만, 그 중에서 네트워크가 진짜 제일 재미있다. 틈틈히 네트워크를 깊게 공부하고 싶은 욕심이 생긴다!!!

오늘의 잘한 점

  • 목표한만큼 미션 해결, 개념 공부 다 챙긴 점
  • 오늘 개인적인 일정이 있어 바쁜 와중에도 밀도 있게 공부한 점

오늘의 아쉬운 점

  • 조금 무리하게 잡은 계획이긴 했지만, http 강의를 계획보다 쪼금 덜 들은 게 아쉽다.
undefined

Copyright 2023. all rights reserved by Jayden