아키텍처 용어집
아키텍처 분야의 개념 38개를 한 장에 모았습니다. 값 객체 · 검색 시스템 · 검색어 파이프라인 · 결합도 등 — 코드베이스에서 뽑아 뜻과 관계를 정리했습니다.
- 값 객체 (Value Object, VO)
- 식별자 없이 속성 값으로만 같음을 판단하는 불변 객체. 금액·ID 처럼 원시 타입에 의미와 검증을 입힐 때 쓴다
- 검색 시스템 (hybrid search, 하이브리드 검색, information retrieval, 정보 검색)
- 콘텐츠를 이해하고, 색인을 만들고, 검색어에 답하고, 결과를 재고, 그것을 떠받치는 서빙까지 — 콘텐츠 이해 · 색인 · 파이프라인 · 검색어 파이프라인 · 평가 · 로그 · 서빙 · 운영으로 읽는 검색 아키텍처. 색인 내부 구조와 용어는 곁에 둔다
- 검색어 파이프라인
- 검색어가 결과가 되기까지 — 쿼리 재작성 · 쿼리 언더스탠딩 · 리트리벌(키워드 · 덴스) · 하이브리드 RRF · 랭킹을 거쳐 결과를 구성하고, 0건이면 대응한다. 싼 것으로 많이 거르고 비싼 것은 적게 쓴다
- 결합도 (coupling)
- 한 모듈을 바꿀 때 함께 바꿔야 하는 다른 모듈의 수와 강도. 낮을수록 독립 변경·배포가 쉽다
- 계층 설계
- 한 서비스 안에서 도메인·유스케이스·어댑터를 나누고 의존 방향을 정한다. 이 레포는 UseCase 인터페이스 + Outbound Port + Adapter 구조를 표준으로 둔다(ADR-0083)
- 계층 의존 빌드 게이트
- 소스의 import 를 빌드 단계에서 검사해 application 이 infrastructure 를 참조하면 빌드를 실패시킨다. 리뷰에 기대지 않고 규칙을 기계로 지킨다
- 계층 침범 (layer violation)
- 안쪽 계층이 바깥 계층 타입을 직접 참조하는 상태. 서비스에 JpaRepository 를 바로 주입하는 식이며, 한 번 들어오면 테스트와 교체가 함께 어려워진다
- 도메인 경계 설계
- 업무 언어가 바뀌는 곳을 찾아 모델의 경계를 긋고, 경계 안의 규칙을 애그리거트로 담는다. 경계가 틀리면 뒤의 서비스 분리와 계층 설계가 전부 그 오류를 물려받는다
- 도메인 이벤트 (Domain Event)
- 도메인에서 일어난 의미 있는 사실을 과거형 이름의 객체로 남긴 것(StockReserved 등). 다른 애그리거트·서비스가 이것에 반응한다
- 도메인 주도 설계 (DDD, Domain-Driven Design)
- 업무 전문가와 같은 말(유비쿼터스 언어)로 모델을 만들고, 그 모델이 통하는 경계(바운디드 컨텍스트) 안에서 애그리거트·값 객체로 규칙을 담는 설계 방법론이다. 전략 설계와 전술 설계 두 층으로 나뉘며 업무 규칙이 복잡할 때 값어치가 있다
- 레이어드 아키텍처 (layered architecture, n-tier)
- 표현 → 비즈니스 → 데이터 접근 순으로 계층을 쌓고 위에서 아래로만 호출한다. 단순하지만 비즈니스 계층이 데이터 접근 기술에 의존하게 된다
- 마이크로서비스 (MSA, microservices)
- 바운디드 컨텍스트마다 독립 배포 단위와 자기 DB 를 두고 API·이벤트로만 통신한다. 팀과 배포를 독립시키는 대신 네트워크 실패와 분산 트랜잭션을 떠안는다
- 모놀리스 (monolith, monolithic architecture)
- 모든 기능을 하나의 배포 단위로 묶는다. 호출이 함수 호출이라 빠르고 트랜잭션이 단순하지만, 한 부분의 변경도 전체 재배포가 된다
- 모듈러 모놀리스 (modular monolith, 폴드 호스트)
- 도메인마다 모듈 경계와 스키마를 따로 두되 한 프로세스로 띄운다. 이 레포는 order·inventory 같은 도메인을 :feature 라이브러리로 만들어 commerce 호스트 하나에 접는다(ADR-0058·0093)
- 바운디드 컨텍스트 (Bounded Context, BC)
- 하나의 도메인 모델과 그 용어가 같은 뜻으로 통하는 경계. 경계 밖에서는 같은 단어도 다른 모델이 되며, 서비스·모듈을 나누는 기준선이 된다
- 분산 모놀리스 (distributed monolith)
- 서비스는 나눠 배포하지만 서로의 동기 호출·공유 DB 에 묶여 함께 배포하고 함께 장애 나는 상태. 모놀리스의 결합과 분산의 비용을 둘 다 진다
- 빈약한 도메인 모델 (anemic domain model)
- 엔티티가 getter·setter 만 갖고 규칙은 서비스 계층에 흩어진 상태. 같은 검사가 여러 서비스에 복제되고 하나를 빠뜨리면 불변식이 깨진다
- 상태 모델링
- 상태를 어떻게 저장하고 어떤 모양으로 읽힐지 정한다. 쓰기 모델과 읽기 모델을 가르거나, 현재 값 대신 변경 이력을 원본으로 둔다
- 색인 · 파이프라인
- 원천에서 색인까지. 문서 임베딩은 이 축에서 오프라인으로 일어난다
- 서비스 지향 아키텍처 (SOA, Service-Oriented Architecture, ESB)
- 재사용할 업무 기능을 서비스로 떼어 공용 버스(ESB) 같은 중앙 통합 계층으로 엮는다. 중앙 계층이 규칙을 갖게 되는 점이 MSA 와 갈린다
- 소프트웨어 아키텍처 (software architecture)
- 요구와 품질 속성을 정하고, 도메인 경계를 긋고, 배포 단위와 통합 방식을 고르고, 서비스 안의 계층과 객체 협력을 설계하는 일이다. 원칙 → 객체 → 계층 → 경계 → 분해 → 통합 → 시스템 설계 → 결정 기록 순으로 넓혀 읽는다
- 시스템 분해
- 도메인 경계를 몇 개의 배포 단위와 프로세스로 옮길지, 어떤 아키텍처 스타일로 묶을지 정한다. 코드 경계와 배포 경계를 따로 고를 수 있다는 점이 핵심이다
- 아키텍처 용어 사전 (glossary, 용어집)
- 경계·계층·품질·문서화를 읽는 데 필요한 말. 단계·장치가 아니라 그것을 설명하는 용어를 모은다
- 애그리거트 (Aggregate, aggregate root)
- 한 트랜잭션에서 함께 일관성을 지켜야 하는 엔티티·값 객체 묶음. 바깥에서는 루트 엔티티를 통해서만 바꾸고, 다른 애그리거트는 ID 로만 참조한다
- 엔티티 (Entity)
- 속성이 바뀌어도 식별자로 같은 것임이 유지되는 도메인 객체. 동등성을 ID 로 판단한다
- 유비쿼터스 언어 (Ubiquitous Language)
- 한 바운디드 컨텍스트 안에서 업무 전문가와 개발자가 코드·문서·대화에 똑같이 쓰는 말
- 유스케이스 (Use Case, interactor)
- 사용자가 시스템으로 이루려는 한 가지 목적과 그 처리 흐름. 이 레포는 유스케이스마다 인터페이스를 두고 입력·출력을 안쪽 data class 로 정한다
- 응집도 (cohesion)
- 한 모듈 안의 요소가 같은 목적을 위해 모여 있는 정도. 높을수록 변경 이유가 하나로 모인다
- 의존성 규칙 (Dependency Rule, 의존성 역전)
- 소스 코드 의존은 항상 바깥에서 안쪽(도메인)으로만 향한다는 규칙. 안쪽이 바깥 기능이 필요하면 인터페이스를 안쪽에 두고 바깥이 구현한다(의존성 역전)
- 이벤트 기반 아키텍처 (EDA, event-driven architecture)
- 상태 변화를 이벤트로 발행하고 관심 있는 서비스가 구독해 반응한다. 발행자는 구독자를 모르므로 서비스를 늘려도 발행 쪽 코드가 바뀌지 않는다. 브로커형과 중재자형 두 토폴로지가 있다
- 이벤트 소싱 (event sourcing)
- 현재 상태 대신 상태를 바꾼 이벤트를 순서대로 저장하고, 상태는 그 이벤트를 다시 재생해 만든다. 감사 이력과 시점 복원을 얻는 대신 스키마 변경과 재생 비용을 떠안는다
- 클린 아키텍처 (clean architecture)
- 엔티티·유스케이스를 가운데 두고 모든 의존이 안쪽으로만 향하게 한다. 안쪽 계층은 프레임워크를 모르므로 DB·웹 기술을 바꿔도 규칙 코드가 남는다
- 포트-어댑터 (port and adapter)
- 코어가 필요한 외부 기능을 인터페이스(포트)로 선언하고 infrastructure 가 그 구현(어댑터)을 제공한다. 코어는 포트만 알고 JPA·Redis 를 모른다
- 풍부한 도메인 모델 (rich domain model, Domain Model)
- 상태를 바꾸는 규칙을 엔티티 메서드 안에 두고 상태 필드는 밖에서 직접 못 바꾸게 한다. 재고 예약처럼 불변식이 있는 모델에 쓴다(Fowler 의 Domain Model 패턴)
- 프레임워크 종속 (framework lock-in)
- 업무 규칙이 ORM 엔티티·웹 애너테이션에 섞여 프레임워크 없이 테스트하거나 옮길 수 없는 상태
- 헥사고날 아키텍처 (hexagonal architecture, ports and adapters)
- 애플리케이션 코어를 포트로 감싸고 웹·DB·메시징을 모두 바깥의 어댑터로 붙인다. 들어오는 쪽(inbound)과 나가는 쪽(outbound)을 대칭으로 다룬다
- API 게이트웨이 (API gateway)
- 모든 API 요청이 지나는 단일 진입점. 경로별 라우팅에 인증 · 속도 제한 · 공통 헤더 같은 횡단 관심사를 얹는다
- CQRS (Command Query Responsibility Segregation)
- 명령(쓰기) 모델과 조회(읽기) 모델을 나눈다. 읽기 모델은 쓰기 쪽 이벤트로 따로 만들어 조회에 맞는 모양으로 둔다. 둘 사이는 최종 일관성이다
다른 분류