NestJS란?
NestJS는 두 가지 기능을 제공하는 프레임워크입니다.
1. 프로그램의 구조 제공
2. 객체의 인스턴스 생성 및 관리(의존성 주입)
NestJS로 만들 수 있는 앱
1. 서버(HTTP, GraphQL, 웹소켓, gPRC)
2. 마이크로서비스 앱
3. 독립형 앱(Stand Alone. CLI 앱 혹은 스케줄러 앱)
구조 문제 해결
Node.js 환경의 백엔드 프레임워크들은 파일/폴더 구성을 강제 하지 않습니다. 이로 인해 Node.js로 작성된 백엔드 프로젝트들은 개발자마다 파일/폴더 구성이 제각각이라 동일한 프로젝트 안에서도 코드 파악이 어려운 문제가 발생합니다.
NestJS는 일정한 파일/폴더 구성을 강제해 구조 문제를 해결합니다.
NestJS의 특징
- 모듈화: 애플리케이션을 모듈로 나누어 관리하고, 코드의 재사용성을 높입니다.
- 의존성 주입: 객체의 인스턴스를 프로그래머가 아니라 프레임워크에서 관리하여, 코드의 결합도를 낮추고, 테스트 용이성을 높입니다.
- 데코레이터: 클래스와 메서드에 메타데이터를 추가하여 코드의 가독성을 높이고 기능을 확장합니다.
모듈화
하나의 앱은 여러 기능들이 있는데, 여러 기능들을 모듈로 나누어 관리하면 재사용성이 높아지고, 유지보수에 용이합니다.
의존성 주입
의존성 주입(Dependency Injection)은 제어의 역전을 구현하는 방법의 하나로, 객체의 생성 및 관리를 개발자가 아니라 프레임워크에서 하는 것을 의미합니다.
제어의 역전
제어의 역전(IoC; Inversion of Control)은 프로그램의 로직을 개발자가 아니라 라이브러리 혹은 프레임워크에서 제어하도록 위임하는 디자인 패턴을 말합니다.
제어의 역전을 적용하지 않은 코드
main(){
if(A일 때)
else(B일 때)
}
제어의 역전을 적용한 코드
main(){
위임함수()
}
위임함수(){
if(A일 때) return A의 결과
else(B일 때) return B의 결과
}
의존성 주입 예시
의존성 주입을 사용하지 않으면 객체의 생성 및 관리를 프로그래머가 해야합니다.
NestJS를 사용하면 객체의 생성을 프레임워크가 대신 해줍니다.
의존성 주입을 적용하지 않은 코드
클래스의 인스턴스가 필요할 때마다 인스턴스를 생성합니다.
// ClassA가 필요할 때 1
const classA1 = new ClassA();
// ... 코드 생략
// ClassA가 필요할 때 2
const classA2 = new ClassA();
의존성 주입을 적용한 코드
class AppController {
private moduleA: ModuleA
}
// 프레임워크에서 관리하기 때문에 아래 코드는 신경쓰지 않아도 된다.
class NestFactory() {
create(){ /* 인스턴스 생성 및 관리를 대신해주는 코드 */ }
}
의존성 주입의 이점
- 결합도 감소: 객체 간 결합도를 낮추어 유지보수성을 높입니다. (결합도가 0이 되는 것이 아니라 줄어드는 것입니다)
- 테스트 용이성 : 애플리케이션 전체에서 동일한 객체를 사용하기 때문에 테스트가 용이합니다.
데코레이터
데코레이터를 사용해 클래스, 메서드가 어떤 역할을 하는지 명확히 하면서, 기능을 추가할 수 있습니다.
데코레이터를 사용하지 않은 코드 (Express)
const router = express.Router();
router.get('/post/:id', (req, res) => {
if (typeof (req.id) !== 'string') String(req.id)
res.send(`post ${id}`);
});
데코레이터를 사용한 코드 (NestJS)
@Controller('post')
class PostController {
@Get(':id')
getPostId(@Param('id', ParseStringPipe) id: string){
return `post ${id}`;
}
}
'NestJS > NestJS 문서화' 카테고리의 다른 글
컨트롤러 (0) | 2025.04.23 |
---|---|
모듈 (0) | 2025.04.23 |
NestJS의 요청 처리 과정 (0) | 2025.04.14 |
NestJS 프로젝트 기본 구조 (0) | 2025.04.14 |
Nest CLI (0) | 2025.04.14 |