MINI PROJECT #1 - 하차역 알려주는 서비스 (1)
MINI PROJECT #1 - 하차역 알려주는 서비스 (2)
이어지는 과제...
# .env 파일
AWS_ACCESS_KEY_ID=ㅇㅇㅇㅇㅇㅇㅇ
AWS_SECRET_ACCESS_KEY=12121212\
GIT_TOKEN=ghp_ㅇㅇㅇㅇㅇ
# 도커컴포즈
environment:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: ap-northeast-2
GIT_TOKEN: ${GIT_TOKEN}
# 도커파일
ENV GIT_TOKEN=${GIT_TOKEN}
RUN git clone https://${GIT_TOKEN}:x-oauth-basic@github.com/yoona-seline/TargetPassengerAI .
# .gitignore 파일
.env
크론 잡(Cron Job)은 유닉스 계열 운영체제(예: 리눅스)에서 특정 시간에 주기적으로 작업을 실행하도록 예약하는 작업 스케줄러입니다. 크론 데몬(crond)이 시스템 백그라운드에서 실행되며, 사용자가 설정한 스케줄에 따라 명령어 또는 스크립트를 실행합니다.
크론 잡은 유닉스 계열에서만 실행할 수 있다! 즉 윈도우에서는 사용할 수 없어서 다른 대체 방법을 사용해야한다.
sudo apt-get awscli cron
sudo systemctl start cron
sudo systemctl enable cron
sudo systemctl status cron
crontab -e
만약 vim이나 nano가 안깔려있다면 그 아래의 방법으로 설치.
sudo apt-get install vim
export EDITOR=vim

분 시 일 월 요일 명령어
현재 위 그림의 명령어는 "매일 00시에 fetch_data.sh를 실행해라"라는 뜻이다.
fetch_data.sh라는 파일명의 파일을 만들고 루틴하게 s3에서 하고 싶은 업무 명령어를 적는다.
아래의 예시는 매일 그 날짜로 된 파일을 다운로드 받아오는 것이다.
TODAY=$(date +%Y%m%d)
aws s3 cp s3://dlddu-seoul-line-dvc-1-dataset/yoona/dataset_$TODAY.xlsx /data/dataset_$TODAY.xlsx
도커 컨테이너는 처음 열릴때 한국시간대로 열리지 않는다!!!
뜨헋!!! 그러므로 CRON을 사용하려면 반드시 도커의 시간대를 바꿔주는 작업이 꼭 필요하다
apt-get install -y tzdata
# 한국 표준시(KST)로 시간대 설정
ENV TZ=Asia/Seoul
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
mkdir -p .github/workflows
이 워크플로우 파일로 깃허브액션은 작동/관리된다.
touch .github/workflows/update-pipeline.yml
(예시)
name: Update Pipeline
on:
push:
branches:
- main #트리거 명시: 메인브랜치에 push가 생기면!
jobs:
update:
runs-on: ubuntu-latest #아래의 step들이 수행될 환경 명시
steps:
- name: Checkout repository
uses: actions/checkout@v2 #이 워크플로우가 해당 레포지토리를 인식하는 단계
- name: Pull updates in container
run: |
docker exec my-app /app/pull_updates.sh #pull 행동을 일으킬 pull_updates.sh 파일 실행
jobs:
워크플로우의 작업(Job)을 정의하는 섹션입니다. 여러 개의 작업을 정의할 수 있으며, 각각의 작업은 병렬 또는 순차적으로 실행될 수 있습니다.
update:
작업의 이름을 정의합니다. 이 이름은 사용자 정의가 가능하며, 의미 있는 이름으로 설정할 수 있습니다. 여기서는 update라는 작업 이름을 사용합니다.
-steps:
작업 내에서 실행될 단계를 정의합니다. 각 단계는 순차적으로 실행됩니다.
name: Checkout repository
이 단계의 이름을 정의합니다. Checkout repository라는 이름은 현재 리포지토리의 코드를 체크아웃하는 작업을 의미합니다.
uses: actions/checkout@v2
GitHub에서 제공하는 공식 액션을 사용하여 리포지토리의 코드를 체크아웃합니다. actions/checkout@v2는 이 액션의 버전을 지정합니다.
actions/checkout: GitHub에서 제공하는 공식 액션 중 하나로, 리포지토리의 코드를 체크아웃(클론)하는 기능을 합니다. 이를 통해 워크플로우에서 현재 코드베이스를 가져올 수 있습니다. 즉, 워크플로우 파일이 해당 레포지토리를 '인식'한다는 의미이다.
#dockerfile
# 스크립트 복사 및 권한 설정
COPY pull_updates.sh /app/pull_updates.sh RUN chmod +x /app/pull_updates.sh
#pull_updates.sh
cd /app
git pull origin main
아래의 그림처럼 빨간색 x는 해당 액션이 수행되지 못했다는 뜻이다! 세부 페이지에 들어가면 어떤 단계에서 막혔는지를 로그를 알 수 있다!! 아주 편리하다!

