아래 주제를 중심으로 어떤 기술적 경험을 했는지 에 대해 발표를 진행해보세요.

기획 디벨롭

스크린샷 2023-11-17 12.04.25.png

스크린샷 2023-11-17 12.04.32.png

FrontEnd

BackEnd

# Node.js 기본 이미지
FROM node:20.9.0-alpine as builder

# 작업 디렉토리 설정
WORKDIR /app

# 루트의 package.json 파일 복사
COPY package*.json ./

# packages 폴더의 내용 복사
# packages 폴더가 여러 개 있을 경우, 필요에 따라 추가 복사
COPY packages ./packages

# # app/backend 폴더의 내용 복사
COPY app/backend ./app/backend

# 의존성 설치
RUN npm ci

# app/backend 폴더로 이동
WORKDIR /app/app/backend

# 애플리케이션 빌드
RUN npx prisma generate
RUN npm run build

# 실행을 위한 최종 스테이지
FROM node:20.9.0-alpine as runner

# 필요한 도구 설치
RUN apk add --no-cache netcat-openbsd

WORKDIR /app

# 빌더 스테이지에서 필요한 파일만 복사
COPY --from=builder /app/app/backend/dist /app/dist
COPY --from=builder /app/app/backend/prisma /app/prisma
COPY --from=builder /app/node_modules /app/node_modules

# 필요한 경우, 런타임에 필요한 추가 파일 복사
# 예: 환경변수 파일, 정적 파일 등

# 애플리케이션 실행
# CMD ["node", "dist/src/main.js"]
COPY app/backend/wait-for-it.sh /wait-for-it.sh
COPY app/backend/docker-entrypoint.sh /docker-entrypoint.sh
RUN chmod +x /wait-for-it.sh
RUN chmod +x /docker-entrypoint.sh
CMD ["/wait-for-it.sh", "db:3306", "--", "/docker-entrypoint.sh"]
version: '3.8'

services:
  backend:
    build:
      context: ../..
      dockerfile: app/backend/Dockerfile # 위에 선언된 backend Dockerfile을 사용함
    ports:
      - "8080:8080" # 호스트의 포트:컨테이너의 포트
    environment:
			# .env에 설정되어있는 환경 변수를 Docker container에 세팅
      - GOOGLE_CLIENT_ID=${GOOGLE_CLIENT_ID}
      - GOOGLE_SECRET=${GOOGLE_SECRET}
      - GOOGLE_CALLBACK_URL=${GOOGLE_CALLBACK_URL}
      - JWT_ACCESS_SECRET=${JWT_ACCESS_SECRET}
      - JWT_REFRESH_SECRET=${JWT_REFRESH_SECRET}
      - DATABASE_URL=mysql://mokak:_mokak123@db:3306/testDB
      - REDIS_PORT=${REDIS_PORT}
      - REDIS_HOST=redis
      - REDIS_MAX_AGE_REFRESH_TOKEN=${REDIS_MAX_AGE_REFRESH_TOKEN}
      - MAX_AGE_ACCESS_TOKEN=${MAX_AGE_ACCESS_TOKEN}
      - MAX_AGE_REFRESH_TOKEN=${MAX_AGE_REFRESH_TOKEN}
    depends_on:
      - db
      - redis

  db:
    image: ccxz84/mokak-mysql:latest
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=anl@oiq12^&()
    volumes:
      - mysql-data:/var/lib/mysql

  redis:
    image: redis:alpine
    ports:
      - "${REDIS_PORT}:6379"

volumes:
  mysql-data: