아키텍처 8

Layered Architecture 알아보기

📌 들어가며 시스템을 설계할 때 필수적으로 고려하게 되는 부분이 아키텍처인 것 같습니다. 이때 많은 사람들이 자신이 설계하는 시스템을 표현할때 Layered Architecture를 사용합니다. 이번 포스팅에서는 해당 아키텍처에 대해 알아보는 시간을 갖도록 하겠습니다. 📌 Software Architecture 먼저 '소프트웨어 아키텍처'란 무엇인지 정리해 보도록 하겠습니다. 소프트웨어 아키텍처는 모든 소프트웨어 시스템의 기본 구조를 말하며 소프트웨어 시스템의 구성방법에 대한 중대한 결정사항을 모아 놓은 것이라고 볼 수 있습니다. 시스템 구성 및 동작 원리 구성 요소 간의 관계 및 시스템 외부 환경과의 관계를 묘사 시스템 구성 요소에 대한 설계 및 구현을 지원하는 수준을 시술 요구 사양 및 시스템 수명 ..

Architecture 2023.11.02

Design Pattern, Factory Method

📌 들어가며 디자인 메서드 패턴은 이번 이직을 위해 개발했던 사전과제 서비스에서도 그렇고 실무에서도 정말 많이 사용하고 있는 패턴입니다. 그만큼 확장성이 좋기 때문에 계속 활용하게 되는 것 같은데 이론적으로는 한번도 정리해본 적이 없어 이번 포스팅을 통해 이론적인 내용을 정리해두려고 합니다. Factory Method Pattern(팩토리 메서드 패턴) 팩토리 메서드 패턴은 상위 클래스에서 객체의 인터페이스를 정의하고, 하위 클래스가 객체를 생성할지를 결정하도록 하는 패턴입니다. 객체를 하위 클래스에서 생성되도록 시키는 것이죠. 이는 다시 말해 부모 클래스에서 객체들을 생성할 수 있는 인터페이스를 제공하지만, 자식 클래스들이 생성될 객체들의 유형을 변경할 수 있도록 하는 생성 패턴입니다. 이러한 Fact..

Design Patterns 2023.03.26

응용 서비스는 어떻게 구현해야 하는가

📌 들어가며 이번 포스팅에서는 응용 서비스를 구현할때 항상 절대적일 순 없지만 따르면 좋은 구현 방식에 대해서 포스팅하고자 합니다. API를 개발할 수록 이 기능에 대한 로직은 어디에 있어야 할까? 혹은 응용 서비스가 이렇게 길어지는게 맞나...? 자주 고민하게 됩니다. 물론 도메인의 상황, 팀별 규칙에 따라 달라질 순 있겠지만 통상적인 구현 방식에 대해 정리해 보고자 합니다. 📌 응용 서비스란 응용 서비스는 표현 영역과 함께 사용자와 도메인을 연결해주는 매개체 역할을 합니다. 표현 영역이 사용자로부터 URL, 요청 파라미터, 쿠키, 헤더 등을 이용해서 사용자가 어떤 기능을 실행하기를 원하는지 판별하고 근 기능을 제공하는 응용 서비스를 실행하게 됩니다. 응용 서비스는 실행하는데 필요한 입력값을 메서드 파..

Architecture 2023.03.25

CQRS 란 무엇인가

📌 들어가며 현재 개발 중인 쿠폰 도메인에는 CQRS 패턴이 구현되어 있습니다. 이러한 CQRS 패턴이 무엇인지에 대해 경력직 채용시 면접 질문으로 질문 했다는 얘기를 점심시간에 듣게 되었습니다. 그리하여 이번 포스팅을 통해 애매하게 알고 있던 개념을 정리하고자 합니다. 📌 CQRS 패턴을 사용하게 되는 이유 만약 주문 내역 조회 기능을 구현하게 된다면 여러 애그리거트에 접근하여 데이터를 조회해 와야 합니다. Order에서 주문정보를, Product 에서는 상품에 대한 정보를 Member에서는 회원 관련 정보를 불러와야 합니다. 그런데 조회 화면은 그 특성상 api 의 응답 속도가 빠를 수록 좋은데 이러한 상황에서는 한 번의 select 쿼리 조회로 필요한 데이터를 읽을 수 없어 조회 속도에 문제가 생길..

DDD - 애그리거트

들어가며 애그리거트는 DDD에서 굉장히 자주 등장하는 용어입니다. 항상 개발을 공부할 때마다 느끼는 것은 정의가 천차만별 이라는 것입니다. 이번 포스팅에서는 이 '애그리거트'의 정의와 간단한 예시를 알아보고자 합니다. 📌 애그리거트의 등장 배경 보통 DDD에 대한 설명을 할 때 설명의 예시가 되는 시스템으로 '온라인 쇼핑몰'에 대한 예시를 많이 들고 있습니다. 개인적으로는 온라인 쇼핑몰 e-커머스 시스템이 고객, 주문, 결제, 상품 등 다양한 서브 도메인들로 이루어져 있기 때문이 아닐까 싶습니다. 저 또한 e-커머스 시스템을 예시로 들도록 하겠습니다. e-커머스 시스템을 상위 수준에서 모델을 정리하면 다음과 같을 수 있습니다. 이러한 상위 수준에서의 모델을 개별 객체 수준으로 나타내면 다음과 같습니다. ..

BackEnd/DDD 2023.02.04

백엔드 아키텍처 개요

대학교 시절과 회사에 입사한지 얼마 되지 않았을 때 까지는 아키텍처의 중요성에 대해 간과했습니다. 그나마 알고 있는 것이라고는 MVC 프레임워크 정도가 전부였습니다. 물론, MVC 프레임워크 역시 아키텍처 영역에서 보기에는 표현영역을 위한 기술 중에 하나일 뿐이지 아키텍처를 대변하지는 않습니다. 회사에서 프로젝트를 진행하면서 DDD 에 관해 접하게 되고 AA(Application Architecture) 분들과 협업을 하게 되면서 아키텍처에 대한 공부 역시 필요하다는 것을 알게 되었습니다. 사실 아키텍처 공부는 정말 끝이 없는 것 같습니다. 정확한 영역이 어디까지인지도 아직 잘 모르겠습니다. 아키텍처를 공부하다 보면 이와 관련된 수많은 다른 영역들을 접하게 됩니다. DIP, infrastructure, ..

Architecture 2023.01.16

DDD란 무엇인가(2) - 도메인, 서브도메인, 바운디드 컨텍스트 등

DDD의 기본 개념에 대해 알아보았던 DDD란 무엇인가(1) 에 이어서 이번 글에서는 DDD에서 많이 사용하는 용어들에 대한 정리를 해보고자 합니다. 회사 프로젝트에서 타회사 AA(Application Architecture) 분들과 설계 단계에서 대화를 나눌 때 많이 접했던 용어들과 그분들이 설명해주셨던 대로 정리해보고자 합니다. 개인적으로 해당 부분은 개발자들의 영역이기보다는 비즈니스 정책을 정하는 현업분들(또는 기획자)의 의견이 필요한 영역이라고 생각합니다. 도메인 - 도메인은 외국 용어이기도 하고 딱히 해당 용어를 우리말로 번역할 만한 단어가 없는 것 같습니다. 도메인은 우리가 해결하고자 하는 문제 영역이라고 볼 수 있습니다. 그냥 '네이버', '쿠팡' 처럼 서비스 자체를 도메인이라고봐도 됩니다...

BackEnd/DDD 2022.12.04

DDD란 무엇인가(1)

DDD(Domain Driven Deisign)의 간단 소개 지난해부터 회사에서 진행하는 차세대 프로젝트에 참여하고 있습니다. 해당 프로젝트의 주요 업무는 MSA와 DDD를 활용해 클라우드 환경으로 모놀리식 시스템을 마이그레이션 하는 것입니다. 이때 자연스럽게 MSA 뿐만 아니라 DDD 용어에 대해 많이 접하고 있습니다. 그래서 오늘은 해당 개념에 대해 정리하고자 이 글을 작성하게 되었습니다. 우선 DDD는 간단하게 정의내리자면 단순한 코딩/아키텍처 구성 방법이 아니라 패턴, 아키텍처 설계 등을 모두 합친 개발의 새로운 패러다임이라고 볼 수 있습니다. 사실 해당 용어는 실무에서 일하시는 분들도 백엔드 개발자가 아니거나 최신의 트렌드를 자주 접할 수 있는 직무가 아닌 레거시 시스템을 주로 운영하고 개발하는..

BackEnd/DDD 2022.10.23