아키텍처란?

고리·2022년 8월 23일
1

CS

목록 보기
4/6

아키텍처란?

시스템의 구조, 동작 등을 정의하는 개념적인 모형으로 시스템의 목적을 달성하기 위해 시스템의 각 컴포넌트가 무엇이며 어떻게 상호작용 하는지, 정보가 어떻게 교환되는 지를 설명한다.

다음은 마틴 파울러씨의 아키텍처에 대하여를 듣고 정리하고 생각한 것이다.


아키텍트, 아키텍처를 말하면 팀에서 설계를 담당하는 상당한 경력의 개발자가 떠오른다. 코딩을 넘어선 어떤 것이라는 생각이 드는데 바로 이 부분이 항상 어딘가 잘못되었다고 생각한 부분이다.

그렇다면 아키텍처는 무엇인가? 소프트웨어 분야에서 이 단어가 무엇을 의미하는가?

공식적인 정의는 다음과 같다.

the fundametal organization of a system, embodied in its components, their relationships to each other and the environment, and the principles governing its design and evolution.

구성 요소들 간의 관계, 환경, 설계와 발전을 관리하는 원칙으로 이루어진 시스템의 근본적인 구조.

하지만 별로 마음에 들지 않는다. 이 정의는 아키텍처를 너무 포괄적인 컴포넌트의 개념(거시적 관점)으로 정의했다. 먼저 두가지 중요한 사실을 살펴보고 아키텍처의 정의에 대해 다시 생각해보자

  1. 소프트웨어 프로젝트가 잘 진행되고 점점 발전될 때는 프로젝트를 주도하고 있는 팀원들 간에 프로젝트에 대한 이해도가 잘 공유될때 이다.

  2. 아키텍처 설계는 반드시 프로젝트가 시작되기 전에 우선적으로 진행되어야 한다. 왜? 그때로 돌아가고 싶으니까..
    한번 결정을 내리면 변경하기가 매우 어렵다. 이미 결정한 언어의 한계 때문에 전체 코드를 다른 언어로 바꿔야하는 경우를 생각해보자 벌써 어지러워진다.

팀원들간에 이해도를 공유하는 것과 내린 결정은 바꾸기 어렵다는 두가지를 같이 생각해보자.

이제야 비로소 아키텍처에 대한 정의를 내릴 수 있다.

뭔가 중요한 것 "The important stuff whatever that is"

네?

팀장으로서 소프트웨어 프로젝트를 이끌어 나갈때 무엇을 핵심가치로 둘 것인가를 정할거다. 코드를 짤 때도 동일하다. 코드를 짜면서도 무엇이 가장 중요한지 핵심을 생각하면서 소스코드에 녹인다. 아키텍처에서는 이런 핵심 가치를 위한 결정들이 중요한 것이기 때문에 소스코드와 프로젝트에 대해 잘 이해하고 있는 팀원들이 핵심 가치를 기준으로 내린 결정들이다.

따라서 아키텍처는 오직 이렇게 정의할 수 있다.

뭔가 중요한 것

팀원들간에 이해도를 공유하는 것과 내린 결정은 바꾸기 어렵다는 두가지를 같이 생각해 뭔가 중요한 것이라는 결론을 내린 부분을 이해하지 못했는데 전체적인 설명을 듣고 내가 이해한 것은 다음과 같다.

아키텍처란 프로젝트와 코드에 대해서 잘 이해하고 있는 나와 팀원들이 핵심 가치를 기준으로 내린 결정들의 집합


아키텍처는 왜 중요한 걸까?

다음 릴리즈에 더 많은 기능을 넣으려면 내부 품질에는 노력을 덜 들어야해

낮은 품질을 가진 소프트웨어에 기능을 추가하면서 여러 개발자들은 고통을 겪으면서도 다음과 같이 말한다.

  • 우리는 우리의 전문적인 기준을 충족해야해
  • 우리는 전문가로서 일을 잘 해야해
  • 우리는 장인정신을 갖고 일해야해

이는 매우 도덕적인 반응이다. 하지만 이러한 반응을 유지한다면 결국 주장을 굽히게 될 것이다. 왜냐하면 장인 정신과 경제의 싸움에서 이기는 것은 언제나 경제이기 때문이다.

따라서 왜 아키텍처가 중요한지 말하고 싶다면 경제의 개념을 도입해야한다.

하지만 이러한 논쟁은 처음부터 잘못되었다. 그 이유는 평소 우리가 생각하는 품질과 소프트웨어의 품질은 다른 개념이기 때문이다.

높은 품질의 옷을 사기위해 높은 비용을 들여야 한다. 그리고 높은 품질의 소프트웨어를 구매하기 위해 높은 비용을 들여야 한다.
과연 그럴까? 이것은 장기적인 관점에서 틀린 말이다. 다음의 그래프를 보자

  1. 아키텍처를 신경쓰지 않는다면 시간이 지날수록 새로운 기능을 추가하기가 점점 어려워진다. 왜냐하면 기능을 추가할수록 기존의 코드를 바꾸는데 시간이 오래 걸리기 때문이다. IT에서 시간은 곧 돈이다.

  2. 좋은 아키텍처를 설계하고 클린 코드를 유지한다면 기능을 추가하는 것이 오히려 빨라질 수 있다. 왜냐하면 소프트웨어가 매우 잘 컴포넌트화 되어 있고 그저 해야할 일은 소프트웨어 기능을 어떻게 변경할지 정하고 변경하는 것이기 때문이다.

우리는 2번을 원한다.
바로 이것이 소프트웨어 아키텍처가 중요한 이유다.

시장의 요구가 점점 빠르게 변하고 있는 지금, 계속해서 기능을 추가하는 것은 점점 더 중요해지고 있기 때문이다.

따라서 경제적 관점에서 소프트웨어 아키텍처는 중요해지고 있다.


ref
https://medium.com/@AAA_Publication/what-is-architecture-1b52f5339c2a

profile
Back-End Developer

0개의 댓글