CS/개발상식

아키텍처

ari0930 2025. 5. 13. 00:15

아키텍처란?

시스템의 구조, 행위, 뷰를 정의하는 개념적 모형

시스템의 각 컴포넌트가 무엇이며 어떻게 상호작용하는지 정보가 어떻게 교환되는지를 설명한다.

⇒ 서비스의 동작 원리를 나타낸다.

구성요소

  1. 구성 요소(Components)
    • 예: 모듈, 클래스, 서비스, 데이터베이스, 외부 API 등
  2. 구성 요소 간의 관계(Interactions)
    • 예: 어떤 컴포넌트가 다른 컴포넌트에 어떻게 의존하고 통신하는가
  3. 설계 원칙과 패턴
    • 예: 계층형 아키텍처, MVC, MSA(Microservice Architecture), 이벤트 기반 구조 등

아키텍처가 중요한 이유

구조화 및 표준화

  • 아키텍처는 프로젝트의 구조를 명확하게 정의하여 개발자들이 일관된 방식으로 시스템을 구축하도록 한다.

유지보수 및 확장성

  • 아키텍처는 시스템의 변화에 쉽게 대응할 수 있도록 설계되어 유지보수 및 확장성을 높인다.

예시)

❌ 나쁜 구조 (유지보수/확장성 나쁨)

- 하나의 파일에서 로그인, 결제, 상품 등록, 댓글 처리까지 전부
  • 로그인 기능만 수정하려고 해도 전체 코드를 건드려야 해서 유지보수가 어려움
  • 새로운 기능을 넣으려면 기존 코드와 얽혀서 확장이 어려움

✅ 좋은 구조 (유지보수/확장성 좋음)

- 로그인, 결제, 상품, 댓글을 각각의 모듈/서비스로 나눔
  • 로그인 모듈만 수정하면 되니까 다른 기능에 영향 없이 유지보수 가능

재사용성을 높인다.

한번 만든 코드를 여러 곳에서 다시 쓸 수 있는 능

변화에 대한 대응력

아키텍처가 잘 설계돼 있으면 변화가 와도 전체를 갈아엎지 않아도 된다

예시)

기존에는 데이터를 MySQL에 저장했는데, 향후 MongoDB로 전환해야 할 필요가 생겼어요.

✅ 아키텍처가 잘 되어 있으면:

  • 데이터 접근 로직을 Repository 인터페이스로 분리해놔서
  • MySQL이든 MongoDB든 구현체만 바꾸면 됨 (비즈니스 로직은 그대로!)

아키텍처 설계방법

1. 설계목표 설정(요구사항분석)

  • 시스템의 개발 방향을 명확하게 하기 위해 기능/비기능 요구 사항들을 검토하여 전체 시스템의 목표를 설정한다.

2. 시스템 분해 및 모듈화

  • 시스템을 핵심 기능별로 나누기
  • 각 기능은 독립적인 컴포넌트 또는 서비스로 설계

3. 아키텍처 스타일/패턴 선택

  • 요구사항에 따라 아키텍처 스타일을 선택한다
  1. 계층화 패턴 (Layered pattern)
    1. 기능을 계층별로 나누어 설계하는 방식
    2. 비즈니스 로직, 데이터접근, 컨트롤러 등
    3. 이 패턴은 시스템을 여러 개의 계층으로 분리하고,
    4. 각 계층이 서로독립적으로 동작하며 상위 계층에서 하위 계층으로의 의존성을 가지도록 설계한다
  2. 클라이언트-서버 패턴 (Client-server pattern)
    1. 클라이언트가 요청을 보내고 서버가 응답하는 구조로, 역할이 명확히 나뉘고 중앙 서버를 통해 제어가 가능해 확장성과 보안성이 우수합니다.
  3. 마스터-슬레이브 패턴 (Master-slave pattern)
    1. 하나의 마스터와 다수의 슬레이브로 구성
    2. 마스터가 슬레이브들에게 작업을 분산하고 슬레이브들의 작업 결과를 마스터가 취합하여 최종 결과
  4. 파이프-필터 패턴 (Pipe-filter pattern)
    1. 데이터 처리 과정을 여러 단계로 분할하여 각 단계를 파이프라인으로 연결
    2. 각 필터는 하나의 작업을 수행, 파이프로 데이터를 전달
  5. 브로커 패턴 (Broker pattern)
    1. 클라이언트와 서버 간의 통신을 브로커가 중계하는 구조
    2. 중간계층( 브로커 ) 추가함으로써 확장성과 유연성을 높임
    3. 분산 시스템에 사
  6. 피어 투 피어 패턴 (Peer-to-peer pattern)
    1. 모든 노드가 동등한 관계로 데이터와 서비스를 공유하는 분산시스템 구축
    2. 탈중앙화(중앙서버 없이 동작)
    3. 확장성, 탄력성 우수, 관리가 어려움
    4. 예시로 p2p, 블록체인
  7. 이벤트-버스 패턴 (Event-bus pattern)
    1. 이벤트 중심으로 컴포넌트가 통신하는 구조
    2. 이벤트를 비동기화로 처리
    3. 이벤트 발행자(Producer)와 구독자(Subscriber)를 느슨하게 연결
  8. MVC 패턴 (Model-view-controller pattern)
    1. 애플리케이션을 모델(Model), 뷰(View), 컨트롤러(Controller)로 나누는 구조
    2. 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