아키텍처의 구성 요소

Kingyj·2025년 1월 17일

아키텍처 (Architecture)

아기텍쳐는 건물을 설계할 때 뼈대와 구조를 잡는 것처럼, 소프트웨어 개발에서도 시스템의 전체적인 구조와 설계를 말하는 것이다.

  • 소프트웨어를 어떤 식으로 만들고 구성할지 큰 그림을 그리는 것
  • 코드만 잘 짜는 게 아니라, 어떻게 잘 조직화하고 효율적이고 안정적으로 동작할 수 있을지 설계하는 것

그래서, 아키텍처가 왜 중요한데?

복잡한 시스템은 그냥 코딩만 해서는 끝낼 수 없다. 복잡한 시스템을 다루는 일이 없겠다고 생각할 수도 있지만, 잘 계획된 아키텍쳐는 무조건적으로 좋다. 서점을 가도 깔끔하게 정리 된 서점과 도대체 어디에 뭐가 있는지 알 수 없는 서점을 생각해보자.

소프트웨어도 구조적으로 설계해야 효율적이고, 추 후에 고치거나 확장하기도 편하다.

아키텍처가 없다면?

코드가 진행될수록 엉망진창이 될 것이고 유지보수도 어렵다. 심지어 새로운 기능을 추가할 때 고된 노동과 시간이 필요하게 된다.


아키텍처의 주요 역할

  • 조직화 : 코드와 기능을 어떤 기준으로 나눌지 정함.
    예 : 회원 관리, 주문 처리, 결제 등 모듈화

  • 통신 방식 결정 : 서로 다른 부분(컴포넌트)이 어떻게 대화할지 정함.
    예 : REST API, 메시지 큐, 이벤트 기반 처리

  • 성능 최적화 : 빠르고 효율적으로 작동할 수 있게 설계.
    에 : 데이터베이스 연결, 캐싱 전략

  • 확장성 : 추 후에 기능이 추가되거나 사용자 수가 늘어나도 쉽게 확장할 수 있게 함.

  • 안정성 : 장애가 발생하더라도 최소한의 영향을 받게 설계.


아키텍처 설계의 기본 원칙

  1. 단일 책임 원칙
  • 각 구성 요소는 하나의 역할만 맡아야 함.
    예 : 회원 정보 저장은 UserRepository, 비즈니스 로직은 UserService.
  1. 확장 가능하고 변경 용이하도록 설계
  • 나중에 기능 추가가 쉽게, 기존 코드 변경은 최소화되도록 설계.
  1. 모듈화
  • 서로 관련된 기능끼리 묶어서, 독립적으로 관리 가능하게 설계.
  1. 종속성 관리
  • 한 부분의 변화가 다른 부분에 큰 영향을 미치지 않게 설계.

아키텍처 설계시, 하면 좋은 생각

  • 이 프로젝트는 몇 명의 사용자를 대상으로 하는지?
  • 기능이 추 후에 추가될 가능성
  • 성능과 안정성중 어디에 더 비중을 줘야 할지?
  • 서비스 간에 데이터는 어떻게 주고 받을까?

0개의 댓글