분류 전체보기 42

[Design Patterns] Factory Method

목차 개요 이번 글에선 Class Creational Pattern인 팩토리 메소드 패턴을 알아보겠습니다. 내용 요약 객체를 생성하는 인터페이스를 만들고, 서브 클래스가 어떤 클래스를 객체화할지 정하자. 동기 스프링과 같은 프레임워크를 생각해봅시다. 대부분의 프레임워크는 제어의 역전(Inversion of Control) 개념을 사용합니다. 즉, 프레임워크가 애플리케이션의 실행 흐름을 맡고 그 중간중간에 우리는 필요한 코드를 실행시키는 것이죠. 예를 들어, 사용자에게 GUI로 여러 문서를 보여주는 프레임워크를 생각해봅시다. 이 프레임워크의 2가지 주요 추상화는 Application, Document가 될 수 있을 것입니다. 두 클래스는 모두 추상 클래스이고, 사용자는 이 클래스의 서브 클래스를 작성해서 ..

Design Patterns 2024.01.27

[Design Patterns] Builder

목차 개요 이번 글에선 Object Creational Pattern인 빌더 패턴을 알아보겠습니다. 내용 요약 복잡한 객체의 생성을 별도의 클래스로 따로 분리하자. 예시 건축자가 집을 짓는다고 생각해봅시다. 집을 지을 때 건축자만 있으면 집을 지을 수 있을까요? 대게는 그렇지 않습니다. 건설같이 복잡한 작업을 할 땐 설계자가 도면을 그리고 건축자를 지휘해야 집을 지을 수 있습니다. 또한 지어야 하는 집의 양식에 따라 특화된 건축자 집단이 있을 수 있습니다. 나무 집에 특화된 건축자, 돌 집에 특화된 건축자 등등.. 구조 빌더 패턴은 Director, Builder, Builder 구현체로 이뤄져 있습니다. 하지만 요즘에는 java StringBuilder처럼 Builder 구현체만 있어도 빌더 패턴으로 ..

Design Patterns 2024.01.20

[Design Patterns] Abstract Factory

목차 개요 이번 글에선 Object Creational Pattern인 추상 팩토리 패턴을 알아보겠습니다. 내용 요약 추상 팩토리 패턴은 같은 기능을 제공하는 다른 구현체들을 사용하고 싶을 때 사용합니다. 클라이언트에게 Concrete class 대신 인터페이스를 제공하자! 예시 객체지향 프로그래밍을 이용해서 웹 프론트엔드 디자인을 한다고 생각해봅시다. 대부분은 디자인 라이브러리를 사용해서 개발할 것입니다. Material, NextUI, Bootstrap 등등.. 하지만 이런 라이브러리를 직접적으로 사용한다면 나중에 다른 라이브러리로 변경하는 것이 어려워집니다. 이럴 때 추상 팩토리 패턴을 사용할 수 있습니다. 시스템에 아래와 같은 클래스를 제공한다고 생각해봅시다. 버튼을 만들고 싶으면 componen..

Design Patterns 2024.01.15

[Design Patterns] Patterns의 종류

개요 GoF의 디자인 패턴 책에 따르면 디자인 패턴은 크게 3가지로 나눌 수 있습니다. 본 문서에선 디자인 패턴의 3가지 유형에 대해 알아봅니다. 디자인 패턴의 종류들을 알아두면 각 디자인 패턴들이 어떤 문제를 해결하려고 하는지 짐작하는데 도움이 될 수 있습니다. 1. Creational Pattern 생성 패턴들은 객체화 과정을 추상화합니다. 시스템이 객체가 생성/구성/표현되는 방식을 몰라도 되게 해줍니다. 이 종류의 패턴들에는 공통적으로 나타나는 부분들이 있습니다. 1. 시스템이 사용하는 concrete class에 대한 정보를 캡슐화합니다. 즉, 인터페이스 등으로 구현을 숨깁니다. 2. 객체가 어떻게 생성되고 합쳐지는지(compositon) 숨깁니다. 이를 통해 시스템이 무엇을 누가 생성하는지, 언..

Design Patterns 2024.01.14

[Design Patterns] UML 이란?

개요 UML은 객체 지향 프로그래밍의 디자인 패턴을 공부하기 전 필요한 선행 지식입니다. 이 글에선 UML이 뭔지, 디자인 패턴을 공부할 때 UML을 왜 알아야 하는지 알아봅시다. UML은 통합 모델링 언어(Unified Modeling Language)의 줄임말이며, 소프트웨어를 설계할 때 사용하는 언어입니다. 먼저 UML 이름의 뜻부터 자세히 살펴보면, Unified - 과거 1990년대에는 수많은 객체 지향 소프트웨어 개발 방법론이 있었습니다. 이 많은 방법론들에서 사용하는 모델링 방법/언어를 통합했다는 의미로 추측됩니다. Modeling - 소프트웨어 모델링은 소프트웨어 설계를 표현하는 방법입니다. Language - 언어는 의사를 소통하기 위한 수단입니다. UML 역시 소프트웨어 모델을 서로 공..

Design Patterns 2023.01.13

08. Fluentd high availability config

본 글은 https://docs.fluentd.org/을 번역/요약/정리/사견 추가한 글입니다. 1. 개요 트래픽이 많은 웹사이트의 경우, fluentd의 high-availability 설정을 하는 것을 추천합니다. 그렇다면 high-availability 설정은 뭘까요?! 2. Message Delivery Semantics Fluentd는 주로 이벤트 로그를 전달하는 시스템을 위해 설계되었습니다. 이런 시스템에선 몇 가지 배송 방법이 있습니다. At most once: 메시지는 즉시 전달됨. 전송 실패시 전달을 못하고 메시지를 잃을 수 있음. At least once: 메시지는 최소 1번 전달됨. 실패시 2번 보낼 수도 있음. Exactly once: 메시지는 딱 한 번 전달됨. 가장 이상적 만약 ..

Log/fluentd 2022.10.09

07. Fluentd fomatter plugins

본 글은 https://docs.fluentd.org/을 번역/요약/정리/사견 추가한 글입니다. 1. 개요 Fluentd는 9가지 종류의 플러그인이 있습니다. 그 중 formatter 플러그인에 대해 살펴보겠습니다. Formatter plugin은 output format을 커스터마이징할 수 있게 해줍니다. 2. formatter_out_file formatter_out_file은 time, tag, record를 구분자로 구분지어 출력시켜 줍니다. time[delimiter]tag[delimiter]record[newline] 3. formatter_json formatter_json은 이벤트를 JSON 형태로 포맷팅해줍니다. 기본적으로 tag, time은 들어가지 않습니다. 넣으려면 를 사용하면 됩니..

Log/fluentd 2022.10.09

06. Fluentd parser plugins

본 글은 https://docs.fluentd.org/을 번역/요약/정리/사견 추가한 글입니다. 1. 개요 Fluentd는 9가지 종류의 플러그인이 있습니다. 그 중 parser 플러그인에 대해 살펴보겠습니다. Parser plugin은 사용자의 커스텀 데이타 포맷을 파싱할 수 있게 해줍니다. 2. parser_regexp parser_regexp는 주어진 정규 표현식대로 로그를 파싱합니다. 적어도 하나의 named capture(?)을 필요로 합니다. 만약 time을 포착했다면 그건 time_key를 통해 설정이 가능합니다. 참고 : named capture는 정규 표현식에서 필드를 추출해내는 것을 의미하는 것 같습니다. @type regexp expression /^\[(?[^\]]*)\] (?[^ ..

Log/fluentd 2022.10.09

05. Fluentd buffer plugins

본 글은 https://docs.fluentd.org/을 번역/요약/정리/사견 추가한 글입니다. 1. 개요 Fluentd는 9가지 종류의 플러그인이 있습니다. 그 중 buffer 플러그인에 대해 살펴보겠습니다. Buffer plugin은 output plugin에 의해 사용되는 플러그인입니다. 버퍼는 본질적으로 chunk의 집합입니다. Chunk는 이벤트의 집합입니다. 각각의 chunk는 파일 혹은 메모리에 관리됩니다. Chunk는 화물 상자로 비유될 수 있습니다. Fluentd는 input source로부터 화물 상자에 이벤트를 차곡차곡 쌓습니다. 화물 상자가 가득차면 목적지로 배송됩니다. 내부적으로 버퍼는 2개의 분리된 공간으로 구분됩니다. "Stage"는 chunk가 채워지는 공간이며 "queue"..

Log/fluentd 2022.10.08

04. Fluentd filter plugins

본 글은 https://docs.fluentd.org/을 번역/요약/정리/사견 추가한 글입니다. 1. 도입 Fluentd는 9가지 종류의 플러그인이 있습니다. 그 중 filter 플러그인에 대해 살펴보겠습니다. Filter plugin은 이벤트 스트림을 바꿀 수 있게 해줍니다. 예를 들어, 하나 이상의 필드를 이용해 이벤트를 필터링하기 새로운 필드를 이벤트에 더해주기 개인 정보 보호와 규정을 위해 특정 필드를 지우거나 마스킹하기 등을 할 수 있습니다. 2. filter_record_transformer filter_record_transformer는 이벤트 스트림을 변경시킬 수 있게 합니다. 만약 이벤트를 추가/삭제/수정하고 싶으면 이 필터를 먼저 써보세요. @type record_transformer ..

Log/fluentd 2022.10.08