상세 컨텐츠

본문 제목

[nestJS] nest의 생성자 super 등 생소한 구조

카테고리 없음

by esoesmio 2024. 5. 9. 18:51

본문

 

 

 

이 코드는 NestJS 프레임워크에서 사용되는 `JwtStrategy` 클래스의 생성자 부분입니다. JavaScript와 Java는 모두 객체 지향 언어이지만, 문법과 특정 패턴에서 다른 점이 많습니다. 이 코드에서 사용된 주요 개념과 구성 요소를 자세히 설명해 드리겠습니다.

### 1. `constructor` 및 `@InjectRepository` 데코레이터

- **constructor**: 이것은 클래스의 인스턴스가 생성될 때 호출되는 특별한 메소드입니다. 생성자는 인스턴스 초기화를 위해 매개변수를 받아 클래스 내부의 속성을 설정할 수 있습니다.

- **@InjectRepository(UserRepository)**: 이 데코레이터는 NestJS의 의존성 주입 시스템을 사용하여 `UserRepository` 타입의 객체를 `JwtStrategy` 클래스에 주입합니다. `UserRepository`는 데이터베이스와 상호작용하여 사용자 데이터를 관리하는 데 사용됩니다. 이는 Java의 Spring Framework에서 사용되는 `@Autowired`와 비슷한 역할을 합니다.

### 2. `super` 호출

- **super**: `super` 키워드는 부모 클래스의 생성자를 호출하는 데 사용됩니다. 여기서 `JwtStrategy` 클래스는 Passport.js의 `Strategy`를 확장하므로, `Strategy` 클래스의 생성자를 호출해야 합니다. 이 호출을 통해 부모 클래스의 필요한 초기화 작업을 수행할 수 있습니다.

- `super({...})`에서 전달된 객체는 JWT 인증 전략을 구성하는 옵션들을 포함합니다:
  - **secretOrKey**: JWT 검증 시 사용할 비밀키입니다. 이 값은 환경 변수 `process.env.JWT_SECRET`에서 가져오거나, 설정 파일을 통해 `config.get('jwt.secret')`에서 가져옵니다.
  - **jwtFromRequest**: 이 함수는 각 HTTP 요청에서 JWT를 추출하는 방법을 정의합니다. `ExtractJwt.fromAuthHeaderAsBearerToken()`은 요청의 Authorization 헤더에서 Bearer 토큰 형식으로 제공된 JWT를 추출합니다.

### 코드 구조

전체적으로 보면, 이 생성자는 `JwtStrategy` 클래스를 초기화하는 데 필요한 설정을 구성하고, 의존성 주입을 통해 필요한 리포지토리를 클래스에 주입하여 사용할 준비를 합니다. `super` 호출은 이 클래스가 확장하는 Passport 전략의 필수 구성 요소를 설정합니다.

이와 같은 패턴은 Java의 Spring과 같은 프레임워크에서도 많이 볼 수 있는 구조입니다. Java에서는 부모 클래스의 생성자를 호출할 때 `super`를 사용하고, 필요한 의존성을 주입받기 위해 `@Autowired`나 생성자 기반 의존성 주입을 사용합니다. JavaScript에서는 이러한 기능이 데코레이터와 `super` 키워드를 통해 구현됩니다.

댓글 영역