본문 바로가기
Today I Learned/DevCamp

데브캠프 4일차

by 아보_ 2024. 3. 8.
반응형
스파르타 데브캠프를 통해 하루하루 공부한 내용을 정리합니다.

 

NestJS 

 

오늘은 docker 컨테이너로 서버와 데이터베이스를 실행하는것에 많이 애를 먹었다...
우선 docker의 장점들을 공부하고, 내 프로젝트와 데이터베이스를 docker 컨테이너로 실행했다.

 

Docker을 사용하는 장점

  • 환경 일관성을 보장한다: Docker 컨테이너는 어떤 환경에서도 동일하게 실행되기 때문에, "내 컴퓨터에서는 작동하는데"라는 문제를 방지한다. 개발, 테스트, 프로덕션 환경 간의 불일치로 인해 발생하는 문제들을 크게 줄일 수 있다.
  • 빠른 배포 및 확장이 가능하다: Docker 컨테이너는 가볍고 빠르게 시작되기 때문에, 애플리케이션의 배포와 확장이 신속하게 이루어진다. 이는 특히 여러 컨테이너를 사용하는 마이크로서비스 아키텍처에서 큰 장점이다.
  • 이식성이 뛰어나다: Docker 컨테이너는 Linux, Windows, MacOS 등 다양한 운영 체제에서 실행될 수 있다. 의존성과 구성을 컨테이너에 포함하기 때문에, 어떤 시스템에서도 동일한 방식으로 실행된다.
  • 자원을 효율적으로 사용한다: Docker는 전통적인 가상 머신보다 훨씬 적은 리소스를 사용한다. 운영 체제 수준의 가상화를 활용하기 때문에, 별도의 운영 체제를 실행할 필요가 없어 리소스를 절약할 수 있다.
  • 개발 및 운영 과정을 간소화한다: Docker를 사용함으로써 개발부터 배포까지의 과정을 간소화할 수 있다. Dockerfile과 docker-compose.yaml 같은 구성 파일을 통해 인프라를 코드로 관리할 수 있으며, 이는 DevOps 및 CI/CD 파이프라인과 잘 통합된다.

우선 프로젝트 루트경로에 Dockerfile을 작성했다.

# Node.js 공식 이미지를 기반으로 합니다.
FROM node:20

# 애플리케이션 디렉토리를 생성합니다.
WORKDIR /usr/src/app

# 애플리케이션 의존성 파일을 복사합니다.
# package.json과 yarn.lock 파일만 복사하여 캐시를 이용할 수 있도록 합니다.
COPY package.json ./
COPY yarn.lock ./

# 의존성을 설치합니다.
RUN yarn install

# 나머지 애플리케이션 소스를 복사합니다.
COPY . .

# 애플리케이션을 실행할 포트를 지정합니다.
EXPOSE 3000

# 애플리케이션을 실행합니다.
CMD ["yarn", "start:local"]

 

데이터베이스연결을 위해 Docker로 프로젝트와 mysql 이미지를 둘다 띄우기 위해 docker-compose.yaml도 필요했다.

version: '3.8'
services:
  app:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db
  db:
    image: mysql:8.3.0
    ports:
      - "3307:3306"
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: devcamp_local
      MYSQL_USER: devcamp
      MYSQL_PASSWORD: devcamp_pass
    volumes:
      - mysql-data:/var/lib/mysql

volumes:
  mysql-data:

 

 

docker로 프로젝트를 실행하였을때, 계속 데이터베이스 연결이 안되었었는데, 이유는 컨테이너끼리는 호스트가 localhost가 아니고, "db" 였다. 

정말 간단한 내용을 너무 돌고 돌았지만 그래도 조금은 배웠다고 생각하고, 내일은 배포하는것을 목표로 하고 있다.

 

 

https://github.com/avo1032/devcamp

 

GitHub - avo1032/devcamp

Contribute to avo1032/devcamp development by creating an account on GitHub.

github.com

 

반응형

'Today I Learned > DevCamp' 카테고리의 다른 글

20240309(토)  (0) 2024.03.10
데브캠프 5일차  (0) 2024.03.09
데브캠프 3일차  (0) 2024.03.07
데브캠프 2일차  (0) 2024.03.05
데브캠프 1일차  (0) 2024.03.04