카테고리 없음

13주차 (5)

jaeoun0238 2025. 1. 24. 21:21

1. Nest.js에서의 인증 (Authentication)

인증이란?
인증(Authentication)은 사용자의 신원을 확인하는 절차로, 웹 서비스에서 필수적인 보안 메커니즘입니다.
현대 웹 애플리케이션에서는 **JWT (JSON Web Token)**가 표준적인 인증 방식으로 널리 사용됩니다.

인증의 주요 목적

  • 사용자 식별: 누가 요청을 보냈는지 확인
  • 접근 권한 관리: 특정 리소스에 접근 가능한 사용자 확인
  • 보안 강화: 무단 접근 방지

2. Nest.js에서의 인가 (Authorization)

인가란?
인가(Authorization)는 인증된 사용자가 특정 리소스에 접근할 수 있는 권한이 있는지를 확인하는 절차입니다.
이는 사용자의 **역할(Role)**이나 권한에 따라 접근을 제어합니다.

인가 구현 방법

  1. 커스텀 데코레이터
    • 특정 역할이나 정보를 추출해 로직을 재사용
    • 예: @Roles('Admin'), @UserInfo()
  2. 가드 (Guards)
    • 특정 라우트에 접근 가능한지 제어
    • canActivate 메서드를 통해 허용/거부 결정
    • 예: AuthGuard('jwt'), RolesGuard

3. AOP (Aspect-Oriented Programming)

AOP란?
AOP는 공통 관심사를 분리하여 코드의 모듈성을 향상시키는 기법입니다.
횡단 관심사(로깅, 인증, 에러 처리 등)를 중앙에서 관리해 코드 중복을 줄이고 유지보수를 용이하게 합니다.

Nest.js에서의 AOP 구현

  1. 인터셉터 (Interceptor)
    • 요청/응답 처리 전후에 추가 로직 실행
    • 활용 예: 로깅, 데이터 변환, 에러 처리
  2. 프록시 객체
    • 기본 동작을 가로채 사용자 정의 동작으로 확장
    • 객체의 메서드 호출을 수정하거나 보강

4. Nest.js에서의 캐싱

캐싱의 목적

  • 반복적인 데이터 요청 성능 최적화
  • 데이터베이스 부하 감소
  • 응답 시간 단축

캐싱 전략

  1. 인-메모리 캐싱
    • 애플리케이션 메모리를 이용해 빠른 데이터 접근
  2. 분산 캐싱
    • Redis와 같은 외부 저장소를 활용해 확장성과 안정성 확보
  3. TTL(Time To Live) 설정
    • 캐시 데이터의 유효 기간 설정
  4. 최대 캐시 크기 제한
    • 메모리 초과 방지를 위한 설정

캐싱 고려사항

  • 자주 변경되지 않는 데이터
  • 읽기 작업이 많은 데이터
  • 메모리 사용량 모니터링

프로젝트에 적용한 주요 Nest.js 개념

1. 인증과 인가

  • JWT를 이용한 인증: 사용자의 로그인 상태를 확인
  • Role 기반 인가: 사용자 역할(Admin, User 등)에 따라 접근 권한 구분

2. 데이터베이스 관계 설정

  • 데코레이터 활용:
    • @ManyToOne, @OneToMany를 이용한 엔티티 간 관계 설정
    • 외래 키 제약 조건: onDelete: 'CASCADE' 옵션으로 연결된 데이터 삭제

3. 커스텀 데코레이터 및 가드 활용

  • 커스텀 데코레이터:
    • @Roles로 역할 기반 접근 제어
    • @UserInfo로 사용자 정보를 쉽게 추출
  • 가드:
    • RolesGuard로 역할 검증
    • AuthGuard('jwt')로 인증 상태 확인

4. DTO (Data Transfer Object)

  • 요청 데이터 유효성 검사를 위한 DTO 클래스 정의

5. 서비스 계층과 리포지토리 패턴

  • 서비스 계층: 비즈니스 로직 분리
  • 리포지토리 패턴: 데이터베이스 연동 모듈화

6. 모듈 구성

  • 기능별 모듈(User, Team, SupportMessage)로 분리
  • 의존성 주입으로 모듈 간 관계 관리

7. 환경 설정

  • ConfigModule로 환경 변수 관리
  • TypeORM을 이용한 데이터베이스 설정

8. 파일 업로드 처리

  • FileInterceptor를 사용한 파일 업로드 기능 구현



이번 트렐로 프로젝트에서 card 부분을 담당하게 되었는데 공용코드를 확인하는중 crypto라는 버그가 발생

 

너무나도 단순하게 node_modules안에있는 파일속에

const crypto = require('crypto');

를 추가해주니 해결됐다..!