Review__[Interview: 질문 정리1]

Jaewon Lee·2021년 3월 16일
2

Review

목록 보기
4/5
post-thumbnail

On.

저번에 면접을 보았던, OOO소프트! (기업명 거론하면 안될 듯;;ㅎ)

기술 면접인줄 모르고 갔다가, 그냥 탈탈탈 털렸던 면접 ㅠㅠㅠㅠㅠ흐엉

물론 평소에도 기본 소양처럼 가지고 있어야 할 지식이지만, 아직 준비 단계였던

나님은 영혼이 쏙 빠졌다고 한다.. 등에 땀 줄줄...껄껄...

그래도 정말정말정말 친절하신 면접관님들이 내가 질문에 대한 답변을 하지 못하면

정말정말정말정말 친절하게 답변도 알려주셔서 너무 감동이었다...이 회사...갖고싶다...ㅎ

하지만 나레기...정말 주옥같은 질문들 몇몇개가 기억이 나질 않음 ㅎ

죽어라죽어 ㅠㅠㅠㅠ 아무튼 기억나는 질문들은 인터뷰 후에, 빠르게 정리했으니

지금 댕쟁 정리해보자!! 다음엔 더 나은 답변을 하는 나레기가 되길 바라며...

😂😂😂😂😂



🌻 Node.js


Q.1) Node.js가 무어야??

Node.js는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임입니다. Node.js는 서버 측 웹 응용 프로그램을 만드는 데 사용됩니다.

Node.js는 비동기식 이벤트 중심 모델을 사용하므로 데이터 집약적인 애플리케이션에 적합합니다. 비디오 스트리밍 사이트와 같은 I/O 집약적인 웹 애플리케이션을 사용할 수 있습니다. 실시간 웹 애플리케이션, 네트워크 애플리케이션, 범용 애플리케이션 및 분산 시스템 개발에도 사용할 수 있습니다.

런타임
특정 언어로 만든 프로그램을 실행할 수 있는 환경.

[참조]
https://medium.com/@vdongbin/node-js-%EB%8F%99%EC%9E%91%EC%9B%90%EB%A6%AC-single-thread-event-driven-non-blocking-i-o-event-loop-ce97e58a8e21


Q.2) javascript 자료형(?)의 종류

1. 기본형: 문자, 숫자, 불린
2. 참조형: 배열, 객체
3. 특수형: null, undefined


Q.3) 함수 선언식과 표현식의 차이가 무야?

1. 함수 선언식: 일반적인 프로그래밍 언어에서의 함수 선언과 비슷한 형식
2. 함수 표현식: 유연한 자바스크립트 언어의 특징을 활용한 선언 방식

함수 선언식은 호이스팅에 영향을 받지만, 함수 표현식은 호이스팅에 영향을 받지 않는다.

P.S. javascript 해석기는 var도 호이스팅을 적용시키기 때문에 위치를 상단으로 끌어올린다.


Q.4) 호이스팅이 무야??

함수 안에 있는 선언들을 모두 끌어올려서 해당 함수 유효 범위의 최상단에 선언하는 것을 말한다.


Q.5) javascript에서 함수는 무엇인가? 객체인가?

javascript에서 함수란, 다른 객체처럼 속성 및 메소드를 가질 수 있기에 일급(first-class) 객체이며 인자를 가질 수 있는 코드 블록이다.


Q.6) javascript에서 array, set, map의 차이점

List

  • 저장 공간이 필요에 의해 자동으로 늘어난다.
  • 순서가 있는 저장공간, 중복을 허용
  • 장점: 가변적이다.
  • 단점: 원하는 데이터가 뒤쪽에 있을 경우 탐색 속도가 낮아짐

Set

  • 집합
  • 순서가 없고, 중복을 허용하지 않는다.
  • 장점: 빠른 속도
  • 단점: 단순 집합의 개념으로 정렬하려면 별도의 처리가 필요

Map

  • key와 value로 나눠서 데이터를 관리
  • 순서가 없음
  • key에 대한 중복은 없으나, value에 대한 중복은 허용.

너무 단편적으로 적어서 뭐가 빠르고 뭐가 좋고, 이런 답변은 좋지 않을 것 같음! 나중에 별도로 더 업데이트 예정.

Q.7) 클로저가 무엇?

클로저는 함수와 그 함수가 선언되었을 때의 렉시컬 환경과의 조합이다!

뭔말인지...모르겠지만! 예를들어 <함수1>과 <함수2>가 있다고 해보자.

<함수2>가 <함수1> 안에 있다고 하면, <함수2>는 자신이 속한 렉시컬 스코프(Global, 함수1, 함수2 스코프)를 참조할 수 있게 되는 것이다!

이러한 <함수2>를 우리는 클로저라고 한다.


Q.8) 객체지향프로그래밍(OOP)가 무어야?

객체 지향 프로그래밍은 컴퓨터 프로그래밍 패러다임중 하나로, 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.

https://jeong-pro.tistory.com/95


Q.9) 인터페이스(interface)가 무엇?!

인터페이스는 쉽게 말하면 껍데기라고 말할 수 있고, 설계도 또는 명세라고 생각하자!

javascript는 인터페이스가 있나....? 없는 것으로 알고있다. interface는 추상화가 들어가야 하는데, js는 추상화를 class로 만들어야하니....흠....이건 따로 조사를 해봐야지...

typescript에서 interface는 객체의 자료형을 명시해줄 수 있어서 위에 밑줄 그어 놓은 것처럼 생각하는 것이 편하지? 않을까 싶다.


Q.10) 추상화 무엇?

불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 공통의 속성이나 기능을 묶어 이름을 붙이는 것이다.

쉽게 풀어보자!
카메라로 예를 들어보자!

우리는 카메라로 사진을 찍을 때, 버튼만 누르면 된다는 것을 알고 있죠~?

사진을 찍을 때, 카메라가 어떻게 동작하는지에 대한 메커니즘은 이해할 필요가 없죠~?

이게 바로 추상화에용~ 사용 설명서대로 카메라를 쓰면되는거에요!

그럼 이제 "카메라=객체"라고 생각해 볼까용~?

우리는 추상화라는 개념 덕분에 객체 내부를 이해할 필요가 없습니다!

그냥 잘~ 쓰면되어욧. 그래서 추상화는 객체지향의 큰 특징중 하나라고 합니다요~~


Q.11) 캡슐화 무엇?

처리하는 함수를 하나로 묶는것이며, 외부로 부터 내부를 감싸 숨기는 은닉화의 개념을 포함한다.


Q.12) 상속 무엇?

부모가 가지고 있는 것을 물려주고, 자식이 물려받는 것!

공통되는 특징을 상속을 통해 쉽게 전달하여 불필요한 코딩을 피할 수 있다.


Q.13) 다형성 무엇?

<다형성>의 말을 풀어보면 <다>(Many) + <형>(Form)의 성질이다.

즉, 같은 성질을 상속받았더라도 경우에 따라 다양한 형태로 표현될 수 있다는 것!


Q.14) 동기 vs 비동기

동기
한번에 하나의 요청을 받아서 처리하고, 처리가 끝나면 다음 요청을 받는 방식

비동기
한번에 여러개의 요청을 받고, 뒤에서 순서에 맞게 처리하여 응답하는 방식


Q.15) 이벤트루프

이벤트 루프는 단일스레드인 javascript에게 <요청에 대한 동시성>을 제공한다. (단일 스레드는 js가 단일호출스택을 사용했을 경우이다.)

⭐️Task Queue와 Event Loop
비동기 처리할 요청들은 Task Queue라는 곳에 저장이 된다.

이벤트 루프는 현재 콜스택에서 실행중인 task가 전부 끝나면, Task Queue에 대기하고 있는 작업들을 순서대로 콜스택에 가져와서 실행시킨다.

새로 알게 된 사실
잘 알려진 대로 Node.js는 비동기 IO를 지원하기 위해 libuv 라이브러리를 사용하며, 이 libuv가 이벤트 루프를 제공한다. 자바스크립트 엔진은 비동기 작업을 위해 Node.js의 API를 호출하며, 이때 넘겨진 콜백은 libuv의 이벤트 루프를 통해 스케줄되고 실행된다.

각각에 대해 좀더 자세히 알아보기 전에 한가지만 확실히 짚고 넘어가자. 자바스크립트가 '단일 스레드' 기반의 언어라는 말은 '자바스크립트 엔진이 단일 호출 스택을 사용한다'는 관점에서만 사실이다. 실제 자바스크립트가 구동되는 환경(브라우저, Node.js등)에서는 주로 여러 개의 스레드가 사용되며, 이러한 구동 환경이 단일 호출 스택을 사용하는 자바 스크립트 엔진과 상호 연동하기 위해 사용하는 장치가 바로 '이벤트 루프'인 것이다.


Q.16) node.js의 작동 방식

Node.js는 V8엔진 싱글 스레드로 동작하며 libuv(비동기식 I/O)를 사용한다. I/O가 발생하면 스레드 풀에 작업을 전달하게 되고, I/O가 완료되면 이벤트 큐에 콜백 함수를 쌓는다. 이벤트 루프는 항상 돌고 있다가 V8 엔진의 호출스택이 비워지면 이벤트 큐에서 작업을 처리한다. 작업이 완료될 때 까지 기다리지 않고 다른 작업을 먼저 처리 하면서 Blocking 없이 동기적인 작업처럼 동작하게 한다.

Node.js는 브라우저 외부 환경에서 애플리케이션 개발에 필요한 내장된 API(모듈, 파일 시스템, HTTP 등)를 제공하고, 비동기 방식으로 Non-blocking I/O와 단일 스레드 이벤트 루프를 통해 높은 Request 처리 성능을 가진다.

무슨 말인지 잘 모르겠는 단어들이 몇몇개 있죠...?ㅎ 네트워크와 운영체제 지식이 필요한 이유가 여기있었네 껄껄

공부할 key point
1. libuv
2. I/O (input/output을 줄인건 알겠는데, 여기서는 포괄적인 의미를 지닌것 같다.)
3. Non-Blocking
4. v8엔진
5. 싱글스레드 (덤으로 멀티스레드도)
6. 스레드 풀 (스레드 수영장? 껄껄)

위에 여섯개가 한 세트로 쭉 이어져서 마치 퍼즐조각처럼 딱 맞춰지는 순간이 필요하다 내겐...

[참조]
https://sjh836.tistory.com/149


Q.17) Promise 객체에 대해 설명할 수 있느뇽?

비동기 처리의 성공과 실패를 나타내는 객체!

Promise의 상태는 Pending(대기), Fulfilled(이행), Rejected(실패) 3가지가 있다.

자세한 내용은 내가 작성한 블로그를 보도록 하자!
👉 Promise 게시글로 이동!


Q.18) Prototype이 무엇인가?

프로토타입은 객체가 가지는 프로퍼티 중 하나!

프로토타입은 Constructor, 인스턴스 내부 메소드, proto 세 가지의 프로퍼티를 가지는 객체!

Constructor는 생성된 객체의 원형을 가르킨다.

객체 원형에 메소드를 추가할 때 마다, 이후에 생성된 인스턴스들은 프로토타입 내부에 이 메소드를 가지고 있다.

마지막으로, proto는 프로토타입 자체를 가르킨다.

이러한 성질로, Class가 없던 시절 javascript에서 상속과 다형성을 구현했다.


Q.19) let vs const vs var

스코프 차이!!!!

let: block / const: block / var: global

let은 재할당 가능 const는 재할당 불가능이라는 특징이 있다.


Q.20) TypeScript의 장점이 무엇이었느뇨?

Typescript는 Object의 타입을 명시할 수 있다는 것이 순수 자바스크립트와의 가장 큰 차이점이다.

그래서 자바스크립트를 실제로 사용하기 전에 있을만한 타입 에러들을 미리잡기 위해 사용한다.

또 Type을 명시해줌으로서, 개발자가 의도한 변수나 함수등의 목적을 더욱 명확하게 전달 가능하고 전달된 정보를 기반으로 개발도구에게 코드 자동완성이나 잘못된 변수/함수 사용에 대한 에러 알림 같은 풍부한 피드백을 받을 수 있게 되므로 순수 자바스크립트에 비해서 생상성의 증가를 꾀할 수 있다.

마지막으로, 느슨한 타입의 언어인 자바스크립트를 사용해 만든 프로젝트에서는 규모가 커질수록 코드가 복잡해지고, 디버그와 테스트 공수가 증가하는 문제가 있어 이런 자바스크립트의 단점을 극복하고자 타입스크립트를 사용한다.


Q.21) javascript에서 의존성 주입이 뭔줄 아느뇨?

모듈의 의존성을 외부 개체에 의해 입력으로 전달 받는 것

예를들어 Controller 단에서 Service 모듈을 사용하기 위해서 직접 모듈을 import해서 사용했다면, 의존성 주입은 Controller의 input으로 Service를 넣어서 사용하는 것을 말한다.

Q.22) 콜백함수가 머시여?

콜백함수는 두 가지 정도로 말할 수 있을 것 같다.

  1. 다른 함수의 인자로써 이용되는 함수
  2. 어떤 이벤트가 발생했거나 특정 시점에 도달했을 때 시스템에서 호출하는 함수


🌻 Web


Q.1) CORS가 무엇?

Origin의 리소스에 접근할 수 있도록 하는 메커니즘

메커니즘
1. Request 헤더의 Origin이라는 필드에 요청을 보내는 출처를 담아서 서버로 보낸다.

  1. 서버는 응답 헤더의 Access-Control-Allow-Origin이라는 필드에 <리소스에 접근하는 것이 허용된 출처>를 보내준다.
  1. 브라우저는 자신이 보냈던 요청의 Origin과 서버가 보내준 응답의 Access-Control-Allow-Origin을 비교해본 후 이 응답이 유효한 응답인지 아닌지를 결정한다.
  1. 유효하면 요청한 서버의 리소스를 제공한다.

Q.2) jwt가 무엇?

JWT는 정보를 JSON 객체 형태로 주고 받기 위해 표준규약에 따라 생성한 암호화된 문자열(토큰)이다.


Q.3) 토큰 작동 원리

  1. 토큰 발급
  2. 토큰 검사
  3. 토큰이 유효하면, 사용자 데이터를 반환

토큰을 놀이공원 티켓으로 생각하자! 놀이기구를 탈 때마다 토큰이라는 티켓을 보여주는 것이다! 유효한 티켓이면 놀이기구를 이용할 수 있고, 유효하지 않으면 놀이기구를 이용할 수 없다.


Q.4) https 통신에서 쿠키 설정법

쿠키 옵션
1. Expires: 쿠키 만료 날짜

  1. Max-Age: 쿠키 수명. Expires는 무시됨
  1. Secure: https에서만 쿠키 전송 가능
  1. HttpOnly: 자바스크립트에서 쿠키 접근 불가능, XSS 요청을 막으려면 활성화해두는 것이 좋음
  1. Domain: 도메인을 적어주면 도메인이 일치하는 요청에서만 쿠키가 전송한다. 가끔 도메인이 다른 쿠키들이 있는데, 이런 쿠키들은 써드 파티 쿠키로 여러분을 추적하고 있는 쿠키! 구글이나 페이스북같은 곳이 써드 파티 쿠키를 적극적으로 사용한다.
  1. Path: 패스를 적어주면 이 패스와 일치하는 요청 요청에서만 쿠키를 전송

Q.5) http와 https의 차이점

HTTP(HyperText Transfer Protocol)
인터넷 상에서 클라이언트와 서버가 자원을 주고 받을 때 쓰는 통신 규약

HTTP는 텍스트 교환이므로, 누군가 네트워크에서 신호를 가로채면 내용이 노출되는 보안 이슈가 존재한다.

이런 보안 문제를 해결해주는 프로토콜이 < HTTPS >

HTTPS(HyperText Transfer Protocol Secure)
인터넷 상에서 정보를 암호화하는 SSL 프로토콜을 사용해 클라이언트와 서버가 자원을 주고 받을 때 쓰는 통신 규약

HTTPS는 텍스트를 암호화한다. (공개키 암호화 방식으로!) : 공개키 설명

HTTPS 통신 흐름
1. 애플리케이션 서버(A)를 만드는 기업은 HTTPS를 적용하기 위해 공개키와 개인키를 만든다.

  1. 신뢰할 수 있는 CA 기업을 선택하고, 그 기업에게 내 공개키 관리를 부탁하며 계약을 한다.
    CA란? : Certificate Authority로, 공개키를 저장해주는 신뢰성이 검증된 민간기업
  1. 계약 완료된 CA 기업은 해당 기업의 이름, A서버 공개키, 공개키 암호화 방법을 담은 인증서를 만들고, 해당 인증서를 CA 기업의 개인키로 암호화해서 A서버에게 제공한다.
  1. A서버는 암호화된 인증서를 갖게 되었다. 이제 A서버는 A서버의 공개키로 암호화된 HTTPS 요청이 아닌 요청이 오면, 이 암호화된 인증서를 클라이언트에게 건내준다.
  1. 클라이언트는 main.html 파일을 달라고 A서버에 요청했다고 가정하자. HTTPS 요청이 아니기 때문에 CA기업이 A서버의 정보를 CA 기업의 개인키로 암호화한 인증서를 받게 된다.
  1. CA 기업의 공개키는 브라우저가 이미 알고있다. (세계적으로 신뢰할 수 있는 기업으로 등록되어 있기 때문에, 브라우저가 인증서를 탐색하여 해독이 가능한 것)
  1. 브라우저는 해독한 뒤 A서버의 공개키를 얻게 되었다. 이제 A서버와 통신할 대는 얻은 A서버의 공개키로 암호화해서 요청을 날리게 된다.

HTTPS도 무조건 안전한 것은 아니다. (신뢰받는 CA 기업이 아닌 자체 인증서 발급한 경우 등)

이때는 HTTPS지만 브라우저에서 주의 요함, 안전하지 않은 사이트와 같은 알림으로 주의 받게 된다.



🌻 DataBase


Q.1) Transaction

데이터베이스의 상태를 변화시키기 위해 수행하는 작업 단위

🎈 상태를 변화시킨다는 것 → SQL 질의어를 통해 DB에 접근하는 것

- SELECT
- INSERT
- DELETE
- UPDATE

🎈 작업 단위 → 많은 SQL 명령문들을 사람이 정하는 기준에 따라 정하는 것

예시) 사용자 A가 사용자 B에게 만원을 송금한다.

* 이때 DB 작업
- 1. 사용자 A의 계좌에서 만원을 차감한다 : UPDATE 문을 사용해 사용자 A의 잔고를 변경
- 2. 사용자 B의 계좌에 만원을 추가한다 : UPDATE 문을 사용해 사용자 B의 잔고를 변경

현재 작업 단위 : 출금 UPDATE문 + 입금 UPDATE문
→ 이를 통틀어 하나의 트랜잭션이라고 한다.
- 위 두 쿼리문 모두 성공적으로 완료되어야만 "하나의 작업(트랜잭션)"이 완료되는 것이다. <Commit>
- 작업 단위에 속하는 쿼리 중 하나라도 실패하면 모든 쿼리문을 취소하고 이전 상태로 돌려놓아야한다. <Rollback>

하나의 트랜잭션 설계를 잘 만드는 것이 데이터를 다룰 때 많은 이점을 가져다준다.

🎈 트랜젝션 특징

원자성(Atomicity)
트랜잭션이 DB에 모두 반영되거나, 혹은 전혀 반영되지 않아야 된다.

일관성(Consistency)
트랜잭션의 작업 처리 결과는 항상 일관성 있어야 한다.

독립성(Isolation)
둘 이상의 트랜잭션이 동시에 병행 실행되고 있을 때, 어떤 트랜잭션도 다른 트랜잭션 연산에 끼어들 수 없다.

지속성(Durability)
트랜잭션이 성공적으로 완료되었으면, 결과는 영구적으로 반영되어야 한다.

Q.2) Index

RDBMS에서 검색 속도를 높이기 위한 기술

인덱스는 말 그대로 책의 맨 처음 또는 맨 마지막에 있는 색인이라고 할 수 있다. 이 비유를 그대로 가져와서 인덱스를 살펴본다면 데이터는 책의 내용이고 데이터가 저장된 레코드의 주소는 인덱스 목록에 있는 페이지 번호가 될 것이다. DBMS 도 데이터베이스 테이블의 모든 데이터를 검색해서 원하는 결과를 가져 오려면 시간이 오래 걸린다. 그래서 칼럼의 값과 해당 레코드가 저장된 주소를 키와 값의 쌍으로 인덱스를 만들어 두는 것이다.

DBMS 의 인덱스는 항상 정렬된 상태를 유지하기 때문에 원하는 값을 탐색하는데는 빠르지만 새로운 값을 추가하거나 삭제, 수정하는 경우에는 쿼리문 실행 속도가 느려진다. 결론적으로 DBMS 에서 인덱스는 데이터의 저장 성능을 희생하고 그 대신 데이터의 읽기 속도를 높이는 기능이다. SELECT 쿼리 문장의 WHERE 조건절에 사용되는 칼럼이라고 전부 인덱스로 생성하면 데이터 저장 성능이 떨어지고 인덱스의 크기가 비대해져서 오히려 역효과만 불러올 수 있다.


Q.3) SQL vs NoSQL

SQL

🎈 SQL의 특징 2가지

1. 데이터는 정해진 데이터 스키마에 따라 테이블에 저장된다.
2. 데이터는 관계를 통해 여러 테이블에 분산된다.

🎈 장점

1. 명확하게 정의된 스키마, 데이터 무결성 보장
2. 관계는 각 데이터를 중복없이 한번만 저장

🎈 단점

1. 덜 유연함. 데이터 스키마를 사전에 계획하고 알려야 함. (나중에 수정하기 힘듬)
2. 관계를 맺고 있어서 조인문이 많은 복잡한 쿼리가 만들어질 수 있음
3. 대체로 수직적 확장만 가능함

NoSQL

🎈 NoSQL의 특징 2가지

1. nosql은 스키마도 없고, 관계도 없다.
2. 서로 관련있는 데이터를 동일한 <컬렌션>에 넣는다.

🎈 장점

1. 스키마가 없어서 유연함. 언제든지 저장된 데이터를 조정하고 새로운 필드 추가 가능
2. 데이터는 애플리케이션이 필요로 하는 형식으로 저장됨. 데이터 읽어오는 속도 빨라짐
3. 수직 및 수평 확장이 가능해서 애플리케이션이 발생시키는 모든 읽기/쓰기 요청 처리 가능

🎈 단점

1. 유연성으로 인해 데이터 구조 결정을 미루게 될 수 있음
2. 데이터 중복을 계속 업데이트 해야 함
3. 데이터가 여러 컬렉션에 중복되어 있기 때문에 수정 시 모든 컬렉션에서 수행해야 함 
  (SQL에서는 중복 데이터가 없으므로 한번만 수행이 가능)

SQL 데이터베이스 사용이 더 좋을 때
1. 관계를 맺고 있는 데이터가 자주 변경되는 애플리케이션의 경우

NoSQL에서는 여러 컬렉션을 모두 수정해야 하기 때문에 비효율적
  1. 변경될 여지가 없고, 명확한 스키마가 사용자와 데이터에게 중요한 경우

NoSQL 데이터베이스 사용이 더 좋을 때
1. 정확한 데이터 구조를 알 수 없거나 변경/확장 될 수 있는 경우
2. 읽기를 자주 하지만, 데이터 변경은 자주 없는 경우
3. 데이터베이스를 수평으로 확장해야 하는 경우 (막대한 양의 데이터를 다뤄야 하는 경우)

Q.3) ORM이 무신고?

객체와 관계형 데이터베이스의 데이터를 매핑(연결)해주는 것을 말한다


Q.4) Inner Join vs Outer Join

Inner Join: 교집합
Outer Join: 합집합



🌻 Infra


Q.1) Docker와 VM 차이

Virtual Machine

VM은 가상화된 하드웨어 위에 OS가 올라가는 형태로 거의 완벽하게 host와 분리된다. VM의 구현 방법에 따라 다르지만, 기본적으로 하이퍼바이저가, 여러개의 VM을 띄우고 실행한다.

이때 중요한 것은 각 VM마다 독립된 실행 환경을 제공한다는 것이다. 즉 VM1과 VM2가 동일한 OS를 사용한다고 하더라도, 데이터는 물론이고 코드도 전혀 공유하여 사용하지 않는다.

이로 인해 각 VM마다 최소 GB 단위의 공간이 필요하며, VM 수에 비례해서 늘어나게 된다. 퍼포먼스 오버헤드도 상당하다.

하드웨어까지 가상화하는 전가상화(full-virtualization)이냐 그렇지 않은 반가상화(para-virtualization)이냐에 따라 다르지만, 보통 부팅 시에 상당한 시간이 소요된다.

Virtual Machine

Docker의 container는 OS 가상화이다. OS 부분을 가상화해서 올리고 커널을 host와 공유한다. Docker의 컨테이너는 독립된 실행환경을 제공하지 않는다. 즉 OS의 많은 자원들을 컨테이너들끼리 공유한다. 덕분에 부팅시간이 훨씬 짧고, 컨테이너 개수가 늘어나더라도 디스크 공간을 많이 차지하지 않는다.

또한, 컨테이너가 완전히 독립된 실행환경을 제공하지 않고 공유한다고 하더라도, 각 컨테이너 내의 프로세스들은 이를 감지하지 못하고, 자신이 OS의 모든 자원을 독점하고 있다고 생각한다.

[참조]
https://medium.com/@darkrasid/docker%EC%99%80-vm-d95d60e56fdd


Q.2) 디자인패턴에 대해 아는 것이 있는가?

MVC pattern



Off.


인터뷰 질문 정리 끝!

🤘😎🤘

기본기가 탄탄한 백엔드 개발자가 되는 그날까지 🔥🔥🔥

profile
Communication : any

1개의 댓글

comment-user-thumbnail
2021년 3월 19일

지리네 호우...

답글 달기