본문 바로가기
내일배움 강의/강의-NestJS

6주차

by GREEN나무 2025. 1. 31.
728x90

  Nest.js로 LOL 팬 커뮤니티 만들어보기
  MOBA장르 게임
  - LOL 팬 커뮤니티 기능.
    - 회원가입 / 로그인 기능
    - LOL 팀 대량 생성 기능
        - LOL 팬이 응원할 대상인 LOL 팀을 생성.
        - 생성 기능은 운영진만 호출할 수 있게 해야함.
            - 인가를 사용해 기능을 구현.
          - 효율적 생성을 위해 CSV 파일을 업로드받고 한꺼번에 팀을 생성
    - LOL 팀 수정 / 삭제 기능
        - 팬이 응원할 팀 정보를 수정하거나 팀 자체를 삭제하는 기능.
        - 운영진만 호출할 수 있는 기능.
    - LOL 팀 목록 / 상세 조회 기능
        - 로그인 한 유저는 존재하는 팀 목록을 볼 수 있다.
        - 각 팀의 상세 정보를 간단히 볼 수 있다.
    - 원하는 LOL 팀에 응원 메시지 남기기 기능
        - 로그인 한 유저라면 누구나 원하는 팀에 자유롭게 응원 메시지를 남길 수 있다.
    - 응원 메시지 수정 / 삭제 기능
        - 로그인 한 유저라면 본인이 작성한 응원 메시지에 한해서 수정 및 삭제를 할 수 있다.

_________________
환경설정
nest new lol_fan_community #npm
cd lol_fan_community
npm i @nestjs/config @nestjs/jwt @nestjs/passport passport passport-jwt @types/passport-jwt typeorm @nestjs/typeorm mysql2 multer bcrypt @types/bcrypt class-validator class-transformer multer @types/multer papaparse @types/papaparse joi typeorm-naming-strategies lodash @types/lodash
code .
tsconfig.json파일에
  "esModuleInterop": true 항목을 추가

cd src

#유저 모듈, 서비스, 컨트롤러 생성하기
nest g mo auth
nest g mo user
nest g s user
nest g co user


#팀 모듈, 서비스, 컨트롤러 생성
nest g mo team
nest g s team
nest g co team

#응원 메시지 모듈, 서비스, 컨트롤러 생성
nest g mo supportMessage
nest g s supportMessage
nest g co supportMessage


# 빌드, 실행은 "tsconfig.json"파일이 있는 곳에서 하기
nest build
npm run start
__________________
참고 : authorization(어써라이제이션)

Passport는 인증 메커니즘을 캡슐화하고, 다양한 인증 전략을 사용하여 애플리케이션을 쉽게 확장할 수 있도록 돕는 모듈 기반의 유연한 인증 프레임워크
구글 및 네이버, 카카오와 같은 소셜 로그인도 추가하기

- `PassportModule.register({ defaultStrategy: 'jwt', session: false })`라는 코드에 주목해주세요.
    - 이 Passport의 기본 전략은 당연히 jwt여야 합니다.
    - JWT 인증은 stateless 인증 메커니즘이기 때문에 session은 false로 설정해주셔야 합니다.


________________
테스트
________
sample.csv 파일 
name,description
GEN,한국롤팀
JDG,중국롤팀
________

mysql로 db lol 만들기
CREATE DATABASE lol
    DEFAULT CHARACTER SET = 'utf8mb4';
__________________
.env 파일
DB_HOST="localhost"
DB_PORT=3306
DB_USERNAME="root"
DB_PASSWORD="aaaa1234"
DB_NAME="lol"
DB_SYNC=true
JWT_SECRET_KEY="hellosparta"
_____________________________
필드가 기억나지 않으면 app.module.ts의 
@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
      validationSchema: Joi.object({
        여기참고
}),}),]})

DB_SYNC 가 true여야 db가 생성됨
db 생성 후에는 false로 바꾸기


lol_fan_community.zip
0.23MB

 

질문하기

// localhost:3000/team   이거 질문하기
// 해더
//   Content-Type   multipart/form-data
//   Authorization  Bearer role가 '1'(관리자계정)로 로그인 후 받은 토큰
// 바디 - Form Data
//   key : 자동완성 Fild
//      더블클릭으로 들어가서 파일 추가
//   value : 옆에 아래 세모로 File 선택
  // @UseInterceptors(FileInterceptor('file')) 데코레이터는 파일 업로드에 사용되는 인터셉터를 사용하겠다는 데코레이터
  // 인터셉터는 요청을 중간에 가로채는 것(AOP 개념 설명 참고)
  // 클라이언트는 ‘file’이라는 키 값으로 csv 파일을 업로드하면 파일 업로드를 할 수 있다.
  // FileInterceptor가 요청을 가로채어
  //      1) 파일을 추출하고,
  //      2) 이 파일을 이후의 핸들러에서 사용할 수 있도록 요청 객체에 첨부

'내일배움 강의 > 강의-NestJS' 카테고리의 다른 글

5주차  (0) 2025.01.27
4주차  (0) 2025.01.22
3주차 실습  (0) 2025.01.21
1주차  (1) 2025.01.19