본 내용은 내일배움캠프에서 활동한 내용을 기록한 글입니다.
API 명세서를 작성해야 되는 이유는 무엇인가요?
설계 단계에서 구현해야 할 내용을 미리 파악하고 스키마 설계를 할 때 실수를 최대한 줄이기 위한 수단이기 때문이다.
특히, 여러 사람과 협업하는 환경에서 API 명세서는 중요한 커뮤니케이션 도구이다. 이 API 명세서를 통해서 각 팀원들의 작업에 대해 이해하고 효율적으로 협업이 가능하게 도와준다.
패키지 설치 시 package.json 파일의 dependencies에 추가되는 것과 devDependencies에 추가되는 것의 차이점은 무엇인가요?
dependencies는 프로그램이 돌아갈 때 필요한 패키지를 넣고, devDependencies에는 주로 개발할 때 사용하는 패키지를 넣는다. 이렇게 두 개로 나눔으로서 배포 시 프로그램을 빌드하는 시간을 줄일 수 있다.
예를 들면, dependencies에는 웹 서버 구축을 위한 express와 같은 배포시 필요한 패키지들을 넣고, devDependencies에는 nodemon과 같이 개발 과정에서만 필요한 패키지들을 넣는다.
MongoDB의 Schema는 무엇인가요? 그리고 Model은 또 무엇인가요?
Schema는 데이터베이스 내의 문서가 어떤 구조로 이루어져 있는지 정의한다. 예를 들면, 필드의 이름, 데이터의 타입, 유효성 검사 규칙 등을 명시할 수 있다.
Model은 데이터베이스의 데이터를 CRUD할 때 사용되는 데이터의 구조로, MongoDB에서 사용할 수 있는 메서드를 지원한다. 즉, Model은 Schema를 통해 데이터베이스와 상호작용하는 수단이다.
수정할 때 사용할 수 있는 HTTP Method는 PUT과 PATCH가 있는데, 어떤 차이점이 있나요?
PUT은 데이터의 전체를 수정할 때 사용되고 PATCH는 데이터의 일부 요소만 수정할 때 주로 사용된다.
데이터의 일부 요소만 변경하는 API에서 PUT을 사용하면 변경하는 일부 데이터는 수정이 되지만 나머지 요소들은 빈 값이 들어가게 된다.
API 호출 시 데이터를 넘기는 방식 3가지는 무엇이며, 각각은 언제 사용하나요?
Body : 회원가입, 로그인, 게시글 등록 등과 같은 데이터의 양이 많고 복잡할 때 주로 사용
Query : 요청의 크기가 작아서 빠르게 실행할 수 있는 검색 기능과 같은 곳에서 주로 사용
Params : URL에 간단한 ID값을 넘겨 데이터를 조회하는 곳에서 주로 사용
API 설계 시 RESTful하게 설계한다는 것은 무엇인가요?
RESTful하게 설계한다는 것은 쉽게 말하면 REST API 주소 체계를 이용한 서버를 설계한다는 의미이다.
REST API는 일종의 주소를 정하는 규칙으로, 서버의 자원을 정의하고 자원에 대한 주소를 지정하는 방법이다.
RESTful API 설계는 자원에 대해 정확히 정의해야 하고, HTTP 메서드를 기능에 맞춰서 활용해야 한다.
비밀번호 저장 시 평문으로 저장하면 DB 유출 시 문제가 됩니다. 어떻게 저장해야 안전하게 저장할 수 있을까요?
비밀번호를 해시 함수를 통해 변환해서 데이터베이스에 저장한다.
각 비밀번호에 랜덤한 문자열과 같은 솔트(Salt)를 추가해서 해싱을 한다.
해싱 시 bcrypt와 같은 안전한 알고리즘을 사용한다.
미들웨어를 사용하는 이유와 에러 처리 이외에 어떤 용도로 사용할 수 있을까요?
미들웨어를 통해 공통적인 기능들을 모듈화해서 여러 애플리케이션에서 재사용될 수 있도록 한다. 이는 개발 시간을 단축시키고 코드의 유지 보수성을 향상시킨다.
또한 미들웨어는 에러 처리 이외에도 인증 및 인가, 요청과 응답을 로깅, 여러 작업에서 공통으로 사용되는 로직의 전처리, 세션 및 쿠기 관리 등에서 사용된다.
비동기 프로그래밍과 동기 프로그래밍의 차이점을 설명해주세요. 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를 보다 읽기 쉽고 간결하게 사용할 수 있도록 도와주는 문법이다.
4일 동안의 예비군 때문에 학습 진행도가 많이 뒤쳐짐
그래서 나머지 강의를 최대한 학습할 예정
예비군 기간동안은 강의를 시청만 했기 때문에 약간의 정리가 필요
예비군이 끝나고 당장 내일 튜터님과 1:1 모의 기술면접이 진행됨
학습 진행도가 많이 느려서 걱정이 많음
그래서 오늘 모의 면접에 대비해서 질문들에 대한 답변을 정리함
이러한 기술면접 질문들은 나중에 큰 도움이 될 것이 분명함
서류가 붙어도 기술면접에서 답하지 못하면 크게 마이너스가 되기 때문