전체 글

전체 글

    카프카 브로커의 구성요소

    카프카 브로커란 카프카 인스턴스 각각 어플리케이션을 지칭 한다. 브로커는 프로듀서로부터 메세지를 받아 저장하고, 컨슈머들의 요청에 따라 메세지를 제공하며 각 컨슈머들이 어느지점까지 메세지를 읽었는지 오프셋을 관리한다.컨트롤러클러스터의 브로커중 한대가 컨트롤러의 역할을 한다. 컨트롤러는 다음과 같은 역할을 한다.파티션 리더 선출 및 재배치브로커 상태 모니터링 및 관리메타데이터 업데이트 및 일관성 유지토픽 및 파티션 정보브로커 정보ISR 상태클러스터 설정파티션 재배치를 통한 부하 분산토픽메세지를 발행할 논리적인 기본 그룹 이다. RDB에서 데이터 Row를 테이블에 저장하듯이, 메시지는 토픽에 저장 된다.파티션토픽에 저장되는 메세지들은 키값 기준으로 분리되어 저장할 수 있다. 일종의 샤딩 기법을 사용했다고 볼..

    Http 클라이언트 설정 시 메모

    HttpClient 설정 maxConnTotal = 클라이언트가 관리할 수 있는 최대 연결 개수 maxConnPerRoute = 특정 경로(호스트) 에 대해 클라이언트가 열수 있는 최대 연결 수 connectionRequestTimeout = 연결 객체를 얻기 위해 대기하는 최대 시간. 커넥션 풀로부터 사용 가능한 커넥션을 얻기 위해 기다리는 최대 시간 이다. readTimeout = 서버로부터 데이터를 읽는 데 사용할 수 있는 최대 시간 (소켓 타임 아웃) - 서버가 응답을 시작한 후 데이터를 읽기 시작한 순간부터 걸리는 시간. connectionTimeOut = 연결을 시도하는데 기다리는 최대 시간. Http 클라이언트가 서버에 대해 TCP연결을 설정하는데 걸리는 최대 시간 이다.(TCP handsh..

    UIKit 스토리 보드 없이 프로젝트 시작하기

    xcode로 프로젝트를 시작할 때 기본적으로 스토리 보드를 통해 UI 작업이 시작 되는데요. UI적인 요소인 스토리 보드 없이 소스코드로만 작업 하는 방법을 알아 보겠습니다. Main.storyboard 삭제 기본적으로 생성되는 Main.storyboard를 삭제 해요. move to trash를 통해 파일을 확실히! 날려버립니다. info.plist 에서 Storyboard Name 프로퍼티 삭제 info.plist로 들어간 후, Storyboard Name을 검색해서 - 버튼을 통해 삭제를 해요. Build Settings에서 스토리보드 file base Name 삭제 좌측 프로젝트 네비게이터에서 루트인 프로젝트를 클릭해요. 그다음 Build Settings 를 들어가면 해당 값을 확인할 수 있어요...

    Swift Combine 알아 보기

    틀린 부분이나 다른 의견은 언제든 댓글로 지적해 주세요!!! ios 투두 앱을 개발하는 중에 한가지 고민이 생겼다. 내 투두 앱은 달력탭과, 투두 리스트 탭이 있는데, 달력 탭에서도 그 날의 투두 리스트 목록을 하단에 작게 표기해준다. 투두 리스트 탭에서 투두를 완료하거나 삭제할 때, 달력 탭에서도 즉각 적용이 되어야 할텐데.. 그걸 어떻게 알릴까!? 라는 고민이 들었다. 옵저버 패턴처럼.. notify, update 할 수 있는 기능이 Swift 에 있지 않을까..? 하고 찾아보니 Combine이라는 것을 발견 했다! Combine이란? combine은 애플에서 정식으로 지원하는 프레임워크로, 비동기적으로 이벤트 핸들링을 지원하는 프레임워크라고 한다. 이전에 외부 라이브러리인 RxSwift의 애플 버전..

    JPA 사용 시 Mysql 1356 Error 발생 해결 과정

    발생 배경 spring boot, spring starter jpa, hibernate, mysql을 사용하여 jpa를 적용 하려고 했어요. 작업을 진행하는 과정에서 jpa를 통해 테이블 생성을 하기 위해 로컬 mysql으로 url을 설정하여 Entity 클래스를 정의하고, Querydsl까지 정상작동 하는것을 확인 했어요. 그 후 필요한 DB에 적용하기 위해 해당 테이블을 생성한 후, application.yml 파일에 spring.jpa.hibernate.ddl-auto: validate 설정을 했답니다. 아니 근데..! 아래와 같은 에러가 출력이 되더라구요!!! org.springframework.beans.factory.BeanCreationException: Error creating bean ..

    엘라스틱서치 인덱스 Mapping 과 Properties 정리

    엘라스틱서치에서 인덱스는 RDB의 테이블과 비슷한 역할을 한다. 또한 엘라스틱서치는 기본적으로 스키마리스이나, 실제 운용하는데 있어서는 mapping을 통해 스키마를 정의 하여 사용한다. 인덱스 추가 및 스키마 정의를 위해 인덱스 API 및 매핑API 를 사용 한다. 인덱스 추가 PUT /movie { "settings": { "number_of_shards": 3, "number_of_replicas": 2 }, "mappings": { "properties": { "movieCd": {"type": "integer"}, "movieNm": {"type": "text"}, "movieNmEn": {"type": "text"}, "prdtYear": {"type": "integer"}, "openDt":..

    엘라스틱서치 인덱스 Settings

    인덱스 세팅 조회 //모든 인덱스 의 세팅 조회 GET _all/_settings //my-index의 세팅 조회 GET my-index/_settings //와일드 카드 매칭을 이용해 세팅 조회 GET log-2023-*/_settings 인덱스 생성 PUT my-index { "aliases": {} "mappings": {} "settings": {} } 인덱스 세팅 수정 PUT /my-index/_settings { "index": { "number_of_shards": 2, "number_of_replicas": 1, } } Settings 인덱스의 샤드 개수 및 레플리카 개수 등 인덱스를 설정할때 사용한다. analyzer, tokenizer, filter와 같은 정보 설정시 에도 Settin..

    Elasticsearch Index Template

    인덱스 템플릿 인덱스를 생성할 때 특정 네이밍 규칙에 따라 인덱스 설정을 자동으로 적용하고 싶은 경우에 사용한다. wildcard를 이용해 인덱스가 생성될 때 자동으로 적용할 수 있다. PUT _template/my_index_template { "index_patterns": ["test*", "person-*"], "settings": { "number_of_shards": 1 }, "aliases": { "my_alias": {}, "my_alias2": { "filter": { "term": {"user.id": "kimchy"} }, "routing": "shard-1 }, "{index}-alias": {} }, "mappings": { } } index_patterns: 템플릿이 적용 될 인..

    엘라스틱 서치 노드의 종류

    마스터 노드 노드의 추가 및 삭제를 담당한다. 인덱스 생성, 수정, 삭제, 메타데이터를 관리한다. 샤드를 할당 및 상태정보를 관리한다. 클러스터 상태를 관리한다. 마스터 노드는 다른 노드들을 관장하고 클러스터를 구성하는 노드들의 상태를 정기적으로 점검 한다. 마스터 노드는 동시에 단 한개만 작동 가능하고, 후보 노드를 지정하여 장애시 대응할 수 있다. #conf/elasticsearch.yml node.master: true node.master: true인 경우 마스터 후보노드 설정이 되고, 마스터 노드 선출 정책에 따라 마스터노드로 정해진다. 데이터 노드 물리적인 데이터를 실제로 가지고 있는 노드이다. 마스터 노드로 부터 요청을 받아서 CRUD작업, 검색 및 집계 같은 데이터 관련 작업을 수행하고,..

    iOS fcm을 이용한 remote push 알림

    기본적인 애플 remote notification 및 구글 fcm설정에 대한 내용은 다루지 않는다. NotificationCenter NotificationCenter는 이벤트 브로커 같은 역할을 한다. 이벤트를 수신하여 옵저버들에게 발송한다.NotificationCenter.default.post 디폴트 NotificationCenter로 메세지를 보낸다. Notification 구조체를 파라미터로 받는다. 또는 name: NotificationName, object: Any?, userInfo: [AnyHashable: Any?] 를 받는다. 이 파라미터들은 Notification 필드들과 동일하다. NotificationCenter.default.addObserver name: 수신할 notific..