기타 (6) 썸네일형 리스트형 GitHub Actions을 이용한 Docker 이미지 빌드 및 AWS EC2 배포 자동화 사전준비 AWS AWS EC2 인스턴스 생성 AWS EC2 SSH 보안 연결 허용 AWS EC2의 키페어 생성 AWS EC2에 도커 설치 sudo apt update sudo apt install apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" sudo apt update sudo apt install .. Associative Array와 Key 충돌 해결 전략 Associate Array key-value 쌍을 저장하는 자료구조이다. key는 unique하며, 특정 value와 매핑된다. 배열과 같은 순차적인 인덱스가 아닌, 키로 인덱싱된 elements들의 모음이다. Java에서는 Map, Python에서는 Dictionary로 구현되어있다. Bucket bucket은 value를 저장하는 자료구조이다. probe probe는 빈 bucket을 찾는 행위이고, probe number은 빈 bucket을 몇 번째 찾고 있는지를 의미한다. load factor 테이블이 얼마나 차있는지 나타내는 수치이다. 테이블 사이즈가 10이고, 5개의 element가 있을 때, load factor는 0.5가 된다. Key 충돌 해결 전략 Perfect Hash Functio.. [Github Actions] 정규식으로 PR Title 확인 name: PR Title Validation on: pull_request: types: [opened, edited, reopened] jobs: title-check: runs-on: ubuntu-latest steps: - name: Check PR Title run: | title=$(jq -r '.pull_request.title' $GITHUB_EVENT_PATH) if [[ "$title" =~ ^(\[Feat\]|\[Refactor\]|\[Fix\]|\[Test\]|\[Chore\]|\[Setting\]|\[Docs\]) ]]; then echo "PR Title is valid." else echo "PR Title is invalid." exit 1 fi 위의 yaml 파일을 .git.. [클린 코드] 객체와 자료구조 자료 추상화 변수를 private으로 선언하더라도 각 값마다 get 함수와 set 함수를 제공한다면 구현을 외부로 노출하는 셈이다. 변수 사이에 함수라는 계층을 넣는다고 구현이 감춰지지 않는다. 구현을 감추려면 추상화가 필요하다. 객체(Objects)와 자료구조(Data Structure) 객체 자료구조 추상화 자료를 숨긴 채 자료를 다루는 함수만 공개한다. 자료를 그대로 공개하며 다른 함수는 제공하지 않는다. 동작을 공개하고 자료를 숨긴다. 동작을 숨기고 자료를 공개한다. (기존 동작을 변경하지 않으면서) 새 객체 타입을 추가하기 쉽다. 새 자료구조를 추가하기 어렵다. 객체에 새 동작을 추가하기 어렵다. 새 동작을 추가하기 쉽다. 잡종구조(hybrid) 객체도 자료구조도 아닌 구조이다. 잘못된 설계이므.. [클린 아키텍처] 정책과 수준 소프트웨어 아키텍처를 개발하는 기술에는 정책을 신중하게 분리해야 하고, 정책이 변경되는 양상에 따라 정책을 재편성하는 일도 포함된다. 동일한 이유로 동일한 시점에 변경되는 정책은 동일한 수준에 위치하며, 동일한 컴포넌트에 속해야 한다. 서로 다른 이유로, 혹은 다른 시점에 변경되는 정책은 다른 수준에 위치하며, 반드시 다른 컴포넌트로 분리해야 한다. 재편성된 컴포넌트들을 비순환 방향 그래프로 구성하여 아키텍처 개발을 한다. 이 때 그래프에서 정점은 동일한 수준의 정책을 포함하는 컴포넌트에 해당한다. 방향이 있는 간선 은 컴포넌트 사이의 의존성을 나타낸다. 간선은 다른 수준에 위치한 컴포넌트를 서로 연결한다. 좋은 아키텍처라면 각 컴포넌트를 연결할 때 의존성의 방향이 컴포넌트의 수준을 기반으로 연결되도록 .. [클린 아키텍처] 컴포넌트 원칙 컴포넌트는 배포 단위다. 컴포넌트가 어떤 형태로 배포되든, 잘 설계된 컴포넌트라면 반드시 독립적으로 배포 가능한, 독립적으로 개발 가능한 능력을 갖춰야 한다. 컴포넌트의 간략한 역사 소프트웨어 개발 초창기에는 프로그램의 위치가 한번 결정되면 재배포가 불가능하였고, 메모리에서의 프로그램 위치와 레이아웃을 프로그래머가 직접 제어하였다. 이시대에는 프로그래머가 라이브러리 함수의 소스 코드를 애플리케이션 코드에 직접 포함시켜 단일 프로그램으로 컴파일했다.그러나 장치는 느리고 메모리는 너무 비쌌다. 메모리가 너무 작아서 소스 코드 전체를 메모리에 상주시킬 수가 없었기에, 컴파일러는 느린 장치를 이용해서 소스코드를 여러 차례 읽어야만 했다. 컴파일 시간을 단축시키기 위해 프로그래머는 함수 라이브러리의 소스 코드를 .. 이전 1 다음