아키텍처란?
시스템의 구조, 행위, 뷰를 정의하는 개념적 모형
시스템의 각 컴포넌트가 무엇이며 어떻게 상호작용하는지 정보가 어떻게 교환되는지를 설명한다.
⇒ 서비스의 동작 원리를 나타낸다.
구성요소
- 구성 요소(Components)
- 예: 모듈, 클래스, 서비스, 데이터베이스, 외부 API 등
- 구성 요소 간의 관계(Interactions)
- 예: 어떤 컴포넌트가 다른 컴포넌트에 어떻게 의존하고 통신하는가
- 설계 원칙과 패턴
- 예: 계층형 아키텍처, MVC, MSA(Microservice Architecture), 이벤트 기반 구조 등
아키텍처가 중요한 이유
구조화 및 표준화
- 아키텍처는 프로젝트의 구조를 명확하게 정의하여 개발자들이 일관된 방식으로 시스템을 구축하도록 한다.
유지보수 및 확장성
- 아키텍처는 시스템의 변화에 쉽게 대응할 수 있도록 설계되어 유지보수 및 확장성을 높인다.
예시)
❌ 나쁜 구조 (유지보수/확장성 나쁨)
- 하나의 파일에서 로그인, 결제, 상품 등록, 댓글 처리까지 전부
- 로그인 기능만 수정하려고 해도 전체 코드를 건드려야 해서 유지보수가 어려움
- 새로운 기능을 넣으려면 기존 코드와 얽혀서 확장이 어려움
✅ 좋은 구조 (유지보수/확장성 좋음)
- 로그인, 결제, 상품, 댓글을 각각의 모듈/서비스로 나눔
- 로그인 모듈만 수정하면 되니까 다른 기능에 영향 없이 유지보수 가능
재사용성을 높인다.
한번 만든 코드를 여러 곳에서 다시 쓸 수 있는 능
변화에 대한 대응력
아키텍처가 잘 설계돼 있으면 변화가 와도 전체를 갈아엎지 않아도 된다
예시)
기존에는 데이터를 MySQL에 저장했는데, 향후 MongoDB로 전환해야 할 필요가 생겼어요.
✅ 아키텍처가 잘 되어 있으면:
- 데이터 접근 로직을 Repository 인터페이스로 분리해놔서
- MySQL이든 MongoDB든 구현체만 바꾸면 됨 (비즈니스 로직은 그대로!)
아키텍처 설계방법
1. 설계목표 설정(요구사항분석)
- 시스템의 개발 방향을 명확하게 하기 위해 기능/비기능 요구 사항들을 검토하여 전체 시스템의 목표를 설정한다.
2. 시스템 분해 및 모듈화
- 시스템을 핵심 기능별로 나누기
- 각 기능은 독립적인 컴포넌트 또는 서비스로 설계
3. 아키텍처 스타일/패턴 선택
- 요구사항에 따라 아키텍처 스타일을 선택한다
- 계층화 패턴 (Layered pattern)
- 기능을 계층별로 나누어 설계하는 방식
- 비즈니스 로직, 데이터접근, 컨트롤러 등
- 이 패턴은 시스템을 여러 개의 계층으로 분리하고,
- 각 계층이 서로독립적으로 동작하며 상위 계층에서 하위 계층으로의 의존성을 가지도록 설계한다
- 클라이언트-서버 패턴 (Client-server pattern)
- 클라이언트가 요청을 보내고 서버가 응답하는 구조로, 역할이 명확히 나뉘고 중앙 서버를 통해 제어가 가능해 확장성과 보안성이 우수합니다.
- 마스터-슬레이브 패턴 (Master-slave pattern)
- 하나의 마스터와 다수의 슬레이브로 구성
- 마스터가 슬레이브들에게 작업을 분산하고 슬레이브들의 작업 결과를 마스터가 취합하여 최종 결과
- 파이프-필터 패턴 (Pipe-filter pattern)
- 데이터 처리 과정을 여러 단계로 분할하여 각 단계를 파이프라인으로 연결
- 각 필터는 하나의 작업을 수행, 파이프로 데이터를 전달
- 브로커 패턴 (Broker pattern)
- 클라이언트와 서버 간의 통신을 브로커가 중계하는 구조
- 중간계층( 브로커 ) 추가함으로써 확장성과 유연성을 높임
- 분산 시스템에 사
- 피어 투 피어 패턴 (Peer-to-peer pattern)
- 모든 노드가 동등한 관계로 데이터와 서비스를 공유하는 분산시스템 구축
- 탈중앙화(중앙서버 없이 동작)
- 확장성, 탄력성 우수, 관리가 어려움
- 예시로 p2p, 블록체인
- 이벤트-버스 패턴 (Event-bus pattern)
- 이벤트 중심으로 컴포넌트가 통신하는 구조
- 이벤트를 비동기화로 처리
- 이벤트 발행자(Producer)와 구독자(Subscriber)를 느슨하게 연결
- MVC 패턴 (Model-view-controller pattern)
- 애플리케이션을 모델(Model), 뷰(View), 컨트롤러(Controller)로 나누는 구조
- ui와 로직을 분리
4. 데이터베이스 설계
- 각 모듈이 어떤 데이터를 사용하는지 정의
- RDB(MySQL), NoSQL(MongoDB), Redis 등을 선택하고 ERD 설계
5. 검토
- 아키텍처가 설계 목표에 부합하는지 요구사항이 잘 반영되었는지 검토
6. 문서화 및 다이어그램 작성
- 시스템 구성도, 흐름도, DB 다이어그램 등을 문서화
- 다른 개발자나 운영자가 이해하기 쉽게 정리
반응형
'CS > 개발상식' 카테고리의 다른 글
| 애자일(Agile) 이란? (4) | 2025.08.07 |
|---|---|
| CSR vs SSR (3) | 2025.07.08 |
| [개발상식] OOP란? (3) | 2025.06.19 |
| [개발상식]클린코드란? (0) | 2025.06.15 |
| 리팩토링 (0) | 2025.05.05 |