디자인 패턴
프로그램을 구동하는 방법들로 다양한 기법들이 있다. 이전에 클래스와 팩토리 디자인 패턴에서 잠깐 소개했던 싱글턴 패턴, 팩토리 패턴 등이 그중 하나이다.
너무도 다양하여 fbeline/design-patterns-JS 링크로 대체한다. ES6 버전과 그 이전 버전으로 보기 편하게 작성되어 있다.
디자인 패턴을 모두 사용해볼만한 기회가 있을지 모르겠지만 이 문서까지 찾아와 글을 보고 있는 사람이라면 웹 개발과 어느정도 인연이 있다고 생각한다. 웹 프로그래머라면 적어도 팩토리, 싱글턴, MVC 패턴 정도는 알고 있어야 한다. 간단하게 개념만 복습하고 넘어가자
MVC 패턴
사용자 요청 URL -> Controller 라우팅 -> Model 데이터 -> View 응답 -> 사용자
Model, View, Controller 라고 하는 세가지 클래스로 구분하여 브라우저와 서버의 통신간에 있는 요청과 응답을 정규화한 패턴이다. 간단하게 표현하면 위와 같다. 브라우저 자바스크립트에서 구현할 이유가 없는 패턴이기 때문에 생소하겠지만 우선 최대한 설명해보겠다.
HTTP 요청은 반드시 URL을 포함하고 있다. 웹 어플리케이션 서버는 이 URL마다 프로그램기능들을 매핑시켜 두는데 컨트롤러는 URL을 파싱하여 매핑된 객체를 찾아 실행시켜주는 역할을 한다. 가장 앞에서 어느 객체에게 요청을 처리하게 할지 제어하는 역할을 담당한다.
요청을 처리할 때 주고 받는 파라미터들은 구조화된 모델 객체로 만든다. 모델 객체는 화면을 작성할 때 사용되는데 뷰는 전달받은 모델 객체를 기반으로 동적인 페이지를 구성하여 최종적으로 사용자에게 응답한다.
사실 MVC도 많이 함축된 약어이다. 자바 스프링 프레임워크를 예시로 들면 모델은 다시 인터페이스, 서비스, DTO, DAO 등으로 구성되고 컨트롤러 또한 디스패처와 같은 굵직한 객체들이 여러개 모여 동작한다. DB 커넥션, 드라이버, 기타 등등 잡다한 도구들 까지 합친다면 생각보다 알아야 할 것들이 많다.
Nodejs에서는 expressjs의 route()
함수를 더 많이 사용하기도 하고 컨트롤러보다는 라우터라는 단어가 더 널리 알려지기도 하여 혼동할 수도 있지만 근본적으로는 MVC와 동일한 패턴을 유지할 수 있다. 타입 스크립트가 발전하기 전까지 nodejs에서 이 패턴을 구현하기가 생각보다 까다로웠다. 자료형부터 인터페이스까지 지원되지 않는 문법들도 많고 여러가지 우회법을 사용해야 하다보니 프로그램이 걸레짝이 되는 경우가 많았었다. 최근에는 타입스크립트는 물론 zod와 같은 모델을 구성할 수 있는 강력한 툴들이 있기 떄문에 더 쉽고 단단한 패턴을 작성할 수 있게 되었다.