새로운 기술을 도입하는 건 언제나 도박이다. 특히 팀 전체가 영향을 받는 기술이라면 더욱 그렇다. ts-rest 도입 과정에서 겪은 실패를 통해 배운 것들을 정리해본다. 문제의 시작 우리 팀은 TypeScript를 사용하면서도 API 경계에서는 타입 안전성을 포기하고 있었다. 배포 후에야 발견되는 이런 문제들이 반복됐다. 뭔가 해결책이 필요했다. 왜 t…
작은 단위의 PR과 작업 속도 간의 균형을 맞추기는 쉽지 않다. 특히 코드리뷰가 필수인 환경에서는 더욱 그렇다. PR 크기의 딜레마 큰 PR을 만들면 리뷰어가 제대로 보기 어렵다. 2000줄짜리 PR을 받으면 대충 훑어보고 LGTM 달기 마련이다. 반대로 작은 PR들로 나누면 각각의 리뷰를 기다려야 한다. 특히 이전 작업을 기반으로 새로운 작업을 이어나가…
요약 GSI의 기본키는 기본 테이블의 기본키가 단일키인지 복합키인지와 무관하다. 상세 AWS DynamoDB를 사용하다 보면 GSI(Global Secondary Index)를 사용하게 된다. GSI는 기본 테이블의 기본키와는 별개의 기본키를 이용해 생성되는 인덱스이다. 여기서 궁금증이 생겼다. 만약 기본 테이블이 단일키(Only PK)를 가진다면 G…
<힘있는 글쓰기>라는 책은 글쓰기(발산)와 퇴고(수렴) 과정을 분리하여 힘있는 글을 쓸 수 있다고 강조한다. 왜 그런걸까? 어떻게 할 수 있을까? 발산과 수렴은 뭘까? 발산과 수렴의 분리가 중요한 이유 글쓰기가 어려운 이유는 글을 쓰면서 동시에 글을 고치려고 하기 때문이다. 많은 사람들이 처음부터 보석같이 완벽한 글을 쓰고 싶어한다. 그러나 이러한 바람은…
유비쿼터스 랭귀지 유비쿼터스 랭귀지는 구성원들간에 이해하고 있는 용어를 통일해야 한다는 개념이다. 용어에 대한 이해가 다르면 커뮤니케이션에 많은 비용이 든다. 효율적인 커뮤니케이션을 통해 사전에 약속된 명확한 유비쿼터스 랭귀지를 정의해야 한다. 사내에서 사용하는 모든 개념에 대해 통일된 단어로 정의할 수 있다면 얼마나 좋을까? 하지만 실제로 그렇게…
참조 도메인 주도 설계 철저 입문 - 예스24 NHN FORWARD 22 - 클린 아키텍처 애매한 부분 정해 드립니다. - YouTube 소프트웨어 아키텍처란 ? 소프트웨어 아키텍처는 기능과 구조 중 구조에 대한 이야기 코드를 구성하는 원칙 좋은 아키텍처를 가진 프로젝트에서는 고민하지 않아도 됨 (책) 일반적인 소프트웨어 개발에서 아키텍처는 가장 …
팩토리 패턴은 무엇인가? DDD의 주요 개념 중 애플리케이션 패턴에 속하는 개념. width:800px 객체의 생성에 특화된 객체 객체의 생성에 대한 지식을 가지고 있다. 팩토리 패턴 === 복잡한 물건은 공장에 맡기자. 간단한 물건은 직접 만들어서 사용할 수 있다. width:300px 복잡한 물건은 공장에서 만드는 것이 효율적이다. width:…
도메인 서비스 도메인 서비스(Domain Service)란? 여러 , , 가 필요한 기능들을 모아둔 컴포넌트 책에서는 값 객체, 엔티티까지만 언급(애그리거트는 아직 배우지 않아서 언급 X) 값 객체, 엔티티, 애그리거트를 로 지칭 에그리거트(Aggregate)란 ? 에그리거트는 도메인 서비스는 언제 사용되는가 ? 도메인 객체에 들어가기 부자연스러운 …
왜 중요한가? 도메인 주도 설계의 도메인 모델을 객체화하는 가장 작은 단계 가장 작은 단계의 기초를 알고 있어야 다음 내용에 대해서도 진행이 가능하다. 어떻게 활용할까? 내가 사용하고 있는 코드들에 값 객체 개념을 적용한다. 이전에는 이러한 개념을 인지하지 못해 클래스로 굳이 왜 바꾸지 싶었다. 그러나 값 객체에 대한 내용을 파악했을 때 단순 객체가 아닌…
왜 중요한가? DDD를 이해하면 MSA 설계에 도움이 됨 소프트웨어의 구조적 가치를 끌어올리기 위한 방법론 요약 도메인 주도 설계는 도메인을 중심으로 설계와 구현이 이뤄진다. 도메인은 소프트웨어가 해결하고자 하는 문제 영역 도메인 개념 - 도메인 모델 - 도메인 객체가 유기적으로 연결된다. 도메인 주도 설계란 무엇일까? 도메인 주도 설계란 무엇일까? 도메…