본문 바로가기

A.개발관련자료

[docker+nestjs+aws]프로젝트 1주차 정리

*목적 : nestjs 기반의 crud, 인증, 결제, 채팅 기능을 구현

 

1. 기본 setting과 docker로 pgadmin 연결

node, nest, docker 설치 후 터미널에 new nest 생성폴더명 

//nvm 으로 node버전 변경하기(node version management)
//nvm을 사용하려면 기존 사용하는 node의 전역적 모듈을 모두 삭제해주고 실행해야함
______________________________________________________
1.brew로 nvm 설치
brew install nvm 
______________________________________________________
2.환경변수 설정
mkdir ~/.nvm       //~/에 .nvm 설치
vi ~/.bash_profile      //~/.bash_profile을 vi 편집기로 열고 환경 변수 설정

//하단 세줄 입력후 esc + wq로 저장후 나오기
export NVM_DIR="$HOME/.nvm"
[ -s "/usr/local/opt/nvm/nvm.sh" ] && . "/usr/local/opt/nvm/nvm.sh"  # This loads nvm
[ -s "/usr/local/opt/nvm/etc/bash_completion.d/nvm" ] && . "/usr/local/opt/nvm/etc/bash_completion.d/nvm"  # This loads nvm bash_completion

source ~/.bash_profile //터미널 프로파일에 적용

nvm -v //설치 후 버전 nvm check
______________________________________________________
3.node.js설치 및 버전 확인
nvm install 10
nvm use 10 //Now using node v10.10.0 
node -v //v10.10.0

2.생성된 '생성폴더명' 하단에 docker-compose.yaml 작성 

=>.env 작성 하여 환경변수 작성 (host,port,user,password,db)

=>database.module.ts생성

nestjs/config, hapi/joi 설치 후 app.module.ts에 ConfigModule에 validation    imports

//기초 code build 순서
-위에서 아래(선언되지 않은 함수나 상수 없으면 에러 난다) 
- 등호 (=)기준으로 왼쪽에서 오른쪽
- ..은 하위 메서드 호출

-

//nest 자주 사용하는 기초명령어 
nest --help //모든 nest 명령어
nest g res ABC //ABC라는 이름의 res(crud생성가능)을 generate(생성)
nest g mo ABC //ABC module 생성
nest g s ABC //ABC service 생성
nest g co ABC //ABC controller 생성
//docker-compose.yaml
services:
  postgres:
    image: postgres
    restart: always
    environment:
      # To connect to the PostgreSQL database run the following command
      # psql -h localhost -p 15432 -U root -d ecommerce
      - POSTGRES_USER=test_user
      - POSTGRES_PASSWORD=test_pass
      - POSTGRES_DB=test
    ports:
      - "15432:5432"
    #    volumes:
    #      # Pass volume named mysql-data to mysql container
    #      - "postgresql-data:/var/lib/postgresql/data"
    networks:
      - postgres-network

  pgadmin:
    depends_on:
      - postgres
    image: dpage/pgadmin4
    restart: always
    environment:
      PGADMIN_DEFAULT_EMAIL: "admin@admin.com"
      PGADMIN_DEFAULT_PASSWORD: "admin"
    ports:
      - "16543:80"
    networks:
      - postgres-network

volumes:
  postgresql-data:
    driver: cio
    driver_opts:
      profile: "POSTGRESQL"

networks:
  postgres-network:
    driver: bridge

vsc 사용한다면 새로운 터미널 열어주고, docker-compose up 명령어로 docker 컨테이너 생성 

password authentication failed for user nestjs dockerpose  //동일 이름 컨테이너 있을시 생기는 오류 msg

=> 기존 생성된 컨테이너가 있으면 docker-compose down 해 주고 다시 docker-compose up

기본 엔티티를 생성했다면, docker로 연 pgadmin 에 접속 후 server create 해주기

 

2. bcrypt 설치후 user, product,auth  - service, module, controller, entity 생성 후

//entity tip

@PrimaryGeneratedColumn('uuid') //uuid nestjs 내장

@BeforeInsert() //db에 저장전 해당 메서들를 실행 
async hashPassword(){
this.password = await bcrypt.hash(this.password, 10);
}

user service - email검색, id검색, user생성

auth controller - signup, login 구현 

auth service - signup, user인증(password암호화 디코딩),

3. auth 내 guard 문 생성(AuthGuard)후 해당 strategy 파일 생성, validate 함수 생성 하여 

해당 사용자 권한이 사용되는 controller에 useGuard주입

Guard 의 주요 기능 
-사용자 권한(authentication)확인을 위한 기능 ,
-생성 guard를 controller 에 붙여주어 사용
@UserGuards(해당가드) //or @AuthGuard(‘파일 내부 strategyname’)
참고한 링크: https://lts0606.tistory.com/624

4. useGuards, strategy를 사용하여 auth controller의 login 함수 수정 

5. jwt, passport-jwt 로 login시 토큰 생성 

(module에  configService => 환경변수(.env)를 동적으로 처리, ConfigService에서 환경 변수 엑세스하려면 ConfigModule을 가져와야함)

6.jwt useGuards 생성하여 get profile 접근권한 생성

7.node mailer 사용하여 email send service 생성후 , 생성 된 service test( nodemailer 동작하는지 확인),

회원가입시 token 생성 하는 email send service 생성

8.email confirm controller 생성 :

7에서 생성된 token을 decoded하여 email을 찾아 해당 user의 email confirm 관련된 db boolean값 변경 

 

'A.개발관련자료' 카테고리의 다른 글

Dart 기초(2)-2  (0) 2025.04.03
WARNING: expo-cli has not yet been tested against Node.js v18.12.1.  (0) 2025.04.03
nvm으로 node 버전 변경  (0) 2025.04.03
toast ui editor viewer  (0) 2025.04.03
README.md 작성법 정리  (0) 2025.04.03