노드심화 4-4

·2022년 12월 28일
0

study

목록 보기
37/81
post-thumbnail

컨트롤러(Controller) 란?

컨트롤러(Controller)란 클라이언트의 요청을 처리 한 후 서버에서 처리된 결과를 반환해주는 역할을 합니다.

  • 클라이언트의 요청(Request)을 수신합니다.
  • 요청(Request)에 들어온 데이터 및 내용을 검증합니다.
  • 서버에서 수행된 결과를 클라이언트에게 반환(Response)합니다.

프레젠테이션 계층(Presentation Layer) 이란?

계층 아키텍처 패턴에서는 프레젠테이션 계층(Presentation Layer)이라고 표현되며, 대표적으로는 컨트롤러(Controller)로 사용됩니다. 사용자(클라이언트)가 서버에 요청(Request)를 하게되면 가장 먼저 만나게 되는 계층입니다.

  • 하위 계층(서비스 계층, 저장소 계층)에서 발생하는 예외(Exception)를 처리 합니다.
  • 클라이언트가 전달한 데이터에 대해 유효성을 검증하는 기능을 수행합니다.
  • 클라이언트의 요청을 처리한 후 서버에서 처리된 결과를 반환합니다.

구현하기(express)

게시글 API

Express에서는 컨트롤러라우터를 연결하기 위해서 express.Router에서 특정 URIHTTP Method를 요청받았을 때 컨트롤러로 요청된 내용을 전달 해줘야합니다.

그렇기 때문에 routes 폴더에서 posts.routes.js 라는 파일을 만들어 PostsConrtoller와 연결하도록 구성

컨트롤러와 라우터를 연결

// routes/posts.routes.js

const express = require('express');
const router = express.Router();

const PostsController = require('../controllers/posts.controller');
const postsController = new PostsController();

router.get('/', postsController.getPosts);
router.post('/', postsController.createPost);

module.exports = router;

Post의 컨트롤러를 구현

// controllers/posts.controller.js

const PostService = require('../services/posts.service');

// Post의 컨트롤러(Controller)역할을 하는 클래스
class PostsController {
  postService = new PostService(); // Post 서비스를 클래스를 컨트롤러 클래스의 멤버 변수로 할당합니다.

  getPosts = async (req, res, next) => {
    // 서비스 계층에 구현된 findAllPost 로직을 실행합니다.
    const posts = await this.postService.findAllPost();

    res.status(200).json({ data: posts })
  }

  createPost = async (req, res, next) => {
    const { nickname, password, title, content } = req.body;

    // 서비스 계층에 구현된 createPost 로직을 실행합니다.
    const createPostData = await this.postService.createPost(nickname, password, title, content);

    res.status(201).json({ data: createPostData });
  }
}

module.exports = PostsController;

컨트롤러에서는 하위 계층이 어떠한 내부 구조를 가지고 있는지 신경쓰지 않고, 외부에 드러나 있는 메소드를 호출하기만 합니다. 이것이 가능한 이유는 추상화(Absctraction)의 특성 덕분입니다.

PostController에서는 클라이언트의 요청(Request)을 서비스 계층으로 데이터를 전달하는 것을 확인할 수 있습니다. 서비스 계층에서 어떠한 내부 구조를 통해 비즈니스 로직을 수행하는 것인지 상위 계층인 컨트롤러에게는 중요하지 않습니다.

profile
개발자 꿈나무

0개의 댓글