NestJS 기본강의 - 5. 권한 & 로그 & 설정
유저와 게시물 데이터의 관계 형성
1. 관계를 형성하기 위해서는 엔티티에 서로간의 필드를 넣어줘야 한다
ㆍUser : OneToMany Relationship
ㆍ게시글들 : ManyToOne Relationship
파라미터
1. Type
2. inverseSide ( User클래스기준 board에서 유저로 접근하려면 board.user로 접근해야함 )
3. Option ( eagerㆍtrue 일때는 user정보를 가져올때 board도 같이 가져옴 )
@ManyToOne((type) => User, (user) => user.boards, { eager: false })
user: User;
@OneToMany((type) => Board, (board) => board.user, { eager: true })
boards: Board[];
QueryBuilder
async getAllBoards(user: User): Promise<Board[]> {
const query = this.boardRepository.createQueryBuilder('board'); //접근 게시판
query.where('board.userId = :userId', { userId: user.id }); // 조건
const boards = await query.getMany(); // 데이터 전부 다 가져온다
return boards;
}
로그의 종류
- Log : 중요한 정보의 범용 로깅
- Warning : 치명적이거나 파괴적이지 않은 처리되지 않은 문제
- Error : 치명적이거나 파괴적인 처리되지 않은 문제
- Debug : 오류 발생시 로직을 디버그하는 데 도움이되는 유용한 정보이다. 개발자 용
- Verbose : 응용 프로그램의 동작에 대한 통찰력을 제공하는 정보이다. 운영자 용
로그 레벨
- 원하는 대로 환경에 따라서 로그의 레벨을 정의해서 넣어줄 수 있다
Log | Error | Warning | Debug | Verbose | |
Development | O | O | O | O | O |
Staging | O | O | O | x | x |
Production | O | O | x | x | x |
로그를 처리하기 위해서 사용하는 모듈은...
- expressjs를 사용할 때는 Winston이란 모듈을 주로 사용하지만 nestjs에는 이미 built-in된 logger클래스가 있기에 그걸 사용
private logger = new Logger('BoardsController');
this.logger.verbose(`User ${user.username} trying to get all boards`);
this.logger.verbose(`User ${user.username} creating a new board.
Payload:${JSON.stringify(createBoardDto)}`);
설정( Configuration ) 이란?
- 소스 코드안에서 어떠한 코드들은 개발 환경이나 운영 환경에 이러한 환경에 따라서 다르게 코드를 넣어줘야 할 때가 있으며, 남들에게 노출 되지 않아야 하는 코드들도 있다. 이러한 코드들을 위해 설정파일을 따로 만듬
설정 파일은...
- runtime 도중에 바뀌는 것이 아닌 애플리케이션이 시작할 때 로드가 되어서 그 값들을 정의하여 줍니다. 그리고 설정 파일은 여러가지 파일 형식을 사용할 수 있다. 예를 들어 XML, JSON, YAML, Environment, Variables 같은 많은 형식 이용
Codebase VS Environment Variables( 환경 변수 )
- XML, JSON, YAML 같은 경우는 Codebase에 해당하며 그리고 다른 방법은 환경 변수로 할 수 있다.
- 주로 이 둘을 나눠서 하는 이유는 비밀번호와 API Key 같은 남들에게 노출되면 안되는 정보들을 주로 환경 변수를 이용해서 처리
Codebase | 일반적으로 Port 같이 노출되도 상관없는 정보들 |
환경변수 | 비밀 번호나 API Key같은 노출되면 안되는 정보들 |
설정하기 위해서 필요한 모듈
- 윈도우에서는 win-node-env를 설치 ( 원도우는 기본적으로 환경변수를 지원 X )
npm install -g win-node-env
- 그리고 원도우와 맥 모두에서는 config라는 모듈을 설치받아야 한다.
npm install config --save
Config 모듈을 이용한 설정 파일 생성
1. 루트 디렉토리에 config라는 폴더를 만든 후에 그 폴더 안에 JSON이나 YAML 형식의 파일을 생성한다
config/default.yaml
2. config 폴더 안에 default.yml, development.yml 그리고 production.yml 파일 생성
- default.yml : 기본설정 ( 개발환경설정이나 운영환경설정에도 적용 )
- development.yml : default.yml에서 설정한 것 + 개발환경에서 필요한 정보
- production.yml : default.yml에서 설정한 것 + 운영 환경에서 필요한 정보