본문 바로가기

Backend14

main.ts 파해치기 (useGlobalPipes 옵션 whitelist) 우선 whitelist 옵션이 무엇인지 알아보기 전에 whitelit 옵션이 없을때 어떤 일이 일어나는지 보자. 만약 사용자가 students 테이블에서 점수가 50 점 이상인 학색들 정보를 받아온다고 했을때, 사용자는 아래와 같이 서버에 요청할 것이다. URL :호스트/students?score=50Method: GET // controller.ts@Controller('students')export class StudentsController { @Get() getAllStudents( @Query() query: StudentsDto ){ return this.studentsService.getAllStudents(); }}// service.ts@Injectable.. 2024. 6. 28.
Transaction, 한 가지 이상의 CRUD 를 실행할 때 roll back 실무에서 접했던 상황을 바탕으로 설명해보자면, 데이터베이스 저장소(repository)- user_farm: 사용자의 농장정보를 담고 있다.- farm: 사용자들의 농장정보를 담고 있다.- farm_dong: 농장의 동(A농장-1동, A농장- 2동, A농장- 3동...) 정보들을 담고 있다. 사용자가 농장을 추가하면 아래와 같은 순서로 저장되는 흐름이다.1. this.userFarmRepo.save()2. this.farmRepo.save()3. this.farmDongRepo.save() // service.tsasync saveUserFarm(dto: UserFarmDto){ const model = this.userFarmRepo.create(dto); const userFarm = a.. 2024. 6. 27.
포스트맨 환경변수 활용하기 (로그인 / Auth & accessToken) 사용자가 데이터 베이스에 접근해 어떠한 정보를 새롭게 추가하거나 수정할때 Guard 에서 사용자의 인증절차를 한번 거치고 데이터베이스에 접근할 수 있도록 하는 보안 절차가 있다. JWT 토큰 방식으로 로그인이 구현되어 있는 경우 보통 accessToken 을 가지고 인증절차를 거친다. 포스트맨으로 토큰을 발급받는 API 를 호출하고, 응답으로 받은 토큰을 복사해서 CRUD 관련 API 를 호출할때 Authorization 헤더에 매번 붙혀넣는게 귀찮더라. 이때 환경변수를 사용하면 개꿀.  1. 포스트 패널에 Environments 클릭 2. + 버튼을 누르고 환경변수를 설정할 곳의 이름을 넣고 생성한다. 3. 오른쪽에서 "Add new variable" 에 환경변수 이름을 만든다. (나는 auth/log.. 2024. 6. 26.
@DeleteDateColumn 은 AND 절을 마음대로 추가한다 soft delete 을 할때 엔티티에 @DeleteDateColumn 데코레이터로 삭제 날짜를 컬럼을 넣어주면 된다. 주의할점은 만약 find 메서드로 리포지토리에서 데이터를 SELECT 할때 WHERE 절 뒤에 항상 "(AND 컬럼명 IS NULL)" 이 붙는 걸 알아야 한다. (sql → SELECT * FROM farm WHERE id = 1 AND deletedAt IS NULL. 만약 삭제된 데이터도 보길 원한다면 withDeleted 옵션을 true 로 해서 find 옵션에 추가해줘야 한다. find 메서드 중 findBy, findOneBy, findAndCountBy... 와 같이 뒤에 -by 가 들어간 find 메서드는 FindOptionWhere 객체만 인자로 받기 때문에 withDe.. 2024. 6. 26.
이미지 파일 업로드 심화 - 선업로드 파일을 업로드할때 파일의 크기에 따라 처리시간이 오래걸릴 수 있다. 요즘 시대가 어떤 시대인가? 8282 대한민국 사람이라면 불편할 수 있다. 그래서 고안된 방법이, 파일을 선업로드하는 것이다. 사용자가 업로드 버튼을 누르기 전 단계, 즉 사용자가 파일을 선택한 순간 업로드를 시키는 것이다. 물론 장단점은 있다. 사용자가 선택했지만 업로드하지 않았을때와 같은 경우... 리소스 낭비가 될 수 있다. [1] 선업로드: temp 폴더에 임시로 이미지 파일을 저장위 코드는 이전 게시글에 있는 코드를 그대로 가져왔다. 이 부분이 바로 선업로드로 사용될 부분. MulterModule 에 register 메서드의 인자중 storage 가 바로 사용자가 이미지를 최종 업로드하기 전 바로 선택한 단계이고, 이 단계에서 .. 2024. 6. 25.
이미지 파일 업로드 핵심@nestjs/common : UseInterceptor, UplodedFile@nestjs/platform-express : FileInterceptor, MulterModulemulteruuidpath : extname, joinclass-transformer : Transformfs : promises 핵심은 위에 밑줄 친 메서드와 모듈.포스트맨에서 테스트할때 body 부분을 form-data 형식으로 보내야 한다. 그리고 당연히 Text 가 아닌 File 로... 파일을 저장할때 유니크한 파일명으로 저장해야하는데, 보통 Date 객체를 포함시킨 래덤 문자열을 사용하는데여기서는 uuid() 메서드로 대체한다. 모듈 import { BadRequestException, Module } from '.. 2024. 6. 25.