분류 전체보기 29

[Jenkins] 젠킨스란 무엇인가?

젠킨스란? Java Runtime 위에서 동작하는 자동화 서버이다. 다양한 플러그인을 종합해서 CI/CD Pipeline을 만들어서 자동화 작업이다. CI(Continuous Integration)란? 여러 개발자들의 코드를 계속해서 통합하는 것이다. 어플리케이션의 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트 되어 공유 레포지토리에 통합히는 것을 의미한다. CD(Coutinuous Delivery)란? 개발자들이 코드를 계속 작성하면, 사용자 및 내부 사용자들(QA 등등)이 계속 쓸 수 있게 만드는 것이다. 젠킨스와 같은 툴이 등장하기 전에는 일정시간마다 빌드를 실행하는 방식이 일반적이다. 특히 개발자들이 당일 작성한 소스들의 커밋이 모두 끝난 심야 시간대에 이러한 빌드가 타이머에 의해 집중적으로..

[알고리즘] 이진 탐색(Binary Search)

이진 탐색(Binary Search)란? 오름차순으로 정렬된 리스트에서 특정한 값의 위치를 찾는 알고리즘이다. 배열의 중간 값을 임의의 값 X로 선택하여, 찾고자 하는 값보다 크면 우측 데이터를 대상으로, 작으면 좌측 데이터를 대상으로 해당 값을 찾을 때 까지 반복하여 검색한다. 장점 목표 값을 찾을 확률이 두배가 되어 속도가 빠르다. 단점 정렬된 리스트에만 사용할 수 있다. 이진 탐색 과정 1. 정렬된 리스트를 준비한다. 2. 중간 지점을 찾는다. (left + right) / 2 3. 중간 지점의 값과 목표하는 값을 비교한다. 3.1 중간 지점의 값 목표하는 값의 경우 - 검색 범위를 중간 지점의 좌측으..

기초/알고리즘 2021.12.02

MSA 와 Netflix OSS

MSA(Microservice Architecture)란? 느슨히 결합된 서비스의 모임으로 구조화하는 "서비스 지향 아키텍쳐(SOA)"스타일의 개발 기법이다. 여러가지 일을 수행하는 어플리케이션을 한 가지 일만 수행하는 작은 어플리케이션으로 나타내는 것이 마이크로서비스이다. 작은 어플리케이션으로 분해하게 되면 쉽게 교체할 수 있고, 독립적으로 개발되고 전개 할 수있다. MSA를 구현 하게 되면 각 서비스간 통신 방법이 필요하게 되고, 서비스를 나눠 제공하기 때문에, 데이터 중복이 발생할 수 있고 정합성을 보장하기가 어려워진다. 하지만 유지보수성이 뛰어나고, 업무를 독립적으로 분할할 수 있는 장점이 존재하기 때문에 각 기업이나 개인이 사용한다. MSA를 구현하는 방법 중 가장 대중적인 것이 넷플릭스에서 공..

[알고리즘] 합병 정렬(Merge Sort)

합병 정렬(Merge Sort)이란? 비교기반 정렬 알고리즘이다. 일반적인 방법으로 구현했을 때 이 정렬은 안정 정렬에 속하며, 분할 정복 알고리즘의 하나이다. 임시 배열 공간을 활용하여 정렬을 수행한다. 장점 안정적인 정렬 방법이다. 데이터의 분포에 영향을 덜 받는다. 즉, 입력 데이터가 무엇이든 간에 정렬되는 시간은 동일하다. (O(nlog₂n)로 동일) 단점 레코드들의 크기가 큰 경우에는 이동 횟수가 많으므로 매우 큰 시간적 낭비를 초래한다. 합병 정렬 과정 1. 리스트의 길이가 0 또는 1이면 이미 정렬된 것으로 본다. 2. 그렇지 않은 경우에는 정렬되지 않은 리스트를 절반으로 잘라 비슷한 크기의 두 부분 리스트로 나눈다. 3. 각 부분 리스트를 재귀적으로 합병 정렬을 이용해 정렬한다. 4. 두 ..

기초/알고리즘 2021.11.29

[PostgreSQL] SUM OVER 사용하여 누적 합계 구하기

SUM OVER 집계 함수는 윈도우 함수(Window Function) 중 하나이다. 집계 함수와 차이점은 그룹화되지 않고 행들의 정체성을 유지하여 나타낸다. 사용 방법 SELECT 컬럼1 , 컬럼2 , SUM(누적할 컬럼명) OVER(PARTITION BY 그룹화할 컬럼명 ORDER BY 정렬할 컬럼명 정렬 방식) FROM [테이블 명] 아래 테이블은 예시 테이블이다. 1. 총합계 구하기 현재 article을 기준으로 행마다 총합을 넣고 싶다고 가정해본다면, 쿼리는 다음과 같다. SELECT article , amount , reg_date , reg_time , sum(amount) over(partition by article) as total --파티셔닝하여 총합 구하기 FROM PAYMENT_H..

[알고리즘] 퀵 정렬(Quick Sort)

퀵 정렬(Quick Sort)이란? 다른 원소와의 비교만으로 정렬을 수행하는 비교정렬에 속한다. 분할 정복 알고리즘 중 하나, 매우 빠른 수행속를 가지고 있는 정렬 방법이다. 원소들 중에 같은 값이 있는 경우 같은 값들의 정렬 이후 순서가 초기 순서와 달라질 수 있어 불안정 정렬에 속한다. 장점 속도가 빠르다. 추가 메모리 공간을 필요로 하지 않는다.(퀵 정렬은 O(logn)만큼 메모리를 필요로 한다.) 단점 정렬된 리스트에 대해서는 퀵정렬의 불균형 분할에 의해 오히려 수행시간이 더 많이 걸린다. 분할 정복(Divide And Qunquer) 방법 1. 리스트 가운데서 하나의 원소를 고른다. 이렇게 고른 원소를 피벗이라고 한다. 2. 피벗 앞에는 피벗보다 값이 작은 모든 원소들이 오고, 피벗 뒤에는 피벗..

기초/알고리즘 2021.11.25

[알고리즘]삽입 정렬(Insertion Sort)

삽입 정렬(Insertion Sort)이란? 자료의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교 하여, 자신의 위치를 찾아 삽입하여 정렬한다. 매 순서마다 해당 원소를 삽입해야할 위치를 찾아 해당 위치에 넣는다. 장점 레코드의 수가 적을 경우 다른 복잡한 정렬 방법보다 유리할 수 있다. 대부분의 레코드가 이미 정렬되어 있는 경우에 매우 효율적일 수 있다. 단점 레코드가 많고 크기가 크면 효율적이지 않다. 알고리즘의 순서 이전 레코드보다 작은 레코드를 선택한다. 한단계 씩 레코드를 교환하며 해당 레코드 위치를 찾아 넣는다. 의사 코드 전체적인 의사코드는 다음과 같다. for( i = 0 to n){ for( j = i -1 to 0, 현재 레코드가 키 레코드 보다 큰 경우){ 현재 레코드..

기초/알고리즘 2021.11.24

[알고리즘] 선택 정렬(Select Sort)

선택 정렬(Select Sort)이란? 제자리 정렬 알고리즘의 하나이다. 정렬되어 있지 않은 데이터에서 가장 작은 값을 뽑아 가장 앞의 데이터와 교환해 나가는 방식이다. 장점 구현이 간단하다. 비교 횟수에 비해 실제 교환 횟수가 적어 많은 교환이 일어나는 자료의 경우 효율적이다. 단점 정렬 시간이 오래걸린다. 알고리즘의 순서 주어진 리스트 중에 최소값을 찾는다. 그 값을 맨 앞에 위치한 값과 교체한다. 맨 처음 위치를 뺀 나머지 리스트를 같은 방법으로 교체한다. 의사 코드 전체적인 의사코드는 다음과 같다. for( i = 0 to n - 1){ for(j = i + 1 to n){ if(최소값 보다 작은 a[j]) 최소값이 들어있는 인덱스 저장; } 선택된 가장 작은 값과 a[i] 서로 맞바꾼다.; } ..

기초/알고리즘 2021.11.24

[PostgreSQL] DB에 존재하는 테이블 명 조회 및 컬럼 조회

PostgreSQL에서 DB에 존재하는 테이블과 컬럼을 조회하려면 특정 테이블을 조회해야한다. 조회 방법에 앞서 information_schema에 대해 알아야한다. information_schema란? DB에 속한 데이터들의 정보를 담고 있는 메타데이터이다. 스키마 정보, 테이블 정보, 컬럼 정보 등등 가지고 있다. 테이블 조회 1. pg_stat_user_tables 사용하여 테이블 조회하기 SELECT schemaname -- 스키마 명 , relname -- 테이블 명 FROM pg_stat_user_tables pg_stat_user_tables 테이블을 조회하면 사용자가 접근할 수 있는 모든 데이터베이스와 테이블 내역을 보여준다. 2. information_schema 사용하여 테이블 조회하기..