728x90

Base 58

gradle 에서 maven optional, provided 설정하기

일단 optional, provided 의 의미를 정확히 알고 넘어갈 필요가 있다. 매번 헷갈린다... 일단 사용은 아래와 같이 하면 된다. org.apache.tomcat tomcat-dbcp true provided optional true 설정이든 scope provided 설정이든 해당 의존성을 어떠한 과정에서 제외한다는 것은 동일한데 분명한 차이가 있다. optional true 에 대해 먼저 설명하면 기본적으로 A.jar 안에 junit 의존성이 포함되어 있고 어떠한 프로젝트에서 A.jar 의존성을 추가했다면 해당 프로젝트에서는 별도로 추가히지 않아도 junit 의존성이 추가된다. 의존성이 상속된다고 볼 수 있다. 그런데 A.jar 안에서 junit 의존성 정의시 위와 같이 optional t..

Base/CI, CD 2021.05.05

SPOF(Single Point Of Failure)

시스템 구성 요소 중에서, 동작하지 않으면 전체 시스템이 중단되는 요소를 말한다. 예를 들어 이더넷 케이블과 전원, 이더넷 허브(HUB), 접속 단말들의 NIC(Network Interface Card) 등으로 이루어진 간단한 이더넷(Ethernet) 네트워크 시스템에 있어서 네트워크 허브(HUB) 장치의 전원은 SPOF이다. 허브의 전원이 차단됨과 동시에 나머지 모든 요소들은 네트워크를 사용할 수 없다. 높은 가용성을 추구하는 네트워크, 소프트웨어 애플리케이션, 상용 시스템에 단일 장애점이 있는 것은 바람직하지 않다. 단일 고장점, 단일 실패점이라고도 한다. https://ko.wikipedia.org/wiki/%EB%8B%A8%EC%9D%BC_%EC%9E%A5%EC%95%A0%EC%A0%90

Base/개념정리 2021.04.26

Gradle api, implements 차이

차이는 하위 모듈에 해당 의존성이 상속되느냐 마느냐 이다. 예를 들어 아래와 같이 멀티 프로젝트를 구성한다고 가정해보자. common api batch 여기에서 common 은 공통모듈이고 api, batch 에서 공통으로 사용할 코드가 포함되어 있다. 이에 api, batch build.gradle 에서는 아래와 같이 common 을 참조하고 있을 것이다. dependencies { implementation project(":common") ... } common에 아래와 같은 의존성을 정의한다고 가정해보자. implementation "com.google.guava:guava" 이 경우 api, batch 에 guava 의존성이 상속되지 않기 때문에 필요하다면 각각 다시 의존성을 정의해야 한다. 하..

Base/CI, CD 2021.04.19

Linux crontab

어떠한 작업을 일정주기로 반복적으로 수행하게 해준다. /usr/local/test.sh 라는 쉘파일이 있고 그걸 수행시킨다고 가정하고 정리한다. ​ 현재 등록되어 있는 crontab 을 확인하려면? crontab -l ​ crontab 을 등록/수정/삭제 하려면? 아래와 같이 입력하면 수행할 명령을 입력할 수 있는 vi편집기가 호출된다. crontab -e 그곳에 아래와 같이 스케줄을 포함한 명령을 행 단위로 등록하면 된다. 삭제는 그냥 삭제하거나 #로 주석처리하면 된다. 30 * * * * /usr/local/test.sh 만약 수행할 작업이 root 권한이 필요한 작업이라면? sudo crontab -e 편집기를 반드시 vim으로 띄우고 싶다면? sudo EDITOR=vim crontab -e 스케줄..

Base/OS, Network 2021.04.16

Gradle 의존성 버전 관리

Gradle 에도 Maven 과 동일하게 dependencyManagement 를 사용할 수 있다. Maven과 동일하게 dependencyManagement 를 통해 의존성 버전을 명시하면 실제 의존성 정의시 버전을 명시하지 않아도 dependencyManagement에 명시된 버전이 자동으로 지정된다. 아래와 같이 사용하면 된다. dependencyManagement { dependencies{ dependency "com.google.guava:guava:17.0" } } dependencies { implementation 'com.google.guava:guava' } 이를 통해 모듈간 의존성 버전을 관리할 수 있게 되는데 프로젝트 단위로 의존성 버전을 관리하려면 어떻게 해야 할까? Maven ..

Base/CI, CD 2021.04.07

k8s Logging 시스템 구축

해당 포스팅은 사내 k8s 클러스터에 EFK 로깅시스템을 구축한 기록으로 기본적으로 k8s 클러스터가 구축되어 있고 kubectl 연결이 되어 있다는 가정하에 작성되었습니다. 1. 구축 방법에 대한 고민 나만 구축하고 끝날게 아니라 클라우드 환경에 누구나 쉽게 구축이 가능해야 하기 때문에 적극적으로 관리되는 Helm Chart 를 활용하는게 좋겠다고 생각했습니다. 하지만 후보군으로 뒀던 Chart들이 모두 문제가 있어 결국 이곳을 참고해서 yaml 파일을 직접 작성해서 구성하는 방법으로 진행했습니다. 후보군으로 뒀던 Helm Chart 들은 아래와 같습니다. 1. https://github.com/komljen/helm-charts/tree/master/efk github 외에 개인블로그도 운영중인 사람..

Base/Logging 2021.04.02

가상화 기술

가상화란? 가상화란 단일 시스템에서 특정 환경을 위한 전용 리소스를 임시로 할당하는 기술 말한다. 가상화하는 대상에 따라 가상머신, 가상OS 등으로 불릴 수 있다. 가상머신은 하드웨어를 소프트웨어적으로 구현한 것을 말한다. virtual box 같은 것들을 통해 만드는 것이 바로 가상머신이다. 우리는 virtual box 를 통해 원하는 CPU, 메모리, 디스크를 할당해서 간단하게 하드웨어를 구현할 수 있다. 이렇게 구현한 가상머신 위에 OS를 설치하면 가상OS가 되는 것이다. 그런데 하드웨어에는 기본적으로 OS가 따라오기 때문에 가상머신 == 가상OS 라고 생각해도 무방하다. ​ 하이퍼바이저(hypervisor) 가상화를 구현하기 위한 기반기술이다. 가상화를 통해 여러 OS가 존재할 경우 각 OS에서는..

Base/개념정리 2021.04.02

운영체제

사전 용어 정리 프로그램 : 명령어 집합으로 컴파일된 결과물뿐만 아니라, 프로그래머가 작성한 소스 코드까지도 포함한다. 소프트웨어 : 프로그램뿐만 아니라 CD, 설명서, 제품 포장 등 패키지 전체를 뜻하기도 한다. 프로세스 : 동작 중인 프로그램을 의미한다. 스레드 : 프로세스 안에 하나 이상 존재할 수 있다. 명령어가 CPU를 통해서 수행되는 객체의 단위이다. 컴퓨터는 크게 CPU, 메모리, 디스크로 구성된다. 이러한 물리적 요소들을 하드웨어라고 하는데 CPU는 연산을, 메모리는 순간 기억을, 디스크는 저장하는 기능을 각각 수행하게 된다. ​ 프로그램이 수행되기 위해서는 이런 하드웨어들이 적절하게 데이터틀 주고 받으며 논리적인 일들을 해야 하는데 하드웨어들은 그냥 각자 자신의 역할만 수행할 뿐이다. ​..

Base/OS, Network 2021.04.02

CPU 스케줄링

CPU는 한번에 제한된 갯수의 스레드만 처리할 수 있기 때문에 이에 대한 스케줄링 작업이 필요하다. 이것은 스레드가 어떤 우선순위를 가지고 CPU를 얼만큼 사용할 것인지 결정하고 수행하는 과정으로 시간당 처리되는 건수를 높여서 CPU의 효율을 높여주기 위함이다. ​ 이러한 스케줄링 알고리즘은 크게 선점형과 비선점형으로 나뉜다. 선점형은 먼저 수행 중인 스레드의 CPU 사용권이 다른 스레드에 의해 빼앗길 수 있는 알고리즘으로 스레드의 작업이 끝나지 않은 상황에서 중지하고 다른 스레드가 수행될 경우 다시 돌아와서 이어서 작업을 수행해야 하기 때문에 지금까지 수행한 모든 내용을 보관해 둔 후, 새로 시작하는 작업에 대한 내용을 새로 적재해 주어야 하는데 이를 문맥교환(Context Switching)이라 한다..

Base/OS, Network 2021.04.02
728x90