전체 글

😼 Github : https://github.com/Mingyum-Kim
Server/Architecture

[MSA] Spring Cloud Config Server 구축 및 profiles 설정

설정 서버 (Config Server)란 ? 설정 서버는 각 Config Client들이 사용할 수 있는 설정 정보를 한 곳에 모아 저장한 Server이다. Spring Cloud Server의 역할 깃에 설정된 profile의 정보가 바뀌게 되어도 마이크로서비스의 재기동 없이 적용이 가능하다. Spring Config Client들에게 설정 정보를 뿌려서, Application의 외부 속성을 중앙 집중식 관리가 가능하도록 한다. 서버는 주로 마이크로서비스를 개발하는 개발서버와 운영 서버, 스테이지 서버, 테스트 서버로 분리된다. 이런 서버들의 포트와 IP주소는 각기 다른데, 환경 설정 정보를 소스로부터 분리하여 소스코드와의 결합도를 낮추는 역할을 하는 것이 설정 서버의 역할이다. 그렇다면 설정 서버에서..

Other/git

[git] .gitignore 적용하기

설정 정보가 포함되어있거나, 민감한 정보가 있는 파일은 깃에 올리지 않는 것이 좋다. 매번 제외하는 것이 아니라, 루트 프로젝트에 있는 .gitignore에 파일 경로를 추가하면 쉽게 제외할 수 있다. (1) .gitignore에 파일 경로 추가하기 아래와 같이 push에서 제외해주고자 하는 파일에서 오른쪽 버튼을 눌러 'Path From Repository Root'를 골라 클립보드에 경로를 복사한다. 그리고 루트에 있는 .gitignore에 들어가서 아래와 같이 붙여넣기 해준다. (2) 적용하기 git rm -r --cached . git add . git commit -m "apply .gitignore" 위와 같이 터미널에 입력한 후 Push해준다. 만약, 이미 Push 명령어로 리포지토리에 올라..

Server/Architecture

[MSA] 유레카(Eureka)서버, 줄(Zuul) 서버 설정 및 구동하기

유레카 서버 (Eureka Server) 마이크로서비스의 기동 여부를 체크하고, 마이크로서비스가 등록되거나 삭제될 때 이에 대한 상태정보를 동적으로 감지하는 역할을 한다. 마이크로서비스는 기동되는 시점에 유레카 서버에게 이 정보를 전달한다. 유레카 서버는 유레카 클라이언트가 접속할 수 있는 defaultZone 서버 주소를 오픈한다 . server: port: 9091 spring: application: name: msa-architecture-eureka-server # 유레카 서버 이름 # Config server cloud: config: url: http://localhost:8888 name: msa-architecture-config-server # Eureka Standalone Serve..

Algorithm/Algospot

[Algorithm] 큐(queue)와 스택(stack), 데크(dequeue) #230213

큐, 스택, 데크 큐는 선입선출 (FIFO)의 속성을 가지고 있다. 스택(Stack) 은 반대로 후입선출(LIFO)의 속성을 가지고 있고, 데크(dequeue) 는 양쪽 끝에서 넣고 뺄 수 있는 자료 구조를 말한다. 이 자료 구조는 동적 배열, 혹은 연결 리스트로 구현할 수 있다 (1) 연결리스트로 구현 시 양쪽 끝에서 상수 시간에 추가와 삭제가 가능하다. (2) 동적 배열을 이용한 구현 시, 배열의 맨 앞에서 원소 삭제 시 O(n)의 시간이 걸린다는 단점이 있다 → head와 tail을 이용해서 이 점을 보완할 수 있다. 즉 배열 전체가 아닌 head부터 tail까지만 자료구조로 사용하겠다는 건데, 버려지는 공간이 많다는 단점이 있다. 이는 환형 버퍼 (circular buffer) 의 개념으로 해결할..

Algorithm/Algospot

[Algorithm] 선형 자료구조 #230212

선형 자료구조 배열은 메모리의 연속된 위치에 각 원소들이 저장되어있고, 연결 리스트는 여기저기 흩어져있는 원소들의 특정 위치에서 삽입과 삭제를 상수 시간에 수행하기 위해 이전 원소에서 다음 원소를 가리키는 “포인터”로 구현한다. struct ListNode { int element; ListNode *prev, *next; } C++에서는 연결리스트를 list라는 STL을 사용해서 구현한다. 조세푸스 문제 #include #include using namespace std; void josephus(int n, int k) { list survivors; for (int i = 1; i 2) { kill = survivors.erase(kill); if (kill == survivors.end()) ki..

Algorithm/Algospot

[Algorithm] 부분합 (partial sum) #230212

부분 합이란 ? 배열의 각 위치에 대해서, 배열의 시작부터 현재 위치까지의 원소의 합을 구한 배열 #include #include using namespace std; vector partialSum(const vector& a) { vector ret(a.size()); ret[0] = a[0]; for (int i = 1; i < a.size(); i++) { ret[i] = ret[i - 1] + a[i]; } return ret; } int rangeSum(const vector& psum, int a, int b) { if (a == 0) return psum[b]; return psum[b] - psum[a - 1]; } 앞의 값에서 현재 값을 더하며 부분합 배열을 구하고, 이를 활용해서 구간..

Algorithm/Algospot

[Algorithm] 비트마스크 (Bit-mask) #230210

비트마스크(bitmask) 란 ? 이진수 표현을 자료구조로 쓰는 기법이다. 비트 연산자 a & b : AND 연산 a | b : OR 연산 a ^ b : XOR 연산 ~a : NOT 연산 a > b 정수 a를 오른쪽으로 b비트 Shift 비교 연산자 → 비트 연산자의 우선순위 집합의 구현 int noPizza = 0; // 공집합 int fullPizza = (1

Server/MQ

[kafka] Window OS에 Kafka 설치하고 실행하기

HTML 삽입 미리보기할 수 없는 소스 Kafka란 ? 간단하게 설명하자면, 이벤트 생산자(Producer)와 소비자(Consumer)가 큐잉 시스템을 통해서 데이터를 주고 받는 메시지 큐이다. 예를 들어, 마이크로서비스에서는, 각 서비스 간의 데이터 전달이 필요한 상황에서 느슨한 결합을 이루기 위해 큐잉 시스템을 사용하게 된다. 이렇게 여러 송신자가 메시지를 발행하고 여러 수신자가 구독하는 방식을 Pub/Sub구조라고 한다. Producer는 이벤트를 데이터를 구분하기 위한 저장소(Topic)에 저장하게 된다. 하나의 Topic은 여러 개의 Partition으로 나뉘어져 있다. 그리고 이 Topic에 저장된 이벤트들 저장, 전달하는 역할을 Broker가 하게 되는 것이다. Zookeeper란 ? Kaf..

Algorithm/Algospot

[Algorithm] 동적 계획법 (Dynamic Programming) #230203

본 게시글은 "프로그래밍 대회에서 배우는 알고리즘 문제 해결 전략 (구종만 저)"의 내용을 참고하여 기재하였습니다. 동적 계획법이란 ? 동적 계획법은 분할 정복과 유사하지만, 이미 계산한 값을 중복해서 계산하지 않기 위해 따로 저장하는 메모이제이션 기법을 사용했다는 것이 주요 특징이다. 이 기법은 참조적 투명성을 가지고 있는 함수에 대해서 적용된다. 같은 입력이 들어왔을 때 항상 같은 출력을 반환한다는 것이다. 유의사항 (1) 입력이 정해진 범위를 벗어난 경우 등을 기저 사례로 처리하여 cache에 저장하기 (2) cache의 초기값을 -1과 같은 수로 두고 -1이 아니라면 이미 계산된 값이라 생각한다. (3) 저장된 값을 반환하여 담는 ret변수는 &를 사용해서 “별칭”으로 선언한다. 이는 cache의..

MINGYUM
코딩하는 겸