--- id: wiki-2026-0508-엔터프라이즈-소프트웨어-시스템-설계 title: 엔터프라이즈 소프트웨어 시스템 설계 category: 10_Wiki/Topics status: verified canonical_id: self aliases: [Enterprise Software Design, Enterprise Architecture] duplicate_of: none source_trust_level: A confidence_score: 0.9 verification_status: applied tags: [enterprise, architecture, systems-design, scalability] raw_sources: [] last_reinforced: 2026-05-10 github_commit: pending tech_stack: language: java framework: spring-boot --- # 엔터프라이즈 소프트웨어 시스템 설계 ## 매 한 줄 > **"매 large-scale, mission-critical, long-lived"**. 매 enterprise software 의 multi-team / multi-decade scale 의 system 의 design — 매 reliability, security, compliance, integration 의 first-class concern. 매 2026 의 cloud-native + 매 legacy mainframe 의 hybrid 의 reality. ## 매 핵심 ### 매 Enterprise 의 specific concerns - **Scale**: 매 thousands of concurrent users, TB+ data. - **Longevity**: 매 10-30년 의 lifespan — 매 maintainability 의 critical. - **Compliance**: 매 SOX, GDPR, HIPAA, PCI-DSS. - **Integration**: 매 N legacy system 의 talk to. - **Multi-team**: 매 Conway's law — 매 org structure 가 architecture 의 reflect. ### 매 Architecture layers (전통) 1. **Presentation** — UI / API. 2. **Application** — orchestration, use cases. 3. **Domain** — business logic. 4. **Infrastructure** — persistence, messaging, external. ### 매 2026 modern stack - **Frontend**: React / Next.js, micro-frontends. - **API**: GraphQL Federation, gRPC, REST. - **Service**: Microservices (Java/Spring Boot, Go, Kotlin). - **Data**: PostgreSQL, Kafka, Snowflake / Databricks. - **Platform**: Kubernetes, Istio, ArgoCD. - **Observability**: OpenTelemetry, Datadog, Grafana. ### 매 Cross-cutting concerns - AuthN/AuthZ (OAuth2, OIDC, mTLS) - Audit logging - Distributed tracing - Rate limiting, circuit breakers - Multi-tenancy ## 💻 패턴 ### 매 Hexagonal architecture ```java // 매 Domain — 매 framework 의존 X public class OrderService { private final OrderRepository repo; // port private final PaymentGateway payment; // port public Order place(PlaceOrderCommand cmd) { var order = Order.create(cmd); payment.charge(cmd.payment()); return repo.save(order); } } ``` ### 매 CQRS + Event Sourcing ```java // Command side @Component class OrderCommandHandler { public void handle(PlaceOrder cmd) { var events = OrderAggregate.place(cmd); eventStore.append(cmd.orderId(), events); bus.publish(events); } } // Query side @Component class OrderProjection { @KafkaListener(topics = "order-events") public void on(OrderPlaced e) { readModel.upsert(e); } } ``` ### 매 Saga (distributed transaction) ```java @Saga public class OrderSaga { @StartSaga public void on(OrderPlaced e) { send(new ReserveInventory(e.orderId())); } @SagaEventHandler public void on(InventoryReserved e) { send(new ChargePayment(e.orderId())); } @SagaEventHandler public void on(PaymentFailed e) { send(new ReleaseInventory(e.orderId())); end(); } } ``` ### 매 Strangler fig (legacy migration) ```yaml # 매 Gateway routing — 매 old → new 의 incremental routes: - path: /api/orders/* backend: new-order-service # 매 migrated - path: /api/billing/* backend: legacy-mainframe # 매 still legacy ``` ### 매 Multi-tenancy 의 patterns ```java // 매 Row-level — 매 cheapest @Entity class Order { @Column UUID tenantId; // 매 every query 의 tenant filter } // 매 Schema-per-tenant — 매 isolation DataSource ds = tenantRouter.resolve(currentTenant()); // 매 DB-per-tenant — 매 strongest, costliest ``` ### 매 BFF (Backend for Frontend) ```yaml services: bff-mobile: # 매 mobile 최적화 payload bff-web: # 매 web 최적화 bff-partner: # 매 B2B integration # 매 모두 매 동일 backend service 의 aggregate ``` ## 매 결정 기준 | 상황 | Approach | |---|---| | 매 startup, ≤10 dev | 매 Modular monolith | | 매 scale-up, multi-team | 매 Microservices + DDD | | 매 legacy 의 modernization | 매 Strangler fig | | 매 strict audit / replay | 매 Event sourcing | | 매 read-heavy + complex write | 매 CQRS | **기본값**: 매 modular monolith 부터 → 매 pain point 별 의 carve out. ## 🔗 Graph - 부모: [[Distributed Systems]] - 변형: [[Microservices]] · [[Event-Driven Architecture]] · [[Service-Oriented Architecture]] - 응용: [[E-commerce_Platforms|E-commerce Platforms]] - Adjacent: [[Domain-Driven Design]] · [[Hexagonal Architecture]] ## 🤖 LLM 활용 **언제**: 매 large-scale system design interview / RFC / ADR 작성 시. **언제 X**: 매 small CRUD app — 매 over-engineering 의 risk. ## ❌ 안티패턴 - **Distributed monolith**: 매 microservice 의 모양 의 만 갖춘 의 tight coupling. - **Big bang rewrite**: 매 legacy 의 한 번에 의 replace — 매 거의 fail. - **Anemic domain**: 매 logic 의 service layer 의 만 — 매 domain object 의 의 data bag. - **Shared database**: 매 microservice 간 의 DB 공유 → 매 hidden coupling. ## 🧪 검증 / 중복 - Verified — Martin Fowler, *Patterns of Enterprise Application Architecture*; Eric Evans, *Domain-Driven Design*; Sam Newman, *Building Microservices* (2nd ed). - 신뢰도 A. ## 🕓 Changelog | 날짜 | 변경 | |---|---| | 2026-05-08 | Phase 1 | | 2026-05-10 | Manual cleanup — enterprise architecture patterns + 2026 stack |