본문 바로가기
내일배움 강의/강의-NestJS

1주차

by GREEN나무 2025. 1. 19.
728x90

웹서버 틀 + express 패키지 설치

const express = require('express')

const app = express()

 

app.get('/', function (req, res) {

res.send('Hello World')

})

 

app.listen(3000) // 3000번 포트로 WAS 서버 바로 띄우기!

 

Express.js로 복잡한 웹 서버를 개발

클라이언트가 JSON 데이터를 보낼 때 해당 페이로드를 파싱하기 위해서 body-parser 미들웨어를 적용해야함.

4.16 버전 이후에는 express.json() 모듈을 body-parser 대신 미들웨어에 적용

 

body-parser 적용하여 페이로드 파싱 기능 추가

 

const express = require('express')

const bodyParser = require('body-parser'); ////

 

const app = express();

 

app.use(bodyParser.json()); // body-parser 미들웨어 적용

 

app.get('/', function (req, res) {

res.send('Hello World')

})

 

 

CORS 적용

브라우저에서 원활하게 웹 서버에 접속을 할 수 있도록 CORS 설정

const express = require('express')

const bodyParser = require('body-parser');

const cors = require('cors') ////

const app = express()

 

app.use(bodyParser.json());

 

const corsOptions = {

origin: 'http://kangchangmin.com',

optionsSuccessStatus: 200

}

 

app.get('/', function (req, res) {

res.send('Hello World')

})

 

// cors 미들웨어를 특정 API에 적용

// 편의상 app.use(cors())와 같은 코드로 모든 APIcross-origin 요청을 허용하는 경우도 많습니다.

app.get('/products/:id', cors(corsOptions), function (req, res, next) {

res.json({msg: '보안 이슈로 kangchangmin.comorigin에서만 호출을 할 수 있는 메소드'})

})

 

app.listen(3000);

 

 

cookie-parser 적용하여 로그인/로그아웃 처리

쿠키를 사용한 req,res

const express = require('express')

const bodyParser = require('body-parser');

const cookieParser = require('cookie-parser')

const cors = require('cors')

const app = express()

 

app.use(bodyParser.json());

app.use(cookieParser())

 

const corsOptions = {

origin: 'http://kangchangmin.com',

optionsSuccessStatus: 200

}

 

app.get('/', function (req, res) {

console.log('Cookies: ', req.cookies)

})

 

app.get('/products/:id', cors(corsOptions), function (req, res, next) {

res.json({msg: '보안 이슈로 kangchangmin.comorigin에서만 호출을 할 수 있는 메소드'})

})

 

app.listen(3000);

 

 

사용하고 싶은 미들웨어들이 많으면 많을수록 개발자들은 미들웨어를 계속 사용한다고 선언해야 하며 사용해야 하는 미들웨어들에 대한 공부를 해야함

 

레이어드 아키텍처 패턴

웹 서버를 구현할 때 가장 보편적으로 사용되는 구현 패턴

레이어드 아키텍처는 시스템을 여러 계층으로 나누어 각 계층이 특정 책임을 갖도록 하는 아키텍처 스타일

 

 

레이어드 아키텍처 패턴의 각 계층

- 프리젠테이션 계층 - 컨트롤러

- 클라이언트의 요청을 해석하고 응답하는 계층. 클라이언트와 직접적으로 통신

- APIUI를 제공

- 비지니스 계층으로 요청을 위임하고 받은 결과를 응답하는 역할만 수행.

- 비지니스 계층 - 서비스

- 프리젠테이션 계층으로부터 요청을 받아 비지니스 로직을 수행하는 계층.

- 비지니스 로직을 수행하는 과정에서 데이터 계층과 통신.

- 데이터 계층 - 리포지터리

- 실제 데이터베이스(RDBMS 혹은 NoSQL)에 접근하는 계층입니다.

 

 

 레이어드 아키텍처 패턴의 주요 특징

- 의존성

- 각 계층은 가장 가까운 하위 계층의 의존성을 주입받는다. (DI)

- 독립성

- 각 계층은 다른 계층의 역할을 침범하지 않는다.

- 각 계층은 역할이 명확하므로 기능 구현 및 테스트에 용이하다.

 

 

Express.js로 레이어드 아키텍처 패턴을 적용

자유롭지만 번거롭다

- Express로 레이어드 아키텍처 패턴을 나타내기 위해서는 디렉토리 구조를 명확하게 설계해야 하며 서비스 요구사항 변경 및 기획이 추가됨에 따라서 필요한 개념들을 새롭게 배워야 함.

- boilerplate도 공식적으로 인정되는 것은 아니기에 호환성, 디렉토리 구조 등의 문제가 발생할 수 있다.

 

 

Nest.js의 등장

명령어 하나로 쉽고 간편하게 계층 생성

자바스크립트에 비해서 보다 엄격한 타입 체크를 함으로써 여러 예외 상황을 사전에 방지할 수 있다.

레이어드 아키텍처 패턴을 구성할 때 Nest.js는 커맨드 하나로 간편하게 대부분의 구성요소를 구현할 수 있다.

 

nest g co posts # Posts 컨트롤러를 만들기

 

개발자는 웹 서버의 핵심 로직 구현에만 신경쓰고 그 외에 다른 부분들은 Nest.js에 일임할 수 있다.

- 해야 할 일이 줄어들어 비지니스 로직의 퀄리티와 코드 생산성이 향상될 가능성이 커진다