목록전체 글 (305)
이번에 혼자 프론트엔드와 백엔드를 만들어, 하나의 인스턴스로 배포하는 과정에서 사용한 Nginx. 이름부터 "엔-진" 이라, 마치 기계 엔진처럼 복잡하고 정교하게 작동할 줄 알았는데, 생각보다 심플해서 놀랐더랬다. 사실 Nginx를 사용하기 직전 여러 고초를 겪었다. 요약하자면 GCP에서 제공하는 부하분산기에서 경로를 설정하면 그 경로에 맞게 요청이 전달될 줄 알았는데 그렇지 못했다는 것. (내가 제대로 설정하지 않았을 가능성도 크다.) 이를 해결하기 위해 듣기만 했던 결국 Nginx를 사용하게 되었다. - 내가 사용한 방식 1. 먼저 default.conf 파일을 작성해야 하는데 내용은 다음과 같다. // default.conf events {} // 이벤트 규정 http { server { liste..
오버플로우란? 자바에서의 계산 결과가 최댓값을 넘거나 혹은 최솟값보다 작을 경우, 음수는 양수로, 양수는 음수로 바뀌는 문제가 발생한다. 이는 오버플로우라고 하며, 자료형의 범위를 벗어나는 연산 값이나 값 할당이 일어난 경우 야기되는 현상이라고 볼 수 있다. (마치, 500ml 용량의 컵에 1,000ml의 물을 따랐을 때, 넘쳐흐르는 것(overflow)으로 생각하면 쉽다.) 참고로 메모리가 표현할 수 있는 값보다 적은 값을 저장하는 경우는 언더플로우라고 한다. 간단한 코드로 설명하면 다음과 같다. public class NumberOverflow { public static void main(String[] args) { int maxInt = Integer.MAX_VALUE; System.out.pr..
문제는 다음과 같다. 0,1 로 이루어진 이차원 배열에서, 1로 이루어진 가장 정사각형을 만들었을 때 가장 큰 넓이를 구하는 문제다. 그리고 이 문제에 접근하기 위해 동적 계획법(Dynamic Proramming)이라는 개념에 대해 알게 되었는데, 이에 대해 먼저 나눠보기로 한다. 동적 계획법(Dynamic Proramming)이란? 입력 크기가 작은 부분 문제들을 모두 해결한 후, 그 해들을 이용하여 보다 큰 크기의 부분 문제들을 해결하여, 전체 문제를 해결하는 알고리즘 설계기법이다. 따라서 동적 계획법을 사용하기 위해선 큰 문제를 작은 문제로 나눌 수 있어야 하며 작은 문제들의 해결 방법은 모두 동일해야 하고 작은 문제들의 해결 결과는 한 번만 계산하고 저장해 놓을 수 있어야 한다. 피보나치 수열은 ..
미로 찾기 관련 DFS 문제를 풀다가, 이미 방문했던 곳을 다시 방문하지 않기 위해 방문 내역을 저장하기 위한 배열을 구현하던 도중 new Array와 Array.from의 차이점에 대해 알게 되어 이에 대해 예를 들어 포스팅해본다. 1차원 배열의 경우 먼저 일반적인 new Array / Array.from으로 배열 길이가 n이며, 0으로 채운 배열을 만든다고 한다면 다음과 같다. const n = 2 let arr1 = new Array(n).fill(0) // [0,0] let arr2 = Array.from({length : n}, ()=> 0) // [0,0] new Array 객체를 사용한 방식의 경우, 숫자를 인자로 받아 해당 숫자만큼의 길이를 가진 배열을 생성한다. (fill은 배열을 채우는..
DFS, BFS는 모두 그래프를 탐색하는 알고리즘이다. 먼저 node란? 그래프 이론에서 주로 사용되는 용어로, 트리나 그래프 구조의 개별적인 요소를 의미한다. 위 그림에서도 보여지는 것과 같이, DFS와 BFS의 차이점은 어떤 방식으로 다음 노드를 탐색하느냐에 따라 나뉜다. (색상으로 구분했다.) DFS (깊이 우선 탐색) DFS의 경우는 그 말마따나, 인접한 노드를 '깊이'있게 모두 탐색한 뒤에 다음 노드로 넘어가는 방식이다. 느리기는 하지만 간단하며, 모든 노드를 방문하고자 하는 경우에는 위 방법을 사용하며 스택 또는 재귀함수로 구현된다. (DFS는 미로에서 100% 탈출하는 방법이라고 말하는 수법(손을 활용한 방식)과 비슷한 방법이라고도 볼 수 있는데, 궁극적으로 두 방법은 모든 경로를 파악하며 ..
이번 포스팅은 CI/CD를 함께 적용한 workflow에 대해 다룬다. 이전 포스팅에서는 CD에 대해 다뤘으니, 필요한 내용은 참고 바람 ^_^ 2023.05.27 - [개발/GCP] - Github-actions 사용기 (with GCP) 내가 CI 과정 중 구현하려고 했던 것은 다음과 같다. push가 진행될 시, 이에 대한 테스트 코드를 실행하여 정상적으로 구동되는지 확인 후, CD과정을 진행하는 것. 작성한 workflows name: githubaction-cd on: push: branches: [ "master" ] jobs: ci :// job에 새로운 요소 추가 name : gitaction-test runs-on : ubuntu-latest // ubuntu 컴퓨터 빌리기 steps :..
github-actions를 통해 GCE 인스턴스를 자동화 배포했던 과정을 포스팅한다. github-actions github-actions(이하 깃허브 액션)은 빌드/테스트/배포를 자동화할 수 있는 CI/CD 플랫폼이다. 구동방식은 다음과 같다. 특정 조건(events)에 따라, 원하는 작업 흐름들(workflows)를 실행시킨다. 이후 workflows내에 존재하는 작업(jobs)을 단계(steps)에 따라 명령어를 수행한다.(actions) event / workflows / jobs / steps / actions 에 대해 events - 특정 이벤트 (push, merge, issue) 발생 시 workflow를 실행시키는 역할 - workflow 실행을 트리거하는 특정 활동이나 규칙을 의미하기..
오늘은 github-actions을 사용하여 무중단 배포를 연습해보기 위해, 인스턴스 그룹에 부하분산기를 부착하는 과정 중 PROVISOINING이 17시간 째 진행되었던 문제를 해결하는 과정에 대해서 다룬다. (캡처본은 5시간이지만, 사실 다음날 아침까지 안돼서 17시간 ㅠ.ㅠ) SSL 부착 전까지 했던 과정은 다음과 같다. - 서버 VM 인스턴스 배포 (도커 설치 & env 설정) - 방화벽 설정 - mySQL 인스턴스와 서버 인스턴스 연결 - VPC 페어링 (가상 네트워크를 구축하여, 외부 IP로 DB에 직접 접속하지 못하게 함) - DNS 연결 - 인스턴스 그룹 설정 (다수의 가상머신 관리와, 안정적 서비스 제공) - 로드 밸런서 설정 (* 문제가 일어난 곳) 관련 DOCS를 살펴본 결과 문제가 ..