소프트웨어 아키텍쳐란 무엇일까

zoe·2024년 6월 12일
0

개발용어

목록 보기
2/12
post-thumbnail

프롤로그

컴퓨터 비전공자로서, 전문성을 늘리기 위해 소프트웨어를 공부 중 MVC, MVVM 패턴을 공부하며 소프트웨어 아키텍쳐라는 말을 봤습니다. 소프트웨어 아키텍쳐란 무엇이고, 좋은 소프트웨어 아키텍쳐란 무엇인지에 대해 개인적인 고찰을 기록해봤습니다.

공부하며 참고한 자료는 하단에 출처를 남기겠습니다. 문제시 댓글 남겨주세요!

소프트웨어 아키텍쳐란 무엇일까

마틴 파울러의 youtube 를 보고 정리 후 그에 관한 내 생각을 정리해봤다.

일단 소프트웨어 아키텍쳐란 무엇일까를 정의한 뒤, 좋은 소프트웨어 아키텍쳐는 무엇일지 짚고 넘어가보자.

거시적 관점에서 소프트웨어 아키텍쳐란?

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

Ralph jonson 은 이 정의에 관해 너무 포괄적인 컴포넌트 개념으로 정의를 내렸다고 얘기했다. 현실적인 관점으로 어떤 것을 선택하고, 배제하는 것이 아키텍처에서 정말로 중요한 개념일까에 대해 Ralph jonson 과 이메일을 나눴고 그에 대한 내용에 관해 얘기하고 있다.

소프트웨어 프로젝트를 잘 진행하기 위해서 중요한 점은
프로젝트 내부 소스코드에 대해 잘 알고 있고 참여하는 개발자들의 상식이 아키텍처에 많은 영향을 끼칠 것이라고 얘기한다.
시니어 개발자들의 만든 큰 구조 안에서 어떤 기능에 대한 구현을 주니어 개발자들이 할 것이다.그러니 시스템의 구조를 만드는 그들의 상식이 매우 중요하다고 할 수 있다.

프로젝트는 시니어 개발자들이 자신이 지닌 지식을 다양한 방식으로 공유하고, 그것을 팀원들이 잘 이해하고 있을 때, 진행이 잘 된다고 할 수 있다는 것이다.

그럼 아키텍쳐 디자인은 우선적으로 진행되어야 한다는 것이다. 이 말인 즉슨, 아키텍쳐는 프로젝트가 시작하기 전에 잘 정의되어야 한다는 점이다.

미시적 관점에서 소프트웨어 아키텍쳐란?

  1. 노련한 개발자가 나눠주는 시스템 디자인에 대한 이해
  2. 변경하기 힘든 것들

이걸 합친 것이 소프트웨어 아키텍쳐의 정의라고 말하고 있는데,
바로 중요한 것들 이다.

살재 프로젝트에서 중점으로 가지고 갈 핵심가치(ex- 유지보수, 성능)가 무엇인지 정하고, 그 핵심가치 위한 구조를 결정(노련한 개발자가 나눠주는 시스템 디자인), 어떤 언어를 쓸 건지(변경하기 어려운 것) 결정.

결국 소프트웨어 아키텍쳐란 핵심가치를 위한 결정들의 모음이
뭔가 중요한 것이라고 간추려 말하는 것이다.

좋은 소프트웨어 아키텍쳐란?

좋은 소프트웨어 아키텍쳐 말은 (품질이) 좋은 이라는 말이 생략 되어있다고 생각한다.

소프트웨어를 만드는 개발자 입장에서 장인정신으로 클린코드, 구조화 , 모듈화가 잘된 뭐 이런 것이 좋은 품질이 아닐까 라는 생각이 된다.(내부적 품질)

만약 장인정신으로 만든 소프트웨어 아키텍쳐가 무조건 좋은 소프트웨어이다? 라고 말할 순 없다.
우리가 소프트웨어를 만드는 이유는 사실 시장에서 팔기 위함이고, 여기서 경제적인 측면을 배제할 수가 없다.

소프트웨어를 구매하는 소비자 입장에선, 내부의 소스가 좋은지 알 순 없고, 가격으로 판단할 수 밖에 없기 때문에,

시장에서 저렴한 가격에 낮은 품질의 소프트웨어가 선택 받는다면 이게 좋은 소프트웨어 아키텍쳐라고 볼 수도 있지 않을까?

디자인이나 아키텍쳐에 대해 신경을 쓰지 않고 저렴한 가격을 위해 빠른 결정을 내리고 작업을 진행한다면?

노련한 개발자가 만든 구조와 프로그래밍 언어와 같이 변경하기 힘들 것들에 대한 결정이 심도깊은 고려를 거치지 않고 나올 가능성이 많다.
그럼 추후 소프트웨어에 대한 기능 추가 작업 시 만들었던 구조를 수정하고 기능을 추가하는 이런 상황이 벌어질 수 있다.

반면 디자인과 아키텍쳐를 핵심가치에 적합한지에 대한 고려를 충분히 하고 그 결정을 했다면 (예를 들면 컴포넌트의 모듈화가 잘 되어있다면) 할 일은 신규 기능에만 초점을 맞춰 작업하기 때문에 나중에는 가속도가 붙어 시간소요가 훨씬 적어질 것이다.

그렇다면 단기적으로 봤을 때는 디자인과 아키텍쳐에 대한 고려 없이 프로젝트를 진행하는 것이 결과물을 빨리 받아볼 순 있지만, 장기적인 관점에서 신규 기능을 추가하는 작업을 수행할 경우, 오히려 시간이 더 걸릴 수 있다는 것이다.

그래서 좋은 소프트웨어 아키텍쳐란?

핵심가치를 기준으로 프로그래밍 언어(변경하기 힘든 것) 결정하고
숙련된 개발자의 시스템 디자인 결정이 바탕으로 한 내부 품질과
이것을 토대로 소스의 유지보수가 용이하도록하여 경제적인 측면도 고려한 것 이라고 생각한다.

마치며

소프트웨어 아키텍쳐란 무엇인지를 공부하며, 전 회사에서 프로젝트를 진행하며 겪었던 일이 생각났다. 미리 구조화 작업을 진행하지 않고, 무작정 프로젝트에 진행했을 경우, 유지보수의 난항을 겪었던 것이 생각이 났다. 앞으로 프로젝트를 진행하게 되면, 지속적으로 잘 관리되는 코드를 짜고 싶다.

참고 자료 :

profile
코당탕탕 성장기

0개의 댓글