반응형

개발 일지 54

Kafka Schema Registry

개요 - Schema Registry는 Kafka와 별도로 동작하는 프로세스이며, Kafka에서 발생하는 Message에 대한 Schema를 관리하는 역할을 가진다. - RESTful 인터페이스로 동작한다. - Confluent에서 공개한 오픈소스 (Hortonworks, Spring Cloud Stream 도 있음) Confluent Schema Registry 목적 데이터 호환성을 유지 및 관리하기 위해서 개발되었다. producer, consumer가 많을 수 있는 분산 시스템 환경에서, 데이터에 대한 호환성을 유지하기 위함 또한 schema에 대한 관리를 하기 위함. (data governance, 정확성, 신뢰성) 장단점 장점 단점 스키마 변경 시 발생하는 오류 방지: 메시지에 대한 변경이 일어..

개발 일지 2023.05.23

Apache Avro 란

Avro Avro 란 Avro란 Apache에서 만든 프레임워크로 데이터 직렬화 기능을 제공한다. JSON과 비슷한 형식이지만, 스키마가 존재한다. Avro = schema + binary(json value) 장단점 장점 단점 스키마를 통해 데이터 구조 및 타입을 알 수 있다. 데이터 압축 스키마 변경에 유연하게 대응 가능 binary로 serialize 되어서, 디버깅 등 상황에서 데이터 확인에 어려움이 있다. 스키마에 대한 관리가 필요하다 (관리 포인트 증가) DataType Primitive null boolean int long float double bytes string Complex record name (M): name of record, String namespace (O): 패키지, ..

개발 일지 2023.05.22

브라우저와 Redirect (feat. XMLHttpRequest)

XMLHttpRequest란? - All modern browsers have a built-in XMLHttpRequest object to request data from a server. 비동기적 통신을 브라우저에서 제공하기 위한 W3C 표준 스펙이다. 브라우저에서 제공하는 객체이며, jQuery의 Ajax 또한 XMLHttpRequest를 활용하여 구현되어 있다. Redirect 란? 요청 client에게 Server가 다른 곳으로 다시 요청하기 위한 HTTP Response Status이다. - 301 Moved Permanently: 요청한 리소스의 URI가 변경됨, redirect 시 method가 GET으로 자동 변경 - 302 Found: 요청한 리소스의 URI가 일시적으로 변경됨, re..

개발 일지 2023.05.19

R2DBC history 및 issue

개요 Reactive Relational Database Connectivity SQL database에서 Reactive programming을 지원하기 위해 디자인된 새로운 Open Specification R2DBC를 쉽게 사용할 수 있도록 ORM의 사용법을 참고하여 설계하였으나, ORM Framework에서 제공하는 다양한 기능을 제공하지 않음. 특징 Based on the Reactive Streams specification. - provides a fully-reactive non-blocking API. Works with relational databases. - JDBC의 Blocking 특성과 달리, R2DBC를 사용하면 Reactive API를 사용하여 SQL database로 작업..

개발 일지 2023.04.21

Mysql data directory 변경

개요 mysql 데이터를 마운트한 하드로 옮겨서 운영하거나 백업 등을 할 때 유용한 가이드 요약 번역 ubuntu 용 가이드 Data Directory 확인 // config 파일로 확인 sudo grep -R --color datadir /etc/mysql/* // DB 내에서 확인 mysql> SELECT @@datadir; +---------------------------+ | @@datadir | +---------------------------+ | /var/lib/mysql | +---------------------------+ 1 row in set (0.000 sec) Data 복사 // 옮길 폴더 생성 및 권한 mkdir /data sudo chown mysql:mysql /data..

개발 일지 2023.04.19

Gradle 이란

Gradle 이란 Groovy 기반의 빌드 툴 장점 자유로운 빌드 설정 동적인 빌드 설정 가능 손쉬운 wrapper 빠른 성능 (취향) 가독성 Build Life Cycle 초기화 단계 init.gradle, gradle.properties 환경설정파일을 read settings.gradle 파일에 포함된 하위 프로젝트(모듈) 설정 설정 단계 모든 빌드 스크립트를 평가 및 DAG Create 실행순서 결정 시행 단계 태스크를 차례로 실행 Task 빌드 단계 DAG Directed Acyclic Graph로 빌드 순서등을 가진 것 예시) java plugin DAG Repositories & dependencies Repositories 필요할 때 가져와서 쓸 수 있는 라이브러리의 집합 로컬 캐시에 저장됨..

개발 일지 2023.04.18

Flutter & Dart 개발환경 구성 (feat. IntelliJ)

Dart란 Dart 란 구글이 유지보수하는 프로그래밍 언어다. 플러터 앱을 다트로 구현한다. JIT(Just-In-Time) 컴파일과 AOT(Ahead-Of-Time) 컴파일을 모두 지원한다. 객체지향 언어 개발목적은 간단하고 생산적이며 자바스크립트로 컴파일할 수 있는 언어 Flutter란 구글에서 만들어 오픈 소스로 공개한 모바일 SDK one source multi-use -> cross-platform native-device code로 컴파일 -> 성능상 이점 모든 것은 위젯으로 이루어 짐 개발환경 구성 Intellij Plugin install Flutter SDK install (Mac) https://docs.flutter.dev/get-started/install/macos macOS in..

개발 일지 2023.04.16

MSA Transaction 전략 (LLTs) - SAGA 패턴

MSA의 Transaction 이란 MSA(Microsoft System Architecture) 컨텍스트에서 트랜잭션은 단일 작업 단위로 취급되는 작업 시퀀스를 말함 MSA에서 트랜잭션은 분산 시스템 전체에서 데이터 일관성과 무결성을 보장하는 데 사용된다. 예를 들어 거래에 한 은행 계좌에서 다른 은행 계좌로 돈이 이체되는 경우 거래가 올바르게 완료되고 돈이 이체되는지 확인되어야 함. 트랜잭션 중에 네트워크 오류 또는 데이터베이스 오류와 같은 오류가 발생하면 트랜잭션을 원래 상태로 롤백하여 데이터가 일관되고 정확하게 유지되도록 해야 함. 이는 오류를 견디고 데이터 일관성과 무결성을 보장할 수 있는 안정적이고 강력한 분산 시스템을 구축해야 한다는 말 SAGA 패턴이란 1987년 발간된 SAGAS라는 제목..

개발 일지 2023.04.16

Kafka 압축 방식 성능 평가

개요 Kafka는 대용량 메시지 처리를 상정하고 개발 된 시스템이다. Kafka는 토픽으로 전송 받은 메시지를 로그 형식으로 저장하고 있으며, 이를 압축하는 기능을 제공한다. 3가지 압축방식을 지원하는데 압축에 따라서 메시징 성능에 영향을 끼친다. 압축 방식 Snappy Google에서 C++을 사용해 개발한 압축 라이브러리 적정 수준의 압축률에 빠른 압축 및 해제를 목표로 개발됨 일반적으로 초당 250MB 압축 CPU 사용률이 상대적으로 적고 빠름 압축률은 상대적으로 낮음 Gzip UNIX 시스템에서 쓰이던 압축 프로그램을 대체하기 위해 개발됨 무손실 압축 지원 ZIP과 같은 DEFLATE 알고리즘 사용 여러 파일 압축을 지원 안해서 tar와 같이 사용됨 Lz4 빠른 무손실 압축 및 해제 속도를 목표로..

개발 일지 2023.04.13
반응형