주니어 데이터 엔지니어 우솨's 개발일지

데이터 엔지니어링 47일차 TIL 본문

데브코스

데이터 엔지니어링 47일차 TIL

우솨 2024. 6. 5. 19:27

학습내용

Docker 컨테이너 내부 프로세스와 호스트 프로세스간의 통신
- Docker 컨테이너로 포트 4000에 실행된 Flask app이 있다
- 이 app을 호스트 운영체제에서 접근하려면?
    - Docker 컨테이너 내부 프로세스가 오픈한 포트번호는 바깥 프로세스에서는 보이지 않는다.
    - 예를들어 앞서 4000번 포트는 호스트 프로세스 브라우저에게는 보이지 않는다.
=> Docker컨테이너 내부 프로세스가 오픈한 포트번호를 외부로 노출해주는 포트맵핑이 필요하다.
    - Docker run 수행시 -p 옵션을 사용한다.
    - ex) Docker run -p 4000:4000 이미지이름 (앞의 4000이 localhost:4000 에 들어갈 포트넘버로 다른번호로 수정가능)

소프트웨어 빌드란?
- 자신이 개발한 소프트웨어를 최종적으로 출시하기 위한 형태로 만드는 것
    - 테스트가 빌드의 중요한 일부로 포함
- 참여 개발자들이 많을수록 이는 더 중요
- 개발이 끝나기 전부터 빌드를 하면 소프트웨어의 안정성 증대
    - Continuous Integration !

Continuous Integration이란?
- Software Engineering Practice의 하나
- 기본 원칙
    - 코드 Repo는 하나만 유지(Master)
    - 코드변경을 최대한 자주 반영
    - 테스트를 최대한 추가
        - test Coverage
    - 빌드를 계속적으로 수행 (자동화)
        - Commit Build vs Nightly Build
    - 성공한 빌드의 프로덕션 릴리스 (자동화)
        - CD : Continuous Delivery

빌드 실패 !
- 새 코드의 커밋으로 인해 테스트가 실패하는 경우
- 많은 회사들이 빌드 실패시 빌드가 다시 성공할때까지 코드 변경을 금지
    - 즉 빌드 실패는 모든 사람들을 잡아두는 족쇄

    - 빌드 실패시 가벼운 형태로 패널티 부여
    - 그래서 어느 정도 조직이 커지면 빌드만 전담하는 엔지니어가 생긴다
        - 이 사람의 업무 중의 하나는 빌드 실패시 누가 주범인지 알아내는 것


Git 에서 Push나 Merge 시점이 CI/CD를 실행하기 위한 순간 !
- 코드가 메인/마스터나 브랜치에 추가되는 순간 CI/CD를 트리거
    - 이를 특정 메인/마스터나 특정 브랜치만 대상으로 하도록 설정가능
    - 이 때 테스트를 수행하고 최종적으로 Docker Image등을 만들도록 하는 것이 가능
    - 그래서 CI/CD는 Github에 구현하는 것이 가장 자연스럽다
- Github에서는 이를 Actions라는 기능을 통해 Workflow라는 이름으로 구현 가능하다

GitHub Actions이란?
- CI/CD를 Github위에서 구현하기 위한 서비스
    - 코드 테스트, 빌드, 배포 자동화 기능 제공

- Workflow라 부르며 아래 컴포넌트로 구성
    - Events
    - Jobs
    - Actions
    - Runner
        - Github hosted runners
        - Slef hosted runners

GitHub Actions - Workflow
- Workflow는 트리거 이벤트가 발생하면 시작되는 일련의 동작들을 지칭한다
    - 코드 커밋(main과 같은 특정 브랜치를 대상으로만 제한 가능)
    - PR 생성
    - 다른 Workflow의 성공적인 실행

- Workflow를 위한 명령어들은 YAML 파일로 저장
    - 명령어들로는 환경설정과 scripts 실행들이 대표적이다

- Workflow는 Job들로 나눠지며 각 Job은 일련의 스텝을 수행한다
    - 각 스텝은 하나 혹은 그 이상의 명령어를 실행
        - 이 명령어는 actions라고 부르는 명령어들의 집합이 될 수도 있다
    - 각 스텝은 윈도우나 리눅스 서버 위에서 runner에 의해 실행된다.
        - 이걸 Docker Image에서 수행하는 것이 서비스 배포 과정에 따라 더 일반적이기도 하다.

사용해볼 CI Template:Python Application
- 테스트 코드 실행 이외에도 flake8을 사용해서 코딩스타일을 체크 가능
- 기본적으로 pytest를 테스트 프레임웍으로 설치
- python code linting tool으로 flake8을 설치하고 문법 에러와 코딩 스타일 체크

yml 설명
- "on:" 트리거 이벤트지정
- "jobs:" 여기에 실제 CI프로세스가 스텝(name)별로 기술된다.