13주차 (4)
1. 진입점 파일 (main.ts)
Nest.js 웹 애플리케이션의 시작점
NestFactory를 사용하여 애플리케이션 인스턴스 생성
2. 모듈 (app.module.ts)
애플리케이션의 구조를 정의
@Module 데코레이터 사용
imports, controllers, providers, exports 속성 포함
3. 컨트롤러 (app.controller.ts)
HTTP 요청 처리
@Controller 데코레이터 사용
서비스에 의존, 생성자를 통한 DI 사용
4. 서비스 (app.service.ts)
비즈니스 로직 처리
@Injectable 데코레이터 사용
컨트롤러에 서비스 제공
5. IoC (제어 역전)와 DI (의존성 주입)
IoC: 객체 생명주기 관리를 외부에 위임
DI: IoC 구현 방법, Nest.js의 DI 컨테이너 사용
모듈 간 결합도 감소, 유연성 증가
이 구조를 통해 Nest.js는 모듈화, 확장성, 유지보수성이 높은 애플리케이션 개발을 지원합니다.
내컴퓨터 위치에서 실행하려고 해서 오류가 계속 났었습니다.
ec2에서 접속하듯이 이런식으로 접근을 했었어야했는데 억지로 내컴퓨터에서 접속하려고했으니 ㅜㅜ.. 제대로 잘못짚었던것..!
mysql -h "엔드포인트" -P 포트 -u 마스터사용자이름 -p
이렇게 하니 해결!
tilte content password 3가지를 제대로 받았을때 넘어가도록 하는 dto파일인데
import { IsNotEmpty, IsNumber, IsString } from 'class-validator';
export class CreatePostDto {
@IsString()
@IsNotEmpty({ message: '게시물의 제목을 입력해주세요.' })
readonly title: string;
@IsString()
@IsNotEmpty({ message: '게시물의 내용을 입력해주세요.' })
readonly content: string;
@IsNumber()
@IsNotEmpty({ message: '게시물의 비밀번호를 입력해주세요.' })
readonly password: number;
}
그럼에도 불구하고 titles라는 일부러 버그를 줬는데도 생성이되는 버그 발생..!!!
main.ts에 코드추가
app.useGlobalPipes(
new ValidationPipe({
// 요청 데이터를 DTO(Data Transfer Object) 클래스로 자동 변환
transform: true,
// DTO 클래스에 정의된 속성만 요청 데이터에 남기고, 나머지 속성은 제거
whitelist: true,
// DTO 클래스에 정의되지 않은 속성이 요청 데이터에 포함된 경우, 유효성 검사에서 에러를 발생
forbidNonWhitelisted: true,
forbidUnknownValues: true,
}),
);
제대로 오류가 실행됐습니다..!!
이제 제대로 정상 작동중!
최종유지보수 코드!
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ValidationPipe } from '@nestjs/common';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalPipes(
new ValidationPipe({
// 요청 데이터를 DTO(Data Transfer Object) 클래스로 자동 변환
transform: true,
// DTO 클래스에 정의된 속성만 요청 데이터에 남기고, 나머지 속성은 제거
whitelist: true,
// DTO 클래스에 정의되지 않은 속성이 요청 데이터에 포함된 경우, 유효성 검사에서 에러를 발생
forbidNonWhitelisted: true,
forbidUnknownValues: true,
}),
);
await app.listen(process.env.PORT ?? 3000);
}
bootstrap();