[2024.05.23 TIL] 내일배움캠프 27일차 (모의 기술 면접 질문 정리)

My_Code·2024년 5월 23일
0

면접

목록 보기
3/4
post-thumbnail

본 내용은 내일배움캠프에서 활동한 내용을 기록한 글입니다.


💻 TIL(Today I Learned)

📌 Today I Done

✏️ 모의 기술 면접 질문 정리하기 (기본 기술 문제)

  • API 명세서를 작성해야 되는 이유는 무엇인가요?

    • 설계 단계에서 구현해야 할 내용을 미리 파악하고 스키마 설계를 할 때 실수를 최대한 줄이기 위한 수단이기 때문이다.

    • 특히, 여러 사람과 협업하는 환경에서 API 명세서는 중요한 커뮤니케이션 도구이다. 이 API 명세서를 통해서 각 팀원들의 작업에 대해 이해하고 효율적으로 협업이 가능하게 도와준다.


  • 패키지 설치 시 package.json 파일의 dependencies에 추가되는 것과 devDependencies에 추가되는 것의 차이점은 무엇인가요?

    • dependencies는 프로그램이 돌아갈 때 필요한 패키지를 넣고, devDependencies에는 주로 개발할 때 사용하는 패키지를 넣는다. 이렇게 두 개로 나눔으로서 배포 시 프로그램을 빌드하는 시간을 줄일 수 있다.

    • 예를 들면, dependencies에는 웹 서버 구축을 위한 express와 같은 배포시 필요한 패키지들을 넣고, devDependencies에는 nodemon과 같이 개발 과정에서만 필요한 패키지들을 넣는다.


  • MongoDB의 Schema는 무엇인가요? 그리고 Model은 또 무엇인가요?

    • Schema는 데이터베이스 내의 문서가 어떤 구조로 이루어져 있는지 정의한다. 예를 들면, 필드의 이름, 데이터의 타입, 유효성 검사 규칙 등을 명시할 수 있다.

    • Model은 데이터베이스의 데이터를 CRUD할 때 사용되는 데이터의 구조로, MongoDB에서 사용할 수 있는 메서드를 지원한다. 즉, Model은 Schema를 통해 데이터베이스와 상호작용하는 수단이다.


  • 대표적인 Http Method는 무엇이며, 각각은 언제 사용하나요?
    • GET : 특정 혹은 전체 데이터를 읽어오는 API 연결에 주로 사용
    • POST : 데이터를 서버에 등록하는 API 연결에 주로 사용 (또는 애매할 때 사용)
    • PUT : 특정 데이터의 전체를 수정하는 API 연결에 주로 사용
    • PATCH : 특정 데이터의 일부를 수정하는 API 연결에 주로 사용
    • DELETE : 특정 데이터를 삭제하는 API 연결에 주로 사용

  • 수정할 때 사용할 수 있는 HTTP Method는 PUT과 PATCH가 있는데, 어떤 차이점이 있나요?

    • PUT은 데이터의 전체를 수정할 때 사용되고 PATCH는 데이터의 일부 요소만 수정할 때 주로 사용된다.

    • 데이터의 일부 요소만 변경하는 API에서 PUT을 사용하면 변경하는 일부 데이터는 수정이 되지만 나머지 요소들은 빈 값이 들어가게 된다.


  • 대표적인 Http Status Code는 무엇이며, 각각은 언제 사용하나요?
    • 200 : 요청이 성공했을 때 (OK)
    • 201 : 요청이 성공 되었고, 새로운 데이터가 생성되었을 때 (Created)
    • 400 : 클라이언트의 입력이 잘못 되었을 때 (Bad Request)
    • 401 : 미승인된 요청일 때 (Unauthorized)
    • 404 : 잘못된 URL 요청일 때 (Not Found)
    • 500 : 서버에 문제가 생겼을 때 (Internal Server Error)
    • 501 : 서버에서 해당 기능을 지원하지 않을 때 (Not Implemented)

  • API 호출 시 데이터를 넘기는 방식 3가지는 무엇이며, 각각은 언제 사용하나요?

    • Body : 회원가입, 로그인, 게시글 등록 등과 같은 데이터의 양이 많고 복잡할 때 주로 사용

    • Query : 요청의 크기가 작아서 빠르게 실행할 수 있는 검색 기능과 같은 곳에서 주로 사용

    • Params : URL에 간단한 ID값을 넘겨 데이터를 조회하는 곳에서 주로 사용


  • API 설계 시 RESTful하게 설계한다는 것은 무엇인가요?

    • RESTful하게 설계한다는 것은 쉽게 말하면 REST API 주소 체계를 이용한 서버를 설계한다는 의미이다.

    • REST API는 일종의 주소를 정하는 규칙으로, 서버의 자원을 정의하고 자원에 대한 주소를 지정하는 방법이다.

    • RESTful API 설계는 자원에 대해 정확히 정의해야 하고, HTTP 메서드를 기능에 맞춰서 활용해야 한다.


  • 비밀번호 저장 시 평문으로 저장하면 DB 유출 시 문제가 됩니다. 어떻게 저장해야 안전하게 저장할 수 있을까요?

    • 비밀번호를 해시 함수를 통해 변환해서 데이터베이스에 저장한다.

    • 각 비밀번호에 랜덤한 문자열과 같은 솔트(Salt)를 추가해서 해싱을 한다.

    • 해싱 시 bcrypt와 같은 안전한 알고리즘을 사용한다.


  • 미들웨어를 사용하는 이유와 에러 처리 이외에 어떤 용도로 사용할 수 있을까요?

    • 미들웨어를 통해 공통적인 기능들을 모듈화해서 여러 애플리케이션에서 재사용될 수 있도록 한다. 이는 개발 시간을 단축시키고 코드의 유지 보수성을 향상시킨다.

    • 또한 미들웨어는 에러 처리 이외에도 인증 및 인가, 요청과 응답을 로깅, 여러 작업에서 공통으로 사용되는 로직의 전처리, 세션 및 쿠기 관리 등에서 사용된다.


✏️ 모의 기술 면접 질문 정리하기 (CS 문제)

  • 비동기 프로그래밍과 동기 프로그래밍의 차이점을 설명해주세요. Node.js에서 비동기 프로그래밍 기법이 중요한 이유는 무엇인가요?

    • 비동기 프로그래밍은 작업이 시작되면 해당 작업이 완료될 때까지 기다리지 않고 다음 작업을 시작한다.

    • 동기 프로그래밍은 하나의 작업이 완료될 때까지 다음 작업이 시작되지 않는다.

    • Node.js에서 비동기 프로그래밍은 싱글 스레드 환경에서 효율적인 동시성 처리와 높은 성능을 제공하기 위해서 필수적이다.

    • 비동기 프로그래밍 기법을 통해 여러 작업을 동시에 처리할 수 있어, 고성능 서버 애플리케이션을 구현하는 데 매우 중요한 역할을 한다.


  • 데이터베이스 ACID에 대해 설명해주세요.

    • Atomicity (원자성)은 트랜젝션이 데이터베이스에 완전히 반영되거나 전혀 반영되지 않아야 한다는 속성이다.

    • Consistency (일관성)은 트랜젝션 완료 후 데이터베이스가 일관성 있는 상태를 유지해야 한다는 속성이다. 즉, 정의된 규칙과 제약 조건을 만족해야 한다는 의미이다.

    • Isolation (독립성)은 동시에 실행되는 트랜젝션들이 서로 독립적으로 수행해야 한다는 속성이다.

    • Durability (지속성)은 트랜젝션 완료 후 그 결과는 영구적으로 데이터베이스에 저장되어야 한다는 속성이다.


  • node.js에서 이벤트 루프란 무엇이고 어떻게 동작하나요?

    • 이벤트 루프는 비동기 I/O 작업을 효율적으로 처리하기 위해 도와주는 도구이다.

    • 이벤트 루프는 크게 호출 스택, 이벤트 큐, 백그라운드로 구성되어 있다.

    • 호출 스택은 실행될 코드를 스택 구조로 관리한다.

    • 이벤트 큐는 비동기 작업의 콜백 함수들이 대기하는 큐 구조이다. 호출 스택이 비어있을 때 호출 스택으로 함수를 이동 시킨다.

    • 백그라운드는 타이머나 I/O 작업 콜백, 이벤트 리스너들이 대기하는 공간으로, 여러 작업이 동시에 실행될 수 있다.

    • 이벤트 루프는 호출 스택이 비어 있는지 확인하고, 비어 있다면 이벤트 큐에서 콜백 함수를 꺼내 호출 스택으로 이동시켜 실행합니다.


  • 실행컨텍스트에 대해 알고있는대로 설명해주세요.

    • 실행컨텍스트는 자바스크립트 코드가 실행될 때 필요한 환경 정보를 담고 있는 객체를 의미한다.

    • 실행컨텍스트는 크게 세 가지 요소로 나눠진다.

    • 변수 환경(Variable Environment)는 현재 컨텍스트 내의 식별자들과 그에 해당하는 값들을 저장하는 곳이다. 여기에는 변수, 함수 선언, 함수 매개변수 등이 포함된다.

    • 외부 환경(Lexical Environment)는 현재 컨텍스트가 참조하는 외부 코드의 환경을 가리킨다. 즉, 현재 실행 컨텍스트에서 찾을 수 없는 변수나 함수에 접근할 때, 외부 외부 환경을 통해서 바깥쪽 컨텍스트로 스코프를 이동해서 찾는다.

    • this 바인딩은 실행 컨텍스트에 따라 그 값이 달라지는 특별한 식별자이다. this의 값은 함수가 호출되는 방식에 의해 결정되는데, 전역에서와 일반 함수에서는 전역 객체, 메서드로서의 함수에서는 메서드를 호출한 객체, 생성자 함수에서는 새로 생성된 객체를 가리킨다. 그 밖에 call(), apply(), bind() 함수를 통해서 this의 값을 명시적으로 지정할 수 있다.


  • 프로미스와 async/await의 개념과 사용 방법을 설명하고, 두 방식의 차이점을 비교해주세요.

    • Promise, async/await 모두 비동기 작업을 다루기 위한 방법이다.

    • Promise는 비동기 작업을 처리하고 그 결과를 나타내기 위해 사용된다.

    • Promise는 .then(), .catch(), .finally() 메서드를 사용하여 비동기 작업의 결과를 처리할 수 있다.

    • async/await는 비동기 작업을 동기적으로 동작하도록 보이게 하기 위해 사용된다.

    • async/await는 try ~ catch를 통해서 에러를 쉽게 처리할 수 있다.

    • 즉, Promise와 async/await 모두 비동기 작업을 처리하기 위한 도구이며, async/await는 Promise를 보다 읽기 쉽고 간결하게 사용할 수 있도록 도와주는 문법이다.



📌 Tomorrow's Goal

✏️ 노드 숙련 강의 시청하기

  • 4일 동안의 예비군 때문에 학습 진행도가 많이 뒤쳐짐

  • 그래서 나머지 강의를 최대한 학습할 예정

  • 예비군 기간동안은 강의를 시청만 했기 때문에 약간의 정리가 필요



📌 Today's Goal I Done

✔️ 모의 기술 면접 질문 정리하기

  • 예비군이 끝나고 당장 내일 튜터님과 1:1 모의 기술면접이 진행됨

  • 학습 진행도가 많이 느려서 걱정이 많음

  • 그래서 오늘 모의 면접에 대비해서 질문들에 대한 답변을 정리함

  • 이러한 기술면접 질문들은 나중에 큰 도움이 될 것이 분명함

  • 서류가 붙어도 기술면접에서 답하지 못하면 크게 마이너스가 되기 때문



profile
조금씩 정리하자!!!

0개의 댓글