# Docker Container안의 디렉토리를 설정합니다. 설정을 안할시 Root리렉토리로 설정됩니다.
WORKDIR/nestjs
# package.json을 도커 이미지에 복사합니다.
COPYpackage.json/nestjs
# yarn.lock를 도커 이미지에 복사합니다.
COPYyarn.lock/nestjs
# yarn install을 실행하여 node_modules를 생성합니다.
RUNyarninstall
# 해당 디렉토리에 있는 모든 파일, 폴더를 도커 이미지로 복사합니다.
# .dockerignore에 있는것은 제외
COPY./nestjs
# 해당 도커 이미지에서 build를 해서 dist폴더를 생성합니다.
RUNyarnbuild
# 해당 이미지의 포트를 EXPOSE합니다.
# 표시만 할뿐 실제 도커 컨테이너의 포트가 노출되지 않는다.
EXPOSE3000
# 도커 이미지를 이용하여 컨테이너를 생성시 nodejs 자동 실행
CMD["yarn","start:dev"]
불필요한 파일이나 폴더가 저장되는것을 막기 위해 '.dockerignore'을 생성해 줍니다.
dist
node_module
Dockerfile
.git
.gitignore
docker-compose.yaml
현재 PostgreSQL, Reids에 연결을 안하지만 'docker-compose.yaml'파일을 작성하면서 추가하도록 하겠습니다.
networks:
# 해당 도커 컴포즈로 실행한 컨테이너는 동일한 네트워크를 공유한다.
backend_network:
services:
# 해당 예제에서 사용할 DB(postgres 12)
db:
# Pull받을 DB 이미지
image: 'postgres:12'
# 해당 DB의 데이터를 volume으로 저장(postgres)
volumes:
- db_example:/var/lib/postgresql/data
# 해당 도커 환경을 설정한다.
# 위 DB에서는 사용자(USER)와 비밀번호(PASSWORD)를 설정한다.
environment:
POSTGRES_USER: alex
POSTGRES_PASSWORD: password
networks:
- backend_network
# 재시작시 자동 실행이 필요하면 restart이 'always'이다.
restart: always
# 로그가 쌓이면 해당 인스턴스의 하드를 과도하게 점유하게 된다.
# 로그를 제한한다.
logging:
driver: "json-file"
options:
# 로그의 파일 갯수
max-file: "3"
# 로그의 파일 크기(10m = 10 MB : megabites)
max-size: "10m"
cach:
image: 'bitnami/redis:latest'
environment:
- ALLOW_EMPTY_PASSWORD=yes
networks:
- backend_network
restart: always
logging:
driver: "json-file"
options:
max-file: "3"
max-size: "10m"
backend:
# 이미지 생성을 위해 해당 디렉토리에 있는 Dockerfile를 build한다.
# docker-compose파일에 같은경로로 Dockerfile이 있을시 '.' 을 찍으면 된다.
# 같은경로가 아닐시 상대경로로 지정해서 실행한다.
build: .
ports:
- '4000:3000'
networks:
- backend_network
environment:
- REDIS_URL=redis://cach:6379
- PG_HOST=db
- PG_USERNAME=alex
- PG_PASSWORD=password
- PG_DATABASE=startup
- PG_PORT=5432
- PG_SYNC=true
- SALT=apple
- RES_SALT=res_apple
- EXPIRESTOKEN=24h
- RES_EXPIRESTOKEN=720h
# 해당 서버가 실행되기전 반드시 실행되고 있어야 하는 컨테이너를 설정합니다.
depends_on:
- db
- cach
restart: always
logging:
driver: "json-file"
options:
max-file: "3"
max-size: "10m"
volumes:
db_example:
이제 해당 디렉토리(docker-compose.yaml 존재 경로)에서 아래 CLI를 실행합니다.
$ docker-compose up -d
해당 CLI의 끝에 -d는 detatch모드 입니다.
이미지가 존재하지 않는다면 'docker-compose'에서 자동으로 생성합니다.
만약 코드 수정후 이미지를 새로 만들려면 '--build' 를 붙이시면 됩니다.
해당 도커 컨테이너가 모두 정상적으로 실행된 것을 알수 있습니다. 여기서 postgres, redis는 오직 docker-compose_backend_1만 접근이 가능합니다. 그리고 실제적으로 외부(or localhost)에서는 4000포트로 docker-compose_backend_1에 접속할수 있습니다.
안녕하세요. 오늘은 프로퍼티 노드에 대해서 설명을 드리겠습니다. 프로퍼티 노드를 사용하는 방법은 2가지가 있는데 참조를 이용하는 방법과 직접 프로퍼티 노드를 생성해서 사용하는 방법이 있습니다. 오늘은 프로퍼티노드만을 이용해서 카운트를 올리는 프로그램을 만들도록 하겠습니다. 그림1) 버튼생성후 기계적동작 변경 새로운 VI를 생성후 그림 1과 같은 버튼을 설정 합니다. 스위치의 기계적 상태는 '놓을때 위치'로 설정을 합니다. 이후 'Start', 'Hold', 'Reset', 'Stop' 버튼을 만들어 같은 기계적 상태로 놓습니다. 그림2) 숫자형 컨트롤 생성 그림3) 숫자형 컨트롤 글짜크기 변경 그림4) 숫자형 컨트롤의 형을 변경 그림2~4까지 숫자형 컨트롤을 만들고 프런트 패널에 배치합니다. 그림5) 프런트패널 완성 그림6) 숫자형 컨트롤을 인디게이터로 변경 숫자형 인디게이터는 Count에만 사용하기 때문에 블록 다이어그램에서 인디게이터로 변환합니다. 그림7) 플랫 시퀸스, While, 이벤트 케이스 생성후 프로퍼티 생성그림7과 같이 플랫 시퀸스안에 케이스를 2개를 만듭니다. 2번째 케이스에 While루프와 그안에 이벤트 케이스를 만들어 줍니다. 첫번째 케이스에 각 버튼을 초기화 해야 하기 때문에 그림7에서 블록다이어그램에 있는 버튼을 우클릭후 프로퍼티 노드에 들어가서 값을 선택합니다. 그림8) 프로퍼티에 값과비활성화 포함 프로퍼티노드는 원하는 많큼 층을 만들수가 있습니다. 마우스로 프로퍼티노드를 아래로 끌면 다른 속성의 프로퍼티노드가 생성됩니다. 그리고 초기화하는 케이스에 비활성화를 선택해 줍니다. 그림9) 초기화 케이스구조 그림9는 프로그램이 처음 시작될때 버튼들을 초기화 해줍니다. 처음 시작되면 'Start', 'Stop' 버튼을 제외하고 모두 비활...
안녕하세요 알렉스 입니다. 오늘은 저번 글과 마찬가지로 프로퍼티 노드에 대해서 설명해 드리겠습니다. 저번에는 프로퍼티 노드 자체를 생성해서 사용했는데 이번에는 참조를 이용해서 만들어보도록 하겠습니다. 제가 참조를 이용해서 프로퍼티 노드를 사용하는 이유는 SubVI때분 입니다. 사실 글로벌 변수로 각 VI들이 데이터를 주고 받을수 있지만 참조를 통해서도 데이터를 교활할수 있습니다. 그럼 먼저 프로젝트를 생성하도록 하겠습니다. 그림1) 프로젝트 생성 그림2) 프로젝트에 Main.vi 생성 먼저 프로젝트를 생성한 후에 Main.vi를 생성해 줍니다. Main.vi는 프로젝트에서 우선적으로 동작될 프로그램 입니다. 그림3) 프런트 패널 디자인 그림4) Stop버튼을 놓을때 스위치로 변경 프런트 패널을 보시면 LED와 Stop버튼만 있습니다. 그림3과 같이 배치 해 주시고 그림4에서 Stop의 기계적 동작을 '놓을때 스위치'로 변경 하면 됩니다. 그림5) Stop버튼에 참조 생성 이제 불리언과 Stop버튼의 참조를 생성해 줍니다. 컨트롤 패널 또는 블록다이어 그램에서 마우스로 해당 컨트롤 또는 변수를 우클릭 한 후에 생성에 들어가면 참조를 생성할수 있습니다. 그림6) 프로퍼티노드 위치 저번 글과 달리 이번에는 참조를 이용한 프로퍼티 노드를 생성하는 방법 입니다. 블록다이어 그램에서 그림6에 위치함 프로퍼티 노드는 생성하시면 됩니다. 프로퍼티 노드 왼쪽에 참조값이 들어가면 기존의 프로퍼티 노드처럼 사용이 가능합니다. 그림7) 프로퍼티노드 속성 선택 프로퍼티 노드를 참조와 연결한 수에 좌클릭을 하시면 여러 속성이 나오는데 지금은 값을 선택하도록 하겠습니다. 그림8) 프로퍼티 노드를 쓰기로 변경 처음 플랫 케이스는 초기화이기 때문에 Stop의 프로퍼티노드를 False로 해야 합니다. 따라서 쓰기로 변경해 줍니다. 그림9) 프로퍼티 노드를 쓰기상태 ...
Nest JS을 말하기 전 Node JS을 먼저 이야기 해야함 Node JS은 사용자가 모든것을 직접 설계하고 코딩하게 되어있습니다. 초기 최소한의 셋팅이 되어있고 개발자가 원하는 셋팅을 자유롭게 할수 있습니다. 이는 routing, API를 부르는법, 셋팅 또는 웹 소켓등입니다. 또한 코드적으로 코드, 파일 구조와 이름까지도 자유롭게 결정할수 있습니다. 이러한 셋팅을 더 간단하게 해주기 위해서 많은 프레임워크들이 나왔습니다. 대표적으로 Express.js입니다. 이러한 자유성은 양날의 검이 될수 있습니다. 향후 팀이 커지게 되면 해당 어플리케이션에 잠재적 문제가 될수 있기 때문입니다. NestJS는 NodeJS의 자유성으로 인해 발생되는 문제들 보다 실제 어플리케이션에 발생하는 문제에 대해서 더 집중할수 있게 해줍니다. API를 부르는법, 에러 핸들링, 미들웨어 셋업, 타입스크립 셋업 등등의 디테일 등을 크게 신경쓰지 않도록 해줍니다. SCALABLE : 시스템을 확정 또는 축소할수 있게 해줍니다. LOOSELY-COUPLED : 느슨한 결합으로 하나의 컴포먼트의 변경이 다른 컴포먼트들의 변경요구를 최대한으로 줄여준다. TESTABLE : 작성한 코드를 테스트 할수 있다. MAINTAINABLE : 유지보수가 가능하다 NestJS는 위 4가지는 중점으로 개발이 되었습니다. 앞으로 코스를 진행하면서 각각 4가지에 대해서 자세하게 배우게 됩니다. 사실 NestJS에 규칙이 있다고 하지만 플러그인으로 Express, Fastify 또는 다른 것을 사용할수 있습니다.
댓글
댓글 쓰기