카테고리 없음
13주차 (5)
jaeoun0238
2025. 1. 24. 21:21
1. Nest.js에서의 인증 (Authentication)
인증이란?
인증(Authentication)은 사용자의 신원을 확인하는 절차로, 웹 서비스에서 필수적인 보안 메커니즘입니다.
현대 웹 애플리케이션에서는 **JWT (JSON Web Token)**가 표준적인 인증 방식으로 널리 사용됩니다.
인증의 주요 목적
- 사용자 식별: 누가 요청을 보냈는지 확인
- 접근 권한 관리: 특정 리소스에 접근 가능한 사용자 확인
- 보안 강화: 무단 접근 방지
2. Nest.js에서의 인가 (Authorization)
인가란?
인가(Authorization)는 인증된 사용자가 특정 리소스에 접근할 수 있는 권한이 있는지를 확인하는 절차입니다.
이는 사용자의 **역할(Role)**이나 권한에 따라 접근을 제어합니다.
인가 구현 방법
- 커스텀 데코레이터
- 특정 역할이나 정보를 추출해 로직을 재사용
- 예: @Roles('Admin'), @UserInfo()
- 가드 (Guards)
- 특정 라우트에 접근 가능한지 제어
- canActivate 메서드를 통해 허용/거부 결정
- 예: AuthGuard('jwt'), RolesGuard
3. AOP (Aspect-Oriented Programming)
AOP란?
AOP는 공통 관심사를 분리하여 코드의 모듈성을 향상시키는 기법입니다.
횡단 관심사(로깅, 인증, 에러 처리 등)를 중앙에서 관리해 코드 중복을 줄이고 유지보수를 용이하게 합니다.
Nest.js에서의 AOP 구현
- 인터셉터 (Interceptor)
- 요청/응답 처리 전후에 추가 로직 실행
- 활용 예: 로깅, 데이터 변환, 에러 처리
- 프록시 객체
- 기본 동작을 가로채 사용자 정의 동작으로 확장
- 객체의 메서드 호출을 수정하거나 보강
4. Nest.js에서의 캐싱
캐싱의 목적
- 반복적인 데이터 요청 성능 최적화
- 데이터베이스 부하 감소
- 응답 시간 단축
캐싱 전략
- 인-메모리 캐싱
- 애플리케이션 메모리를 이용해 빠른 데이터 접근
- 분산 캐싱
- Redis와 같은 외부 저장소를 활용해 확장성과 안정성 확보
- TTL(Time To Live) 설정
- 캐시 데이터의 유효 기간 설정
- 최대 캐시 크기 제한
- 메모리 초과 방지를 위한 설정
캐싱 고려사항
- 자주 변경되지 않는 데이터
- 읽기 작업이 많은 데이터
- 메모리 사용량 모니터링
프로젝트에 적용한 주요 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');
를 추가해주니 해결됐다..!