복습한다는 생각으로 그리고 새로운것에 대한 도전으로 만들고 있다. 만들면서 새롭게 배운 것들을 정리하려고 한다. 우선 nestJS 프레임워크로 시작하였으며, TypeScript기반이기 때문에 중간 중간 TypeScript도 공부하고 있다. 이전에 ORM으로는 typeORM을 사용하였는데, 이번에는 sequelize라는 ORM을 사용하려고 한다. 마지막으로 팀프로젝트 때 하고는 싶었지만 적용하지 못한 테스트 코드를 익히면서 적용하려고 한다.
docker는 지난 수업때와 팀 프로젝트 당시에도 사용했던 도구이다. 그러나 수업 초반에 복붙수준으로 사용해왔었고, 그 복붙한 것을 팀프로젝트때도 사용했다. Dockerfile이나 docker-compose.yaml에 대해서 어떤 기능을 갖고 추가하는 것에 대해서는 정도만 알고 있었다. 이렇게 처음부터 하려고 하니 하나 하나에 대해서는 설명하기 어려웠다. 그래서 이번에 정리하려고한다.
Dockerfile에 대해서 정리해보자.
//Dockerfile
FROM node:16.14.2 // node version을 설정
WORKDIR /MYPROJECT/ // 이미지 안에서 작업할 디렉토리 설정
COPY ./package.json /MYPROJECT/ // 의존성 부터 copy
COPY ./yarn.lock /MYPROJECT/
RUN yarn install
COPY . /MYPROJECT/ // 파일들 copy
CMD yarn start:dev // 이미지 안에서 실행
여기서 의존성을 따로 copy를 하였는데, 그 이유는 docker의 경우 이미지를 생성할 때 cache라는 layer를 생성하게 된다고 한다. 그리고 다음 작업에 이미지를 생성하는 경우 이전에 생성된 layer와 비교해보고 똑같으면 그대로 쓴다고 한다.
//Dockerfile
...
COPY . /MYPROJECT/
RUN yarn install
...
만약 위와 같이 의존성을 따로 빼지 않고, 전체 파일을 copy한다면, 약간의 코드파일 내용을 변경할 때도, 새로운 이미지를 생성하고 yarn install을 사용하여 build시간을 늘어나게 할 것이다.
여러 개의 컨테이너를 묶어서 run할 경우 사용하는 것이다. 세부적인 것보다 이번에 준비하면서 도움 되었던것 위주로 정리하고자 한다.
version: '3.3'
...
my_database:
image: mysql:latest
environment:
MYSQL_DATABASE: 'myproject'
MYSQL_ROOT_PASSWORD: '${SQL_PASSWORD}' //.env파일에서 비번을 관리하자.
ports:
- 3306:3306
개발할때 순서에 맞게 테스트를 하면서 계단식으로 만드는 것이 중요한 것같다. 도커를 보기전 graphQl과 sequlize를 동시에 적용하려다가 에러를 찾고 수정하는 과정이 꽤 어려웠다.
[가장 쉽게 배우는 도커, 얄팍한 코딩사전 Youtube, 2022년08월11일 접속]
https://youtu.be/hWPv9LMlme8
[Node.js 웹 앱의 도커라이징, nodejs docs, 2022년08월11일 접속]
https://nodejs.org/ko/docs/guides/nodejs-docker-webapp/
[Docker 실습하기 03편 - node 서버 실행하기, tistory, 2022년08월12일 접속]
https://sungtae-kim.tistory.com/17
[docker compose yaml 파일 작성, tistory, 2022년08월12일 접속]
https://hoony-gunputer.tistory.com/entry/docker-compose-yaml-%ED%8C%8C%EC%9D%BC-%EC%9E%91%EC%84%B1?category=820435
[[Docker] docker-compose 파일에서 환경설정(.env file) 사용하기, https://blog.leocat.kr/, 2022년08월12일 접속]
https://hoony-gunputer.tistory.com/entry/docker-compose-yaml-%ED%8C%8C%EC%9D%BC-%EC%9E%91%EC%84%B1?category=820435