상세 컨텐츠

본문 제목

[nestJS]Module들이 어떠한 역할을 하는가

카테고리 없음

by esoesmio 2024. 5. 9. 17:52

본문

이 코드 조각은 NestJS 프레임워크를 사용하여 `AppModule`이라는 루트 모듈을 정의하는 예입니다. 이 모듈에서는 여러 모듈을 임포트하고 `@Module` 데코레이터를 통해 해당 모듈들을 애플리케이션의 다른 부분들과 통합합니다. 각 임포트한 모듈이 어떤 역할을 하는지 아래에 자세히 설명드리겠습니다.

### `import { Module } from '@nestjs/common';`

- `@nestjs/common` 패키지에서 `Module` 클래스를 임포트합니다. `Module` 데코레이터는 NestJS에서 클래스를 Nest 모듈로 정의하는 데 사용됩니다. 모듈은 NestJS에서 애플리케이션의 구조를 정의하는 데 중요한 역할을 합니다. 각 모듈은 애플리케이션의 한 부분을 캡슐화하며, 컨트롤러, 서비스(프로바이더), 다른 모듈 등을 그룹화합니다.

### `import { TypeOrmModule } from '@nestjs/typeorm';`

- `TypeOrmModule`은 TypeORM 통합을 위한 NestJS 모듈입니다. TypeORM은 데이터를 관리하기 위한 ORM(Object-Relational Mapper)으로, 데이터베이스와 상호 작용을 추상화하는 데 사용됩니다. `TypeOrmModule.forRoot(typeORMConfig)`는 애플리케이션 루트 수준에서 TypeORM을 설정하고 초기화합니다. 여기서 `typeORMConfig`는 데이터베이스 연결 설정을 포함합니다. 이 설정에는 데이터베이스 타입, 호스트, 포트, 사용자 이름, 비밀번호, 데이터베이스 이름 등이 포함될 수 있습니다.

### `import { BoardsModule } from './boards/boards.module';`

- `BoardsModule`은 게시판 관련 기능을 관리하는 사용자 정의 모듈입니다. 게시판 기능을 위한 컨트롤러와 서비스가 이 모듈 내에서 정의되며, 게시글 생성, 수정, 삭제 등의 기능을 제공할 수 있습니다. 이 모듈의 분리는 기능별로 코드를 구조화하고 관리하기 용이하게 합니다.

### `import { AuthModule } from './auth/auth.module';`

- `AuthModule`은 인증 및 권한 부여 기능을 관리하는 모듈입니다. 이 모듈은 사용자 인증, 로그인, 로그아웃, 토큰 기반 인증(JWT 등)과 같은 기능을 제공합니다. 인증 모듈은 보안 관련 작업을 중앙화하고, 다른 부분의 애플리케이션과의 통합을 단순화합니다.

### `@Module({ imports: [TypeOrmModule.forRoot(typeORMConfig), BoardsModule, AuthModule], })`
- `@Module` 데코레이터는 `AppModule` 클래스를 Nest 모듈로 정의합니다. `imports` 배열은 `AppModule`이 의존하는 다른 모듈들을 목록으로 나타냅니다. 이 배열에 포함된 모듈들은 `AppModule`이 시작될 때 함께 초기화되고, 애플리케이션 전체에서 사용할 수 있게 됩니다.

이 구조를 통해 `AppModule`은 애플리케이션의 중심적인 진입점 역할을 하며, 다양한 기능 모듈들을 통합하여 전체 애플리케이션의 구성을 관리합니다. NestJS에서 모듈 시스템을 사용하면 애플리케이션의 각 부분을 깔끔하게 분리하고

 관리할 수 있어 유지 보수와 확장성이 향상됩니다.

 

 

이 임포트들이 어떤것을 의미하는가

 

 

이 코드는 NestJS 프레임워크를 사용하여 인증(Authentication)과 인가(Authorization) 기능을 처리하는 `AuthModule`을 정의하는 예시입니다. 각 구성 요소의 역할과 모듈이 어떻게 설정되는지 자세히 설명하겠습니다.

### 모듈 임포트 설명

1. **`@nestjs/common`**: NestJS의 기본 모듈로, 일반적인 기능들을 제공합니다.
2. **`JwtModule` from `@nestjs/jwt`**: JWT(Json Web Tokens)을 생성하고 검증하는 기능을 제공합니다. 이 모듈은 JWT 기반의 인증 메커니즘을 구현할 때 필요합니다.
3. **`PassportModule` from `@nestjs/passport`**: Passport.js를 NestJS에 통합합니다. Passport는 Node.js에서 널리 사용되는 인증 미들웨어로, 다양한 인증 방법("strategies")을 제공합니다.
4. **`TypeOrmModule` from `@nestjs/typeorm`**: TypeORM과의 통합을 제공하여 데이터베이스 엔티티와의 작업을 용이하게 합니다.

### 주요 파일 설명

1. **`AuthController`**: 인증 관련 HTTP 요청을 처리하는 컨트롤러. 로그인, 로그아웃, 사용자 등록과 같은 HTTP 요청을 받아들이고 응답합니다.
2. **`AuthService`**: 인증 관련 비즈니스 로직을 수행합니다. 예를 들어, 비밀번호 검증, 토큰 생성 등의 작업을 담당합니다.
3. **`JwtStrategy`**: JWT를 사용한 인증 전략을 정의합니다. 이 전략은 요청에서 JWT를 추출하고 검증하는 과정을 구현합니다.
4. **`UserRepository`**: 사용자 데이터에 대한 데이터베이스 작업을 추상화하는 리포지토리. TypeORM을 사용하여 구현됩니다.

### 모듈 설정

`@Module` 데코레이터 내의 객체는 모듈의 구성을 정의합니다:

1. **imports**:
   - `PassportModule.register({ defaultStrategy: 'jwt' })`: Passport 모듈을 등록하고 기본 인증 전략으로 JWT를 설정합니다.
   - `JwtModule.register(...)`: JWT 모듈을 설정합니다. 여기서는 `secret` 키와 토큰의 만료 시간(`expiresIn`)을 설정합니다. `secret`은 환경변수에서 가져오거나 설정 파일에서 정의된 값을 사용합니다.
   - `TypeOrmModule.forFeature([UserRepository])`: TypeORM을 이용해 특정 리포지토리(여기서는 `UserRepository`)를 현재 스코프의 모듈에 등록합니다.

2. **controllers**:
   - `[AuthController]`: 모듈에서 사용할 컨트롤러를 배열 형태로 등록합니다.

3. **providers**:
   - `[AuthService, JwtStrategy]`: NestJS의 의존성 주입 시스템을 통해 인스턴스화 될 서비스(프로바이더)를 등록합니다.

4. **exports**:
   - `[JwtStrategy, PassportModule]`: 이 모듈에서 정의하고 다른 모듈에서도 사용할 수 있도록 내보낼 프로바이더와 모듈을 명시합니다.

### 작동 원리

- **인증 과정**: 사용자가 로그인 요청을 보내면 `AuthController`는 `AuthService`를 사용하여 사용자의 신원을 확인합니다. 인증이 성공하면 `AuthService`는 `JwtModule`을 사용하여 JWT를 생성하고 반환합니다.
- **요청 인증**: 사용자가 이후 요청을 보낼 때 토큰을 포함시키면, `JwtStrategy`는 이

 토큰을 검증하고 요청이 유효한지 결정합니다.

이러한 설정은 JWT 기반의 인증 시스템을 구축할 때 필수적인 요소들을 포함하고 있으며, NestJS에서 제공하는 모듈과 기능을 효과적으로 사용하여 안정적인 인증 서비스를 제공합니다.

 

 

 

댓글 영역