아키텍처란 무엇인가?

Architecture

용어정리

이 카테고리는 비전공자로서 개발자로써 공부하며, 평소 이해하지 못한 단어를 제방식대로 정리하는 카테고리입니다.
제방식대로 풀어 쓴것이므로 오류가 있을 수 있습니다.
오류가 있을시 댓글로 남겨주시면 참고하도록 하겠습니다.


아키텍처(Architecture)

개요

업무를 진행하면서 듣는 많은 단어들이 있습니다. 그중에 어떤 프로젝트를 시작하기전에 항상 들리는 단어가 있습니다. 바로 아키텍처입니다. 보통 초보개발자가 아키텍처를 구성하는 일은 지극히 드문 케이스입니다.

하지만 저와 같은 ‘초보 개발자들도 도대체 아키텍처가 무엇이길래? 왜 우리한테는 이 업무가 주어지지 않는가?’ 에 대해 생각해 볼 수 있기에 정리를 해보려고 합니다.

본문

먼저 기본적으로 용어에 대해 알아가기 전에 사전등을 살펴보면
영어단어 - 아키텍쳐
영어단어로써의 아키텍처는 ‘건축학’이라는 뜻입니다. 건축학은 프로그래밍에 많은 영향을 미친 학문입니다.
때문에 건축용어를 많이 사용하고있습니다. 심지어 우리는 일정을 계획 할 때도 MM(Man month)라는 희한한 용어를 사용합니다.

다음으로 wiki문서를 살펴보겠습니다. - 시스템아키텍처
우리같은 프로그래머는 시스템을 만드는 시스템 아키텍처라는 표현을 사용합니다.
내용을 살펴보면, 시스템 목적을 달성하기위해 시스템의 상호작용등의 시스템디자인에 대한 제약 및 설계이다
말이 좀 어렵지만, 아래와 같은 내용임을 위키문서를 통해 확인 할 수 있습니다.

  1. 시스템 구성 및 동작 원리
  2. 시스템 구성요소에 대한 설계 및 구현을 지원하는 수준을 기술
  3. 구성 요소 간의 관계 및 외부환경과의 관계 묘사
  4. 요구사양 및 시스템 수명주기 고려
  5. 시스템의 전체적인 최적화를 목표

한마디로 정리하면,

최적화를 목표로 두고 시스템 구성과 동작원리 그리고 시스템의 구성환경등을 설명 및 설계하는 청사진 또는 설계도 입니다.
기본 Computer Science 지식을 기반으로 주변환경등을 고려하여, 최상의 소프트웨어를 구성하는 방법을 연구하고
이를 바탕으로 가이드하는 역할을 합니다.

소프트웨어를 구성하는데 가장 기초적이고 핵심적인 부분의 업무이므로, 초보개발자들에게는 맡기지 않는 업무입니다.
예를 들어 제대로된 아키텍처를 구성하지 못하고, 중구난방식으로 개발을 진행한다면 빠르고 쉽게 개발을 할 수 있을지 모르겠지만
다양한 환경과 변수에 대응하지 못하는 큰 어려움이 있습니다.

쉽게 표현해 제대로된 설계를 하지 않고 주먹구구식으로 지은 건물은 태풍이나 지진과 같은 자연재해 또는 다른 외부 환경에 의해 쉽게 무너질 수 있습니다.
그렇기에 견고한 설계과정을 통해 다양한 변수등에 대비해야합니다.

소프트웨어의 개발과정도 마찬가지입니다.
정책의 변화, 기존 개발자의 공백과 같은 내부의 환경 변화 뿐만 아닌
브라우저의 다양함, 유저의 행동, 사용중인 라이브러리의 버전업 또는 지원중단등 외부환경적인 요인들도 다양하게 고려해야합니다.

또한 최적화된 개발을 위해 프레임워크는 무엇을 사용 할 것이고,
어떤 라이브러리를 사용할 것인지 등의 다양한 선택의 과정들도 필요합니다.

그렇기에 주니어가 아닌 다양한 경험과 기반지식을 갖춘 시니어급들에게 아키텍처를 설계하는 업무가 배정됩니다.

결론

지금까지 아키텍처는 무엇인가? 아키텍처의 중요성등에 대해 알아보았습니다.
현재 저와 같은 주니어 개발자들에게는 아직 기초지식을 더 쌓고 다양한 경험이 필요합니다.
아키텍처를 정의하는 업무가 매우 해보고싶은 작업일 수 도 있습니다.

하지만 위에 말씀드린대로 매우 중요한 부분이기에 어설프게 아키텍처를 구성한다면, 어떤 변화에 모래성처럼 무너질 수 있습니다.
또한 엄청난 책임감이 필요합니다. 내가 정의한 아키텍처를 통해 팀원들이 개발을 진행 할 것이고, 리더쉽 또한 필요합니다.
인고의 과정을 통해 다양한 경험과 지식을 쌓는다면, 언젠가 내가 하기 싫어도 해야하는 시기가 옵니다.
그때까지 참고 좀 더 완벽함을 노력합시다.

댓글