프로듀서 프로듀서 애플리케이션의 역할 카프카에 필요한 데이터를 선언하고 브로커의 특정 토픽의 파티션에 전송한다. 데이터를 전송할 때 리더 파티션을 가지고 있는 브로커와 직접 통신한다. 브로커로 데이터를 전송할 때 내부적으로 파티셔너, 배치 생성 단계를 거친다. 프로듀서 내부 구조 ProducerRecord: 프로듀서에서 생성한 레코드, 오프셋은 미포함 send(): 레코드 전송 요청 메소드 Partitioner: 어느 파티션으로 전송할 지 지정하는 파티셔너이다. Accumulator: 배치로 묶어서 전송할 데이터를 모으는 버퍼이다. send()를 해도 바로 보내는것이 아니라 Accumulator내 배치의 임계치까지 데이터가 쌓이면 그때 카프카 클러스터와 TCP 통신하여 데이터를 전송하게 된다. 이러한 배..
카프카 CLI tool 토픽 관련 명령을 실행할 때 필수 옵션과 선택옵션이 존재한다. 해당 값들이 어떻게 설정되어있는지, 어떻게 설정할지 확인 후 CLI 툴을 사용하자. zookeeper-server.start.sh / kafka-server-start.sh 카프카 실행을 로컬에서 진행할 것이므로 로컬 통신을 위한 호스트를 지정해주자. 로그와 인덱스 등의 파일을 저장하기 위한 위치도 지정해준다. etc/hosts 파일에 localhost 주소에 대한 "my-kafka"라는 별칭을 추가해준다. kafka-topics.sh 카프카 토픽에 대해 CLI를 진행해보자. kafka-topcis.sh를 통해 토픽 생성이 가능하다. 카프카 토픽을 생성 시 디폴트 값으로 설정된 것을 확인해 볼 수 있다. 다음과 같이 처..
1. 카프카 역사와 미래 프로듀서 -토픽 - 컨슈머 구조 토픽 내 여러 파티션이 존재하며, 프로듀싱은 하나의 파티션에만 쌓인다. 파티션은 큐 구조로 FIFO로 쌓이지만 컨슈밍하여도 제거되지 않는다. 읽은 위치는 commit으로 기록한다. 높은 처리량 프로듀서 → 브로커, 브로커 → 컨슈머로 데이터를 전송할 때 묶음 단위 전송으로 속도를 개선 여러 파티션에 분배하고, 파티션 수 만큼 컨슈머를 늘림으로서 병렬처리를 하여 시간당 데이터 처리량 개선 가능 확장성 특정 이벤트가 몇건 들어올 지 모를 때 가변적으로 대응할 수 있다 데이터를 저장하고 있는 곳이 브로커이며, 사용량이 적고 많은에 따라 브로커 scale-in/out이 가능 영속성 다른 메시징 플랫폼과 다르게 전송받은 데이터를 메모리가 아닌 파일 시스템에..
저번 포스팅에 이어서 Spring Security와 Jwt을 사용하여 회원 인증/인가 시스템을 만들어 보겠다. Spring Security를 사용하게 되면 전달받은 JWT를 Filter를 통해 Authorization(인가), Authentication(인증) 을 처리하게 된다. 이를 위해서 User 정보를 Jwt의 Payload에 Claim들을 넣고, 꺼내서 처리할 수 있는 시스템을 만들면 된다. 우리가 갖고 있는 User를 그대로 클레임으로 넣고 꺼내서 처리하기에는 모든 User 모델이 제각각일테니 이를 처리하기 위한 공통의 인터페이스가 존재한다. UserDetails Interface이며 이를 implements한 User 객체를 새로 만들어서 사용하면 된다. Member implements Use..
스프링 부트로 프로젝트를 진행할 때 필요한 기술들이 많아지면서 기본 틀을 잡는데도 많은 공수가 들어가며 환경설정에 너무 많은 시간이 들게 되었다. 이에 미리 프로젝트를 위한 구조를 만들고 실행 가능한 이미지를 만들어서 도커에 올려 놓으려고 한다. 진행할 목차에 대해 간단히 정리하면 필요 라이브러리 설치 Spring Data JPA, Spring Data Envars, QueryDSL 적용 API 사용 및 테스트를 위한 기본 설정 REST API / GraphQL (DGS) JWT 사용을 위한 기본 설정 로그인 / 로그아웃 구현 FLYWAY를 통한 기본 테이블 생성 및 데이터 삽입 Redis를 이용한 캐시 AOP 적용 도커 이미지 생성 후 업로드 위와 같은 순서로 적용해보고자 한다. 사용 기술 언어 / 프..
SPARCS 해커톤 지원 회사 동료분이 같이 졸업 전 마지막 학부생 신분으로 지원가능한 해커톤에 지원하자고 연락이 왔다. 나도 올해 2월 졸업을 앞두고 있었기에 마지막 학부생 신분으로 해커톤에 참여해보고 싶어 참가를 결정하게 됐다. 그분과 나는 백엔드로 지원을 했고, 나는 큰 아이디어는 없지만 일단 리더로 직책을 맡고 진행을 했다. 총 5명의 팀원 (기획자, 디자이너, 프론트엔드, 백엔드)을 구성해야 했기에 Primer를 통해 팀원들을 구하기 위해 열심히 노션 페이지도 만들고 자기 PR을 하며 팀원들을 모집했다. 다행히도 능력 좋으신 디자이너, 기획자, 프론트 개발자 분들을 영입할 수 있었고 27일 해커톤 시작날 까지 퇴근 후에도 아이디어 결정을 위한 회의를 계속 진행하면서 시간을 보냈다. 해커톤 당일 ..
1. 마우스 패드 마우스 패드가 필요하다고 항상 느꼈는데 레이저의 마우스 패드가 가격은 사악해도 평이 너무 좋길래 구매해봤다. (17,500원...😭) 우리가 모두들 아는 마우스패드와 똑같이 생겼다... 하지만! 다른점은 매우매우 얇다는 점이다. 그리고 뒷편이 이런 필름이 붙어있는데, 이를 떼어내면 아주 쫀쫀한 젤 받침이 나온다. 진짜 좋을까란 기대를 하며 책상위에 탁 놓았는데 오... 아주 책상에 찰떡마냥 붙는게 아주 안정적이였다. 마우스 패드가 흔들린다라는 개념은 아예 없고 그냥 책상에 딱 붙는 느낌이였다. 그리고 젤이라서 그냥 저 레이저 이름표를 잡아서 들어올리면 다시 자유롭게 이동할 수 있었다. 새로 산 마우스를 올려보고 움직여보는 순간. 딱 느낄 수 있었다 너무 부드럽고 좋다라는 걸 ㅜㅜ 비싸긴..
기존에 사용하던 mx master 3x가 한 3년정도? 사용했더니 드래그가 잘안되는 경우도 생겨서 바꿔야지 하고 있었던 중 클릭 무소음 + 흰색의 mx master 3s가 눈에 확 들어와서 바로 구매하게 되었다 ㅎㅎ https://smartstore.naver.com/crtekshop/products/7271242545?NaPm=ct%3Dlbw7uw2f%7Cci%3Dcheckout%7Ctr%3Dppc%7Ctrx%3D%7Chk%3D940cbadbfe545ef6bac5770a80a03b4afbfe1a9f 로지텍코리아 MX Master 3S for Mac 애플 무선 블루투스 마우스 : 로지텍코리아 인증스토어 [로지텍코리아 인증스토어] 로지텍코리아 인증스토어 입니다. smartstore.naver.com 로지텍..
22년 6월 7일 ~ 12월 6일 6개월간의 카카오스타일 백엔드 인턴을 끝내고 마침내 정규직 전환 프로세스를 통과했다. 자바 백엔드 개발자라는 막연한 목표를 위해 다양한 프로젝트를 해오며 준비해왔는데 드디어 첫 결실을 맺었다는 사실이 너무 좋았다. 앞으로도 꾸준히 실력을 쌓아 올리면서 더 좋은 개발자가 되기 위해 노력해야겠다. 6개월을 전부 풀어내긴 어렵고 간단하게 정리해보고자 한다. 1. 입사 후 2주 사실 이때는 정말 아무것도 모르는 상태였다. 매일 들어가야 하는 팀 스크럼에서 리더와 팀원들의 대화는 하나도 못알아들었고 나는 계정신청, 맥북 세팅, 환경 세팅, 프로젝트 clone, 권한 세팅 등 세팅에 시간을 대부분 할애했었다. 특히 아무것도 모르겠는 대화속에 매일 참여하고 있는 건 꽤나 곤욕이였다...
이 포스팅 시리즈는 스프링 배치 - 스프링 부트 기반으로 개발하는 스프링 배치 강의를 듣고 정리하기 위해 작성했습니다. 배정된 부서에서 배치를 정말 많이 사용하길래 급하게나마 기본기 숙지를 위해 시작하게 되었다. 해당 강의는 Java 코드로 제공되지만 필자는 회사에서 코틀린으로 작업을 하기에 코틀린 기반으로 변경하여 작업할 것이다. 배치 핵심 패턴 Read: 데이터베이스, 파일, 큐에서 다량의 데이터 조회 Process: 특정 방법으로 데이터를 가공한다. Write: 데이터를 수정된 양식으로 다시 저장한다. 배치 시나리오 배치 프로세스를 주기적으로 커밋 동시 다발적인 Job의 배치 처리, 대용량 병렬 처리 실패 후 수동 또는 스케줄링에 의한 재시작 의존 관계가 있는 Step 여러개를 순차적으로 처리 조건..
'기억보단 기억을' 블로그를 참고하여 작성하였습니다. 해당 프로젝트는 Java로 작성되어있으나 필자는 Kotlin 방식으로 작성하였습니다. 스프링 배치 메타 데이터 테이블 구조 각 테이블이 어떠한 역할을 하고 어떠한 데이터를 갖고 있는지 설명해본다. 1. BATCH_JOB_INSTANCE 해당 테이블에 쿼리를 보내보면 하나의 로우가 조회된다. JOB_INSTANCE_ID `BATCH_JOB_INSTANCE 테이블`의 PK JOB_NAME 수행한 Batch Job 이름 실제로 방금 실행했던 batchJob의 이름이 들어있다. 이때, BATCH_JOB_INSTANCE 테이블은 Job Parameter에 따라 생성되는 테이블이다. 이 Job Parameter는 생소한 부분인데, Sprint Batch가 실행될..
'기억보단 기억을' 블로그를 참고하여 작성하였습니다. 해당 프로젝트는 Java로 작성되어있으나 필자는 Kotlin 방식으로 작성하였습니다. 1. 프로젝트 생성 start.spring.io를 통해 생성 Kotlin Gradle Spring Boot 2.7.1 Java 17 라이브러리 spring data jpa spring batch h2 DB lombok mysql 이렇게 애플리케이션을 생성하면 아래와 같은 build.gradle 파일이 생성된다. import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { id("org.springframework.boot") version "2.7.1" id("io.spring.dependency-manageme..
- Total
- Today
- Yesterday