본문 바로가기

전체 글333

DDD - Entity - 출처: 도메인 주도 설계 - 에릭 에반스 - 개요 객체는 본질적으로 속성이 아닌 연속성과 식별성으로 정의 된다. 속성은 객체의 생명주기 동안 계속해서 변해간다. 어릴 때의 나와 현재의 나를 비교해보면 키, 친구들 많은 것이 변했으며 심지어는 이름이 변하는 경우도 있다. 하지만 식별성은 지속되는데 어릴 때의 '나'와 지금의 '나'는 동일하다. Entity는 생명주기 동안 형태와 내용은 급격하게 변하지만 연속성은 유지해야 한다. 그리고 이런 Entity를 추적하려면 식별성이 정의되어 있어야 한다. 우리가 좌석 예약 시스템을 만든다고 가정해보자. 만약 좌석을 예약하고 발급받은 입장권에 좌석번호가 명시된 경우 좌석번호를 Entity의 식별성으로 사용해야 한다. 반면 어떤 경우에는 단순히 일반석이라고 등급만 .. 2022. 7. 17.
DDD - S/W와 모델 - 출처: 도메인 주도 설계 - 에릭 에반스 - S/W 에서 표현되는 모델 S/W 에서는 모델을 표현하는 주요 패턴으로 3가지 형태가 주로 사용된다. Entity: 어떤 객체가 영속성과 식별성을 지닐 때 VO: 다른 무언가의 상태를 기술하는 속성에 불과할 때 Service: 객체보다 행동/연산으로 더 명확하게 표현되는 경우 자바라면 class, Golang 이라면 struct로 표현하기만 하면 되는데 왜 굳이 Entity와 VO라는 개념을 도입해서 나누는지 의문을 가질 수도 있다. 굳이 이렇게 하는 이유는 특정 객체가 특정 패턴을 따르면 객체의 역할이 더욱 명확해져서 설계 결정을 하는데 도움이 되기 때문이다. Entity와 VO만 있으면 객체를 표현할 수 있는데 Service라는 개념은 왜 필요할까? .. 2022. 7. 16.
Fluentd - Overview - 출처: https://docs.fluentd.org/ - 개요 Fluentd는 일종의 logging 계층을 통합하기 위한 data collector 라고 할 수 있다. 라이센스는 Apache License v2.0 이며, Treasure Data(https://www.treasuredata.com/) 에 의해 제작되었다. Fluentd는 다양한 Input Source들(Apache access log, Front 및 Back end의 App log, System log) 들을 filter, buffer, routing 하는 과정을 거쳐 다양한 Output Source들(MySQL, MongoDB, Hadoop, Amazon S3)로 보낼 수 있다. Fluentd는 일반적으로 많이 사용하는 JSON 형.. 2022. 7. 4.
package name base, util, or common - 출처: https://dave.cheney.net/2019/01/08/avoid-package-names-like-base-util-or-common - package name 좋은 Go package를 작성하려면 이름을 잘 지어야 한다. 하나의 단어로 해당 package가 무엇을 하는지 간략하게 나타낼 수 있어야 한다. package name을 보다보면 utility 라는 이름을 종종 볼 수 있다. 이런 package명은 관계없는 기능들이 많이 포함되어있어서 package 명을 보고 무엇을 제공하는지 알기가 힘들다. utils나 helpers 같은 package 이름은 계층 구조가 깊은package를 개발하고 순환참조 없이 helper 기능들을 공유하기를 원할 때 사용하곤 한다. utility 기.. 2022. 6. 26.
Empty struct - 출처: https://dave.cheney.net/2014/03/25/the-empty-struct - Introduction empty struct란 말 그대로 field가 하나도 없는 struct type 이다. type Q struct{} var q struct{} 근데 여기서 한 가지 의문점이 생긴다. field도 없고 데이터도 포함되어있지 않은 struct를 왜 사용하는것인가? - Width empty struct를 알아보기 전에 width에 대해서 알아보자. width 라는 용어는 gc 컴파일러에서 유래했는데, type의 instance를 저장할 때 필요한 byte 수라고 할 수 있다. 이 블로그의 원문을 쓴 필자는 프로세스의 주소 공간은 1차원이기 때문에 width가 size보다 더 적절.. 2022. 6. 21.
Zero value - 출처: https://dave.cheney.net/2013/01/19/what-is-the-zero-value-and-why-is-it-useful - Zero value 내장 함수 new나 make를 호출하거나 선언을 통한 값을 저장하기 위해 메모리가 할당될 때, 명시적으로 초기화를 하지 않으면 메모리에는 기본 초기화된 값이 저장된다. 이때에는 해당 type에 맞는 zero value가 설정된다. boolean은 false, integer는 0, float은 0.0, string은 "", pointer, function, interface, slice, channel, map은 nil로 초기화된다. 초기화는 재귀적으로 일어나는데, struct 배열의 각 요소 인스턴스에는 값이 주어지지 않으면 해당 .. 2022. 6. 17.