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

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

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

 

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

https://bit.ly/4hTSJNB

 

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

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

fastcampus.co.kr

0411 금

학습 내용 정리

 

 05. 업로드된 파일 정보 변경하기

  • fs.promises.rename()을 통해 업로드된 파일의 이름을 UUID 기반으로 재설정
  • 확장자는 originalname에서 추출하며, 기본적으로 .mp4 사용
  • 파일명 구성: uuid_timestamp.extension

06. 엔티티에 파일 정보 반영하기

  • 파일명을 DB의 특정 필드에 저장
  • @UploadedFile() 데코레이터를 통해 업로드된 파일 접근
  • movieService.create() 호출 시, DTO 외에 파일명도 전달

07. 스태틱파일 서빙하기

  • ServeStaticModule을 통해 uploads/ 디렉토리의 파일을 정적으로 제공
  • 클라이언트가 직접 비디오 파일을 URL로 접근 가능

 

수강후기

이번 학습에서는 NestJS 기반의 파일 업로드 처리와 관련된 실습이 주를 이루었으며, 특히 05. 업로드된 파일 정보 변경하기, 06. 엔티티에 파일 정보 반영하기, 07. 스태틱파일 서빙하기 등의 챕터를 중심으로 심화된 기능 구현을 경험할 수 있었다. 이전까지는 단순히 파일을 받아 저장하는 수준에 그쳤다면, 이번엔 실제로 서버에서 파일명을 가공하고, 해당 파일 정보를 엔티티와 연동하여 저장하고, 클라이언트에서 정적으로 접근할 수 있도록 서빙하는 전 과정을 구현하며 실무적인 감각을 배울 수 있었다.

다만, 개인적으로는 5장과 6장에서 제시된 Pipe 관련 부분이 가장 어려웠다. 커스텀 Pipe를 만들어서 파일을 검증하고 이름을 바꾸는 방식이 처음에는 굉장히 유용해 보였고, 코드도 이해가 되었다. 실제로 해당 Pipe를 컨트롤러에 적용해보며 작동 방식을 실습했다. 그런데 실제로는 이 Pipe를 사용하지 않고, 단일 파일 업로드 방식(FileInterceptor)으로 처리하는 구조가 수업 내내 사용되고 있었다. 이 점이 혼란스러워서 Pipe의 사용 의의가 무엇인지, 왜 도입했다가 결국 사용하지 않게 되었는지를 반복해서 생각하게 되었고, 결국 수업 영상을 몇 차례 다시 보며 정리할 수 있었다.

Pipe 방식은 NestJS의 구조상 권장되는 방식 중 하나로, 관심사를 분리하는 데 유리하다. 하지만 파일 리네이밍과 같은 처리를 interceptor 내부 옵션으로도 충분히 구현할 수 있고, 오히려 그 방식이 더 직관적이며 코드 흐름을 따라가기 쉬웠다. 이러한 점에서 실무에서는 Pipe보다 간단한 구현을 택하는 경우도 많다는 사실을 체감할 수 있었다.

6장 학습에서 Pipe를 통해 파일을 처리하는 흐름은 기술적으로도 의미 있었지만, 왜 실제에서는 그 방식이 채택되지 않았는지에 대한 의문은 끝내 명확하게 해소되지는 않았다. 그래서 관련 내용을 별도로 정리하고, 이후 다른 예제에서도 Pipe 사용 여부와 대체 방식들을 비교해보며 추가 학습이 필요하다는 생각을 하게 되었다.

이번 학습을 통해 NestJS의 파일 처리 흐름을 보다 현실적으로 이해할 수 있었으며, 단순히 기능 구현이 아닌 다양한 구현 방식 간의 선택과 이유를 고민하게 되는 계기가 되었다. 앞으로도 단순 구현을 넘어서 “왜 이 방식을 썼는가”를 기준으로 구조를 설계할 수 있도록 연습할 계획이다

 

사진