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

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

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

🌳 ν‚€μ›Œλ“œ (1.0)
μ΅œλŒ€ν•œ κ°„λ‹¨ν•˜κ²Œ 정리, 좔후에 λ³΄λ©΄μ„œ 슀슀둜 μ„€λͺ…
πŸ‰ κ²½ν—˜ μœ„μ£Όλ‘œ (2.0)
λ‹¨μˆœ 정보λ₯Ό μ „λ‹¬ν•˜κΈ°λ³΄λ‹€ 무엇을 λ°°μ› κ³  μ–΄λ–»κ²Œ ν•΄κ²°ν–ˆλŠ”μ§€ 짧고 κ°„λ‹¨ν•˜κ²Œ μž‘μ„±
❄️ 정해진 ν…œν”Œλ¦Ώμ— λ§žμΆ°μ„œ (3.0)
ν‚€μ›Œλ“œ, κ²½ν—˜ λͺ¨λ‘ μ’‹λ‹€. λ‹€λ§Œ 맀일 μž‘μ„±ν•˜κΈ°λ‘œ 마음 λ¨Ήμ€λ§ŒνΌ ν•΅μ‹¬λ§Œ κ°„κ²°ν•˜κ²Œ 정리할 수 있게 ν…œν”Œλ¦Ώμ„ μž‘μ„± (3.1) 230102λΆ€ν„° μ‹œμž‘λ˜λŠ” ν•™μŠ΅μ— κ΄€ν•œ λ‚΄μš© μΆ”κ°€

πŸ”‘ 였늘의 ν‚€μ›Œλ“œ

Storage, Memory, CPU

  • Storage: λ””μŠ€μΌ“, CD, HDD, SDD와 같은 μ €μž₯μ†Œ. μš©λŸ‰μ΄ 크고 비ꡐ적 가격이 μ‹Έλ‹€. 자료λ₯Ό μ €μž₯ν•˜λŠ” μš©λ„. 컴퓨터λ₯Ό 꺼도 λ‚¨μ•„μžˆλ‹€.
  • Memory: ν”νžˆ RAM이라고 λΆ€λ₯΄λŠ” λ©”λͺ¨λ¦¬. μš©λŸ‰μ΄ μž‘κ³  컴퓨터λ₯Ό μ’…λ£Œν•˜λ©΄ 데이터가 사라진닀. 데이터λ₯Ό λΉ λ₯΄κ²Œ μš΄λ°˜ν•  수 μžˆλ‹€.(κ°€μ Έμ˜¬ 수 μžˆλ‹€.)
  • CPU: μ€‘μ•™μ²˜λ¦¬μž₯치. 데이터λ₯Ό μ²˜λ¦¬ν•˜λŠ” 속도가 κ°€μž₯ λΉ λ₯΄λ‹€.

κ·Έλ ‡κΈ° λ•Œλ¬Έμ— Storage -> Memory -> CPU μˆœμ„œλ‘œ 데이터λ₯Ό μš΄λ°˜ν•˜κ²Œ λœλ‹€.(μ €μž₯μ†Œ -> λΉ λ₯Έ μš΄λ°˜μ±… -> λΉ λ₯Έ μ²˜λ¦¬μ†Œ) 자료 ꡬ쑰의 κ°€μž₯ μ€‘μš”ν•œ λ―Έμ…˜μ€ Memory μ‚¬μš©μ„ μ€„μ΄λŠ” 것이닀.

  • 각각의 μ£Όμ†Œ(데이터가 μ €μž₯λ˜μ–΄μžˆλŠ”)에 μ ‘κ·Όν•˜λŠ” κ±Έλ¦¬λŠ” μ‹œκ°„μ΄ λ™μΌν•œ λ©”λͺ¨λ¦¬λ₯Ό RAM(Random Access Memory)라고 ν•œλ‹€.
    • 즉, μ£Όμ†Œλ§Œ μ•ˆλ‹€λ©΄ μ›ν•˜λŠ” 데이터λ₯Ό λΉ λ₯΄κ²Œ κ°€μ Έμ˜¬ 수 μžˆλ‹€.

Array, Array List, Linked List

  • Array(λ°°μ—΄)
    • indexλ₯Ό 톡해 value에 μ ‘κ·Όν•œλ‹€.
    • λ°°μ—΄ κ°€μš΄λ°μ˜ μ›μ†Œκ°€ μ‚­μ œλ˜λ©΄ null값이 λœλ‹€.
    • indexλ₯Ό ν†΅ν•œ 탐색 μ‹œ, O(1)
  • Array List(연속 λ°°μ—΄, 연속 리슀트)
    • 각각의 데이터가 μ—°μ†λœ λ©”λͺ¨λ¦¬ μ£Όμ†Œμ— λ‚˜μ—΄λ˜μ–΄ μ €μž₯λœλ‹€.
    • indexλ₯Ό 톡해 value에 μ ‘κ·Όν•œλ‹€.
    • λ°°μ—΄ κ°€μš΄λ°μ˜ μ›μ†Œκ°€ μ‚­μ œλ˜λ©΄ λ’€μ˜ μ›μ†Œκ°€ ν•œ μΉΈ 당겨진닀. -> μ‚½μž…/μ‚­μ œ μ‹œ 각 μ›μ†Œκ°€ μ΄λ™ν•˜λ―€λ‘œ νš¨μœ¨μ μ΄μ§€ λͺ»ν•˜λ‹€.
    • 탐색은 μš©μ΄ν•˜μ§€λ§Œ, μ‚½μž…/μ‚­μ œμ˜ νš¨μœ¨μ€ 떨어진닀.(탐색: O(1), μ‚½μž…/μ‚­μ œ: O(n))
  • Linked List(μ—°κ²° 리슀트)
    • 각각의 데이터가 λ©”λͺ¨λ¦¬ 곳곳에 흩어져 있되, 각 데이터가 λ‹€μŒ 데이터에 λŒ€ν•œ 정보λ₯Ό λ‹΄κ³  μžˆμ–΄ μ—°κ²°λ˜μ–΄μžˆλ‹€.
    • 포인터 λΆ€λΆ„(λ‹€μŒ 데이터λ₯Ό κ°€λ¦¬ν‚€λŠ”, μ°Έμ‘°ν•˜λŠ” λΆ€λΆ„)이 ν•„μš”ν•˜κΈ° λ•Œλ¬Έμ— 곡간 νš¨μœ¨μ€ 쒋지 λͺ»ν•˜λ‹€.
    • 탐색은 μ²˜μŒλΆ€ν„° ν•˜λ‚˜ν•˜λ‚˜ 포인터λ₯Ό 톡해 κ°€κΈ° λ•Œλ¬Έμ— νš¨μœ¨μ μ΄μ§€ λͺ»ν•˜μ§€λ§Œ, μ‚½μž…/μ‚­μ œ μ‹œ ν¬μΈν„°λ§Œ μ—°κ²° ν˜Ήμ€ μ œκ±°ν•˜λ©΄ 되기 λ•Œλ¬Έμ— νš¨μœ¨μ μ΄λ‹€.(탐색: O(n), μ‚½μž…/μ‚­μ œ: O(1))

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ λ³€μˆ˜μ˜ λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό 확인할 수 μžˆλŠ”κ°€?

  • κ²°λ‘ : μ•Œ 수 μ—†λ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈ μ–Έμ–΄λŠ” C++둜 λ§Œλ“€μ–΄μ§„ V8엔진을 톡해 νŒŒμ‹±λ˜μ–΄ μ½”λ“œκ°€ ν•΄μ„λœλ‹€.(chrome, nodejs λͺ¨λ‘) 이 λ•Œ, 쀑간에 V8엔진이 κ°œμž…ν•˜κΈ° λ•Œλ¬Έμ— C++처럼 λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό 얻을 수 μ—†λ‹€.

참고둜 C++μ—μ„œ λ³΄μ—¬μ§€λŠ” λ©”λͺ¨λ¦¬ μ£Όμ†Œλ„ μ‹€μ œ 물리적인 λ©”λͺ¨λ¦¬ μ£Όμ†Œκ°€ μ•„λ‹ˆλ‹€. 각 μš΄μ˜μ²΄μ œμ—μ„œ ν• λ‹Ήν•œ 가상 λ©”λͺ¨λ¦¬ μ£Όμ†Œμ΄λ‹€. μΆ”κ°€: 크둬 개발자 λ„κ΅¬μ—μ„œ Memoryλ₯Ό 톡해 확인 κ°€λŠ₯ν•œ μ£Όμ†Œκ°€ μžˆκΈ°λŠ” ν•œλ°, 이게 μ‹€μ œ 물리적인 λ©”λͺ¨λ¦¬μΈμ§€λŠ” ν™•μ‹€μΉ˜ μ•Šλ‹€.(μ•„λ§ˆλ„ μ•„λ‹Œ 것 κ°™λ‹€.)

UUID(Universal Unique IDentifier, λ²”μš© 고유 μ‹λ³„μž)

  • UUID: μ–΄λ–€ 개체(데이터)λ₯Ό κ³ μœ ν•˜κ²Œ μ‹λ³„ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” ν‘œμ€€
  • 주둜 λ„€νŠΈμ›Œν¬ 상 μ„œλ‘œ λͺ¨λ₯΄λŠ” κ°œμ²΄λ“€μ„ μ‹λ³„ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λœλ‹€.
  • μ•„μ£Ό μ—„λ°€νžˆ 따지면 μ™„λ²½ν•˜κ²Œ κ³ μœ μ„±μ„ κ°–μ§€λŠ” μ•Šμ§€λ§Œ, 사싀상 쀑볡될 κ°€λŠ₯성이 거의 μ—†λ‹€κ³  μΈμ •λ˜κΈ° λ•Œλ¬Έμ— 많이 μ‚¬μš©λœλ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ Math.random()은 μ•”ν˜Έν•™μ μœΌλ‘œ μ•ˆμ „ν•œ λ‚œμˆ˜λ₯Ό μƒμ„±ν•˜λŠ” 것이 μ•„λ‹ˆλ‹€. κ·ΈλŸ¬λ―€λ‘œ λ³΄μ•ˆμ΄ μ€‘μš”ν•œ λ‘œμ§μ—μ„œλŠ” μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 게 μ’‹λ‹€.

Web Crypto API

  • λΈŒλΌμš°μ €μ—μ„œ μ‚¬μš©λ°©λ²•
let arr = new Uint32Array(10);
window.crypto.getRandomValues(arr);
// arrκ°€ μ–΄λ–»κ²Œ λ³€ν–ˆλŠ”μ§€ ν™•μΈν•΄λ³΄μž
  • Nodejsμ—μ„œ μ‚¬μš©λ°©λ²•
const getUuid = () => {
  const randomBytes = require('crypto').randomBytes(2);
  const randomNumber = randomBytes.toString('hex');
  return randomNumber;
};
참고 자료

πŸ“ μš”μ•½ 및 ν•˜λ£¨ 간단 회고

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 배열에 λŒ€ν•΄μ„œ 쒀더 깊게 μ•Œ 수 μžˆλŠ” ν•˜λ£¨μ˜€λ‹€. 또, 맀번 Memory에 λŒ€ν•œ κ°œλ…μ„ λ§‰μ—°ν•˜κ²Œλ§Œ κΈ°μ–΅ν•˜κ³  μžˆμ—ˆλŠ”λ° μ˜€λŠ˜μ„ κ³„κΈ°λ‘œ μ’€ ν™•μ‹€νžˆ μ•Œ 것 κ°™λ‹€. 곡뢀할 λ•Œλ§ˆλ‹€ λŠλΌμ§€λ§Œ, κ³΅λΆ€ν• μˆ˜λ‘ 컴퓨터가 μ–΄λ–»κ²Œ λ°œμ „ν•΄μ™”λŠ”μ§€ λŠκ»΄μ§€λŠ” 게 μž¬λ―Έμžˆλ‹€. λ‹Ήμ‹œ μ‚¬λžŒλ“€μ΄ ν•„μš”μ— μ˜ν•΄μ„œ λ‹€μ–‘ν•œ 자료 ꡬ쑰듀을 κ΅¬ν˜„ν•˜κ³  μ•Œκ³ λ¦¬μ¦˜μ„ 생각해내고 λ‚˜μ•„κ°€ ν•˜λ“œμ›¨μ–΄ ꡬ성을 ν•œ 게 μ°Έ μ‹ κΈ°ν•˜λ‹€. κ·Έ λ‹Ήμ‹œμ— ν”„λ‘œκ·Έλž˜λ°μ„ κ³΅λΆ€ν–ˆλ‹€λ©΄, 정말 μƒˆλ‘œμš΄ μ‹œλ„κ°€ λ λ§Œν•œ 것듀이 λ§Žμ„ 것 κ°™λ‹€. μ•„λ§ˆ λ―Έλž˜μ—λŠ” μ§€κΈˆλ„ 정말 정말 λ‹€μ–‘ν•œ κΈ°μˆ λ“€μ΄ μ—†μ—ˆλ˜ μ‹œκΈ°λ‘œ λŠκ»΄μ§€μ§€ μ•Šμ„κΉŒ μ‹Άλ‹€. 계속 더 κ³΅λΆ€ν•˜κ³  배움에 재미λ₯Ό λŠλΌλŠ” κ°œλ°œμžκ°€ 되자!