728x90
반응형

1. 이벤트 루프 (Event Loop)에 대해 설명해보세요.

더보기

이벤트루프는 자바스크립트의 비동기 작업을 가능하게 해줍니다
자바스크립트의 비동기 작업이 일어날경우 (I/O, setTimeOut) 콜스택에서 실행되면,

라이브러리를 통하여 테크스큐에 쌓이게된다.
이벤트루프는 지속적으로 자바스크립트의 콜스택을 바라보며 비어질때까지 기다린다.
이후 자바스크립트의 콜스택이 비게되면, 테스크큐의 작업을 하나씩 콜스택에 밀어넣어주게된다.
이로서 자바스크립트가 싱글스레드임에도 비동기처리가 가능한 이유입니다.

이벤트 루프는 작업이 들어오길 기다렸다가 작업이 들어오면 이를 처리하고,

처리할 작업이 없는 경우엔 잠드는, 끊임없이 돌아가는 자바스크립트 내 루프입니다.

 

총 6개의 페이즈로 구성되어 있으며 한 페이즈에서 다음 페이즈로 넘어가는 것을 틱이라고 합니다.

각 페이즈는 자신만의 큐를 관리합니다.

 

이벤트 루프의 6개의 페이즈는 다음과 같습니다:
timers: setTimeout(), setInterval()에 의해 스케줄된 콜백들이 수행됩니다.
pending callbacks: 다음 loop로 미뤄진 I/O 콜백이 수행됩니다.
idle, prepare: 내부적으로 사용됩니다.
poll: 새로운 I/O 이벤트를 가져와서 I/O와 관련된 콜백을 수행합니다.
check: setImmediate()에 의해 스케줄된 콜백들이 수행됩니다.
close callbacks: socket.on('close', ...)와 같이 close와 관련된 콜백이 수행됩니다.


각각의 phase는 FIFO queue를 갖고있는데, 현재 loop에 실행되어야 할 callback들이 callback의 종류에 

따라 각 phase에 맞는 곳에 들어가게 됩니다. 각 phase 별로 queue에 callback들을 모두 소진하거나 

callback size가 최대를 초과하게 되면, 다음 차례의 phase의 queue에 있는 callback이 실행됩니다 .

 

개발자 90%가 모르는 자바스크립트 동작원리 (Stack, Queue, event loop) - 코딩애플

힙 : 객체는 힙에 할당됩니다. 힙은 단순히 메모리의 큰 (그리고 대부분 구조화되지 않은) 영역을 지칭하는 용어입니다.

스택 : 코드를 실행해주는 곳으로 특징은 한개 뿐이다. 한번에 코드 1줄만 실행하는 싱글스레드.

큐 : JavaScript 런타임은 메시지 큐, 즉 처리할 메시지의 대기열을 사용합니다.

      각각의 메시지에는 메시지를 처리하기 위한 함수가 연결돼있습니다.

 

피터의 이벤트루프 - 우아한테크톡

 

 

참고사이트 : https://ko.javascript.info/event-loop

https://developer.mozilla.org/ko/docs/Web/JavaScript/Event_loop

 

2. 콜백 함수 (Callback Function)가 무엇인지, 어떻게 사용되는지 설명해보세요.

콜백 함수는 다른 코드의 인수로서 전달되어 나중에 호출되는 함수입니다. 콜백 함수는 비동기 작업을 처리할 때 주로 사용됩니다. 예를 들어, 파일을 읽거나 웹 API에서 데이터를 가져오는 작업은 시간이 걸리기 때문에 비동기적으로 처리됩니다. 이러한 작업이 완료되면 콜백 함수가 호출되어 결과를 처리합니다.

 

const fs = require('fs');

fs.readFile('example.txt', 'utf8', function (err, data) {
  if (err) throw err;
  console.log(data);
});

3번째 인수로 전달된 함수가 콜백함수입니다. 파일을 읽는 작업이 완료되면 콜백함수를 호출하고,

err, data 두개 인수를 전달합니다. 에러 발생시엔 에러 객체가 전달되고, data 인수에는 파일 내용이 전달됩니다.

 

기본적인 콜백함수

정의 : 함수에 파라미터로 들어가는 함수(다른 함수의 인자로 넘겨지는 함수)

용도 : 순차적으로 실행하고 싶을 때 씀

피터의 이벤트루프 - 우아한테크톡

 

콜백함수를 중첩해서 사용하다보면 콜백지옥에 빠질 수 있습니다.

콜백 지옥이란 콜백 함수가 중첩되어 코드의 가독성이 떨어지고, 에러 처리가 어려워지는 현상을 말합니다. 

콜백 지옥은 비동기 작업을 순차적으로 처리해야 할 때 발생하는 경우가 많습니다.

콜백함수가 뭔지 한국어로 쉽게 설명하는 영상 - 코딩애플

 

콜백 지옥의 대안으로는 프로미스(Promise)와 async/await가 있습니다. 

프로미스는 비동기 작업의 최종 완료 또는 실패를 나타내는 객체입니다. 

프로미스를 사용하면 콜백 함수를 사용하는 것보다 가독성이 높고, 에러 처리가 쉬워집니다. 

async/await는 프로미스를 사용하는 비동기 코드를 동기적인 방식으로 작성할 수 있게 해주는 문법입니다.

728x90
반응형
728x90
반응형

인성면접 예상질문 (20개)

 

  • 지원 동기
    1. 우리 회사에 지원한 동기를 말씀해주실 수 있을까요?
    2. 개발자가 되기로 한 이유에 대해 말씀해주실 수 있을까요?
    3. 개발자가 되지 않았다면 어떤 일을 하고 싶으신가요?
  • 개발 관심 정도
    1. 즐겨 보는 테크 유튜버나 뉴스레터가 있다면 알려주실 수 있을까요?
    2. 최근에 본 기술 아티클에 대해 설명해주실 수 있을까요?
    3. 좋아하는 개발자가 있다면 누구고 그 이유는 무엇인가요?
    4. 좋아하는 프로그램이 있다면 무엇이고 그 이유는 무엇인가요?
    5. 개발자로 은퇴하기 전까지 만들어보고 싶은 프로그램이 있다면 그건 어떤 프로그램인가요?
  • 메타인지
    1. 개발자로서 본인의 강점과 근거가 되는 경험을 말씀해주실 수 있을까요? (협업 능력 제외)
    2. 개발자로서 본인의 약점은 무엇인가요?
    3. 앞으로 3개월, 6개월, 1년 동안 어떤 것을 공부할 계획인지, 그리고 그러한 계획을 세운 이유는 무엇인지 알려주실 수 있을까요?
    4. 누군가에게 피드백을 주었던 경험이 있으신가요? 본인의 감정은 어떠했고 그것을 듣는 상대방의 반응은 어떠했나요?
    5. 누군가에게 피드백을 받았던 경험이 있으신가요? 본인의 감정은 어떠했고 그것을 말하는 상대방의 반응은 어떠했나요?
  • 삶의 태도
    1. 가장 인상 깊게 읽었던 책과 그 이유에 대해 알려주실 수 있을까요?
    2. 삶에서 중요하게 생각하는 가치가 있다면 무엇인가요?
    3. 롤모델이 있다면 누구고 그 이유는 무엇인가요?
    4. 즐겁고 행복했던 경험을 하나 이야기해주실 수 있을까요?
    5. 힘들고 쉽지 않았지만 극복한 경험을 하나 이야기해주실 수 있을까요?
  • 조직 문화 적합성
    1. 이상적으로 생각하는 조직문화에 대해 알려주실 수 있을까요?
    2. 회사에 가장 기대하는 바가 있다면 무엇인지 말씀해주실 수 있을까요?
728x90
반응형
728x90
반응형

1. 시간복잡도와 공간복잡도가 무엇인지 설명해주실 수 있을까요?

더보기

특정 크기의 데이터가 입력 되었을 때 어떤 문제를 해결하는데 걸리는 알고리즘의 수행 시간이 시간 복잡도

해당 알고리즘이 수행하는 동안의 메모리 사용량이 공간 복잡도를 의미합니다. 

이러한 복잡도라는 척도를 통해 특정 알고리즘의 성능을 평가할 수 있는데 과거 메모리 공간이 부족하던 때와 달리 컴퓨터 성능의 발달로 공간 복잡도 보다는 시간 복잡도를 중심으로 프로그래밍을 작성한다고 알고 있습니다.

 

2. 스택, 큐에 대해 설명해주실 수 있을까요?

더보기

스택(stack)은 책을 쌓는 것처럼 차곡차곡 쌓아 올린 형태의 자료구조입니다. 스택에서 가장 위에 있는 자료는 가장 최근에 들어온 자료를 가리키고 있으며, 삽입되는 새 자료는 top이 가리키는 자료의 위에 쌓이고,

삭제도 top에서 됩니다.  이러한 스택의 구조를 후입선출 (LIFO, Last-In-First-Out) 구조라고 합니다.

큐(queue)는 은행에서 먼저 온 사람의 업무를 창구에서 처리하는 것과 같이

선입선출 (FIFO, First in first out) 방식의 자료구조입니다.
큐는 한쪽 끝에서 삽입 작업이, 다른 쪽 끝에서 삭제 작업이 양쪽으로 이루어집니다.

 

3. 배열, 링크드리스트를 비교하여 설명해주실 수 있을까요?

더보기

배열은 연속된 메모리 공간에 존재하고 링크드리스트(Linked List)는 메모리 상에서 떨어져 있는 데이터들이 앞의 데이터와 뒤의 데이터를 기억하는 형태로 존재합니다. Array가 요소에 접근할때의 시간복잡도는O(1)입니다. 반면 Linked List의 시간복잡도는 O(n)입니다. Array의 삽입 및 삭제할때의 시간복잡도는 O(n)입니다. 반면 Linked List의 시간복잡도는 O(1)입니다. 따라서 데이터 접근이 주된 목적일땐 Array가 유리하고 데이터 삽입, 삭제, 수정이 주 목적일땐 Linked List가 유리합니다. 배열의 경우 새로운 데이터를 삽입하려면 기존 데이터를 이동시켜야 하지만 링크드 리스트에서는 새로운 노드를 만들어서 연결시키기만 하면 됩니다.

 

4. 트랜잭션이란 무엇이고 원자성, 일관성, 고립성, 지속성이란 무엇인지 설명해주실 수 있을까요?

더보기

트랜잭션(transaction)은 데이터베이스에서 수행되는 여러개의 작업을 일관되게 처리하기 위한 기능입니다. 예를들어, 은행에서 입금과 출금을 할 때 일관적으로 처리되어야 하는데 입금은 성공하고 출금은 실패했을 때 입금도 실패하여야 합니다. 이러한 작업을 트랜잭션으로 관리할 수 있습니다.

원자성(atomicity)은 트랜잭션이 수행될 때 이를 여러개의 작업으로 나눌 수 없게 하는 기능입니다.

일관성은 트랜잭션이 시작하기 전과 종료 후에도 데이터베이스가 일관된 상태를 유지한다는 의미입니다.

고립성(isolation)은 트랜잭션이 수행중일 때 다른 트랜잭션이 이 트랜잭션에 영향을 주지 않도록 하는 기능입니다. 이를 위해 데이터베이스 시스템에서는 각 트랜잭션을 수행할 때 잠금(lock)을 걸어 접근을 제한할 수 있습니다.

지속성(duability)은 트랜잭션이 성공적으로 완료된 경우, 이 결과가 영구적으로 반영된다는 의미입니다.

 

5. 정규화란 무엇이고 대표적인 장점과 단점은 무엇이 있을까요?

더보기

정규화(Normalization)란 데이터베이스에서 데이터의 중복을 줄이고 무결성을 향상시키는 등 

여러 목적을 달성하기 위해서 재디자인하는 것입니다. 
정규화의 목적은 불필요한 데이터를 제거하고 데이터의 중복을 최소화하기 위해서입니다. 

이를 통해 각종 이상 현상을 방지하고 테이블의 구성을 논리적이고 직관적으로 합니다.
정규화의 장점으로는 응용프로그램 단에서 불필요한 로직을 없앨 수 있고, 

올바른 데이터만 얻을 수 있습니다. 또한 불필요한 쿼리를 제거하여 성능이 향상됩니다.
정규화의 단점으로는 릴레이션의 분해로 인해 릴레이션 간의 연산이 많아져 응답 시간이 느려질 수 있습니다.

 

6. CORS란 무엇이고 어떻게 허용할 수 있나요?

더보기

CORS는 추가 HTTP 헤더를 사용하여, 한 출처에서 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제입니다. 보안 상의 이유로 브라우저는 스크립트에서 시작한 교차 출처 HTTP 요청을 제한합니다. 예를 들어, AJAX, Fetch API는 동일 출처 정책을 따르는데, 자신의 출처와 동일한 리소스만 불러올 수 있으며, 다른 출처의 리소스를 불러오려면 그 출처에서 올바른 CORS 헤더를 포함한 응답을 반환해야 합니다. CORS 의 허용방법은 크게 두가지입니다. 하나는 직접 헤더를 명시해서 출처(origin)을 필터링하는 것이고, 다른 하나는 CORS 노드 패키지(미들웨어)를 사용해 좀더 간편하면서 유기적으로 출처를 필터링 할 수 있습니다.

 

7. var, let, const 에 대해 설명해주실 수 있을까요?

더보기

var = 재선언O, 재할당O

let = 재선언X, 재할당O

const = 재선언X, 재할당X

 

var는 var로 선언한 변수는 동일한 이름으로 여러 번 중복해서 선언이 가능합니다. 이와 같은 경우, 마지막에 할당된 값이 변수에 저장되며 중복으로 사용될 경우 에러 없이 각기 다른 값이 출력 됩니다. let과 const는 var의 중복으로 선언하는 것을 보완하기 위해 등장 했습니다. let은 중복 선언은 불가능하지만 값을 재할당하는 것은 가능합니다. const는 let과 마찬가지로 중복 선언은 불가능하고 값 재할당 또한 불가능하다는 특징이 있습니다. 그래서 주로 const는 상수를 선언하는 키워드로 사용됩니다.

 

8. Promise란 무엇인지 설명해주실 수 있을까요?

더보기

Promise는 JavaScript에서 비동기 작업의 결과를 다루기 위한 객체입니다. 비동기 작업이 끝난 후에 성공 또는 실패와 그 결과 값을 처리할 수 있도록 합니다. Promise를 사용하면 비동기 작업의 결과를 마치 동기 작업처럼 다룰 수 있습니다. 즉, Promise는 미래의 어떤 시점에 결과를 제공하겠다는 '약속’을 나타냅니다.

 

9. Hoisting이란 무엇인지 설명해주실 수 있을까요?

더보기

Hoisting은 JavaScript에서 변수 선언이 어디에 있든 다른 코드보다 먼저 실행되고, 변수 선언을 코드의 최상단으로 끌어올려지는 것처럼 작동하는 특징입니다. 실제로 코드가 물리적으로 이동하는 것은 아니고, 컴파일 단계에서 변수와 함수 선언이 메모리에 저장되지만 코드에서는 원래 위치에 그대로 있습니다.

 

10. 개발자로서 본인의 장단점과 근거가 되는 경험을 말씀해주실 수 있을까요?(협업 능력 제외)

더보기

개발자로서 저의 장점은 꾸준함입니다. 코드를 작성하다 에러를 맞닥트리면 해결될 때까지 도전했습니다. 그리고 해결하고나면 블로그에 기록을 남기고 나중에 다시 찾아보면서 에러해결에 대한 경험을 많이 쌓았습니다. 단점은 에러상황에 빠져 많은 시간을 보낼때가 있지만, 시간이 급할땐 나중으로 미뤄서 해결하고 있습니다.

 

11. async/await 이란 무엇인지 설명해주실 수 있을까요?

더보기

async 키워드는 함수 앞에 위치하며, await 키워드는 함수 본문 내에서 사용됩니다. 
async 함수는 항상 Promise를 반환하며, await 키워드는 Promise가 이행될 때까지 함수의 실행을 일시 중지합니다.

 

12. Arrow Function 이란 무엇인지 설명해주실 수 있을까요?

더보기

화살표 함수는 function 키워드 대신 화살표를 사용하여 보다 간결한 방식으로 함수를 선언할 수 있습니다. 모든 경우 화살표 함수로 선언할 수 있는 것은 아니고 함수 표현식으로 익명 함수만 선언 가능합니다. 일반 함수와 화살표 함수의 가장 큰 차이점의 this 입니다. 일반 함수 this는 window 객체를 가리키지만 화살표 함수 this는 언제나 상위 스코프의 this를 가리킵니다. 이것을 Lexical this라고 하는데 이러한 특성 덕분에 화살표 함수는 콜백 함수로 사용하기 용이합니다. 그리고 Arguments 객체, methods를 사용할 수 없고, 생성자로 사용할 수 없습니다.

 

13. ‘==’와 ‘===’ 연산자의 차이는 무엇인지 설명해주실 수 있을까요?

더보기

==와 ===는 비교 연산자로 JavaScript에서 어떠한 값들을 비교하기 위하여 사용합니다. ==는 타입이 다를 경우 자동으로 일부 피연산자의 타입을 변환 후 값을 비교하므로 타입이 같지 않더라도 값만 같다면 true가 나옵니다. === 연산자는 == 연산자보다 엄격한 방시으로 값과 타입이 모두 일치해야만 true가 나오게 됩니다.

 

14. 즐겨 보는 테크 유튜버나 뉴스레터가 있다면 알려주실 수 있을까요?

더보기

즐겨보는 유튜버는 노마더코더, 코딩앙마, 개발바닥, 코딩애플, 생활코딩, 드림코딩, 우리밋 등이 있습니다.

 

15. Express란 무엇이고 왜 필요하며 대안은 무엇이 있는지 설명해주실 수 있을까요?

더보기

익스프레스는 Node.js에서 동작하는 웹 개발 프레임워크입니다. 쉽게 말해 Node.js를 사용해 쉽게 서버를 구성할 수 있게 만든 라이브러리입니다. 익스프레스는 가볍고 유연하게 웹 프레임워크를 구성할 수 있다는 장점이 있습니다. 또한 각종 라이브러리와 미들웨어 등이 내장돼 있어 개발자가 필요한 것만 선택하여 express와 결합해 사용할 수 있습니다. 대안으로는 Typescript 기반의 익스프레스와 같은 서버 프레임워크인 NestJS와 기존 익스프레스팀이 만든 Koa 같은 프레임워크를 사용할 수 도 있습니다.

 

16. npm 이란 무엇인지 설명해주실 수 있을까요?

더보기

Node Packaged Manager의 약자로 Node.js로 만들어진 Package와 모듈을 관리해주는 툴이라고 할 수 있습니다. 이름처럼 npm은 Node.js로 만들어진 모듈을 웹에서 받아서 설치하고 관리해주는 프로그램입니다.

 

17. 사용자 패스워드를 전송하고 보관하는 방법을 설명해주실 수 있을까요?

더보기

일반적으로 패스워드는 암호화된 형태로 전송되고 저장됩니다. 이를 위해 HTTPS와 같은 보안 프로토콜을 사용하여 패스워드를 전송하고, 서버에서는 해시 함수를 사용하여 패스워드를 암호화하여 저장합니다. 이렇게 하면 실제 패스워드가 노출되지 않도록 보호할 수 있습니다.

 

18. 최근에 본 기술 아티클에 대해 설명해주실 수 있을까요?

더보기

자바스크립트도 Python처럼 명시적인 타입 지원이 가능해진다는 내용의 기사를 봤습니다. 타입스크립트처럼 컴파일러가 타입을 강제하는 것은 아니고, 그저 IDE에서 표시하여 개발자가 참고할 수 있는 수준의 타입 표시이기 때문에 순수 JS를 쓰는 경우 기존보다 타입 실수를 줄일 수 있을 것으로 기대됩니다.

 

19. 포트폴리오에서 시간복잡도를 낮춘 사례가 있다면 설명해주실 수 있을까요?

더보기

TypeORM의 find문으로 특정데이터를 그룹화하고 조인하여 사용하려했습니다. 그런데 find문에는 그룹화가 따로 없어서 데이터를 모두 조회한후 그룹화하고 분류하는 작업을 하였는데 코드 길이수가 길고 조회속도가 떨어져서 쿼리빌더를 사용하여 그룹화하고 정렬했더니 코드량이 줄어들어 가독성이 늘어났고, 조회속도가 60% 개선되었습니다.

 

20. 웹 서버란 무엇인지 NGiNX와 Apache를 비교하여 설명해주실 수 있을까요?

더보기

웹 서버란 사용자의 요청을 전달하고, 서버로부터 처리한 데이터를 응답하는 서비스 프로그램으로 볼 수 있습니다. 대표적으로 Apache와 Nginx가 있습니다. Apache는 스레드/프로세스 기반의 구조로 되어있으며, 요청이 올 때마다 새로운 스레드를 생성하여 처리합니다. 다만, 요청이 올 때마다 새로운 스레드를 생성하는 구조이기 때문에 클라이언트의 요청이 대량으로 들어올 경우 프로세스가 blocking되어 대기 상태에 빠질 경우가 생깁니다. Nginx의 경우 Apache의 단점을 보완하여 새로운 스레드를 생성하는 것이 아닌 Event-Handler를 통해 비동기 방식으로 처리하기 때문에 요청이 대량으로 늘어나더라도 추가적인 생성비용이 들지 않습니다. 반면에 외부 프로세서에 전달하고 렌더링 된 컨텐츠를 다시 전송할 때까지 기다려야 하기 때문에 프로세스의 속도 저하가 있을 수 있습니다.

 

21. 동기와 비동기를 비교하여 설명해주실 수 있을까요?

더보기

동기는 데이터의 요청과 결과가 한 자리에서 동시에 일어나는것을 말합니다. 사용자가 데이터를 서버에게 요청한다면 그 서버가 데이터 요청에 따른 응답을 사용자에게 다시 리턴해주기 전까지 사용자는 다른 활동을 할 수 없으며 기다려야만합니다. 비동기는 동시에 일어나지 않는다는 의미입니다. 서버에게 데이터를 요청한 후 요청에 따른 응답을 계속 기다리지 않아도되며 다른 외부 활동을 수행하여도되고 서버에게 다른 요청사항을 보내도 상관없습니다.

 

22. 가장 인상 깊게 읽었던 책과 그 이유에 대해 알려주실 수 있을까요?

더보기

내용 비움

 

23. 모든 요소에 인덱스를 걸지 않는 이유는 무엇일까요?

더보기

모든 요소에 인덱스를 걸지 않는 이유는 인덱스를 항상 정렬된 상태로 유지해야 하기 때문에 추가, 수정, 삭제와 같은 작업 수행시 추가 작업이 필요해 집니다. 또한 인덱스 테이블이 생성되므로 메모리를 많이 소모하게 되고 Select를 제외한 Insert, Update, Delete에 대한 성능 저하가 있기 때문입니다. 따라서 PK같은 컬럼들을 인덱싱 하도록 하는 것이 좋습니다.

 

24. 이분탐색이 무엇이고 시간복잡도는 어떻게 되며 그 이유는 무엇인가요?

더보기

이분탐색은 정렬된 목록에서 특정 값을 찾는 방법입니다. 목록의 중간값을 확인하고 찾는 값이 중간값보다 큰지 작은지를 비교하여 검색 범위를 반으로 줄여나가는 방식으로 진행됩니다. 이 방법은 전체 목록을 검색하는 것보다 훨씬 빠르게 값을 찾을 수 있습니다. 이분탐색의 시간복잡도는 O(logN)입니다. 이는 이분탐색이 검색 범위를 절반씩 줄여나가기 때문에 전체 데이터의 수 N에 따라 시행 횟수가 logN이 되기 때문입니다. 즉, 검색 범위가 절반씩 줄어들기 때문에 검색 속도가 빠르게 진행됩니다.

 

25. 트리, 그래프를 비교하여 설명해주실 수 있을까요?

더보기

트리와 그래프는 모두 노드와 간선으로 구성된 데이터 구조입니다. 하지만 트리는 계층적인 구조를 가지며 루트 노드가 존재하고, 각 노드는 하나의 부모 노드만을 가집니다. 반면 그래프는 루트 노드의 개념이 없으며, 각 노드는 여러 개의 부모 노드를 가질 수 있습니다. 트리는 사이클이 없는 하나의 연결 그래프입니다.

 

26. 인덱스란 무엇이고 일반적인 원리는 어떠한지 설명해주실 수 있을까요?

더보기

인덱스(Index)는 데이터베이스의 테이블에 대한 검색 속도를 향상시켜주는 자료구조입니다. 테이블의 특정 컬럼(Column)에 인덱스를 생성하면, 해당 컬럼의 데이터를 정렬한 후 별도의 메모리 공간에 데이터의 물리적 주소와 함께 저장됩니다. 이것은 책에서의 목차 혹은 색인이라고 생각하면 됩니다.

 

27. 앞으로 3개월, 6개월, 1년 동안 어떤 것을 공부할 계획인지, 그리고 그러한 계획을 세운 이유는 무엇인지 알려주실 수 있을까요?

더보기
기초공부, cs공부, node 및 express공부, db공부 등등등

 

28. 삶에서 중요하게 생각하는 가치가 있다면 무엇인가요?

더보기

즐거움

 

29. 복합 인덱스란 무엇인지 원리를 설명해주실 수 있을까요?

더보기

복합 인덱스란 두 개 이상의 컬럼을 합쳐서 인덱스를 만드는 것을 말합니다. 단일 컬럼보다 여러 개의 컬럼으로 합쳤을 때 좋은 분포도를 가질 경우 사용됩니다. 주로 WHERE절에서 AND 조건에 많이 사용되는 컬럼들을 복합 인덱스로 구성합니다.

 

30. 우리 회사에 지원한 동기를 말씀해주실 수 있을까요?

더보기

회사별로 다름

 

31. HTTP에 비해 HTTPS가 더 안전한 원리를 설명해주실 수 있을까요?

더보기

HTTP란 서버/클라이언트 모델을 따라 데이터를 주고 받기 위한 프로토콜입니다. 이 HTTP에는 3가지 문제가 있습니다. 첫 번째 HTTP 는 평문 통신이기 때문에 도청이 가능하다. 두 번째 통신 상대를 확인하지 않기 때문에 위장이 가능하다. 세 번째 완전성을 증명할 수 없기 때문에 변조가 가능하다. 이 3가지 문제를 해결하기 위해 HTTPS는 SSL(Secure Socket Layer) or TLS(Transport Layer Security)와 같은 프로토콜을 사용하여 공개키/개인키 기반으로 데이터를 암호화하고 있습니다. 데이터는 암호화되어 전송되기 때문에 임의의 사용자가 데이터를 조회하여도 원본의 데이터를 보는 것은 불가능하고, 완정성 또한 증명할 수 있습니다.

 

32. TCP 3 way handshake란 무엇인지 설명해주실 수 있을까요?

더보기

TCP 3 way handshake는 TCP 통신을 이용하여 데이터 전송을 하기 위해 네트워크 연결을 설정하는 과정을 말합니다. 클라이언트는 서버에게 SYN을 보내고 서버는 무사히 받으면 ACK패킷과 SYN 패킷을 다시 클라이언트에게 보냅니다. 클라이언트는 ACK 패킷과 SYN 패킷을 무사히 받았을 경우 무사히 받았다는 뜻으로 서버에게 ACK 패킷을 보냅니다.

 

33. TCP 와 UDP 를 비교하여 설명해주실 수 있을까요?

더보기

TCP 는 연결지향으로 2개의 호스트가 통신하기 전 연결이 이루어져야하는 1:1 통신입니다. UDP 는 그런 절차 없이 보내는 쪽에서 일방적으로 데이터를 전달하는 1:1, 1:N, N:N 방식의 통신입니다. TCP는 높은 신뢰성 과 순서대로 전송하는 것을 보장하지만 UDP는 신뢰성이 없고 전송되는 데이터의 순서를 보장하지 않습니다. 그리고 UDP는 TCP에 비해 하는 작업들이 굉장히 적기 때문에 속도가 빠릅니다. 따라서 TCP는 HTTP, FTP, SMTP 등에서 사용이 되고 UDP는 연속성이 중요한 실시간 스트리밍 같은 서비스에 자주 사용이 됩니다.

 

34. 즐겁고 행복했던 경험을 하나 이야기해주실 수 있을까요?

 

35. Base64 인코딩이란 무엇인가요?

더보기

문자 그대로 직역하면 64진법 이라는 뜻입니다. base64 인코딩을 사용하면 64개의 아스키 문자열 형태로 바이너리 데이터를 변환시킬 수 있습니다. 이들을 3바이트씩 묶어 6비트로 나누면 그룹당 4개로 나눠지는데, 이를 base64 변환표에 맞게 다시 문자열로 변환시킵니다. base64를 통해 대부분의 화면단에 표시가 가능한 아스키문자들로 바꿔 전송이 가능하도록 되기 때문에, 이메일이나 HTML등에서 자주 사용됩니다. 다만 단점으로 데이터 크기 자체는 30%넘게 불어나기 때문에 효율이 좋지는 않습니다

 

36. 개발자가 되기로 한 이유에 대해 말씀해주실 수 있을까요?

 

37. 프로세스와 스레드를 비교하여 설명해주실 수 있을까요?

더보기

프로세스는 프로그램 실행을 위해서 필요한 최소단위의 스레드, 메모리, 소스코드들의 집합입니다. 간단하게 말하면 실행중인 프로그램이라고 할 수 있습니다. 스레드는 프로세스 내에서 실제로 작업을 진행하는 주체입니다. 프로세스는 각각 독립적으로 움직이지만 스레드는 하나의 프로세스 내에서 각자의 스택을 생성하고 프로세스 내의 메모리를 공유합니다

 

38. Call by reference란 무엇이고 보통 어떻게 쓰이나요?

더보기

Call by reference란 함수의 인자를 통해 매개변수로 넘길 때 실제 값이 아닌 값의 주소 값을 참조하여 전달하는 방식입니다. 보통 참조형 데이터를 인자로 넘길 때 사용되며 값을 복사하기 때문에 빠르다는 장점이 있지만 원래 값에 영향을 받는다는 단점이 있습니다

 

39. 힘들고 쉽지 않았지만 극복한 경험을 하나 이야기해주실 수 있을까요?

 

40. 동시성과 병렬성을 비교하여 설명해주실 수 있을까요?

더보기

동시성과 병렬성은 한번에 많은 일을 처리합니다. 다만 동시성은 싱글 코어에서 멀티 쓰레드를 동작 시키기 때문에 번갈아 처리를 합니다. 그래서 동시에 처리되는 것처럼 보이는 것이 동시성이고, 병렬성이란 멀티 코어에서 멀티쓰레드를 동작시키는 방식으로 실제로 동시에 많은 일을 처리합니다.

 

41. 깊은 복사와 얕은 복사의 차이는 무엇이고 JS에서 각각을 구현하는 방법은 어떻게 되는지 설명해주실 수 있을까요?

더보기

깊은 복사란 메모리에 저장되어 있는 실제 값을 복사하는 방식이고 얕은 복사란 메모리에 저장되어 있는 주소 값을 복사하는 방식입니다. 깊은 복사를 하였을 때에는 실제 값을 복사하였기 때문에 원래의 값이 바뀌어도 복사 값이 바뀌지 않지만 얕은 복사는 주소 값을 복사하였기 때문에 원래의 값이 바뀌었을 때 복사한 값도 같이 바뀐다는 특징이 있습니다. 일반적으로 원시형 데이터가 깊은복사가 가능하고 참조형 데이터가 얕은 복사가 됩니다. 참조형 데이터를 깊은 복사 하기 위해서는 JSON.parse와 JSON.stringify를 사용하는 방법이 있습니다.

 

42. JS의 passed by value 와 passed by reference 에 대해 아는 만큼 설명해주실 수 있을까요?

더보기

passed by value 와 passed by reference는 값은 전달하는 방식입니다. passed by value는 넘기는 값을 복사해서 전달하는 방식으로 원본값이 변경될 가능성은 없지만, 메모리 사용량이 증가하게 됩니다. passed by reference는 값이 들어있는 주소 값을 전달하는 방식으로 주소 값을 전달하는 것이기 때문에 빠르나 원본 값이 변경될 가능성이 있습니다.

 

43. 고차 함수란 무엇인지 설명해주실 수 있을까요?

더보기

고차 함수는 함수를 인수로 사용하거나 반환하여 다른 함수에서 작동하는 함수입니다. 다른 함수를 조작하는 함수이기 때문에 고차함수라고 합니다. 고차함수는 복잡한 논리를 추상화하고 코드를 재사용할 수 있기 때문에 유용합니다. 문제 해결을 위해 함수를 사용하는 것을 강조하는 프로그래밍 패러다임인 함수형 프로그래밍의 핵심 부분입니다.

 

44. 다음 함수의 결과의 예측과 근거를 설명해주실 수 있을까요? <함수 이미지 준비중 😅>

 

45. JWT에 대해 설명해주실 수 있을까요? 구체적으로 JWT를 어디서 처리하는지, 어떠한 방식으로 검증하는지, 재발급 방식과 주기는 어떻게 처리하는지, 다른 API 서비스 호출 시 어떻게 잡아서 인증 처리하는지 말씀해주시면 좋습니다.

더보기

JWT(JSON Web Token)는 사용자 인증 정보를 담은 토큰입니다. 서버와 클라이언트 간 정보를 주고 받을 때 HTTP 리퀘스트 헤더에 JWT를 넣어 서버는 별도의 인증 과정 없이 헤더에 포함되어 있는 JWT 정보를 통해 인증합니다. 일반적으로 Access token의 유효기간이 만료되면 Refresh token을 이용하여 새로운 Access token을 발급받습니다.  다른 API 서비스 호출 시 인증 처리 방식은 서비스 제공자마다 다르며 일반적으로 Authorization header에 Access token을 담아서 보내거나, URL 파라미터로 Access token을 전달하는 방식 등이 있습니다.

 

46. 재미있게 공부한 알고리즘이 있다면 설명해주실 수 있을까요?

 

47. Node.js는 single-threaded 기반 JS 런타임입니다. 이에 대해 아는 만큼 설명해주실 수 있을까요?

더보기

노드는 여러 스레드를 가지고 있지만 자바스크립트를 실행하는 스레드는 하나입니다. 비동기 이벤트 처리를 기반으로 하는 node.js는 크롬을 통해 공개된 오픈소스인 자바스크립트 v8 엔진에 비동기 이벤트 처리 라이브러리(libuv)를 결합하여 만들어 졌습니다. 비동기 이벤트 처리를 기반으로 하는 Node는 멀티스레드보다는 싱글스레드 방식이 더 적합한 방법입니다. 비동기 이벤트 처리를 하기위한 세가지 방법에는 콜백함수, 프로미스, async/await가 있습니다

 

48. Node.js는 non-blocking, asynchronous 기반 JS 런타임입니다. 이에 대해 아는 만큼 설명해주실 수 있을까요?

더보기

Non-Blocking이란 이전 작업이 완료될 때 까지 기다리지 않고, 다음작업이 바로 진행될 수 있도록 동작하는 패러다임입니다. 직접 제어할 수 없는 작업이 완료되기 전에 제어권을 넘겨주는 경우를 말합니다. 호출된 함수에서 I/O작업등을 요청했을 경우 I/O작업의 처리여부와 관계없이 바로 다음 작업을 할 수 있습니다. Asynchronous란 호출된 작업의 리턴하는 시간과 결과를 반환하는 시간이 일치하지 않는 경우를 말합니다. 동기와 반대로 대상이 작업시간이 같지 않을 때 비동기적이라고 봅니다. 동작방식은 비동기이므로 각각의 작업이 순차적인 실행순서를 보장하지 않습니다. 요청 A가 요청되고 I/O작업까지 호출되면 논블로킹되어 Kernel은 다른 작업을 받을 대기를 하고, 그 사이 요청 B가 요청되고 Kernel을 작업을 완료하고 결과를 반환합니다. I/O작업이 완료되면 요청 A역시 결과를 반환하여 모든 프로세스가 완료됩니다.

 

49. Node.js의 이벤트 루프란 무엇이고 왜 필요하며 어떻게 작동하는지 아는 만큼 설명해주실 수 있을까요?

더보기

Node.js의 이벤트 루프는 비동기 I/O 작업을 관리하는 메커니즘입니다. 이벤트 루프는 Node.js의 핵심 구성 요소 중 하나로, Node.js가 비동기적으로 I/O 작업을 처리할 수 있도록 해줍니다.이벤트 루프는 여러 단계로 구성되어 있으며, 각 단계에서는 다양한 종류의 비동기 작업들이 처리됩니다. 이벤트 루프는 각 단계를 순회하며 완료된 작업들의 콜백 함수를 메인 스레드에서 실행합니다.이벤트 루프는 Node.js가 하나의 스레드에서도 높은 성능을 발휘할 수 있도록 해줍니다. 이벤트 루프 덕분에 Node.js는 I/O 작업이 진행되는 동안 다른 작업을 계속해서 처리할 수 있습니다.

 

50. 트랜스파일러와 번들러에 대해 설명해주실 수 있을까요?

더보기

트랜스파일러(transpiler)는 한 언어로 작성된 코드를 다른 언어로 변환하는 도구입니다. 예를 들어, TypeScript나 ES6와 같은 최신 JavaScript 문법을 지원하지 않는 브라우저에서도 실행 가능한 ES5 코드로 변환하는 작업을 수행합니다. 대표적인 트랜스파일러로는 Babel이 있습니다.

번들러(bundler)는 여러 개의 파일을 하나의 파일로 묶어주는 도구입니다. 웹 애플리케이션에서는 HTML, CSS, JavaScript 파일뿐만 아니라 이미지, 폰트 등 다양한 리소스들이 사용됩니다. 번들러는 이러한 리소스들을 최적화하여 하나의 파일로 묶어줍니다. 이를 통해 웹 페이지의 로딩 속도를 개선할 수 있습니다. 대표적인 번들러로는 Webpack이 있습니다.

 

 

 

 

728x90
반응형
728x90
반응형

공부방법 => 한번 쭉 읽고 생각나는대로 적기 (모르면 컨닝하기)

                     + 추가 정보 기입하기


1. HTTP METHOD에서 GET과 POST에 대해 설명해주세요.

더보기

Get은 가져온다는 개념이고, Post는 수행한다는 개념으로 받아들이면 쉽습니다.

 

GET - 클라이언트에서 서버로부터 어떠한 리소스를 요청할때 사용되는 method

          요청된 값은 프론트에서 변경되지 않고 사용된다.

       + get메소드는 주로 데이터를 읽거나 검색할 때 사용되며, 모든 필요한 데이터를 URL에 포함하여 요청합니다.

 

POST - 리소스를 생성/업데이트 하기 위해 서버에 데이터를 보내기 위해 사용되는 메서드

             서버 상의 데이터 값을 바꾸기 위해 사용되는 method

          + POST메소드는 주로 리소스를생성하거나 업데이트를 하기 위해 서버에 데이터를 보내는데 사용합니다.

 

주요 차이점은 get은 브라우저에 기록되지만, post는 기록되지 않음

GET은 요청을 전송할때 URL 주소 끝에 파라미터로 포함되어 존송되며, 이 부분을 쿼리스트링이라 부릅니다.

POST는 요청 데이터를 Body에 담겨 있기 때문에 링크 정보를 가져올 수 없습니다.

 

--------------

 

GET은 캐시 될 수 있지만 POST는 캐시되지 않습니다.

GET은 브라우저 기록에 남지만 POST는 남지 않습니다.

GET은 북마크에 추가할 수 있지만, POST는 추가할 수 없습니다.

GET은 데이터 길이에 제한이 있지만 POST는 제한이 없습니다.

 

PUT : 목적 리소스 모든 현재 표시를 요청 payload로 바꿉니다.

PATCH: 리소스의 일부분만 수정하는 데 쓰입니다.

 

2. HTTP 상태 코드

더보기
  • 200 : OK 요청이 성공적으로 되었습니다.
  • 201 : Created 요청이 성공적이며 새로운 리소스가 생성되었습니다.
  • 400 : Bad Requrest 서버가 요청의 구문을 인식하지 못했습니다.
  • 401 : Unauthorized 이 요청은 인증이 필요합니다.
  • 403 : Forbidden 서버가 요청을 거부합니다.
  • 404 : Not Found 서버가 요청한 페이지를 찾을 수 없습니다. (API가 잘못됬을때 자주 겪음)
  • 500 : Internal Server Error 서버가 오류를 발생하여 요청을 수행할 수 없습니다.

 

3. 프로세스와 스레드의 차이

더보기
  • 프로세스 : 운영체제로부터 자원을 할당받은 작업의 단위
  • 스레드 : 프로세스에 포함된 개념이며, 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위

 

4. RDB(Relational Database)와 NoSQL(Not Only SQL)의 차이

더보기

RDBMS(관계형 데이터베이스)는 정해진 스키마가 존재하고, NoSQL은 정해진 스키마가 없다는 것이 큰 차이

 

RDB의 장점으로는 데이터의 분류, 정렬, 탐색 속도가 빠르며, 스키마가 명확하게 정의되어 있어

데이터의 무결성을 보장합니다. 하지만 단점으로는 스키마가 정적이기 때문에 데이터가 유연하지 못하며,

시스템이 커질 경우 JOIN문이 많은 복잡한 쿼리가 만들어질 수 있습니다.

NoSQL(Not Only SQL)의 장점으로는 스키마가 없기 때문에 유연하며 자유로운 데이터 구조를 가질 수 있습니다.

또한 데이터 분산이 용이하며 성능 향상을 위한 Scale-up 뿐만 아니라 Scale-out도 가능합니다. 하지만 단점으로는 데이터 중복이 발생할 수 있으며 중복된 데이터가 변경될 경우 수정을 모든 컬렉션에서 수행해야 합니다.

 

5. DB 인덱스 사용 시 장점

더보기

DB 인덱스를 잘 사용하면 데이터를 검색하는 시점에 성능 차이에 큰 영향을 미침

대용량 데이터를 담고 있는 DB 테이블에서는 필요한 데이터를 빨리 찾기 위해 인덱스가 필요함

 

DB 인덱스의 가장 큰 장점은 데이터 검색 속도의 향상입니다. 인덱스는 DB 내 저장된 데이터의 주소를 가지고 있기 때문에 원하는 데이터를 빠르게 찾을 수 있습니다.

반면 단점은 인덱스는 데이터 조회(SELECT)를 제외한 모든 동작, 즉 INSERT/UPDATE/DELETE 성능에 영향을 미칩니다. 이러한 동작으로 인해 인덱스를 걸어둔 컬럼의 데이터가 바뀌면 인덱스 테이블의 수정도 필요하기 때문에 데이터의 삽입/수정/삭제 작업이 두 번 이루어지게 됩니다 . 인덱스는 DB 내 저장된 데이터의 "주소"를 갖고 있기 때문에 별도의 공간에 저장하므로 추가 저장 공간이 필요합니다 .

 

6. 데이터베이스 정규화

더보기

 데이터베이스의 중복을 최소화하고, 데이터의 무결성을 유지하기 위한 기술

정규화의 목표는 테이블 간에 중복된 데이터의 존재를 허용하지 않는 것

실무에서는 보통 1,2,3 정규화까지만 다룸

 

제1정규화 : 테이블의 모든 컬럼은 원자값(분해할 수 없는 값)을 가져야합니다.

제2정규화 : 테이블의 모든 컬럼은 기본키에 완전 함수적 종속을 만족해야합니다.

제3정규화 : 테이블의 모든 컬럼은 기본키에 이행적 종속을 만족하지 않아야 합니다.

(이행적 종속이라는 것은 A -> B, B -> C가 성립할 때 A -> C가 성립되는 것을 의미)

 

7. 데이터베이스 비정규화

더보기

정규형 테이블을 비정규형으로 바꾸는 걸 의미함(중복허용)

정규화 시 테이블이 여러 개로 나눠지므로, 조인 연산을 사용하는 경우가 빈번해짐

일반적으로 조회에 대한 처리 성능이 중요할 경우, 부분적으로 비정규화를 고려  

 

8. 데이터베이스 인젝션(Database Injection)

더보기

데이터베이스 인젝션은 웹 페이지의 입력을 통해 SQL문에 악의적인 코드를 삽입하는 기법

이는 데이터베이스를 파괴할 수 있으며, SQL 인젝션은 가장 일반적인 웹 해킹 기법

 

공격자는 SQL 인젝션을 통해 일반적으로 검색할 수 없는 데이터를 검색할 수 있습니다.

이는 다른 사용자의 데이터 또는 애플리케이션이 접근할 수 있는 다른 데이터를 포함할 수 있습니다.

많은 경우 공격자는 이 데이터를 수정하거나 삭제하여 콘텐츠 또는 동작에 영구적인 변경을 일으킬 수 있습니다.

 

9. ORM이 편하고 좋은데, SQL을 알아하는 이유

더보기

ORM(Object-Relational Mapping)은 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑시켜주는 프레임워크. ORM을 사용하면 SQL 쿼리가 아닌 직관적인 코드(메소드)로 데이터를 조작할 수 있어서 가독성이 좋습니다.

ORM이 편리하고 좋지만, SQL을 알아야 하는 이유는 ORM이 RDBMS에 대한 종속성을 줄여주지만,

개발자가 높은 RDBMS 지식을 요구합니다. ORM을 사용하는 경우에도 SQL 쿼리의 성능 최적화와 같은 작업이 필요

 

10. RDBMS와 NoSQL은 언제 사용하는 것이 좋을까요?

더보기

RDBMS는 정형화된 데이터를 저장하고 관리하는데 적합합니다. 

반면 NoSQL은 비정형화된 데이터를 저장하고 관리하는데 적합합니다.

 

11. Node.js가 싱글스레드이지만 여러가지 병렬작업이 되는 이유

더보기

Node.js는 싱글 스레드이지만, worker_threads 모듈을 사용하여 여러 작업을 동시에 처리할 수 있습니다. worker_threads 모듈을 사용하지 않더라도 Node.js 애플리케이션에서 병렬 처리가 가능합니다.

코드를 별도의 노드 프로세스로 분기하거나 자식 프로세스를 생성하여 멀티 코어 머신에서

처리 병렬성을 얻을 수 있습니다 . 이를 통해 여러 작업을 동시에 처리할 수 있습니다.

 

12. 세션과 쿠키의 차이점

내가 썼던 세션과 쿠키 정보 : https://pyoja.tistory.com/119

더보기

쿠키 = 그냥 옮기는 시스템 매개체

토큰 = 서버가 기억하는 이상하게 생긴 텍스트 (ID카드처럼 서버에게 보여줘야 함)

JWT = 정보를 갖고 있는 토큰. DB없이 검증가능!

세션 = 요청받으면 서버에서 DB에 있는 데이터를 전달

 

세션과 쿠키의 가장 큰 차이점은 상태 정보의 저장위치. 쿠키는 클라이언트에 저장하고, 세션은 서버에 저장합니다.

보안면에서는 세션이 우수하고, 요청 속도는 쿠키가 세션보다 빠릅니다.

쿠키와 세션에 대한 자세한 설명

더보기

쿠키와 세션은 HTTP의 특징이자 약점을 보완하기 위해 사용됩니다. HTTP는 비연결성(Connectionless)과 비상태성(Stateless)의 특징을 가지고 있습니다. 즉, 클라이언트가 서버에 요청을 보내면 서버는 클라이언트에게 요청에 맞는 응답을 해 준 뒤 접속을 끊습니다. 이로 인해 상태 정보를 유지하지 않습니다.

 

쿠키와 세션은 이러한 HTTP의 특징을 보완하기 위해 사용됩니다.
쿠키는 클라이언트 측에 저장되는 작은 데이터 파일로, 서버가 클라이언트의 웹 브라우저에 저장합니다.

반면 세션은 서버 측에 저장되며, 클라이언트는 세션 ID만 가지고 있습니다.

 

쿠키와 세션의 가장 큰 차이점은 사용자의 정보가 저장되는 위치입니다.

쿠키는 서버의 자원을 전혀 사용하지 않으며, 세션은 서버의 자원을 사용합니다.

보안 면에서 세션이 더 우수하며, 요청 속도는 쿠키가 세션보다 더 빠릅니다
.

쿠키와 세션은 각각 장단점이 있습니다. 쿠키는 클라이언트 측에 저장되기 때문에 임의로 고치거나 지울 수 있고, 가로채기가 어렵지 않아 보안에 취약합니다. 반면 세션은 서버 측에 저장되기 때문에 비교적 보안성이 높습니다.
하지만 세션은 서버의 자원을 사용하기 때문에 많은 양의 데이터를 저장하면 서버에 부하가 발생할 수 있습니다.

 

13. http와 https의 차이

더보기

HTTP와 HTTPS의 가장 큰 차이점은 보안입니다. HTTP는 암호화가 전혀 되어 있지 않은 프로토콜이므로 

보안에 취약합니다. 반면 HTTPS는 안전하게 데이터를 주고받을 수 있습니다. 

하지만 HTTPS를 이용하면 암/복호화의 과정이 필요해서 HTTP보다 속도가 좀 느릴 수 있습니다.

 

14. google.com을 쳤을 때 벌어지는 일을 설명해주세요 (이해 못해서 생략)

 

15. 알고 있는 자료구조에 대해 설명해주세요.

더보기
  1. 배열(Array) : 배열은 인덱스(Index)와 인덱스에 해당하는 요소(Element)로 구성된 가장 기본적인 데이터 구조입니다. 길이가 고정되어 생성되며, 인덱스를 통해서 각 요소에 직접 접근할 수 있는 특징이 있습니다.
  2. 연결 리스트(Linked List) : 배열의 추가/삭제 연산에 대한 비효율성을 극복하고자 등장한 데이터 구조입니다.    각 요소는 다음 노드 연결에 대한 정보를 담은 포인터 또는 주소와 함께 노드에 저장됩니다. 단일 연결 리스트, 이중 연결 리스트, 원형 연결 리스트 등의 종류가 있습니다.
  3. 스택(Stack) : 순서가 보존되는 선형 자료구조의 일종으로, LIFO(Last In First Out) 메커니즘을 갖고 있습니다. 데이터를 받는 순서대로 정렬하며, 가장 마지막으로 입력된 것을 순차적으로 가져오는 방법을 갖고 있는 것이 특징입니다.
  4. 큐(Queue): 순서가 보존되는 선형 자료구조의 일종으로, FIFO(First In First Out) 메커니즘을 갖고 있습니다. 데이터를 받는 순서대로 정렬하며, 가장 먼저 입력된 것을 순차적으로 가져오는 방법을 갖고 있는 것이 특징입니다.
  5. 해시 테이블(Hash Table): 해시 테이블은 키(Key)와 값(Value)으로 데이터를 저장하는 자료구조 중 하나로 빠른 검색이 필요할 때 용이합니다. 해시 테이블을 구현하기 위해서는 연결 리스트와 해시 함수(Hash Function)가 필요합니다 .

 

16. 큐와 스택의 차이에 대해 설명해주세요.

더보기

큐(Queue)와 스택(Stack)은 모두 선형 자료구조의 일종입니다. 가장 큰 차이점은 데이터를 처리하는 순서에 있습니다. 스택은 가장 마지막으로 입력된 데이터부터 처리하는 LIFO(Last In First Out) 메커니즘을 갖고 있습니다. 

반면에 큐는 가장 먼저 입력된 데이터부터 처리하는 FIFO(First In First Out) 메커니즘을 갖고 있습니다.

스택은 재귀 알고리즘, 깊이 우선 탐색(DFS), 실행 취소(undo), 웹 브라우저 방문 기록 등에서 사용됩니다. 

큐는 너비 우선 탐색(BFS), CPU 스케줄링, 캐시 구현 등에서 사용됩니다.

따라서 어떤 상황에서 스택을 사용할지, 큐를 사용할지는 문제의 특성과 요구사항에 따라 결정됩니다. 

예를 들어, 가장 마지막으로 입력된 데이터부터 처리해야 하는 경우 스택을 사용하고, 

가장 먼저 입력된 데이터부터 처리해야 하는 경우 큐를 사용합니다.

 

17. 리팩토링에 대해 설명해주세요.

더보기

코드 리팩토링이란 현재 코드의 동작은 그대로 유지하면서 더 이해하기 쉽고, 생각하기 쉽고, 확장하기 쉽게

재구성하는 것입니다. 리팩토링의 목적은 소프트웨어를 보다 이해하기 쉽고, 수정하기 쉽도록 만드는 것입니다.

리팩토링은 겉으로 보이는 소프트웨어의 기능을 변경하지 않습니다.

코드 가독성과 질을 높이기 위한 목적으로 정리(Clean Up)를 한다고 생각해도 됩니다.

리팩토링은 코드의 구조가 망가지는 효과를 누적되지 않게 하며, 중복을 제거함으로써 각각의 작업에 대한 코드가 오직 한 곳에만 있게 할 수 있습니다. 이로 인해 소프트웨어의 디자인이 개선되고,

소프트웨어를 더 이해하기 쉽게 만들며, 버그를 찾도록 도와주고, 프로그램을 빨리 작성하도록 도와줍니다.

 

18. OOP에서 지향하는 바가 무엇일까요?

더보기

OOP (Object-Oriented Programming)은 객체 지향 프로그래밍이며, 프로그래밍 패러다임 중 하나입니다. 

OOP는 데이터와 기능을 객체라는 개념으로 묶어서 프로그래밍하는 방식으로, 코드의 재사용성과 유지보수성을 높이는 것을 지향합니다. OOP의 주요 개념으로는 클래스, 객체, 상속, 캡슐화, 다형성 등이 있습니다.

 

19. JOIN에 대해 설명해주세요.

더보기

JOIN은 SQL에서 두 개 이상의 테이블을 결합하여 하나의 테이블처럼 보이게 해주는 것입니다. 

JOIN에는 여러 종류가 있습니다. INNER JOIN은 두 테이블 모두에 데이터가 존재하는 행에 대해서만 

결과를 가져오는 것입니다. OUTER JOIN은 매칭되는 행이 없어도 결과를 가져오며, 매칭되는 행이 없으면 NULL로 출력합니다. OUTER JOIN에는 LEFT OUTER JOIN과 RIGHT OUTER JOIN이 있습니다

 

20. ORM이란 무엇인가요?

더보기

ORM(Object-Relational Mapping)은 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑시켜주는 프레임워크

ORM은 객체 지향 프로그래밍에서 데이터를 쉽게 조작할 수 있게 해줍니다.

ORM은 객체 지향적인 방법으로 데이터베이스와의 상호작용을 할 수 있도록 도와주며,

Model class를 통해 객체를 만들고 이 객체를 통해 데이터베이스에 접근합니다.

이를 통해 개발자는 SQL문을 직접 작성하지 않고도 데이터베이스를 조작할 수 있습니다.

 

21. hoisting이란?

더보기

호이스팅(Hoisting)은 자바스크립트에서 변수나 함수 선언을 함수 유효 범위(또는 함수 외부의 경우 전역 범위)의

맨 위로 이동하는 메커니즘입니다. 자바스크립트 인터프리터가 변수와 함수의 메모리 공간을 선언 전에

미리 할당하는 것을 의미합니다. var로 선언한 변수의 경우 호이스팅 시 undefined로 변수를 초기화합니다.

이는 자바스크립트 Parser가 함수 실행 전 해당 함수를 한 번 훑어서 필요한 값들을 끌어올리는 것으로,

실제로 코드가 끌어올려지는 것은 아니며 자바스크립트 Parser 내부적으로 끌어올려서 처리하는 것입니다.

 

22. TDZ란?

더보기

TDZ는 Temporal Dead Zone의 약자로, 일시적인 사각지대를 의미합니다. 

스코프의 시작 지점부터 초기화 시작 지점까지의 구간을 TDZ라고 합니다.

이 구간에서 선언 이전에 참조한 변수는 참조 에러가 발생합니다.

 

console.log(x); // ReferenceError: Cannot access 'x' before initialization
let x = 10;

 

23. Closure 함수란?

더보기

클로저(Closure)는 어떤 함수의 내부 함수가 외부 함수의 변수(*프리변수)를 참조할 때, 외부 함수가 종료된 후에도 내부 함수가 외부 함수의 변수를 참조할 수 있도록 어딘가에 저장하는 함수를 의미합니다. 클로저는 일급함수로서 전달할 수 있는 함수인데, 함수를 이리 저리 전달해서 사용할 때, 그 함수가 처음 정의될 때의 Context를 그대로 가지고 있을 필요가 있는 경우가 있습니다

클로저의 예제

더보기

function outer() {
  let x = 10;
  function inner() {
    console.log(x);
  }
  return inner;
}

let closure = outer();
closure(); // 10

 

24. 실행컨텍스트가 무엇인가요?

더보기

실행 컨텍스트(Execution Context)는 코드가 실행되는 환경을 제공하고 변수의 유효 범위를 관리합니다. 

실행 컨텍스트는 스코프 체인, 호이스팅, 클로저 등 다양한 핵심적인 내용들을 이해하기 위해서는

필수적으로 알아야 하는 개념입니다.

 

25. Node.js란 무엇이며, 사용하는 이유는 어떻게 되나요?

더보기

Node.js는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임입니다. Node.js는 확장성 있는 네트워크 애플리케이션(특히 서버 사이드) 개발에 사용되는 소프트웨어 플랫폼입니다. 작성 언어로 자바스크립트를 활용하며 Non-blocking I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능을 가지고 있습니다.

Node.js를 사용하는 이유 중 하나는 자바스크립트를 동일하게 사용해서 서버단 로직을 처리할 수 있다는 점입니다. 새로운 언어를 습득하지 않고도 자바스크립트를 활용해 서버기술을 빨리 개발/응용할 수 있습니다.

또한 개발이 빠르고 쉽습니다. 서버 설치부터 화면 띄우는 것까지 금방 처리됩니다.

 

 

 

 

 

728x90
반응형
728x90
반응형

RESTful API는 설계부터 잘 해놔야 team member와 사용자가 잘 사용할 수 있다.

API는 CRUD (Create, Read, Update, Delete) 를 위해 활용된다.

CRUD


이때 API가 필요한 URL을 모두 만들고 싶겠지만 이렇게 하면 URL이 너무 많아지고 복잡해질 뿐만 아니라 협업 구성원이 해당 URL을 이해하기 어려울 것이므로 좋은 설계가 아니다.
그러므로 convention에 따라 적절한 URL을 설계해야 한다.

  • 동사 사용 금지
    ex. /create, /see, /get, /edit, /delete, /update, /find
  • collection (복수) 과 unique identifer를 활용해 두 종류의 URL 생성
    ex. /movies, /movies/inception
    ᅠᅠᅠㄴ movies : collection, inception : unique identifier

동사 사용금지

이렇게 하고 나서 HTTP request methods와 결합하자.
ex. GET/POST/PUT/DELETE + /movies/(unique identifier)
이 방식의 URL이 더 간결하고 API의 구조를 이해하기에도 더 직관적이다.

 

객체들의 관계 interaction을 위해 URL을 사용할 수도 있다.
ex. GET/POST/PUT/DELETE + /movies/inception/actors

GET으로 읽고,

POST으로 생성하고,

PUT으로 업데이트하고,

DELETE로 삭제!

 

검색이나 filter를 처리하기 위해서는 매번 URL을 새롭게 만드는 것보다 query parameters를 활용하는 게 낫다.
ex. /getTopRatedMovies  /movies?main_rating=9.8
ᅠᅠᅠ/findMoviesFromThisYear  /movies?release_date=2021
이렇게 query parameters를 활용하면 pagination도 할 수 있다.
ex. /movies?page=5

728x90
반응형

+ Recent posts