
274
한 권으로 끝내는 Node & Express
});
});
},
};
이 컨트롤러는 라우트 관리를 실제 기능에서 분리했습니다. 여기서
home
,
preferences
,
orders
메서드는 뷰 선택을 빼면 완전히 같습니다. 할 일이 이것뿐이라면 이들을 결합해 범용
메서드를 만들었겠지만, 이렇게 한 주 목적은 각 메서드를 더 수정할 수 있게 하는 겁니다.
이 컨트롤러에서 가장 복잡한 메서드는
ajaxUpdate
입니다. 이름만 봐도
AJAX
를 써서 프론트
엔드에서 업데이트할 거라는 게 분명하군요. 하지만 요청 본문에서 전달된 매개변수를 맹목적
으로 믿고 고객 객체를 업데이트하지는 않았습니다. 그렇게 하면 공격자에게 문을 열어주게 됩
니다. 필드를 각각 처리하면 할 일이 좀 더 많지만, 그만큼 더 안전합니다. 프론트엔드에서도
당연히 유효성 검사를 했겠지만, 여기서도 합니다. 공격자가 자바스크립트를 살펴보고 프론트
엔드 유효성 검사를 건너뛰는
AJAX
쿼리를 만들어 애플리케이션 공격을 시도할 수 있다는 걸
잊지 마십시오. 중복이더라도, 항상 서버에서 유효성 검사를 해야 합니다.
거듭 말하지만, 제한은 상상력뿐입니다. 컨트롤러를 라우팅에서 완벽히 분리하고 싶다면, 당연
히 그렇게 할 수 있습니다. 필자의 의견으로는 불필요한 추상화지만, 네이티브 앱처럼 다른 종