본문 바로가기
패스트캠퍼스 환급챌린지

패스트캠퍼스 환급챌린지 37일차 : 코드팩토리의 백엔드 아카데미 : 한 번에 끝내는 NestJS 패키지 - 기초부터 MSA까지 강의 후기

by 논문보관함 2025. 4. 10.

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

https://bit.ly/4hTSJNB

 

커리어 성장을 위한 최고의 실무교육 아카데미 | 패스트캠퍼스

성인 교육 서비스 기업, 패스트캠퍼스는 개인과 조직의 실질적인 '업(業)'의 성장을 돕고자 모든 종류의 교육 콘텐츠 서비스를 제공하는 대한민국 No. 1 교육 서비스 회사입니다.

fastcampus.co.kr

0410 목

학습 내용 정리

03. FileFieldsInterceptor 사용해보기
04. MulterOptions 알아보기
 

수강후기

강의는 들었으나 많이 이해한거 같지않아. 이해한 부분까지만 수강 후기를 작성하려고한다.

오늘은 NestJS 강의 중에서 FileFieldsInterceptor와 MulterOptions 설정 방법에 대해 학습하였다. 실제로 코드를 작성해보며 @UseInterceptors(FileFieldsInterceptor(...))를 활용한 다중 파일 업로드를 구현해보았고, 그 과정에서 limits 옵션을 통해 업로드 파일의 최대 용량을 제한하고, fileFilter 옵션을 통해 특정 MIME 타입만 업로드 허용하는 로직도 작성해보았다.

학습한 내용을 정리하면 다음과 같다.

  1. FileFieldsInterceptor 사용
    • @UseInterceptors(FileFieldsInterceptor([...]))를 사용하여 복수의 필드 이름을 가진 파일을 업로드 받을 수 있다.
    • 각 필드마다 name, maxCount를 지정함으로써 업로드 가능한 파일 수를 제어할 수 있다.
    • 실습에서는 movie와 poster 필드를 각각 최대 1개, 2개까지 업로드 가능하도록 설정하였다.
  2. MulterOptions 설정
    • limits.fileSize를 통해 파일의 최대 용량을 바이트 단위로 설정할 수 있다. 이번 실습에서는 20MB(20,000,000 bytes)로 제한하였다.
    • fileFilter 함수를 통해 MIME 타입을 직접 필터링할 수 있으며, 원하는 조건이 아닐 경우 callback(new BadRequestException(...), false)를 호출하여 업로드를 막을 수 있다. 예제에서는 video/mp4가 아닌 경우 업로드를 거부하도록 설정하였다.
  3. 코드 흐름 이해
    • 업로드된 파일들은 @UploadedFiles() 데코레이터를 통해 받아올 수 있으며, 지정한 각 필드 이름에 해당하는 파일 배열로 전달된다.
    • 업로드된 파일은 서버 내 지정된 저장소에 저장되며, 이후 movieService.create() 같은 서비스 로직에 전달되어 비즈니스 로직이 실행된다.
    • 추가적으로 @RBAC(Role.admin) 데코레이터를 통해 관리자 권한이 있는 사용자만 접근할 수 있도록 설정하였다.

다만 강의 자체를 완전히 이해한 것은 아니다. 특히 multer의 내부 동작 방식이나 FileInterceptor와 FileFieldsInterceptor의 차이, storage 옵션을 통한 파일 저장 경로 지정 방법 등은 아직 충분히 숙지하지 못한 상태다. 실제로 코드를 작성해보고, 업로드 파일을 콘솔로 출력해보며 전체 흐름을 파악해보긴 했지만, 아직까지는 문서나 공식 예제를 자주 참고해야 하는 수준이다.

그럼에도 불구하고 이번 학습을 통해 NestJS에서 파일 업로드를 처리하는 방법에 대해 실습적으로 접근해볼 수 있었고, 단일 파일이 아닌 다중 필드의 파일 업로드 처리 방식까지 시도해보았다는 점에서 의미가 있었다고 생각한다.

특히 limits와 fileFilter 옵션은 실제 서비스 개발 시 보안상 반드시 필요한 요소이며, 파일 서버 과부하나 비정상적인 파일 업로드를 방지하기 위해 필수적으로 적용되어야 한다는 점을 실감할 수 있었다.

앞으로는 diskStorage 옵션을 사용하여 업로드 파일의 저장 경로 및 파일명을 직접 지정해보거나, 업로드된 파일을 S3와 같은 외부 저장소에 전송하는 방식으로 확장해보고 싶다. 또한 @UploadedFiles()와 @UploadedFile()의 차이, 단일 파일 업로드와 다중 파일 업로드의 실제 적용 예시를 더 많이 실습해볼 예정이다.

이처럼 오늘 학습은 일부는 이해했지만, 아직 모호하거나 정리되지 않은 부분도 많다. 따라서 강의를 다시 복습하고, NestJS 공식 문서와 multer 관련 문서를 병행하여 학습을 지속할 계획이다. 이해한 부분까지라도 확실히 내 것으로 만들어, 이후 프로젝트에 안정적으로 적용할 수 있도록 연습을 거듭할 것이다.

 

 

사진