πŸŽ„ μ„±μž₯일지 3.1

μ±… ν–‰λ³΅ν•œ 이기주의자(웨인 닀이어)의 λ‚΄μš©μ— μžκ·Ήλ°›μ•„ μ‹œμž‘ν•˜λŠ” μ†Œλ°•ν•œ μ„±μž₯기둝

μ‚΄μ•„μžˆλŠ” 꽃과 죽은 꽃은 μ–΄λ–»κ²Œ κ΅¬λ³„ν•˜λŠ”κ°€?
μ„±μž₯ν•˜κ³  μžˆλŠ” 것이 μ‚΄μ•„ μžˆλŠ” 것이닀.
생λͺ…μ˜ μœ μΌν•œ μ¦κ±°λŠ” μ„±μž₯이닀!

🌳 ν‚€μ›Œλ“œ (1.0)
μ΅œλŒ€ν•œ κ°„λ‹¨ν•˜κ²Œ 정리, 좔후에 λ³΄λ©΄μ„œ 슀슀둜 μ„€λͺ…
πŸ‰ κ²½ν—˜ μœ„μ£Όλ‘œ (2.0)
λ‹¨μˆœ 정보λ₯Ό μ „λ‹¬ν•˜κΈ°λ³΄λ‹€ 무엇을 λ°°μ› κ³  μ–΄λ–»κ²Œ ν•΄κ²°ν–ˆλŠ”μ§€ 짧고 κ°„λ‹¨ν•˜κ²Œ μž‘μ„±
❄️ 정해진 ν…œν”Œλ¦Ώμ— λ§žμΆ°μ„œ (3.0)
ν‚€μ›Œλ“œ, κ²½ν—˜ λͺ¨λ‘ μ’‹λ‹€. λ‹€λ§Œ 맀일 μž‘μ„±ν•˜κΈ°λ‘œ 마음 λ¨Ήμ€λ§ŒνΌ ν•΅μ‹¬λ§Œ κ°„κ²°ν•˜κ²Œ 정리할 수 있게 ν…œν”Œλ¦Ώμ„ μž‘μ„± (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λ₯Ό ν†΅ν•΄μ„œ λ‚΄κ°€ 보낸 μš”μ²­μ— λŒ€ν•œ νŒ¨ν‚·μ„ 각 κ³„μΈ΅μ—μ„œ λ³Ό 수 μžˆλŠ” 게 μ‹ κΈ°ν–ˆλ‹€.
μ „λ°˜μ μœΌλ‘œ csκ°€ 생각보닀 μž¬λ―Έμžˆμ§€λ§Œ, κ·Έ μ€‘μ—μ„œ λ„€νŠΈμ›Œν¬κ°€ μ§„μ§œ 제일 μž¬λ―Έμžˆλ‹€. ν‹ˆν‹ˆνžˆ λ„€νŠΈμ›Œν¬λ₯Ό 깊게 κ³΅λΆ€ν•˜κ³  싢은 μš•μ‹¬μ΄ 생긴닀!!!

였늘의 μž˜ν•œ 점

  • λͺ©ν‘œν•œλ§ŒνΌ λ―Έμ…˜ ν•΄κ²°, κ°œλ… 곡뢀 λ‹€ μ±™κΈ΄ 점
  • 였늘 개인적인 일정이 μžˆμ–΄ λ°”μœ 와쀑에도 밀도 있게 κ³΅λΆ€ν•œ 점

였늘의 μ•„μ‰¬μš΄ 점

  • 쑰금 λ¬΄λ¦¬ν•˜κ²Œ μž‘μ€ κ³„νšμ΄κΈ΄ ν–ˆμ§€λ§Œ, http κ°•μ˜λ₯Ό κ³„νšλ³΄λ‹€ μͺΌκΈˆ 덜 듀은 게 아쉽닀.