본문 바로가기

Nestjs12

[NestJs] config 사용하기 기존 Express 프레임워크를 사용할 때 환경변수 같은 노출되면 안 되는 변수들을 관리할 때 dotenv를 많이 사용하였는데 이 방법이 Nest에서도 사용가능하지만 좀 더 Nest스럽게 사용하기 위해 @nestjs/config 모듈 사용법에 대해 알아보겠습니다. @nestjs/config 란? @nestjs/config 모듈은 NestJs 프로젝트에서 환경 변수를 관리하기 위해 사용되는 모듈이며 내부적으로 dotenv와 다른 라이브러리르 활용하여 환경 변수를 관리하게 해 줍니다. @nestjs/config와 dotenv의 차이점 유효성 검사 : @nestjs/config는 class-validator, class-transformer를 사용하여 환경 변수의 유효성을 검사할 수 있습니다. 모듈성 : @n.. 2024. 3. 30.
[NestJs] 클린 코드 알아보기 클린 코드란? 클린 코드는 간결하고 이해하기 쉽고 수정이 용이한 코드를 말합니다. 가독성을 높이고 그에 따라 유지보수도 쉽고 또 에러가 발생할 가능성이 적기 때문에 협업에 있어서 매우 중요하다고 할 수 있습니다. 코드를 작성할 때 항상 고민하지만 막상 다른 사람에게 코드를 보여주거나 설명을 하기 위해 코드를 다시 보면 다른 사람이 보고 이해할 수 있을까 라는 생각이 들 때가 많아 클린 코드에 대해 정리해 보겠습니다. 클린 코드의 주요 원칙 가독성 : 다른 개발자가 코드를 읽고 이해하기 쉬워야 합니다. 간결성 : 코드는 가능한 짧으면서 하나의 기능만 수행해야 합니다. 재사용성 : 코드는 재사용 가능하도록 일반적인 형태로 작성되어야 합니다. 테스트 용이 : 코드를 테스트하기 쉬워야 합니다. 유지보수성 : 코.. 2024. 3. 28.
[NestJs] 로그인 기능 구현 Repository 패턴을 사용해서 간단한 로그인 기능을 구현해 보았는데 그건 어떤 식으로 Repository 패턴을 사용하는지에 대한 느낌만 알기 위해 간단 버전으로 구현한 내용이고 이번 시간에는 회원가입 시 패스워드 암호화, 로그인 성공 시 jwt 토큰 발급, 토큰 검사 기능을 구현한 로그인 기능을 구현해 보겠습니다. 구현에 앞서 사용되는 모듈들에 대해 알아보겠습니다. JsonWebToken(jwt) JWT는 JSON 객체를 사용하여 사용자 정보를 안전하게 전송하기 위한 개방형 표준입니다. 로그인 성공 시 서버에서 사용자의 정보를 기반으로 JWT를 생성하여 클라이언트에 반환합니다. 이후에 인증이 필요한 기능에 대한 요청 발생 시 클라이언트는 JWT와 함께 서버에 요청하고 서버는 이를 검증하여 해당 요.. 2024. 3. 23.
[NestJs] Repository 패턴 사용해보기 Repository 패턴이란? Repository 패턴은 데이터 소스 간의 중간 계층을 제공하여 데이터 액세스 로직과 비즈니스 로직을 분리하는 디자인 패턴입니다. 이 패턴을 사용하면 애플리케이션이 사용하는 데이터 소스의 실제 구현에 관계없이 일관된 방법으로 데이터를 조작할 수 있습니다. 주요 목적은 데이터 소스에 대한 직접적인 접근 대신 특정 엔티티에 대한 모든 데이터 액세스 로직을 캡슐화하여 애플리케이션과 데이터베이스 사이의 결합도를 낮추는 것입니다. Repository 패턴의 역할 repository는 데이터 액세스 로직을 처리합니다. 즉 데이터베이스와 관련된 로직을 처리하고 service는 비즈니스 로직을 처리합니다. CRUD 연산 : 기본 데이터베이스 연산을 추상화하고 이를 통해 개발자는 복잡한 .. 2024. 3. 20.
[NestJs] TypeORM 연결하기 ORM이란? Object-Relational Mapping의 약자로 관계형 데이터베이스와 객체 지향 프로그래밍 언어 간의 호환성 문제를 해결하기 위해 사용됩니다. 두 모델의 차이를 객체-관계 불일치라고 하며 이런 불일치를 ORM이 해결해줍니다. ORM의 장점 생산성 : 코드의 양이 감소하고 테이블을 클래스로 매핑하여 반복적이고 수동적인 연산 코드를 줄여줍니다. 자동화된 스키마 마이그레이션 : 일부 ORM 도구는 모델 변경 시 데이터베이스 스키마를 자동으로 업데이트하는 기능을 제공합니다. 유지보수성 향상 : 데이터베이스 작업을 객체와 메소드를 사용하여 수행함으로써 코드의 가독성과 유지보수성이 향상됩니다. 또한 재사용 가능한 모델과 비즈니스 로직의 캡슐화로 인해 코드의 중복성이 줄어듭니다. 기술 독립성 : .. 2024. 3. 18.
[NestJs] Middleware 알아보기 Middleware 란? Middleware는 클라이언트로부터 오는 요청을 서버가 처리하고 응답하기 전에 특정 로직을 실행할 수 있도록 하는 함수입니다. 요청과 응답 사이의 중간에서 작동한다하며 미들웨어라고 불리며 Nestjs를 비롯한 많은 웹 프레임워크에서 Middleware를 통해 로깅, 인증 검사, 요청 데이터의 파싱 등과 같은 태스크를 처리합니다. 기본적으로 Express의 Middleware와 동일한 동작을 수행합니다. Middleware 실행 흐름 Middleware는 클라이언트로 부터 받은 HTTP 요청이 Controller에 도착하기 전 즉 라우터 핸들러에 도달하기 전에 동작합니다. 해당 요청은 구성된 Middleware를 순서대로 거치게 되며 각 Middleware는 요청을 분석하고 해당.. 2024. 3. 15.
[NestJs] Interceptors 알아보기 Interceptor 란? Interceptor는 메서드 실행 전 후에 추가 로직을 실행할 수 있는 미들웨어와 유사한 클래스를 말합니다. 로깅, 캐시, respone 등의 공통 태스크를 처리하며 코드 재사용성과 코드의 간결화 등을 목적으로 사용합니다. Interceptor 실행 흐름 Interceptor는 Client에서 Controller의 handle가 호출되기 전과 후에 로직을 실행합니다. filter, pipe, guard와 다르게 전처리와 후처리를 하게 됩니다. 전처리 단계에서는 주로 로깅, 권한 검사, 데이터 변환 등의 작업을 수행하며 이 단계에서 요청을 조작하거나 특정 조건에 따라 요청을 거부할 수도 있습니다. 전처리가 완료 되면 next.handle()을 호출하여 실제 라우트 핸들러를 실행.. 2024. 3. 14.
[NestJs] Guards 알아보기 Guard 란? Nestjs에서 Guard는 인증과 권한 부여와 같은 보안 관련 로직을 처리하는 데 사용됩니다. 특정 조건이 충족될 때까지 해당 요청이 핸들러로 전달되지 않도록 역할을 하기 때문에 요청을 처리하기 전 사용자의 인증 상태나 권한을 검증할 수 있습니다. Guards의 역할 사용자의 권한이 user인지 admin인지 검증하거나 토큰을 검증하는 등 인증 및 권한 검사에 사용됩니다. Client에서 Controller까지 요청이 도달하기 전 중간 단계에서 동작하며 요청을 수락하거나 거부할 수 있는 논리적 조건을 정의 할 수 있습니다. Guard 파일 생성 src ㄴ guards ㄴ auth.guard.ts ㄴ roles.decoretor.ts ㄴ roles.guard.ts Guard 사용 방법 .. 2024. 3. 13.