목록[Infra] (11)
개발자로 후회없는 삶 살기

서론※ 아래 내용을 다룹니다.모듈화버저닝 본론- 모듈화란?작성한 코드를 재사용 가능한 단위로 분리하는 것으로 여러 프로젝트에서 공통적으로 사용되는 이미지 빌드 잡이나 배포 잡을 모듈로 만들고 재사용할 수 있다. -> 모듈화가 필요한 이유액션을 사용하는 레포지토리가 1개면 상관 없는데 100개라면 100개의 레포에 모두 액션을 작성해야 한다. 또한, 이미지 빌드 코드를 수정해야 한다면 100개를 전부 수정해야 한다. 보통 액션은 환경과 시크릿 값만 다르고 다른 로직은 비슷한데, 비슷한 로직을 100번 작성해야 하는 것은 매우 비효율적이다. 따라서 공통된 로직을 중앙화된 특정 레포지토리 한 곳에서 관리하고 이를 레포지토리에서 가져와서 참조하면 공통 변경 사항이 있을 경우 모듈만 수정하면 된다. 환경변수와 시..

서론※ 아래 내용을 다룹니다.개발 환경 CICD개발 + 운영 환경 CICD개발 + 운영 + QA 환경 CICD 본론- 다양한 배포 시나리오1) 로컬 작업 내용을 개발 환경에 배포2) 로컬 작업 내용을 개발 환경에 배포하고 릴리즈 브랜치를 간접적으로 사용하여 운영 환경에 배포3) 로컬 작업 내용을 개발, QA, 운영 환경에 배포4) 로컬 작업 내용을 개발, QA, 스테이징 환경에 배포하고 승인 시 운영 환경에 배포다수의 인원이 하나의 프로젝트에 참여하여 개발을 진행할 때, git flow 방식을 사용하면 위와 같은 시나리오로 개발과 테스트, 배포를 하게 된다. 2번 내용에서 릴리즈 브랜치를 두는 이유는 아래에서 알아보자. -> CICD 프로세스1) CI : 변경된 코드의 테스트 코드가 성공하는지 확인하고 ..

🚨 서론 (문제 상황)이슈를 생성했을 때, 특정 키워드 [critical, normal]이 포함되어 있는 경우에만 해당 키워드가 포함된 슬랙 채널에 훅을 날리고 싶은 상황이다. 워크플로우는 위와 같이 작성할 수 있다. 1) 이슈의 제목이 critical 키워드가 있다면 크리티컬 웹 훅 URL로 훅 전송2) normal도 동일이슈의 제목이 critical이냐 normal이냐를 따지게 되면 추후 다른 키워드가 추가될 때마다 워크에 if문이 추가된다. 하지만, 키워드가 증가하게 되면 중복된 코드 작성이 수반된다. 1) 키워드 개수만큼의 if문을 사용하여 실행할 잡과 스킵할 잡을 선택2) 키워드 개수만큼의 웹 훅 URL 시크릿 값 수정만약 키워드의 개수가 5개라면 매번 중복된 작업을 해야하고 이는 매우 비효율..

서론※ 아래 내용을 다룹니다.깃헙 액션의 다양한 기능 본론- 체크아웃레포의 코드를 가져와서 사용할 수 있는 작업이다. 깃헙 액션 마켓플레이스에 등록된 액션으로, 레포의 코드에 테스트가 있다면 테스트를 하고 빌드 할 수 있다. name: checkout-flowon: workflow_dispatchjobs: no-checkout: runs-on: ubuntu-latest steps: - name: cat readme fail run: cat README.md checkout: runs-on: ubuntu-latest steps: - name: checkout uses: actions/checkout@v4 - name: cat run..

서론※ 아래 내용을 다룹니다.컴포넌트 종류이벤트 트리거 별 특징본론- 컴포넌트 종류1. 워크플로우깃헙 액션으로 동작할 전체 흐름을 의미하며, 푸시, 풀 리퀘 등 깃헙 이벤트에 의해서 트리거 된다. 특정 이벤트 외에도 특정 시간, 수동으로 워크 플로우를 실행할 수 있다. 2. 이벤트워크플로우를 실행하는 활동이다. 푸시, 풀 이벤트 발생 시 워크플로우가 작동하려면, 원하는 레포지토리의 원하는 브랜치에 푸시, 풀 이벤트 설정이 되어 있어야 한다. 3. 러너워크플로우가 동작하는 서버이다. 하나의 러너에서 하나의 잡이 동작한다. 위 사진에서 러너1, 러너2는 잡을 실행하는 서버로 하나의 잡을 실행할 수 있다. 4. 잡러너에서 실행되며, 워크플로우에서 동작할 스탭이다. 하나의 워크 플로우에 여러 개의 잡을 설정할 ..

서론앞에서 도커의 기본이 되는 내용은 전부 배웠습니다. 이것으로 어떻게 도커 기반으로 서비스 개발을 하는지 알아보겠습니다. 본론만들어볼 서비스는 다음과 같이 몽고 db 데이터를 플라스크로 웹에 출력하는 것입니다. 차이점은 이 모든 것을 도커 이미지로 불러와 컨테이너로 실행한다는 것입니다. 원래 같으면 서비스할 코드를 작성하고 톰캣같은 서버를 실제로 다운받고 로컬에서 flask 작성하고 몽고 DB 서버 띄어서 진행하겠지만 이번에는 이미지 외에는 물리적으로 다운 받는게 없습니다. > 브릿지로 서브넷을 만들고 서브넷 안에 db 서버와 프로그램을 실행할 것입니다. 몽고 db 이미지를 통해서 서버를 실행시키고 플라스크 웹 서비스를 만들어서 배포할 것입니다. 도커 기반 어플리케이션이므로 플라스크도 컨테이너로 띄워야..

서론도커 컴포즈에 대해 알아보고 사용해 보겠습니다. 본론- 도커 컴포즈란?컨테이너를 실행하는데 커맨드에서 하면 옵션이 많아지면 어렵고 관리하기가 간단하지 않습니다. 그리고 매번 명령어를 치는 것이 귀찮습니다. 따라서 도커 컴포즈라는 파일을 만들고 실행시키면 파일에 적혀져 있는 대로 명령어가 실행됩니다. 실습으로 몽고 DB 이미지를 컴포즈로 불러와보겠습니다. - docker-compose.yaml 파일 version: "3.7" # 컴포즈 버전으로 버전별로 파일에 적히는 내용이 달라짐 services: # 몽고 DB, 몽고 익스프레스 서비스 총 2개를 만들겠다. mongodb: image: mongo # 실행할 이미지의 도커 허브 레포지토리 명 networks: # 브릿지 - ..

서론도커 이미지를 사용해 보면서 life cycle이 어떻게 되나 확인해 보고 이미지란 어떤 것이었나 복기해보는 시간을 가져보겠습니다. 본론- 실습서론에서 말한 것처럼 이미지를 사용해보겠습니다. 새로 레이어를 쌓아서 하는 것이 아닌 이미 만들어진 이미지를 가져와서 사용해 보겠습니다. 1. pulldocker pull httpd:latest이미 만들어진 이미지를 가져옵니다. 이미지를 보면 경로가 비어있는 이미지들이 있고 경로가 붙은 이미지들이 있습니다. public repository의 경우 앞이 비어있고 private repository의 경우 private의 도메인 : 통신할 때 사용할 포트번호/이름: 태그입니다. 2. run# 백그라운드로 실행docker run -d httpdpull로 가져온 이미..