본문 바로가기

전체 글56

[JPA] Persistence context(영속성 컨텍스트)와 EntityManager JPA와 ORM에 대한 간략한 정의와 JPA에서 중요한 영속성 컨텍스트(Persistence Context)와 엔티티 매니저(Entity Manager), 영속성 컨텍스트 타입(Persistence Context type), 영속성 컨텍스트(Persistence Context)의 장점등에 대해서 알아보도록 하겠습니다. JPA, ORM JPA는 ORM(Object–relational mapping)이며 객체 지향과 Database간 발생하는 차이를 매핑해줍니다. 즉 객체는 객체대로 설계하고 DB와의 차이점에 대해서는 ORM통해서 매핑하게됩니다. SQL중심적 개발에서 객체 중심으로 개발할 수 있게 되며 데이터베이스에 종속적이지 않게 됩니다. JPA는 JDBC API를 통해서 DB에 접근하며 java appl.. 2023. 1. 29.
[Kafka] Leader Epoch(리더 에포크)을 활용한 카프카 브로커(kafka broker) 복구 카프카(kafka)가 리더 에포크(Leader Epoch)를 활용하여 카프카 브로커(kafka broker)를 복구 하는 과정에 대한 정리와, 실습 환경 내에서 브로커 복구 진행 과정을 살펴보는 것을 포스팅해보도록 하겠습니다. 실전 카프카 개발부터 운영까지 도서에 정보를 추가하고 자체적인 실습환경 내에서 진행 했습니다. 실습 환경에대해서는 아래 환경 구축을 참조해 주시면 감사합니다. https://colevelup.tistory.com/17 [Kafka] kafka cluster 실습 환경 구축 서론 kafka 관련 포스팅을 하기 이전 실습 환경에 대해서 먼저 구성해 보도록 하겠습니다. container 환경에서 실습환경은 진행됩니다. 가상화 기술과 Docker, 대량의 Container를 효율적으로 띄.. 2023. 1. 28.
[Kafka] Replication(리플리케이션)과 Leader(리더)와 Follower(팔로워)를 알아보자 카프카(Kafka)를 안정적이게 사용할 수 있도록 가용성 측면에서 활용되는 리플리케이션(Replication)과 리플리케이션(Replication)들중 리더(Leader)와 팔로워(Follower)에 대해서, ISR(InSyncReplica), 동작 방식에 대해서 알아보도록 하겠습니다. 리플리케이션(Replication) 데이터 파이프라인에 메인 허브 역할을 하는 카프카 클러스터가 정상적으로 동작하지 못한다거나 연결된 데이터 파이프라인에 영향을 미친다면 심각한 문제가 생길 수 있기 때문에 안정적인 서비스를 제공하기 위해 리플리케이션이라는 동작을 하도록 구상됐습니다. 리플리케이션이란 메시지들을 여러 개로 복제해서 카프카 클러스터 내 브로커들에 분산시키는 동작입니다. 카프카의 replication 동작을 위.. 2023. 1. 25.
[Kafka] Topic, Partition, Segment, Segment 관리, Offset 카프카(kafka)에서 다뤄지는 주요 개념들인 토픽(Topic), 파티션(partition), 세그먼트(Segment), 오프셋(Offset)에대해서 그리고 세그먼트(segment)의 경우 관리하는 법 까지 알아보도록 하겠습니다. 토픽(Topic) Topic Event는 무엇인가 발생한 사실에 대한 record이며 record 또는 message라고 공식 document에서는 말합니다. Events are organized and durably stored in topics. Very simplified, a topic is similar to a folder in a filesystem, and the events are the files in that folder. 이 Event가 구조화되어 topi.. 2023. 1. 21.
[Kafka] kafka cluster 실습 환경 구축 kafka 관련 포스팅을 하기 이전 kafka cluster(카프카 클러스터) 를 구축 하여에 실습환경을 구성해보도록 하겠습니다. 컨테이너(container) 환경에서 실습환경은 진행됩니다. 가상화 기술과 Docker, 대량의 Container를 효율적으로 띄우고 관리하기 위해 나온 Docker Compose, Container 오케스트레이션을 위한 Kubernates등에 대해서는 추후 자세히 포스팅하겠습니다. kafka cluster(카프카 클러스터) 구축 container 환경에서 1~3대의 zookeeper 와 1~3대의 kafka를 만들어 실습환경을 구성해 보도록 하겠습니다. Docker-Desktop설치 후 container를 여러 대 띄우는데 활용하기 유용한 docker-compose를 활용하.. 2023. 1. 21.
[Kafka] Kafka 도입 사례로 보는 Kafka 사용의 당위성과 이점 사내에서 실전 카프카 개발부터 운영까지 라는 책을 선정하여 스터디를 진행하고 있습니다. 책 첫 장에서 카프카 적용 사례(kafka use case)로 트위터와 잘란도 등을 통해서 Apache 카프카를 쓰는 이점과 사용했을 때 유용한 면들을 유익하게 소개하고 있습니다. 책 내용과 개인적으로 추가적으로 정보전달하는 부분을 넣고, 해석한 부분들도 추가해서 글을 작성했습니다. 카프카를 사용하는 이점에 어떤 것들이 있는지 봐주시면 감사합니다. Message Queue에서의 Producer, Consumer, Topic들과 같은 개념이 생소하시다면 이전 포스팅을 봐주시고 와주시면 도움이 됩니다. https://colevelup.tistory.com/3 Message Queue란? 서론 Apache Kafka나 Ra.. 2023. 1. 15.
[Effective Java] 반환 타입으로는 Stream 보다 Collection이 낫다. (item 47) Stream에서는 반복을 지원하지 않기 때문에 API에서 Stream만 반환하도록 한다면 반복과 stream을 잘 시기적절하게 사용하기를 원하는 사용자는 불만을 토로할 수 있다. Stream을 사용할 수도 반복을 사용할 수도 있게 지원해야 한다. Stream과 iterator Stream 인터페이스는 Iterable 인터페이스가 정의한 추상 메서드를 전부 포함하고 정의한 방식대로 동작하나 for-each로 stream을 반복할 수 없는 이유는 Stream이 Iterable을 extend 하지 않아서 이다. 실제로 BaseStream을 열어보면 iterator메서드가 들어있다. 하지만 반복문에서 활용하면 컴파일 에러가 발생한다. 메서드 참조를 매개변수화된 Iterable로 적절히 형변환 해줘야 한다. St.. 2023. 1. 13.
[Effective Java] Stream에서는 부작용 없는 함수를 사용하라. (item 46) Effective Java item 46 스트림(Stream)에서는 부작용 없는 함수를 사용하라에서의 부작용 없는 함수와 어떤 함수를 사용하기를 권장하는지 확인해보도록 하겠습니다. stream과 부작용 없는 함수 stream은 새로 추가된 또 하나의 API가 아닌 함수형 프로그래밍에 기초한 패러다임이기 때문에 장점이 무엇인지 쉽게 와닿지 않을 수도 있습니다. Stream 패러다임에 핵심은 계산 로직을 일련의 변환(transformation)으로 재구성하는 부분입니다. 각 변환 단계는 가변 상태를 참조하지 않고 오로지 입력값에만 영향을 받는 순수함수로 이루어져 이전 단계의 결과를 받아 처리해야 합니다. 이 핵심을 지키려면 stream 연산 내에 건네는 함수 객체는 모두 함수가 결과값 이외에 다른 상태를 변.. 2023. 1. 12.
[Effective Java] Stream은 주의해서 사용해라(Item 45) Effective Java에서 말하는 Stream 사용시 주의 사항에 대해서 확인해보도록 하겠습니다. Stream과 관련된 Effective Java Item 45~48까지 학습한 것에 대한 포스팅을 이어서 하겠습니다. Stream을 과용하는 것을 피하자 프로그램이 읽거나 유지 보수하기 어려워진다 아나그램 예시 아나그램(anagram) : 알파벳이 같고 순서만 다른 단어를 말한다. ex) staple , aelpst, petals, aelpst → 아나그램 그룹 ❌ 스트림을 과용하여 코드 가독성을 떨어트리고 유지 보수 비용을 늘리는 케이스 예시 public class StreamAnagrams { public static void main(String[] args) throws IOException { .. 2023. 1. 12.