전체 글
-
NodeJS - Express, file structureJavaScript 2022. 2. 19. 12:08
* NodeJS Express로 처음 API를 개발하면서 웹앱 프로젝트는 Folder by feature 를 따르며 파일 구조를 잡고 추가적으로 도커로 DB, Web server, CI(Github actions) - Jest test 추가함 ./.github/workflows - Github actions ./mongodb - backup,restore,data volume ./mysql - backup,restore,data volume ./proxy - nginx ./server ./src/ ./api/resources/ index.ts - routes *.ctrl.ts - controller *.dal.ts - data access layer(=repository) *.test.ts - test ..
-
NGINX - PROXY - 서브도메인 설정하기Dev 2022. 2. 16. 22:09
EC2의 잦은 이슈들로 IP가 변경(탄력적 IP 설정으로 지금은 고정됨)되거나, 포트를 정리하면서 포트가 변경되는 일들이 많았다. 이때마다 프론트에서 API 주소를 변경하는 일이 불필요하게 생겨 이참에 서브도메인을 적용하기로 함. * https://hub.docker.com/r/jwilder/nginx-proxy 기존 현재 진행 했던 모든 프로젝트들에는 Nginx를 사용하고 있었다 클라이언트(ip:1234주소로 접근) -> Nginx(외부 포트(1234) 개방 O) -> Guicorn -> Flask 클라이언트(ip:1235주소로 접근) -> Nginx(외부 포트(1235) 개방 O) -> Express 이방식인데 앞에 서브도메인을 설정해주고 해석해서 프록시 해주는 Nginx를 하나 더 추가했다. 변경 ..
-
Docker compose - .env 활용하기Dev 2022. 2. 8. 21:11
* 프로젝트 개발 환경에 따른 변수를 .env에서 선언하고 Docker compose 안에서 참조하거나 각 서비스(API, Web Server 등)에 변수를 전달해서 환경 변수로 활용하자. ./.env FLASK=project_api FLASK_PORT=11234 PROXY=project_proxy PROXY_PORT=11235 REDIS=project_redis REDIS_PORT=6379 REDIS_PASSWORD=password # API 에서 전달될 환경 변수 DB_URL='URL_0101' ./docker-compose.yml version: "3" services: flask: container_name: "${FLASK}" restart: always build: ./flask volumes..
-
Docker-compose MySQL 연동 및 백업, 복구Database 2022. 2. 7. 21:19
* Docker 이미지로 실행된 MySQL 데이터를 연동, 백업 및 복구하자 * 백업의 경우 도커 컨테이너로 백업 명령어를 실행하여 호스트에 ***.sql 로 저장 * 복구의 경우 ***.sql 를 도커 컨테이너로 복구 명령어 실행 MySQL 연결 및 백업, 복구 Shell script # 변수는 ./.env version: "3" services: flask: container_name: "${FLASK}" restart: always build: ./flask volumes: - ./flask/logs:/usr/src/flask_app/logs expose: - "${FLASK_PORT}" env_file: - ./.env command: gunicorn -c ./gunicorn.conf.py "ap..
-
Flask - Celery - 비동기 처리하기Python 2022. 2. 7. 12:52
Celery Python 동시성 프로그래밍에서 가장 많이 사용하는 방법 중 하나이며, 분산 메시지 전달을 기반으로 동작하는 비동기 작업 큐(Asynchronous Task/Job Queue) 웹서버레벨에서 모든것을 다 처리하기엔 부담이 크거나, 외부의 모듈과 협업해야 할 때, 즉 비동기적으로 요청에 대한 부하를 외부에 전가 Celery client: Flask app 에서 celery 백그라운드 잡을 실행시키기 때문에 Flask app이 됨 Celery workers: 백그라운드 잡을 실행하는 프로세스들. local, remote workers들이 있고, 확장가능함 Message broker. Celery client(Flask App)에서 Celery workers과 통신, RabbitMQ and Re..
-
Github actions - Github pages / S3 / NodeJS JestDev 2022. 2. 5. 23:37
* 그동안 Gituhb actions을 사용했던 예들을 정리해보았다. 1. 리액트 앱 깃헙 페이지에 배포하기 - Github repo name: github pages on: push: branches: - client/deploy # 현재 프로젝트에는 client와 lambda 디렉토리로 나눠져있음. client/deploy 브랜치에 푸쉬하면 실행되고, gh-pages 브랜치는 자동으로 업데이트된다. jobs: deploy: runs-on: ubuntu-18.04 # 잡을 실행하는 환경 env: working-directory: ./client # client 안에 리액트 앱이 있고, 아래에서 반복해서 쓸 예정이므로 env 선언 steps: - uses: actions/checkout@v2 # 코드 소..
-
Github actions - AWS ECR/Lambda 자동 배포Dev 2022. 2. 3. 17:40
기존 방식 코드를 수정한다. [수동]도커이미지를 빌드시킨 후 태그 설정 후 AWS ECR로 푸쉬한다. [수동] AWS 콘솔에 가서 Lambda function 에서 새로 푸쉬한 이미지로 바꿔준다. aws lambda update-function-code --function-name 람다함수이름 --image-uri 이미지주소를 AWS CLI를 통해 업데이트 가능하므로 AWS 웹페이지 콘솔에서 할 필요는 없음 Github actions을 활용한 자동 배포 코드를 수정한 후 lambda/deploy 브랜치에 푸쉬한다. [자동]Github actions 을 통해 이미지를 빌드한다. [자동]깃 커밋 id(sha1으로 만들어진 해시값)를 태그로 설정하고 AWS ECR로 푸쉬한다. [자동]ECR에 푸쉬할때의 주소로..
-
Docker - cmd, Dockerfile, docker-compose.ymlDocker 2022. 2. 2. 23:15
도커 sudo 그룹에 추가하기 ls -al /var/run/docker.sock 으로 해당 소켓파일의 소유그룹 확인 sudo usermod -a -G docker $USER (위 소켓파일이 docker 그룹이라면) - 현재 접속한 유저를 docker 그룹에 추가 Dockerfile - https://docs.docker.com/engine/reference/builder/ # 이미지 버전 꼭 명시 # 버전 없으면 latest 태그가 적용되는데 # latest는 다운로드 속도가 느려지고, 불필요한 라이브러리, 툴까지 설치됨 # 사이즈가 작은 도커 이미지 선택하고 FROM node:16 # RUN cd ./~~ 로 반복하지 말고 WORKDIR 로 한번에 현재 디렉토리 변경 WORKDIR /usr/src/ap..