NestJS / / 2024. 11. 4. 00:58

NestJS 초기 파일들의 의미

NestJS 프로젝트 구조에서 src 폴더 안의 각 파일은 다음과 같은 역할을 합니다. 이 파일들은 기본적인 NestJS 애플리케이션의 구성 요소로, 각 파일이 특정한 역할을 담당하며 NestJS의 계층적 구조에 따라 기능이 분리되어 있습니다.


1. app.controller.ts

  • 역할: 컨트롤러(Controller)로, 클라이언트 요청을 처리하고, 적절한 응답을 반환하는 역할을 합니다.
  • 기능:
    • HTTP 요청(GET, POST, 등)을 수신하고, 이에 대한 응답을 결정합니다.
    • 비즈니스 로직을 직접 구현하지 않고, 서비스 계층에 요청을 전달하여 결과를 반환받습니다.
  • 구조: @Controller 데코레이터를 사용하여 컨트롤러 클래스를 정의하고, 메서드마다 @Get(), @Post()와 같은 데코레이터를 통해 HTTP 요청 메서드를 정의합니다.

2. app.controller.spec.ts

  • 역할: 테스트 파일로, app.controller.ts 파일의 컨트롤러를 테스트하기 위한 유닛 테스트 파일입니다.
  • 기능:
    • Jest를 사용하여 컨트롤러의 각 메서드가 예상대로 동작하는지 검증합니다.
    • 의존성을 모킹(Mock)하여, 컨트롤러가 특정 상황에서 예상되는 응답을 반환하는지 확인합니다.
  • 구조: describe, it, expect 등을 사용하여 테스트 케이스를 정의하며, 실제 서버 없이도 컨트롤러의 기능을 단위 테스트할 수 있습니다.

3. app.module.ts

  • 역할: 모듈(Module)로, NestJS 애플리케이션의 루트 모듈입니다. 애플리케이션에서 사용할 컨트롤러와 서비스, 다른 모듈을 등록 및 관리합니다.
  • 기능:
    • imports, controllers, providers 등 다양한 설정을 통해 애플리케이션의 주요 구성 요소를 정의합니다.
    • @Module() 데코레이터를 사용하여, 현재 모듈에 속하는 컨트롤러와 서비스를 명시하고, 필요에 따라 다른 모듈을 임포트하여 사용할 수 있습니다.
  • 구조: 모든 NestJS 애플리케이션은 최소 하나의 모듈(AppModule)을 포함하며, 이 모듈에서 애플리케이션의 초기 구성을 담당합니다.

4. app.service.ts

  • 역할: 서비스(Service)로, 비즈니스 로직을 처리하는 계층입니다.
  • 기능:
    • 데이터를 조회하거나 가공하는 등의 비즈니스 로직을 수행합니다.
    • 주로 컨트롤러에서 호출되어 요청을 처리하며, 데이터를 반환하거나 데이터베이스와 상호작용하는 로직을 포함할 수 있습니다.
  • 구조: @Injectable() 데코레이터를 사용하여 서비스 클래스가 의존성 주입(DI)에 사용할 수 있도록 만듭니다. 다른 서비스 또는 데이터베이스 접근 로직을 필요로 할 경우, 이곳에서 주입받아 사용할 수 있습니다.

5. main.ts

  • 역할: 엔트리 파일(Entry File)로, NestJS 애플리케이션을 시작하는 진입점입니다.
  • 기능:
    • NestFactory.create()를 통해 애플리케이션 인스턴스를 생성하고, 서버를 시작합니다.
    • 환경 설정(예: 포트 설정)이나 미들웨어 설정을 추가할 수 있습니다.
    • bootstrap 함수 내에서 애플리케이션을 구성하고, 애플리케이션이 지정된 포트에서 요청을 받을 수 있게 실행합니다.
  • 구조: async function bootstrap() 함수 안에서 애플리케이션 인스턴스를 생성하고, app.listen()을 호출하여 서버가 실행되도록 설정합니다.

요약

파일명 역할 설명
app.controller.ts 컨트롤러 (Controller) 클라이언트 요청을 처리하고 서비스로부터 결과를 받아 응답을 반환합니다.
app.controller.spec.ts 컨트롤러 테스트 파일 (Unit Test for Controller) app.controller.ts의 컨트롤러 메서드를 테스트하기 위한 유닛 테스트 파일입니다.
app.module.ts 루트 모듈 (Root Module) NestJS 애플리케이션의 주요 구성 요소를 정의하고 등록하는 루트 모듈입니다.
app.service.ts 서비스 (Service) 비즈니스 로직을 처리하며, 컨트롤러에 의해 호출됩니다.
main.ts 엔트리 파일 (Entry File) 애플리케이션을 시작하는 진입점으로, NestJS 서버를 생성하고 실행하는 역할을 합니다.

이 기본 구조는 NestJS의 계층적 아키텍처에서 각 파일이 명확한 역할을 가지도록 돕고, 코드의 유지보수성과 확장성을 높여줍니다.

1. Middleware

  • 역할: 요청(Request)이 라우터에 도달하기 전에 실행되며, 요청을 가로채 필요한 작업을 수행합니다.
  • 기능 예:
    • 로그 기록: 요청이 들어올 때마다 로그를 남기도록 설정하여, 요청 메서드와 URL을 기록할 수 있습니다.
    • 인증 토큰 검사: 요청 헤더에 포함된 JWT 토큰을 확인하여 인증이 필요한 라우터로의 접근을 차단할 수 있습니다.
    • 요청 데이터 변경: 요청 본문(body) 데이터를 가공하거나 추가 속성을 삽입하는 작업을 할 수 있습니다.

2. Guard

  • 역할: 요청이 특정 라우트에 접근할 수 있는지 결정하는 보안 계층입니다. 인증과 권한 확인 작업을 담당합니다.
  • 기능 예:
    • 로그인 확인: 사용자가 로그인을 했는지 여부를 확인하여, 로그인이 필요한 페이지에 접근할 때만 요청을 허용할 수 있습니다.
    • 권한 검사: 관리자나 특정 권한이 있는 사용자만 접근할 수 있도록 설정하여, 일반 사용자가 접근할 수 없는 기능에 대한 접근을 제한할 수 있습니다.

3. Interceptor

  • 역할: 요청 전과 후의 데이터를 가로채고, 이를 변경하거나 추가 작업을 수행할 수 있습니다.
  • 기능 예:
    • 응답 데이터 포맷팅: 데이터베이스에서 가져온 원시 데이터를 사용자 친화적인 형태로 변환하여 응답할 수 있습니다.
    • API 응답 시간 로깅: 요청을 처리하는 데 걸린 시간을 측정하여 성능 로깅에 활용할 수 있습니다.
    • 캐싱: 동일한 요청이 반복될 때 DB 쿼리를 줄이기 위해 캐시된 데이터를 반환할 수 있습니다.

4. Pipe

  • 역할: 요청 데이터의 유효성 검사와 변환을 담당합니다. Controller에 데이터가 도달하기 전에 이를 검증하고 필요한 형식으로 변경합니다.
  • 기능 예:
    • 데이터 유효성 검사: 숫자로 입력해야 하는 필드에 문자열이 들어오는 경우 이를 차단하거나 오류 메시지를 반환할 수 있습니다.
    • 데이터 형식 변환: 문자열로 전달된 숫자 데이터를 실제 숫자 타입으로 변환하여 Controller가 올바른 타입으로 데이터를 다룰 수 있도록 합니다.
    • 필수 필드 확인: 특정 필드가 요청 본문에 존재하지 않을 경우 에러를 발생시켜 사용자에게 필수 입력값을 안내할 수 있습니다.

5. Controller

  • 역할: 클라이언트의 요청을 받아 비즈니스 로직을 수행하기 위해 Service를 호출하고, 최종 응답을 반환하는 역할을 합니다.
  • 기능 예:
    • 사용자 등록 API: 회원가입 요청을 받아 Service에 사용자 데이터를 넘기고, 성공 또는 실패 응답을 반환합니다.
    • 상품 목록 조회 API: DB에 저장된 상품 목록을 가져와 사용자에게 전달합니다.
    • 게시글 작성 API: 사용자로부터 받은 게시글 데이터를 가공한 후 저장 요청을 전달하고, 성공 메시지를 반환합니다.

6. Service

  • 역할: 비즈니스 로직을 수행하는 계층입니다. 데이터를 처리하고 필요 시 데이터베이스와 상호작용을 통해 데이터를 관리합니다.
  • 기능 예:
    • 회원가입 처리: 입력된 비밀번호를 암호화하고, 사용자 데이터를 데이터베이스에 저장합니다.
    • 상품 가격 계산: 특정 조건에 따라 상품의 가격을 할인하거나 추가 비용을 계산하여 반환할 수 있습니다.
    • 로그인 처리: 사용자의 인증 정보를 확인하고, JWT 토큰을 생성하여 반환합니다.

7. Repository

  • 역할: 데이터베이스와 상호작용하는 계층입니다. TypeORM 등 ORM을 통해 데이터베이스 접근과 관리를 수행합니다.
  • 기능 예:
    • 사용자 조회: 사용자 ID를 기반으로 해당 사용자의 데이터를 DB에서 가져옵니다.
    • 상품 저장: 새로운 상품 정보를 데이터베이스에 저장하거나 기존 상품 정보를 업데이트합니다.
    • 게시글 삭제: 특정 게시글 ID에 해당하는 게시글을 데이터베이스에서 삭제합니다.

8. Exception Filter

  • 역할: 애플리케이션 내에서 발생하는 예외를 처리하여, 사용자에게 일관된 형식의 오류 메시지를 반환합니다.
  • 기능 예:
    • 404 에러 처리: 존재하지 않는 경로에 대한 요청이 들어오면 "찾을 수 없는 페이지입니다"와 같은 메시지를 반환합니다.
    • 인증 실패 처리: 로그인 실패 시 "잘못된 인증 정보입니다"와 같은 사용자 친화적인 메시지를 반환합니다.
    • 서버 에러 처리: 예상치 못한 오류 발생 시 "서버 오류가 발생했습니다"라는 메시지를 반환하여 사용자에게 서버 오류 상황을 알립니다.

각 요소들은 독립적으로 요청/응답 과정에서 필요한 작업을 수행하며, 요청이 들어온 후 Controller로 도달하기 전까지 다양한 전처리 작업을 거치게 됩니다.

'NestJS' 카테고리의 다른 글

NestJS 핫리로드 트러블슈팅  (1) 2024.11.16
NestJS Pipe  (0) 2024.11.15
회원가입로직  (2) 2024.11.14
NestJS DI(Dependency Injection)  (0) 2024.11.06
NodeJS 기술적 소개  (2) 2024.11.02
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유