CS 89

CI/CD

* CI/CD? (Continuous Integration:지속적 통합 / Continuous Delivery: 지속적 배포) 애플리케이션 개발 단계를 자동화하여 애플리케이션을 보다 짧은 주기로 고객에게 제공하는 방법이다. CI/CD의 기본 개념은 지속적인 통합, 지속적인 서비스 제공, 지속적인 배포이다. CI/CD는 애플리케이션의 통합 및 테스트 단계에서부터 제공 및 배포에 이르는 애플리케이션의 라이프사이클 전체에 걸쳐 지속적인 자동화와 지속적인 모니터링을 제공합니다. 이러한 구축 사례를 CI/CD 파이프라인이라 부르며 개발 및 운영팀의 애자일 방식 협력을 통해 지원된다. * CI(Continuous Integration:지속적 통합)? 개발자들은 코드 변경 사항을 CI를 통해 공유 브랜치 / "트렁크..

결합도와 응집도에 대하여 (Coupling and Cohension)

스프링을 공부하다 보니 결합도와 응집도에 대해서 얘기가 나오고, 결합도는 낮추고 응집도(응집력)은 높여야 한다 라는 말이 자주 등장하여 둘의 개념을 자세히 정리하고자 포스팅을 한다. * 모듈이란 무엇인가? 소프트웨어를 기능 별로 나누는 것을 모듈화, 모듈화의 결과로 기능 별로 분할된 것을 모듈이라고 한다. 모듈화의 장점 시스템의 이해가 쉽다. 시스템의 유지 관리가 용이하다. 재사용이 가능하다. * 결합도(Coupling) 모듈 간의 관계(inter-module)를 나타낸다. 모듈과 모듈 간의 상호 의존도를 이야기한다. 낮은 결합도를 가지는 것을 권장한다. 메시지 결합도 (가장 낮은 결합도) 컴포넌트간의 통신이 파라메터나 message passing을 통해서 이루어진다. 자료 결합도 모듈들이 파라메터 등을..

Network Layer의 Protocols

* Network Layer(네트워크 계층) 하나 이상의 네트워크를 통해 출발지에서 대상 호스트로 가변 길이 네트워크 패킷을 전송하는 계층이다. 가장 효율적인 경로를 찾아 패킷을 전송하는 라우팅을 담당하는 계층이다. * 대표적인 프로토콜 - ICMP(Internet Control Message Protocol) 네트워크 장치에서 다른 ip 주소와 통신할 떄 성공 또는 실패를 나타내는 오류 메시지 및 작동 정보를 보내는데 사용된다. - IPsec(Internet Protocol Security) 인터넷 프로토콜(IP) 통신을 위한 보안 프로토콜이다. - OSPF 라우팅 프로토콜 중 하나로 목적지까지의 비용이 가장 적게 소요되는 경로를 최적의 경로로 설정하는 링크 상태 라우팅 프로토콜이며 이를 위해 최단 경..

CS/network 2021.06.23

3rd party(써드 파티)란?

* 3rd party(써드 파티)란? 써드 파티 또는 써드 파티 개발자는 일반적으로 하드웨어 생산자와 소프트웨어 개발자의 관계를 나타낼 때 사용한다. 하드웨어 생산자와 소프트웨어 개발자의 관계 하드웨어 생산자 = 소프트웨어 개발자 (직접) 하드웨어 생산자인 기업과 소프트웨어 개발자가 어떤 관계가 있음 아무 관계 없음 분류 퍼스트 파티 개발자 세컨드 파티 개발자 써드 파티 개발자 업체별 분야별로 약간씩 서로 다른 사례나 관례를 가지고 있지만, 보통 하드웨어 생산자와 소프트웨어 개발자가 같은 경우(하드웨어 생산자가 직접 소프트웨어 개발도 함) 퍼스트 파티(개발자) 하드웨어 생산자인 기업과 소프트웨어 개발자가 모종의 관계를 맺고 있을 경우(모기업 - 자사, 하청 등) 세컨드 파티 (개발자) 아무 관련 없이 소..

Divide and Conquer Algorithm (분할 정복 알고리즘)

* Divide and Conquer Algorithm (분할 정복)? 해결할 수 없는 문제를 더 이상 나눌 수 없는 작은 문제로 분할하여 문제를 해결하는 방법이나 알고리즘이다. Quicksort, Merge sort, Closest Pair of Points 등의 알고리즘이 이 분할 정복 알고리즘에 해당한다. 분할 정복 알고리즘은 3 부분으로 나뉠 수 있다. 나누기 (Divide): 문제를 더 작은 문제로 나눈다. 정복 (Conquer): 하위 문제가 해결될 때까지 재귀적으로 호출하여 하위 문제를 해결한다. 결합(Combine): 하위 문제가 해결되었기 때문에 문제 해결을 할 수 있다. 보통 재귀적으로 함수를 호출하여 문제를 해결하지만, 재귀적으로 함수 호출이 잦게 되면 함수 호출 스택 오버헤드 때문에..

CS/algorithm 2021.06.16

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

* Binary Search Algorithm(이진 탐색 알고리즘) 오름차순으로 정렬된 리스트에서 특정한 값의 위치를 찾는 알고리즘이다. 이진 탐색 알고리즘을 사용하기 위해선 반드시 오름차순으로 정렬이 되어 있는 리스트라는 전제 조건이 필요하다. 1. 중앙 원소와 찾고자 하는 X를 비교한다. 2-1. 만약 중앙 원소가 찾고자 하는 원소와 같다면 해당 원소 리턴 2-2. X가 중앙 원소보다 크다면 배열의 우측을 대상으로 탐색 재실행, 작다면 좌측을 대상으로 탐색 재실행 * 시간 복잡도 탐색하고자 하는 원소가 N개라면, 첫 시도에는 N개의 원소를, 두번째 시도에는 N/2개의 원소를, 세번째 시도에는 N/4의 원소를 탐색할 것이다. 자료의 갯수가 N개라면 시행 횟수는 밑이 2인 log2N이다. 따라서 시간복잡..

CS/algorithm 2021.06.14

Priority Queue (우선순위 큐)

Priority Queue (우선순위 큐)? - 우선순위를 가지고 있는 큐 - 우선순위에 따라서 처리된다. (Not FIFO) - 우선순위 큐가 힙인 것이 아니라 우선순위 큐를 구현하는 것 중 대표적이고 효율적인 방법이 힙인 것 - 노드 하나의 추가/삭제가 시간 복잡도가 O(logN)이고 최대값/최소값을 O(1)에 구할 수 있다. - 완전 정렬보다 관리 비용이 적다. - 배열을 통해 트리 형태를 쉽게 구현할 수 있다. - 부모나 자식 노드를 O(1)연산으로 쉽게 찾을 수 있다. - n위치에 있는 노드의 자식은 2^n과 2^(n+1) 사이에 위치한다. - 완전 이진 트리의 특성에 의해 삽입/삭제의 위치는 자료의 시작과 끝 인덱스로 쉽게 판단할 수 있다. 힙 정렬 힙 정렬은 힙 자료구조를 이용해서 이진트리와..

CS/data structure 2021.06.11

Heap(힙)

Heap? 완전이진트리에 있는 노드 중에서 키 값이 가장 큰 노드나 키 값이 가장 작은 노드를 찾기 위해서 만든 자료구조 최대 힙(max heap) - 키 값이 가장 큰 노드를 찾기 위한 완전 이진 트리 - 부모 노드의 키 값 > 자식 노드의 키 값 - 루트 노드 : 키 값이 가장 큰 노드 최소 힙(min heap) - 키 값이 가장 작은 노드를 찾기 위한 완전 이진 트리 - 부모 노드의 키 값 < 자식 노드의 키 값 - 루트 노드 : 키 값이 가장 작은 노드 Heap에서의 삽입과 삭제 - 삽입 - 새 원소를 저장할 수 있도록 힙의 크기를 1만큼 늘린다. 힙 끝에 새 요소를 삽입한다. 새로 삽입된 원소를 힙의 성격에 맞게 재정렬한다. 최대 힙: 10 / \ 5 3 / \ 2 4 15를 새로 삽입하려고 한..

CS/data structure 2021.06.10

Tree (트리) - 2

배열을 이용한 이진 트리의 표현 이진 트리에 각 노드 번호를 다음과 같이 부여 루트의 번호를 1로 함 레벨 n에 있는 노드에 대하여 왼쪽부터 오른쪽으로 2^n부터 2^(n+1) -1까지 번호를 차례대로 부여 배열을 이용한 이진 트리의 표현 노드 번호의 성질 노드 번호가 i인 노드의 부모 번호는 i / 2 노드 번호가 i인 노드의 왼쪽 자식 노드 번호는 2 * i 노드 번호가 i인 노드의 오른쪽 자식 노드 번호는 2 * i + 1 레벨 n의 노드 번호 시작 번호는 2^n 노드 번호를 배열의 인덱스로 사용, 레벨 i의 최대 노드 수는 2^i 높이가 h인 이진 트리를 위한 배열의 크기는 2^(h+1)+1 배열을 이용한 이진 트리 표현의 단점 편향이진트리의 경우에 사용하지 않는 배열 원소에 대한 메모리 공간 낭..

CS/data structure 2021.06.07