분류 전체보기 364

Checked Exception, UncheckedException

[자바 예외의 종류] Error CheckedException UncheckedException [Error] 시스템에 비정상적인 상황이 발생한 경우. 에러는 개발자가 예측하기도 힘들고 컨트롤하기도 힘들다. ex) OutOfMemory [Exception] 예외는 프로그램 실행 중에 개발자의 실수로 예기치 않은 상황이 발생한 것을 말한다. 이러한 예외는 개발자가 직접 컨트롤하여 다르게 처리할 수도 있게 된다. ex) ArrayIndexOutOfBoundsException, NullPointerException, FileNotFoundException 예외의 종류 CheckedException UncheckedException 위 그림으로 보았을 때 RuntimeException 하위의 것들을 Unchek..

Java 2022.11.14

Linux Monitoring Tools

[1분 만에 시스템 상태 확인하기] # 부팅 후 시간. Load Average 주로 확인 $ uptime # System 메시지 $ dmesg | tail $ vmstat 1 $ mpstat -P ALL $ pidstat 1 $ iostat -xz # 메모리 확인 $ free -m $ sar -n DEV 1 $ sar -n TCP,ETCP 1 $ top # 메모리 사용정보를 상세히 볼 수 있음. $ cat /prox/meminfo [파일 확인] # system 로그 확인 /var/log/syslog #timesync 설정 확인 - ntp /etc/crontab #CPU 정보 확인 /proc/cpuinfo [Command로 monitor] vmstat : 메모리, 프로세스, 인터럽트, 페이징, 블록 I/O..

Linux 2022.11.13

Linux Monitoring

[메모리] vm.swappiness 메모리 swap 활용도 vm.swappiness = 0 (스왑 사용안함) vm.swappiness = 1 (스왑 사용 최소화) vm.swappiness = 60 (기본값) vm.swappiness = 100 (적극적으로 스왑 사용) # 확인 방법 $ sysctl vm.swappiness vm.swappiness = 1 $ sysctl -a | grep swappiness vm.swappiness = 1 $ cat /proc/sys/vm/swappiness 1 # 변경 방법 (재부팅 시 초기화됨) $ sysctl vm.swappiness = 40 # 영구 적용 방법 (/etc/sysctl.conf 기본값에는 vm.swappiness 설정이 없으므로 새로 추가해주어야 한다..

Linux 2022.11.13

Materialized View란?

[Materialized View?] MView라고도 부르는데, 물리적으로 존재하는 테이블이다. 즉, 물리적인 공간을 차지하는 테이블을 의미한다. MView는 원천 테이블로부터 데이터 조회가 매우 빈번하고 쿼리연산의 비용이 높을 때 이 내용을 미리 결과테이블로 만들어 그 테이블을 조회하도록 하는 것. ex) 일마감데이터를 조회하는데, MAX, MIN 같은 함수를 사용할 경우가 많다. 이 경우 쿼리 속도향상을 위해 미리 이 값들을 계산하여 물리적인 테이블에 저장하는 것. [Materialized View의 특징] 물리적인 테이블이 존재한다. 쿼리 수행속도를 증가시킬 수 있다. [참조] http://www.gurubee.net/lecture/1857 Materialized View란? Materialized..

이것저것 2022.11.06

오브젝트 스토리지 (Object Storage) ?

[Object Storage?] 오브젝트라 불리는 독립된 유닛에 데이터를 저장하고 관리하는 데이터 스토리지 아키텍쳐 고유한 식별키 같은 것이 있어서 분산된 시스템 내에서 데이터를 찾기 매우 쉽다. 주로 개발자들이 많이 사용하며, 애플리케이션은 오브젝트 스토리지를 통해 사용자가 생성한 미디어를 성능저하없이 페타바이트 수준으로 확장하여 사용할 수 있다고 함. [블록스토리지, 파일스토리지와 비교] 블록 스토리지 데이터를 고정된 크기의 블록으로 나누어 고유한 식별자로 구분하는 방식. 블록집단으로 구성된 볼륨에 직접 접근하므로 보통 파일스토리지보다는 나은 성능을 제공함. 파일 스토리지 가장 익숙한 형태의 스토리지로, 디렉터리구조를 기반으로 파일을 저장하는 방식. DAS, NAS 등에서도 사용하며 기본적인 로컬 P..

이것저것 2022.11.03

H/W 구성요소

[CPU, Memory, I/O(Disk, NW)] 1. CPU 파이프라인 프로세서로 가는 명령어들의 움직임. 연산 자체를 복수의 Stage로 분할하여 처리함으로써 고속화를 꾀하는 컴퓨팅 방식 파이프라인을 사용하면 프로세서는 산술 연산을 하는 동안에도 다음번 명령어를 미리 가져올 수 있게되며, 다음 명령어가 수행될 수 있을 때까지 프로세서 근처의 버퍼에 가져다 놓는다. 파이프 라인 5단계 - IF (Instruction Fetch): 명령어를 메모리로부터 가져온다. - ID (Instruction Decode): 명령어를 해독하고 동시에 레지스터를 읽는다. - EX (Execution): ALU를 통해서 해당 연산을 수행하거나 주소를 계산한다. - MEM (Data Memory Access): 데이터 메..

Linux 2022.11.02

System에 문제가 있을 때 접근방법론

[이슈를 핸들링하는 방법] 1. 스스로 정보를 취합해라 시간 OS정보 App Log 그 당시에 했던 작업들 (ex: 메모리 증설, OS패치 등등) 2. 리서치 - 구글링. 계속 연습해야 함. (어떻게 찾는지 이런거 직접해봐야함) 3. 깊은 조사 - 이것저것 다 찾아봐라. swap부터 시작해서 HDD, SSD를 사용했을 때 IO스케줄링 방식 이런것까지 깊이 알고 있어야 함. 4. 다른 전문가들에게 도움요청하기 - 내가 최대한 해봤을 때도 안되면 전문가에게 요청하기. 이 때 1~3번을 선행했으므로 설명도 잘 할 수 있고, 이해도도 올라간다. [리눅스 기본 정보 확인 경로] /proc: 시스템정보 조회가능 /sys: 전체적인 하드웨어 구성정보 /etc: 설정 [참조] https://brendangregg.co..

Kubernetes Ingress?

[Ingress, Egress 개념] 네트워크 트래픽은 Ingress, Egress로 구분된다. - Ingress: 외부로부터 서버로 유입되는 트래픽 - Egress: 서버 내부에서 외부로 나가는 트래픽 쿠버네티스에도 Ingress라는 개념이 존재한다. 즉, Ingress 트래픽을 어떻게 처리할지 결정한다. Ingress를 사용하지 않았을 경우 외부 트래픽을 처리하는 방법은 "포트번호, 외부IP" 등으로 구분할 수 있으나 세부적인 처리로직을 구현하기에는 한계가 있다고 한다. Ingress를 통해서 L7 수준의 요청처리를 할 수 있다고 한다. ex) 로드밸런싱, TLS/SSL 인증서 처리, 특정 HTTP경로의 라우팅 [쿠버네티스에서 Ingress 적용하기] 쿠버네티스에서 Ingress를 적용하려면 2가지가..

Kubernetes 2022.11.02

Git-flow

[Git-flow란?] Git이 활성화되던 2010년도 정도에 Vincent Driessen이라는 사람이 만든 Git 기반의 브랜치 관리 전략이다. Git-flow는 완벽한 개발 방법론이 아닌 각자의 개발환경에 맞춰 변형해서 사용하는 것이 좋다고 언급하였다. [Git-flow 사용 이유] 프로젝트 규모가 작거나 혼자서 개발을 할 경우 master 브랜치에서 그냥 작업해도 된다. 하지만 규모가 커질 경우 누군가는 하루종일 conflict를 해결해야하며, 이슈가 발생했을 때 개발한 코드를 롤백하는 등의 이슈가 있다. 이 같은 문제를 최소화하고 형상 관리를 효율적으로 하기 위해 생겨난 전략 중에 하나라고 생각하면 된다. [Git-flow Branch 종류] master: 제품으로 출시될 수 있는 브랜치 dev..

CDC (Change Data Capture) ?

[CDC?] 데이터베이스 내 데이터 변경을 식별하여 필요한 후속처리 (데이터 전송/공유)를 자동화하는 기술 or 설계기법 실시간 데이터를 기반으로하고 싶을 때 폭넓게 활용된다. 흔히 데이터 백업이나 통합 작업을 할 경우 방대한 데이터를 다뤄야하는데, 원본 소스 데이터 중에 최근 변경된 데이터들만 골라내게 되면 다른 시스템에서 조회할 때 시스템로드도 줄이고 전체적인 생산성 향상도 노릴 수 있다. [구현 기법] Timetamp on Rows 변경인지를 위한 timestamp 컬럼을 두고 이 값보다 더 최근값이 있으면 레코드가 변경된 것으로 식별한다. Version Numbers on Rows 변경인지를 위한 version 컬럼을 두고 이 값보다 최근값이 있으면 레코드가 변경된 것으로 식별한다. Status ..

Data Pipeline 2022.11.02

Kafka Performance Tuning

퍼포먼스에 대해서 상세히 설명해주고 있음. (각 수치에 대한 설명과 내부적인 구조를 잘 알려주고 있다) https://www.slideshare.net/JiangjieQin/producer-performance-tuning-for-apache-kafka-63147600 Producer Performance Tuning for Apache Kafka Kafka is well known for high throughput ingestion. However, to get the best latency characteristics without compromising on throughput and durability, we need … www.slideshare.net

Kafka 2022.11.02

Data Mount 경로가 여러 개 일때 용량많은 파티션 이동 시키기

고승범님 자료에 매우 잘나와있어 참조 https://www.popit.kr/kafka-%EC%9A%B4%EC%98%81%EC%9E%90%EA%B0%80-%EB%A7%90%ED%95%98%EB%8A%94-tip/ Kafka 운영자가 말하는 TIP | Popit kafka에서는 각 broker의 리소스를 최대한 활용하기 위해 각 토픽들을 균등하게 broker들에게 분산하도록 설계되어 있습니다. 그래서 각 파티션들은 broker들에게 비교적 균등하게 분산되어 있습니다. www.popit.kr

Kafka/Broker 2022.11.02

Zookeeper 구성에 관한 팁

[zookeeper 홀수개를 권장하는 이유] 클러스터를 구성할 때 적절한 노드 수: (n/2+1) → 5개의 노드로 zookeeper quorum을 구성하고자 한다면, (5/2+1) = 3개의 노드가 quorum으로 구성되어야 한다. 아래가 예제 만약 quorum 크기가 2라고 가정한 상태에서.. 두 DC간 단절상황인 Split Brain이 발생한다면 각 DC에서는 각자 자신들이 Primary라고 인식하게 되서 중복으로 서비스가 실행되게된다. 이후에 장애가 복구되었을 때 정상적인 운영이 불가해지는 상태에 빠질 수 있다고 한다. 즉 Split Brain을 방지하기 위해 (n/2+1) = 3개를 quorum으로 구성할 필요가 있다. 참조: https://paulsmooth.tistory.com/156 [zo..

Kafka 2022.11.02

Schema-Registry Compatibility

목차 [Compatibility] 호환성은 Schema Evolution이 발생할 때 어떻게 변화할 수 있는가에 대한 것이다. 기본적으로 3가지 전략이 있다. Backward Forward Full Backward Compatibility Consumer V2가 V1을 문제없이 처리가능한 호환성. Consumer 업데이트 → Producer 업데이트 순서로 배포해야한다. 필드추가 (기본값이 있을 때 가능) Consumer가 V2일 때 V1을 처리할 수 있다. #V1 { "Name": "String", "Age": "Int" } #V2 { "Name": "String", "Age": "Int", "Sex": "Char" (Default: M) } 필드 삭제 가능. Consumer가 V2일 때 V1을 문제없..

Schema-Registry + Validation

목차 [Schema-Validation] Confluent 5.4 버전부터 지원하는 기능으로 Kafka에 등록된 토픽이 유효한 Schema Registry ID를 갖고 있는지 확인 할 수 있다. 이를 통해 중앙 집중식 토픽 정책 적용을 하기위한 기반을 마련할 수 있게 되었다. 아래처럼 validation = true로 지정하여 검증할 수 있다. 중앙 집중화된 데이터 거버넌스가 중요한 이유 데이터 거버넌스는 한 기업의 데이터를 공식적이고 적절하게 관리하여 책임성과 전송성을 확보할 수 있도록 한다. 즉, 조직끼리 데이터의 생성, 전송, 해석 등이 동일하게 관리될 수 있다. 이벤트 스트리밍에서는 아래와 같은 뉘앙스를 가질 수 있다. 모든 사람이 이해할 수 있는 하나의 구조를 가질 수 있게 된다. P2 메시지 ..