꿀똥벌레 개발 블로그

Gradle에서 각 Task 간에 순서대로 실행하기
Gradle에서 build를 실행해보면 단순히 build라는 Task가 실행되는 것이 아니라, compileJava -> classes -> jar -> 등등.. 여러가지가 연결되어 실행되는 것을 보신적이 있으실 거에요! 각 Task들은 의존관계를 가질 수 있고, 어떤 Task가 실행되면 그 Task가 의존하는 Task가 실행되는 식으로 연결을 할 수가 있어요. 그것과 관련된 것들에 대해 글을 적어보려고 해요.참고로 build task와 같은 정의된 Task를 LifeCycle Task 라고 해요. build라는 Task는 별도의 역할은 없지만, 빌드하는것과 관련된 Task들은 build라는 Task에 연결하자! 라는 느낌으로 java 플러그인이든, 다른 플러그인들이던간에 빌드와 관련된 것은 build에..

Gradle 커스텀 Task 만들기
Task란?Gradle에서 Task는 많은 기능들을 합니다. 파일을 생성 한다던지.. 복사를 한다던지.. 압축등 빌드 타임에 많은 일들을 할수 있죠!자바를 개발하며 gradle build를 하면 build 디렉터리가 생성되고 클래스파일이 생성되는 등..이 Gradle에서 구현해놓은 Task들이 해주는 작업들이에요. 이러한 Task를 내가 원하는 기능을 구현하도록 커스텀 태스크를 만드는 방법을 적어보려 합니다.커스텀 Task 생성 방법커스텀 태스크 생성에는 몇가지 방법이 있습니다. Gradle 빌드 스크립트에서 구현하기 (.gradle 혹은 .gradle.kts 파일) 내에서 즉시 구현 (동적 구현)커스텀 클래스를 생성하여 자바 혹은 코틀린 (혹은 그루비..!?) 로 구현1. Gradle 빌드 스크립트..
카프카 브로커의 구성요소
카프카 브로커란 카프카 인스턴스 각각 어플리케이션을 지칭 한다. 브로커는 프로듀서로부터 메세지를 받아 저장하고, 컨슈머들의 요청에 따라 메세지를 제공하며 각 컨슈머들이 어느지점까지 메세지를 읽었는지 오프셋을 관리한다.컨트롤러클러스터의 브로커중 한대가 컨트롤러의 역할을 한다. 컨트롤러는 다음과 같은 역할을 한다.파티션 리더 선출 및 재배치브로커 상태 모니터링 및 관리메타데이터 업데이트 및 일관성 유지토픽 및 파티션 정보브로커 정보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: 템플릿이 적용 될 인..