무중단 배포?무중단 배포는 서비스 운영 중 서버나 애플리케이션 업데이트를 수행하면서도 사용자가 서비스 중단을 느끼지 않도록 하는 배포 방식입니다. 무중단 배포를 적용하지 않은 기본 CI / CD의 경우 웹훅이 발생하여 새롭게 파이프라인이 빌드 되면 기존 컨테이너를 내리고 변경사항이 적용된 새로운 컨테이너를 올리게 됩니다. 이 과정에서 새로운 컨테이너가 올라갈 때 까지 지연 시간이 존재하게되고 사용자 입장에서는 서비스를 일정시간 사용할 수 없게 됩니다. 무중단 배포를 사용하면 업데이트나 유지 보수 중에도 사용자에게 중단 없는 서비스를 제공할 수 있기에 사용자로 하여금 우수한 서비스 사용 경험을 제공할 수 있게 됩니다.Blue-Green 무중단무중단을 구현하는 방식에는 대표적으로 카나리, 롤링, 블루그린 3..
NPM BuildReact / Vue 프론트엔드 프로젝트를 빌드 하기 위해선 npm run build 명령어를 통해 프로젝트를 빌드하기 위한 정적 빌드파일을 만들어야 합니다. 로컬에서 간단하게 테스트를 해보겠습니다. NodeJS가 설치된 환경에서 React / Vue 프로젝트 루트에서 npm i로 의존성을 설치한 뒤 npm run build를 진행합니다.빌드 명령어를 실행하면 루트 디렉토리 / build 프로젝트안에 배포를 위한 index.html 및 정적 파일이 빌드 되는것을 확인할 수 있습니다. build 폴더를 배포하는 방법에 따라 배포 방식이 두가지로 나뉠 수 있습니다. 1. Docker 컨테이너로 배포빌드한 정적 파일을 Dockerfile을 통해 도커 이미지로 만들고 컨테이너로 프론트엔드를 띄우..
1. Jenkins란?Jenkins는 지속적인 통합과 배포를 지원하는 서버로, 개발팀이 빠르게 코드 변경 사항을 반영하고 애플리케이션을 자동으로 빌드, 테스트, 배포할 수 있게 합니다. Jenkins는 다양한 플러그인과 통합할 수 있어, 빌드 도구, 테스트 도구, 코드 품질 도구, 그리고 클라우드 서비스와도 쉽게 연결됩니다. CI/CD 환경에서 Jenkins는 매우 중요한 역할을 합니다. CI/CD의 핵심은 자동화입니다. Jenkins는 다음과 같은 장점을 가지고있습니다.코드 통합: 여러 개발자가 작업한 코드를 통합하여 빌드하고 테스트하는 과정을 자동화.자동 빌드: 코드가 변경될 때마다 자동으로 애플리케이션을 빌드하고 테스트.자동 배포: 빌드된 애플리케이션을 테스트 및 프로덕션 서버에 자동 배포.지속적인..
CI / CD를 구축하기 이전에 수동으로 도커이미지를 빌드하고 배포해보는 과정을 통해 배포의 전반적인 과정의 이해를 하는것이 매우 중요하다고 생각합니다. 단순히 블로그와 지피티를 통해서 코드를 복사 붙여넣기 하는것으로도 파이프라인을 구축할수는 있겠지만, 추후 트러블 슈팅이나 시스템 고도화과정에서 기본적인 배포에대한 이해가 없으면 해결하기 힘든 문제들에 직면할것입니다. 저 또한 수동배포를 한번 진행해본것이 도커에 대한 기본적인 이해와 CI / CD의 이해를 높이는데 많은 도움이 되었기에 먼저 수동으로 배포를 진행해보려고 합니다. 0. Docker란?도커의 정의는 컨테이너 기반으로하는 오픈소스 가상화 플랫폼입니다. 흔히 생각하는 실제 컨테이너는 물건을 하나의 단위로 모아서 안전하게 운반하는 도구입니다. 컨..
순열 순열(permutation)은 순서가 정해진 임의의 집합을 다른 순서로 섞는 연산을 뜻한다. 가령 {1,2,3}이라는 집합에서 순서를 고려하여 3가지 숫자를 뽑는경우는 {1,2,3], {1,3,2},{2,1,3},{2,3,1},{3,1,2},{3,2,1} 6가지 경우의 수가 나오게되고 이처럼 특정 집합의 요소들을 순서를 고려하여 뽑는 경우를 순열이라고 한다. n개의 집합에서 r개의 요소를 뽑는 경우를 nPr이라고 하고 공식은 위와 같다. 구현 1. 내장 함수 기반 구현 c++은 내부적으로 순열을 구현해주는 next_permutation()함수를 가지고 있다. (algorithm 헤더안에 포함) 인자값으로 범위를 넣어주면 되는데 [fisrt, last) 범위로 값을 넣어주면된다. 따라서 (1,2,3)..
1.문제 https://www.acmicpc.net/problem/17144 17144번: 미세먼지 안녕! 미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사 www.acmicpc.net 2.아이디어 1. 먼지 퍼뜨리기 (spread함수) 모든 먼지는 같은 시간에 동시에 일어나야함 but 우리는 한 좌표씩 먼지를 퍼뜨리므로 동시 처리가 안됨 (스레드 구현할순 없으니..) 가령 10 8 10 의경우 동시에 퍼뜨리면 9 10 9 이 되어야 하는데 만약 현재 구현한대로 왼쪽 -> 오른쪽 으로 한개씩 퍼뜨리게되면 10 8 10 -> 8 10 10 -> 10 6 12 -> 10 ..
Map 정렬 Key 기준 정렬 map은 기본적으로 key값을 기준으로 오름차순 정렬을 수행한다. int main() { map m; m.insert({ 1, 5 }); m.insert({ 3, 1 }); m.insert({ 2, 10 }); for (auto v : m) { cout
C++ algorithm 헤더에 포함된 sort()함수를 사용하면 쉽게 배열이나 벡터 등을 정렬할 수 있다. Sort() 사용법 sort(배열 시작점 주소, 배열의 마지막주소 + 1) #include #include int main() { int arr[10] = { 2, 3, 6, 5, 1, 4, 7, 9, 8, 10 }; sort(arr, arr + 10); // arr 배열 오름차순 정렬 return 0; } 기본적으로 sort()는 오름차순으로 정렬이 진행되는데 만약 내림차순으로 정렬해주고 싶으면 sort()의 세번째 매개변수로 cmp함수를 만들어 넘겨주면 내림차순으로 정렬이 가능하다. #include #include bool cmp(int a, int b) { return a > b; } int..
1.문제 https://www.acmicpc.net/problem/1655 1655번: 가운데를 말해요 첫째 줄에는 백준이가 외치는 정수의 개수 N이 주어진다. N은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수이다. 그 다음 N줄에 걸쳐서 백준이가 외치는 정수가 차례대로 주어진다. 정수는 -1 www.acmicpc.net 2.아이디어 처음 문제를 접했을 때 n개의 입력이 들어올때마다 정렬을 수행하고 정렬된 배열의 가운데값을 출력하는 코드를 작성했었다. 정렬을 하기위해 O(nlogn)의 시간복잡도가 걸리고 총 n번의 정렬을 수행해야 하므로 총 O(n * nlogn)의 시간복잡도가 걸리게되고 n = 100,000이므로 제한시간인 0.1초를 넘기게 되어 시간초과로 통과하지 못했다. 이후 구글링을..
개요 n개의 물건과 각 물건의 무게 w, 가치 v가 주어지고, 배낭의 용량 k가 주어질때 배낭에 담을 수 있는 물건의 최대 가치를 찾는 문제이다. 0 - 1 KnapSack의 경우 각 물건은 한개씩만 존재한다. 아이디어 위 문제는 Dynamic Programming을 활용해서 해결할 수 있다. DP 문제를 풀기위해 다음과 같이 점화식을 세울 수 있다. DP[i][w] : 물건을 1 번째 물건 ~ i 번째 물건까지 고려하고 배낭의 용량이 w일때 최대 가치 위의 점화식에 따라 우리가 구하려는 답은 1 ~ n까지 즉, 모든 물건을 고려하고 배낭의 용량이 k일때 최대가치이므로 최적해는 DP[n][k]가 된다. 풀이 다음과같이 물건들의 무게와 가치, 가방의 무게가 주어진다고 가정하자 1. 가방의 무게가 0이거나 ..