티스토리 뷰

728x90
반응형

목차

     

    MVC 구조는 스프링을 처음 배울 때부터 지금까지 유용하게 써먹고 있는 구조이다.

     

    사실 기대와는 달리 레거시코드의 웹플럭스가 함수형 인터페이스가 아닌 기존 MVC를 사용하고 있기도 하고.

     

    어쨌거나 TypeScript를 이용한 Node.js를 배우기 위해, 알고리즘을 풀며 언어에 익숙해지는 동시에

     

    아키텍처 및 라이브러리 공부도 미리 해놓는 게 좋을 것 같다는 판단이 들어서, 짬짬이 공부를 하고 있다.

     

    정리 시작!

     

    MVC Pattern

     

    MVC(Model-View-Controller)는 소프트웨어 설계 패턴 중 하나로,

     

    애플리케이션을 모델, 뷰, 컨트롤러의 세 부분으로 분리하여 설계하는 패턴을 가리킨다.

     

    분리의 목적은 당연히 관심사를 분리해 한 곳에 모아 가독성과 유지보수성을 높이기 위함이다.

     

    Node.js는(여기선 Express 프레임워크를 사용한다) 스프링부트와는 조금 다른 방식의 MVC를 구현하는데, 이는 아래와 같다.

     

    Model

     

    애플리케이션의 데이터와 비즈니스 로직을 처리한다. 스프링에선 비즈니스 로직을 엔티티 클래스에 두면서도

     

    서비스 계층을 따로 분리해 표현하기도 하지만, Node.js는 그렇지 않은 듯 보인다.

     

    View

     

    이 부분은 사용자에게 보여주는 부분으로, 주로 UI를 담당한다. 모델로부터 데이터를 받아 사용자에게 보여주는 역할을 하지만,

     

    스프링과 비슷하게 주로 API 개발을 한다면, 명시적으로 존재하지 않을 수 있다.

     

    Controller

     

    이 부분 역시 스프링부트와 비슷하다. 가장 앞에서 사용자의 요청을 받아 해석하고, 적절한 모델을 호출해 처리한 뒤,

     

    응답 데이터를 생성하여 그 결과를 뷰에 전달한다.

     

    Middleware / Service Layer

     

    Node.js와 Express에서 미들웨어는 말 그대로 컴포넌트 사이에서 특정 목적으로 사용되는 코드를 의미한다.

     

    주로 HTTP 요청과 응답, 그리고 다른 미들웨어를 호출하는 함수를 매개변수로 가지며,

     

    로깅, 에러 핸들링, 보안, 인증, 요청 검증, CORS 설정 등의 기능을 수행한다.

     

    스프링 부트에서 비슷한 기능을 수행하는 요소는 Filter와 Interceptor이며, 마찬가지로 응답의 전/후 처리를 한다.

     

    또한 서비스 계층은 주로 비즈니스 로직을 캡슐화하고, 컨트롤러와 모델 사이를 조정하는 역할을 하는데,

     

    이는 비즈니스 로직과 디비 접근 과정을 분리해서 유지보수과 테스트를 쉽게 만든다.

     

    물론 Node.js와 Express에서도 미들웨어와 모델을 통해 처리되지만, 단순히 Middleware == Service Layer라 볼 수는 없다.

     

    Basic Package Structure

     

    계속해서 Node.js와 Express 프레임워크를 이용한 기본적인 패키지 구성을 살펴보자.

     

    추가로 언어는 타입스크립트를, 데이터베이스는 몽고 DB를 사용하고 있다.

     

    구성은 아래와 같다.

     

    들어가기에 앞서 src 패키지는 보이는 바와 같이 소스코드가 저장되는 메인 폴더이다.

     

    config

     

    기본적인 설정이 관리되는 폴더이다. MVC 패턴과 직접적인 관련은 없으나 애플리케이션의 다른 부분(지금은 DB 설정)을

     

    지원하거나 설정하기 위해 생성한다.

     

    controllers

     

    컨트롤러 폴더이다. 현재는 사용자와 관련된 로직 데이터의 입출력을 관리하며,

     

    요청에 따라 적절한 모델을 호출하는 userController 클래스만 가지고 있다.

     

    middleware

     

    미들웨어 폴더이다. 지금은 인증과 관련된 미들웨어만 존재하며,

     

    사용자의 인증 상태 및 인증되지 않은 사용자의 접근 제한을 할 것으로 보인다.

     

    models

     

    모델 폴더이다. 현재는 위의 코드와 연계되는 사용자 정보를 담는 User.ts와

     

    디비와 상호작용하기 위한 Archive.ts 클래스만 가지고 있으며,

     

    위에서 언급했듯이 각 데이터를 처리하는 비즈니스 로직을 담고 있을 것으로 보인다.

     

    routes

     

    웹플럭스의 router 패키지와 같은, 요청을 엔드포인트로 라우팅 해주는 역할을 한다.

     

    다르게 말하자면 요청을 처리할 컨트롤러를 지정해 주는 클래스라고 할 수 있다.

     

    utils

     

    유틸 폴더는 재사용 가능한 유틸리티 함수를 포함한다.

     

    지금은 JWT 토큰을 생성하는 토큰 생성 유틸리티만 존재한다.

     

    etc.

     

    • server.ts: 서버의 시작점이다. 스프링에도 비슷한 클래스가 있으니 이해가 쉽다.
    • .env: 타입스크립트답게 환경 변수를 한 곳에 모아 관리한다. 퍼블릭 레포지토리에 올라가지 않게 조심해야 한다.
    • .gitignore: 깃허브로의 커밋 및 푸시 시 무시해야 할(올리지 말아야 할) 파일 및 폴더를 지정한다.
    • package(-lock).json: 프로젝트의 의존성과 설정을 관리한다.
    • tsconfig.json: 타입스크립트 컴파일러의 옵션을 지정한다.
    반응형
    댓글
    공지사항
    최근에 올라온 글
    최근에 달린 댓글
    Total
    Today
    Yesterday
    링크
    «   2024/06   »
    1
    2 3 4 5 6 7 8
    9 10 11 12 13 14 15
    16 17 18 19 20 21 22
    23 24 25 26 27 28 29
    30
    글 보관함