컴퓨터 공학 - 핵심 내용 정리

2021. 11. 26. 18:39·SE Bootcamp 내용 정리

컴퓨터 공학 - 핵심 내용

컴퓨터 공학 내용은 기술 면접에서 자주 물어보는 내용이니 잘 숙지해 두자

utf-8과 utf-16의 차이점

가장 큰 차이는 용량의 차이가 있다

  • utf-8은 1~4byte
    → 일반적으로 utf-8을 쓴다
  • utf-16은 2byte 또는 4byte

그래픽(이미지)

  • 비트맵: 픽셀 기반. 초기 로딩 시 라이트하다(가볍다)
    → 사용 프로그램 예: 포토샵
    → 비트맵은 확대시 그래픽이 깨지는 현상이 존재(엘리어싱)
    → 이를 보완하는 기술적 옵션인 그래픽 카드의 안티엘리어싱 옵션을 생각하면 편함
  • 벡터: 시작점과 (끝점)을 가지고 선을 그어낸 shape 방식. 수학적 계산이 들어가므로, 초기 로딩이 무겁다
    → 사용 프로그램 예: 일러스트레이터

운영체제(os)

크게 2가지 부분으로 나눌 수 있다

  • 하드웨어의 기능 관리
  • 사용자들이 응용 프로그램(user programs)을 실행할 수 있게 환경 제공(user interface)
  • javascript(react) 작동 구조?
    운영체제 위에서 돌아가는 것이 아니라, 리액트는 웹 브라우저 위에서 돌아간다(운영체제를 신경 쓸 필요 없이, 웹 브라우저를 신경 써야 한다)
    브라우저가 코드를 실행하는 개념(브라우저는 이게 없어도 잘 실행되고, 코드가 있으면 그냥 실행하는 것)
  • node.js 작동 구조?
    Node.js는 크롬의 v8엔진에서 돌아감
    node.js 코드를 설계도 삼아 v8엔진이 돌아간다
    코드가 엔진을 실행하는 개념(v8엔진이 코드에 따라 동작하는 것)

 

웹 브라우저에서 javascript 코드를 짤 때와 node.js에서 javascript 코드를 짤 때는 생각할 부분이 다르다는 것을 유념!

cf.) c언어 같은 경우는 응용 프로그램 자체를 짜는 것이라 os에 따라 다르게 짜야한다(os를 생각해야 한다)
위의 그림에서 응용프로그램- os - 하드웨어 구조만 있다고 생각하면 됨

프로세스, 스레드

프로세스는 하나의 공장이고, 스레드는 공장에서 일하는 노동자라고 생각하면 이해가 쉽다

스레드, 멀티 스레드, 비동기

개발자 입장에서 스레드를 생각하지 않고 작성해도 컴퓨터가 멀티 스레드로 돌아가게 자동화시켜 주는 것이 비동기라고 보면 된다
→ 개발자는 코드로 비동기 로 실행해라 라고 짜기만 하면 된다

쿼드 코어 8쓰레드?

실질적으로는 한개의 코어는 무조건 1개의 쓰레드밖에 사용 못한다
→ 엄청 빠르게 context switching을 해서 마치, 동시에 2개의 쓰레드를 쓰는 것처럼 보이는것
(그림자 분신술; 하이퍼스레딩 기술)

자바스크립트는 싱글 스레드 프로그램이다

node.js는 event loop(호출 스택)는 싱글 스레드로 작동하지만, worker pool(백 그라운드의 워커 스레드)은 멀티 스레드로 작동한다
→ node.js의 초기화와 callback은 Event loop라는 하나의 프로세스, 하나의 스레드에서 작동되지만 I/O intensive, CPU intensive한 모듈은 Worker pool에서 작동한다

→ 개발자가 건드릴 수 있는 부분은 event loop(호출 스택) 부분뿐으로 이것은 싱글 스레드로 작동함
→ 나머지 부분은 node.js가 판단

 

호출 스택, 백그라운드, 테스크 큐, 마이크로 큐의 개념도 알면 좋다

메모리

메모리는 크게 stack과 heap으로 나눠져 있다고 생각하면 된다
stack은 말그대로 자료구조처럼 구조가 같다(FILO)

  • 참조란?
let a = 10;

a라는 변수는 stack에 저장되고, 10이라는 값은 heap에 저장된다
a에게 10의 주소값을 줌
→ a가 10이라는 데이터를 참조했다

 

만약 a를 더 이상 사용 안하면, 컴퓨터는 stack에서 a를 삭제한다
그런데, 이제 heap 에서는 10을 안 쓰는데 남아 있다
→ heap 영역에서 아무도 사용하지 않는 쓰레기값; 가비지

 

heap 영역에서 주기적으로 가비지를 제거해 주는 것이 필요하다
→ 가비지 컬렉션

가비지 컬렉션(gc)

gc는 비주기적으로 발생한다(사람이 제어x)
→ gc가 작동하면 프로그램이 멈춘다
→ 즉, gc의 기간이 오래 걸리면, 컴퓨터가 오래 멈춘거처럼 보이는 것
→ 최적화를 위해서는 gc의 지속 시간이 적게 되도록 해야 한다(gc의 횟수는 지멋대로다 컨트롤이x)

캐시

딱 교체가 필요한 데이터만 빠르게 갈아끼우는 데 유용하다(중복된 데이터는 캐시가 임시저장 중)
→ 서버로부터 다시 받아올 필요가 없는 데이터는 캐시가 가지고 있으면 됨

 

캐시는 별도의 추상화된 객체를 이용하면 쉽게 쓸 수 있다(cache 메소드)

캐시의 단점

클라이언트에 저장하므로 → 보안에 취약
그러므로 캐시를 잘 관리해 줘야 한다

vs. 쿠키?

가장 큰 차이는 서버에서 조회되느냐에 차이

 

물리적으로 저장되는 공간은 같으나, 관리 주체가 다르다
캐시는 서버에서 조회되지 않는다(응용 프로그램에서 관리)
쿠키는 프로토콜로서 http 통신할 때 오가는 데이터. 서버가 조회할 수 있다

저작자표시 (새창열림)

'SE Bootcamp 내용 정리' 카테고리의 다른 글

Git - 브랜치(branch) 관리와 그 외 다양한 명령어  (0) 2021.11.30
네트워크 - 심화(프로토콜 계층, HTTP 헤더, 웹 캐시)  (0) 2021.11.30
컴퓨터 공학 - 기초  (0) 2021.11.26
인증/보안 - OAuth 인증 구현  (0) 2021.11.26
인증/보안 - 기초 2: CSRF, Token  (0) 2021.11.25
'SE Bootcamp 내용 정리' 카테고리의 다른 글
  • Git - 브랜치(branch) 관리와 그 외 다양한 명령어
  • 네트워크 - 심화(프로토콜 계층, HTTP 헤더, 웹 캐시)
  • 컴퓨터 공학 - 기초
  • 인증/보안 - OAuth 인증 구현
레실이
레실이
  • 레실이
    레실이의 티스토리
    레실이
  • 전체
    오늘
    어제
    • 분류 전체보기 (87)
      • SE Bootcamp 내용 정리 (63)
      • 알고리즘 연습 (7)
      • Project 주저리 (4)
      • 기술 면접 source (3)
      • 개발 일상 (8)
      • 생성 AI 활용 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    state
    node
    데이터베이스
    중복 순열
    ORM
    Linux
    CSR
    ubuntu
    PickAndDrink
    mongoDB
    node.js
    useRef
    JS
    객체
    CSS
    fastapi
    자료구조
    JavaScript
    MVC
    인증/보안
    Ajax
    CORS
    useState
    알고리즘
    DOM
    Python
    promise
    IT
    react
    문자열
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
레실이
컴퓨터 공학 - 핵심 내용 정리
상단으로

티스토리툴바