[오브젝트 - 기초편] 책임 할당하기
·
ETC
본 게시글은 '오브젝트 - 기초편 강의 | 조영호 - 인프런'을 수강하고 학습한 내용을 정리한 게시글입니다.시스템 내부 상태 변경 정리애플리케이션 기능이 객체 협력 설계에 필요한 문맥을 제공-> 기능이라는 문맥 안에서 협력을 잘 설계하기 위해서는 시스템 내부에서 일어나는 상태 변경 정리 필요표현적 차이를 줄이기 위한 단계애플리케이션 기능의 실행은 도메인 개념의 상태나 구조를 변경시킴ex) 상영 예매 기능 수행 후, 시스템 내부에서 '예매' 생성 & '예매'를 '상영'과 연결 & 생성된 예매 반환시스템 내부에서 일어나는 상태 변경을 도메인 모델에 기반한 개념들의 집합으로 가시화하는 것이 중요시스템 실행 결과를 가시화했다면, 상태 변경을 기반으로 객체 협력 설계 가능애플리케이션의 기능을 시스템이 수행할 책임..
[오브젝트 - 기초편] 객체지향 기본 원칙
·
ETC
본 게시글은 '오브젝트 - 기초편 강의 | 조영호 - 인프런'을 수강하고 학습한 내용을 정리한 게시글입니다.객체지향 설계 원칙설계(Design)란?코드를 배치하는 방식(객체지향) 설계가 필요한 이유 => 요구사항이 변경될 때 코드를 쉽고 안전하게 수정하기 위해서객체지향 설계 원칙객체지향의 모든 원칙은 변경을 중심에 두고 있음협력에 필요한 행동을 먼저 결정하고, 행동에 적합한 객체를 나중에 선택해라행동을 먼저 구현하고, 행동에 필요한 데이터를 나중에 선택해라=> 행동을 먼저 결정하고, 객체와 데이터는 나중에 선택해라1) 행동을 먼저 구현하고, 행동에 필요한 데이터를 나중에 선택해라절차적인 설계에서 처음에 DiscountPolicy의 모든 Getter/Setter를 열어두고 이를 ReservationServ..
[오브젝트 - 기초편] 영화 예매 도메인 - 절차적인 방식 개선해보기
·
ETC
본 게시글은 '오브젝트 - 기초편 강의 | 조영호 - 인프런'을 수강하고 학습한 내용을 정리한 게시글입니다.책임 이동: 데이터와 프로세스 통합하기데이터를 사용하는 프로세스 로직을 데이터 내부로 이동시켜라다른 클래스의 데이터를 이용해서 의사결정을 하거나 데이터를 제공한 클래스의 상태를 변경하는 로직이 있다면, 이 로직을 데이터를 보유한 클래스 쪽으로 옮겨야함ex) getter를 사용해서 판단하고 결정하는 로직을 그 데이터로 옮기기=> 데이터가 수정될 때 변경의 영향 범위를 데이터 클래스 내부로 제한 가능ex) findDiscountCondition 메서드의 condition.isPeriodCondition()을 체크하는 분기문 부분을객체지향에서는 이를 '책임의 이동(Shift of Responsibilit..
[오브젝트 - 기초편] 영화 예매 도메인 - 절차적인 설계로 구현하기
·
ETC
본 게시글은 '오브젝트 - 기초편 강의 | 조영호 - 인프런'을 수강하고 학습한 내용을 정리한 게시글입니다.절차적인 설계로 구현하기절차적(Procedural) 설계란?프로그램을 구성하는 데이터와 프로세스를 개별적인 모듈로 분류해서 구현하는 방식데이터를 먼저 정의하고, 이후 프로세스를 정의함데이터(객체) 구현: 무엇을 저장할 것인가일반적으로 관계형 데이터베이스에 저장=> 데이터베이스에 저장된 데이터를 메모리로 로드하기 위한 클래스 정의필드의 접근 제한자를 private으로 설정다른 클래스가 해당 필드에 직접 접근 불가능 -> 캡슐화간접 접근을 위해 Getter/Setter 추가프로세스(알고리즘) 구현: 어떻게 처리할 것인가절차적인 설계는 알고리즘을 실행 순서대로 클래스 안에 배치영화 예매 프로세스를 위한 ..
[오브젝트 - 기초편] 영화 예매 도메인 예제
·
ETC
본 게시글은 '오브젝트 - 기초편 강의 | 조영호 - 인프런'을 수강하고 학습한 내용을 정리한 게시글입니다.도메인(Domain)도메인: 사용자가 프로그램을 사용하는 주제 영역소프트웨어로 구현해야 하는 요구사항의 범위모든 요구사항을 소프트웨어로 구현하는 것은 현실적으로 불가능 (일정, 인력, 난이도 등의 비용)요구사항 중 현실적으로 구현 가능하다고 판단되는 범위만을 결정하면 해당 범위가 애플리케이션 시스템의 도메인ex) 음식 배달 애플리케이션을 만든다고 가정하면, (메뉴, 주문, 결제) 단계만을 포함하고 실제 (조리, 배달, 식사) 단계는 포함하지 않음도메인(소프트웨어에 포함될 요구사항의 범위)을 정했다면 '요구사항 분석' 필요이 과정에서 도메인 안에 존재하는 중요 개념들(도메인 모델)을 이용해 요구사항을..
[Algorithm] 최소 스패닝 트리(MST) 문제
·
Algorithm
도입무향 그래프의 스패닝 트리(spanning tree): 원래 그래프의 정점 전부와 간선의 부분 집합으로 구성된 부분 그래프스패닝 트리에 포함된 간선들은 정점들을 트리 형태로 전부 연결해야 함 (사이클 X, 정점들이 꼭 부모-자식 관계일 필요 X)그래프의 스패닝 유일하지 X최소 스패닝 트리(Minimum Spanning Tree, MST) 문제: 가중치 그래프의 스패닝 트리 중 가중치의 합이 가장 작은 트리를 찾는 문제= 그래프의 연결성을 그대로 유지하는 가장 '저렴한' 그래프를 찾는 문제MST 문제를 푸는 2가지 유명한 알고리즘크루스칼 알고리즘프림 알고리즘두 알고리즘 모두 간선이 하나도 없는 상태에서 시작해 하나씩 트리에 간선을 추가해 가는 탐욕적 알고리즘 => 결국 같은 방법으로 증명 가능크루스칼 ..
[Apache Kafka] 카프카 컨슈머 상세 개념
·
Data Infra
이번에는 컨슈머의 고급 활용법과 옵션별 동작 방식에 대해 자세히 알아보자멀티 스레드 컨슈머데이터를 병렬처리하기 위해서 파티션 개수와 컨슈머 개수를 동일하게 맞추는 것이 가장 좋음파티션 개수가 n개라면 동일 컨슈머 그룹으로 묶인 컨슈머 스레드를 최대 n개 운영 가능=> n개의 스레드를 가진 1개의 프로세스를 운영 or 1개의 스레드를 가진 프로세스를 n개 운영멀티 스레드를 지원하지 않는 언어 또는 환경 -> 프로세스 여러 개멀티 스레드 지원하는 경우 -> 컨슈머 스레드를 여러 개자바는 멀티 스레드 지원멀티 스레드로 컨슈머를 안전하게 운영하기 위한 고려사항하나의 컨슈머 스레드에서 예외적 상황(ex. OutofMemoryException)이 발생할 경우 프로세스 자체가 종료되어 다른 스레드에 영향을 줄 수 있..
[Apache Kafka] 카프카 프로듀서 상세 개념
·
Data Infra
데이터 유실을 막기 위해서 프로듀서에서 제공하는 다양한 옵션을 함께 사용해야 한다. 여기서는 프로듀서의 고급 활용법과 옵션별 동작 방식에 대해 알아본다.acks 옵션카프카 프로듀서읭 acks 옵션은 0, 1, all(또는 -1) 값을 가질 수 있음이 옵션을 통해 프로듀서가 전송한 카프카 클러스터에 얼마나 신뢰성 높게 저장할지 지정 가능또한, acks 옵션에 따라 성능이 달라질 수 있으므로 acks 옵션에 따른 카프카의 동작 방식을 상세히 알고 설정해야 함복제 개수(replication.factor)가 1인 경우 acks 옵션에 따른 성능 변화가 크지 않으므로 여기선느 복제 개수가 2 이상인 경우에 대해 알아보자acks=0프로듀서가 리더 파티션으로 데이터를 전송했을 때 리더 파티션으로 데이터가 저장되었는지..
[Apache Kafka] 토픽과 파티션 상세 개념
·
Data Infra
적정 파티션 개수토픽의 파티션 개수는 카프카의 성능과 관련이 있음=> 적절한 파티션 개수를 설정하고 운영하는 것이 매우 중요토픽 생성 시 파티션 개수 고려사항데이터 처리량메시지 키 사용 여부브로커, 컨슈머 영향도데이터 처리량파티션 = 카프카 병령처리의 핵심파티션 개수가 많아질수록 1:1 매핑되는 컨슈머 개수 증가=> 파티션 개수 정할 때는 토픽에 필요한 데이터 처리량을 측정하는 것이 중요데이터 처리 속도 향상시키는 방법 2가지컨슈머 자체의 처리량을 늘리기컨슈머가 실행되는 서버의 사양을 스케일 업GC 튜닝etc..but, 컨슈머 특성상 다른 시스템들(S3, 하둡, 오라클 등)과 연동되기 때문에 일정 수준 이상 처리량을 올리는 것은 매우 어려움..컨슈머를 추가해서 병렬처리량 늘리기가장 확실한 방법프로듀서 전..
[Algorithm] 최단 경로 알고리즘 3가지
·
Algorithm
도입최단 경로 문제: 주어진 그래프에서 주어진 두 정점을 연결하는 가장 짧은 경로의 길이를 찾는 문제가중치가 없는 그래프의 경우, 너비 우선 탐색(BFS)로 찾을 수 있음가중치가 있다면..? => 다익스트라, 벨만-포드, 플로이드-워셜 등의 알고리즘 필요이러한 알고리즘들은 정점들의 목록을 구해주는 것이 아니라, 최단 경로의 길이를 찾아줄 뿐실제 경로를 계산하기 위해서는 너비 우선 탐색에서 그랬듯이 탐색 과정에서 별도의 정보를 저장하고, 이것으로부터 실제 경로를 찾아내는 코드를 작성해야 함음수 간선의 중요성그래프에 대한 최단 경로 문제 해결 시 가장 먼저 유의할 점 => '음수 가중치를 갖는 간선(음수 간선)이 있는지의 여부'왜? => 음수 간선을 지나면 전체 경로의 길이가 짧아지는데, 가중치의 합이 음수..