📕 book
-
3장 - 모든 객체의 공통 메서드📕 book/이펙티브 자바 2022. 10. 26. 21:19
💡 equals는 일반 규약을 지켜 재정의하라 꼭 필요한 경우가 아니면 equals는 재정의 하지 않은 것이 좋다. equals를 재정의하지 않아도 되는 경우 각 인스턴스가 본질적으로 고유 값을 표현하는 것이 아닌 동작하는 객체를 표현하는 클래스 - ex) Thread 값 클래스라도, 값이 같은 인스턴스가 둘 이상 만들어지지 않음을 보장하는 인스턴스 통제 클래스라면 재정의 하지 않아도 된다. 인스턴스 논리적 동치성을 검사할 일이 없을 때 상위 클래스에서 재정의한 equals가 하위 클래스에도 들어 맞을 때 ex) 대부분의 Set 구현체는 AbstractSet이 구현한 equals를 상속받아 사용 ex) List 구현체들은 AbstractList, Map 구현체들은 AbstractMap으로부터 상속받아 사..
-
2장 - 객체 생성과 파괴📕 book/이펙티브 자바 2022. 10. 25. 13:18
📌 생성자 대신 정적 팩터리 메서드를 고려하라 클라이언트는 클래스의 인스턴스를 얻는 전통적인 수단으로는 public 생성자이다. 클래스는 생성자와 별도로 정적 팩터리 메서드를 제공할 수 있다. 정적 팩터리 메서드 (static factory method) 해당 클래스의 인스턴스를 반환한다 (객체를 생성하는 메서드) ex) Optional의 of() : ‘new’ 키워드 대신 ‘of()’ 메서드를 이용해 객체를 만든다. 장점 1. 이름을 가질 수 있다. public class Hat { private String color; private int cost; private Hat(String color, int cost) { this.color= color; this.cost = cost; } public ..
-
1장 - 도메인 모델 시작하기📕 book/도메인 주도 개발 시작하기 2022. 10. 4. 22:12
도메인 도메인은 여러 하위 도메인으로 구성된다. 한 하위 도메인은 다른 하위 도메인과 연동하여 완전한 기능을 제공 ex) 고객이 물건을 구매 주문, 결제, 배송, 혜택 하위 도메인의 기능이 엮이게 된다. 특정 도메인을 위한 소프트웨어라고 해서 도메인이 제공해야 할 모든 기능을 직접 구현하는 것은 아니다. 도메인마다 고정된 하위 도메인이 존재하는 것은 아니다. 하위 도메인을 어떻게 구성할지 여부는 상황에 따라 달라진다. 도메인 전문가와 개발자 간 지식 공유 전문가 해당 도메인에 대한 지식과 경험을 바탕으로 본인들이 원하는 기능 개발을 요구 개발자 전문가의 요구사항을 분석하고 설계하여 코드를 작성하며 테스트하고 배포한다. 요구사항을 올바르게 이해하는 것이 중요하다. “Garbage in, Garbage ou..
-
1장 - 객체, 설계📕 book/오브젝트 2022. 9. 18. 18:07
티켓 판매 애플리케이션 로버틴 마틴은 소프트웨어 모듈이 가져야 하는 세 가지 기능에 관해 설명 모듈 : 크기와 상관없이 클래스나, 패키지, 라이브러리 같은 프로그램을 구성하는 임의의 요소 모든 소프트웨어 모듈에는 3가지 목적이 있다. 실행 중에 제대로 동작하는 것. 변경을 위해 존재하는 것. ( = 변경이 용이 ) 코드를 읽는 사람과 의사소통하는 것 ( = 이해하기 쉬워야 한다. ) 예상을 빗나가는 코드 이해 가능한 코드 : 동작이 우리의 예상에서 크게 벗어나지 않는 코드 상식과는 너무나도 다르게 동작 코드를 읽는 사람과 제대로 의사소통하지 못한다. 코드를 이해하기 위해 여러 가지 세부적인 내용들을 한번에 기억하고 알고 있어야 한다. 코드를 작성하는 사람, 읽고 이해해야 하는 사람 모두에게 부담 변경에 ..
-
Kafka 스트림즈 구현📕 book/아파치 카프카 2022. 9. 18. 18:01
스트림즈 DSL을 이용하여 구현 스트림즈 DSL - stream(), to() 특정 토픽을 KStream 형태로 가져오려면 스트림즈 DSL의 stream() 메서드를 사용하면 된다. KStream의 데이터를 특정 토픽으로 저장하려면 스트림즈 DSL의 to() 메서드를 사용하면 된다. build.gradle 스트림즈 애플리케이션을 개발하기 위한 라이브러리 추가 dependencies { compile 'org.apache.kafka:kafka-streams:2.5.0' } SimpleStreamApplication.java 스트림 프로세싱을 위한 코드를 스트림즈DSL로 작성 package com.example; import org.apache.kafka.common.serialization.Serdes; ..
-
3장 - 카프카 스트림즈📕 book/아파치 카프카 2022. 9. 18. 17:57
카프카 스트림즈 💡 토픽에 적재된 데이터를 상태기반(Stateful) 또는 비상태기반(Stateless)으로 실시간 변환하여 다른 토픽에 적재하는 라이브러리이다. 카프카의 스트림 데이터 처리를 위해 아파치 스파크 아파치 프링크 아파치 스톰 플루언트디 와 같은 다양항 오픈소스 애플리케이션이 존재하는데 ❓ 카프카 스트림즈를 사용해야 하는 이유 ❗스트림즈는 카프카에서 공식적으로 지원하는 라이브러리!! 카프카 버전이 오를 때 마다 스트림즈 자바 라이브러리도 같이 릴리즈 된다. 때문에, 자바 기반 스트림즈 애플리케이션은 카프카 클러스터와 완벽하게 호환되면서 스트림 처리에 필요한 편리한 기능들(신규 토픽 생성, 상태 저장, 데이터 조인 등)을 제공한다. 스트림즈 애플리케이션 또는 카프카 브로커의 장애가 발생하더라도..
-
3장 - 카프카 기본 개념📕 book/아파치 카프카 2022. 9. 18. 13:18
3. 1 카프카 브로커, 클러스터, 주키퍼 💡 카프카 브로커는 카프카 클라이언트와 데이터를 주고받기 위해 사용하는 주체 데이터를 분산 저장하여 장애가 발생하더라도 안전하게 사용할 수 있도록 도와주는 애플리케이션 하나의 서버에는 한 개의 카프카 브로커 프로세스가 실행 3대 이상의 브로커 서버를 1개의 클러스터로 묶어 운영 브로커들은 프로듀서가 보낸 데이터를 안전하게 분산 저장하고 복제하는 역할 수행 데이터 저장, 전송 프로듀서로 부터 데이터를 전달 받으면 카프카 브로커는 프로듀서가 요청한 토픽의 파티션에 데이터를 저장 프로듀서로부터 전달된 데이터는 파일 시스템에 저장된다. 컨슈머가 데이터를 요청하면 파티션에 저장된 데이터를 전달. 카프카는 메모리나 DB에 저장하지 않고 캐시 메모리를 구현하여 사용하지도 않..
-
1장 - 들어가며📕 book/아파치 카프카 2022. 9. 18. 13:01
카프카의 탄생 데이터를 생성하고 적재하기 위해서는 데이터를 생성하는 소스 애플리케이션과 데이터가 최종 적재되는 타깃 애플리케이션을 연결해야 한다. 초기 운영 시에는 단방향 통신을 통해 소스 → 타깃 애플리케이션으로 연동하는 소스코드를 작성 하지만, 아키텍처가 거대해지고 소스, 타깃 애플리케이션이 증가하면서 문제가 발생 문제 소스 애플리케이션과 타깃 애플리케이션을 연결하는 파이프라인 개수가 많아지면서 소스코드 및 버전 관리에서 이슈 발생 타깃 애플리케이션에 장애가 생길 경우 그 영향이 소스 애플리케이션에 전달 아파치 카프카 카프카는 각각의 애플리케이션끼리 연결하여 데이터를 처리하는 것이 아니라 한 곳에 모아 처리할 수 있도록 중앙 집중화 했다. 취합한 데이터 스트림을 한 곳에서 실시간으로 관리 가능 기업의..