API 명세서를 작성해야 되는 이유는 무엇인가요?
첫째, 개발자 간의 협업을 촉진합니다. 둘째, 개발자들이 API를 이해하고 올바르게 사용할 수 있도록 안내하는 역할을 하기 때문입니다. 셋째, 시스템의 에러를 빠르게 찾고 해결할 수 있기 때문입니다.
패키지 설치 시 package.json 파일의 dependencies에 추가되는 것과 devDependencies에 추가되는 것의 차이점은 무엇인가요?
dependencies에 추가되는 것은 애플리케이션을 배포할 때 포함이 되는 라이브러리들이 들어있고, devDependencies는 애플리케이션 배포에 포함이 되지 않고, 개발할 때 필요한 라이브러리가 들어 있습니다.
MongoDB의 Schema는 무엇인가요? 그리고 Model은 또 무엇인가요?
Schema는 하나하나의 정보들을 지정해 줄 수 있는 역할을 하고, Model은 Schema를 감싸주는 역할을 합니다.
대표적인 Http Method는 무엇이며, 각각은 언제 사용하나요?
GET: 리소스를 조회합니다.
POST: 데이터를 새로 등록합니다.
PUT: 리소스를 대체하고 해당 리소스가 없으면 생성합니다.
DELETE: 리소스를 삭제합니다.
PATCH: 리소스 부분을 일부만 변경합니다.
수정할 때 사용할 수 있는 HTTP Method는 PUT과 PATCH가 있는데, 어떤 차이점이 있나요?
PUT은 대상 리소스의 전체를 치환하는 데에 사용되고, PATCH는 서버 자원의 일부만 수정하거나 추가하는 데에 사용됩니다.
첫째, 200번대는 성공을 알립니다.
둘째, 300번대는 다른 페이지로 이동하는 것을 알립니다. 어떤 주소를 입력했는데 다른 주소의 페이지로 넘어갈 때 사용됩니다.
셋째, 400번대는 요청 자체에 오류가 있음을 나타냅니다.
넷째, 500번대는 서버 오류를 나타냅니다. 이는 요청은 제대로 왔지만 서버에 오류가 생겼을 때 발생합니다.
API 설계 시 RESTful하게 설계한다는 것은 무엇인가요?
서버의 자원을 정의하고 자원에 대한 주소를 지정해 이를 따를 수 있도록 체계적으로 설계하고, 가독성과 확장성 및 유지보수성을 향상시킵니다.
비밀번호 저장 시 평문으로 저장하면 DB 유출 시 문제가 됩니다. 어떻게 저장해야 안전하게 저장할 수 있을까요?
첫째, 해시 함수를 통해 비밀번호를 해싱하고 해시 값을 저장해야 합니다. 따라서 비밀번호 저장 시에 암호화가 가능합니다.
둘째, 해싱을 통해 얻어낸 해시 값을 한 번 더 해싱하고, 그 결과에 해당하는 해시 값을 한 번 더 해싱하는 과정을 여러 번 반복하는 key stretching을 실시합니다. 이는 해시 값의 반복횟수를 알아내야한다는 제약조건이 추가되고, 평문으로 변환하는 과정이 오래 걸리기 때문에 안전합니다.
셋째, 해시하기 전에 비밀번호에 추가되는 임의의 데이터인 salt를 추가하는 salting을 실시합니다. 왜냐하면 salt를 추가하게 되면 같은 비밀번호라도 해시 값이 다르게 나오기 때문에 안전하게 저장할 수 있습니다.
미들웨어를 사용하는 이유와 에러 처리 이 외에 어떤 용도로 사용할 수 있을까요?
요청과 응답에 다양한 기능을 추가할 수 있기 때문입니다. 에러 처리 외에는 정적인 파일들을 제공하고, 세션을 구현하거나 특정 사용자를 위한 데이터를 임시적으로 저장하고, 여러가지 파일들을 멀티파트 형식으로 업로드 할 때 사용할 수 있습니다. 예시를 하나 들어보면 next, joi를 이용해 미들웨어를 구현하고, 각 미들웨어별로 파일을 따로 구분해서 작성을 한 후 이를 app.js 파일에 꺼내서 쓰는방식으로 사용합니다.