Node.js 백엔드 — 프레임워크가 감춘 것 · 요청 하나가 지나가는 길 · 퀴즈
퀴즈: 프레임워크가 감춘 것들
문항 8개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
경로는 있는데 그 메서드는 안 받을 때 올바른 상태 코드는?
- 404 — 없는 자원과 같게 다룬다
- 405 — 자원은 있고 그 동작만 허용되지 않는다
- 400 — 요청이 잘못된 것이다
- 501 — 서버가 구현하지 않은 것이다
라우팅 규칙이 안 먹을 때 가장 먼저 볼 것은?
- 등록 순서와 패턴의 범위 — 넓은 패턴이 위에 있으면 아래는 닿지 않는다
- 핸들러 함수 안의 로직
- 응답 헤더의 Content-Type 설정
- 서버가 듣고 있는 포트 번호
저장한 객체를 그대로 return 하는 코드의 진짜 위험은?
- 응답이 커져 전송이 느려진다
- JSON 직렬화에서 순환 참조 오류가 난다
- 나중에 컬럼을 하나 더하면 그 순간 API 응답도 조용히 바뀐다
- 클라이언트가 필드 순서에 의존하게 된다
출력에서 민감한 필드를 거를 때 delete 대신 허용 목록을 쓰는 이유는?
- delete 가 성능이 느리기 때문에
- delete 는 원본 객체를 변형시키기 때문에
- 빼는 방식은 새 필드가 생길 때마다 또 새어 나가기 때문에
- 허용 목록이 코드가 더 짧기 때문에
의존성 주입을 쓰는 가장 근본적인 이유는?
- 단위 테스트를 쓰기 편해서
- 프레임워크가 그렇게 하라고 정해서
- 상위 모듈이 하위 모듈의 구현에 묶이지 않게 하려고
- 객체 생성 비용을 줄이려고
DI 를 써 놓고도 갈아 끼울 수 없게 되는 가장 흔한 경로는?
- 생성자 인자가 너무 많아질 때
- 전역 싱글턴을 편의상 직접 import 할 때
- 인터페이스 대신 구체 타입을 쓸 때
- 주입 컨테이너 설정이 길어질 때
요청 처리 중 이벤트 루프를 막으면 무엇이 관측되나?
- CPU 사용률만 낮아진다
- 그 요청만 느려지고 나머지는 정상이다
- 처리하는 동안 타이머와 다른 요청이 모두 밀린다
- 메모리 사용량이 급증한다
API 계약을 시험할 때 서버를 띄우지 않는 편이 나은 이유는?
- 포트 충돌과 타이밍에 흔들리지 않아 실패가 진짜 실패를 뜻하기 때문
- 네트워크 계층은 시험할 가치가 없기 때문
- 서버를 띄우면 시험이 항상 통과하기 때문
- 실제 HTTP 는 표준이라 검증할 것이 없기 때문