소프트웨어 아키텍처 (Architecture)의 정의

소프트웨어 아키텍처의 정의

아키텍처란 소프트웨어를 구성하고 있는 부품 간의 연결 관계를 의미합니다. 소프트웨어를 어떻게 구조화시켜야 하는지, 상위 메뉴와 하위 메뉴를 어떻게 배치해야 하는지 등 소프트웨어를 구성하고 있는 기능 하나하나를 어떻게 연관시킬 것인지에 대한 모든 구조적인 문제가 아키텍처에 해당합니다.건물을 건축할 때의 아키텍처를 예로 들어봅시다.건물의 뼈대가 되는 골격으로 나무, 철굴, 시멘트, 벽돌 등의 특성과 관계를 건축 아키텍처라고 할 수 있습니다. 뼈대로 덧붙이는 전기 공사, 난방 공사, 건물 소재 사용법 등의 부분도 아키텍처에 포함됩니다. 침대를 놓는 위치, 옷장을 두는 위치에도 이유와 구조가 존재하듯이 ‘건물’을 구성하는 컴포넌트인 모듈(가구)이나 컴포넌트(방)를 다루는 모든 시스템 구조와 지침을 아키텍처라고 할 수 있습니다.

소프트웨어 아키텍처가 중요한 이유

소프트웨어의 “품질”을 결정 하기 때문입니다.품질은 내가 비용을 지불할 수 것이라는 생각에서 나온 개념입니다. 그러나 소프트웨어에서 품질과는 전혀 다른 개념입니다. 중요한 점은 평가하는 사람이 외부의 사람들이라는 점입니다. 그들은 품질을 볼 수 없습니다. 그러므로, 소프트웨어가 좋은 아키텍처를 갖고 있는지, 좋은 건축 디자인을 갖고 있다고 하더라도 그것은 못 보.소프트웨어의 품질이 외부 품질(External Quality)과 내부 품질(Internal Quality)에 엇갈리는 경우, 소프트웨어 아키텍처는 내부의 품질에 관련하고 있습니다.같은 기능을 가진 2개의 소프트웨어가 있는 경우 내부 품질은 비용에 영향을 미칩니다. 같은 기능이라는 전제에서 사용자는 통상 내부 품질이 낮아도 비용이 적은 편을 택할 거예요.그럼 보지 못한다”내부적 품질”의 중요성에 대해서 우리는 어떻게 유저를 설득할 수 있을까요?소프트웨어 내부 품질은 장기적인 관점에서 중요한 것입니다. 이하의 그래프에서 그 이유를 알 수 있습니다.

Design Stamina Hypothesis (디자인 스태미나 가설 그래프)

상기 그래프는 시간 경과에 따른 소프트웨어 기능 고도화에 관한 그래프입니다. 프로젝트를 진행하면서 디자인이나 아키텍처에 신경쓰지 않는다면 위와 같은 그래프 형상이 형성됩니다.위의 경우 시간이 지남에 따라 새로운 기능을 추가하기가 어려워집니다. 왜냐하면 기능이 추가될수록 이미 존재하는 소스 코드를 바꾸는 데 시간이 오래 걸리기 때문입니다.

반대로 좋은 아키텍처 디자인은 시간이 갈수록 소프트웨어 기능이 고도화되면서 더 나은 효율을 발휘합니다.우리는 좋은 아키텍처를 디자인하기 위해서 계속적으로 주의를 기울일 필요가 있습니다.특히 소스 코드를 리 팩터링하며 더 좋은 방향으로 나아갈 수 있습니다. 이런 노력으로 기능을 추가하는 데 고생하지 않고 오히려 빨리 될 가능성이 있습니다.소프트웨어가 너무 잘 기능화되어 있으며 우리가 할 일은 소프트웨어 기능을 변경 여부를 결정하고 변경하는 것 뿐입니다.어디를 어떻게 변경하면 되는가 보다 빨리 추적하고 찾아낼 수 있는, 그래서 작업 속도에 가속도가 붙습니다.왜냐하면 이미 존재하는 소스 코드가 플랫폼화되기 때문에 이 플랫폼 위에서 보다 빠르게 개발할 수 있게 되니까요.상기의 화상에서 Good Design과 No Design의 교차점을 보고도 내부적인 품질 높은 소프트웨어는 단기간에서 빠르게 기능이 추가되는 것을 볼 수 있습니다.( 급한 그래프)몇달 아니라 몇주 만에 새로운 기능이 추가되어 업데이트되는 것입니다.내부 품질은 떨어지지만 비용이 싼 소프트웨어는 “구입 시점, 짧은 기간”사이에는 이득이 될 가능성이 있습니다. 하지만 더 나은 내부 품질의 소프트웨어를 선택하면 새로운 기능을 보다 신속하게 추가할 수 있게 됩니다. 퀄리티의 낮은 제품은 바로 개선할 수 없게 됩니다. 이러한 케이스는 우리 주변에서 흔히 일어나는 현상입니다. 우리가 소프트웨어를 지속적으로 업데이트하기 위해서 CI, CD를 도입하는 것과 관련이 있습니다. 지속적으로 기능을 추가하는 것은 그만큼 중요하니까요.결과적으로 좋은 아키텍처, 좋은 퀄리티의 소스 코드를 가질려고 노력하지 않으면 우리는 최종적으로 낮은 품질의 소프트웨어를 개발하느라 시간을 들일 필요가 있습니다. 그리고 더 낮은 품질의 결과를 유저에게 제공하기 위해서 경합 타사와 싸우는 대단히 비효율적인 프로젝트를 시간 진행시킵니다. 소프트웨어 아키텍처의 비즈니스 품질 속성

반대로 좋은 아키텍처 디자인은 시간이 지남에 따라 소프트웨어 기능이 고도화됨에 따라 더 나은 효율을 발휘합니다.우리는 좋은 아키텍처를 디자인하기 위해 지속적으로 주의를 기울여야 합니다.특히 소스 코드를 리팩터링하면서 더 나은 방향으로 나아갈 수 있습니다. 이러한 노력으로 기능을 추가하는 데 어려움 없이 오히려 빨라질 수 있습니다.소프트웨어가 너무 잘 구성되어 있어서 우리가 해야 할 일은 소프트웨어 기능을 변경할지 말지 결정하고 변경하는 것뿐입니다.어디를 어떻게 변경해야 하는지 더 빨리 추적해서 찾을 수 있고, 그래서 작업 속도에 가속도가 붙습니다.왜냐하면 이미 존재하는 소스 코드가 플랫폼화되기 때문에 이 플랫폼 위에서 더 빠르게 개발할 수 있게 되기 때문입니다.위 이미지에서 Good Design과 No Design의 교차점을 보더라도 내부적인 품질이 높은 소프트웨어는 단기간에도 빠르게 기능이 추가되고 있음을 확인할 수 있습니다. (급한 그래프) 몇 달이 아니라 몇 주 안에 새로운 기능이 추가되어 업데이트되는 것입니다.내부 품질은 저하되지만, 비용이 싼 소프트웨어는 「구입 시점~짧은 기간」 동안에는 이득이 될 수 있습니다. 그러나 더 나은 내부 퀄리티의 소프트웨어를 선택하면 새로운 기능을 보다 신속하게 추가할 수 있게 됩니다. 퀄리티가 낮은 제품은 금방 개선할 수 없게 됩니다. 이러한 경우는 우리 주변에서 자주 일어나는 현상입니다. 우리가 소프트웨어를 지속적으로 업데이트하기 위해 CI, CD를 도입하는 것과 관련이 있습니다. 지속적으로 기능을 추가하는 것은 그만큼 중요하기 때문입니다.결과적으로 좋은 아키텍처, 좋은 퀄리티의 소스 코드를 갖기 위해 노력하지 않으면 우리는 결국 더 낮은 품질의 소프트웨어를 개발하는 데 시간을 할애해야 합니다. 그리고 더 낮은 품질의 결과를 사용자에게 제공하기 위해 경쟁사와 싸우는 매우 비효율적인 프로젝트를 매 시간 진행합니다. 소프트웨어 아키텍처의 비즈니스 품질 속성정보처리기사 필기 실기 어떻게 공부하면 좋을까? #부산 #서울정보처리기사 필기 실기 어떻게 공부하면 돼? #부산 #서울IT자격증 시험은 원래 혼자서 배우는건…blog.naver.com정보처리기사 필기 실기 어떻게 공부하면 좋을까? #부산 #서울정보처리기사 필기 실기 어떻게 공부하면 돼? #부산 #서울IT자격증 시험은 원래 혼자서 배우는건…blog.naver.com정보처리기사 필기 실기 어떻게 공부하면 좋을까? #부산 #서울정보처리기사 필기 실기 어떻게 공부하면 돼? #부산 #서울IT자격증 시험은 원래 혼자서 배우는건…blog.naver.com

error: Content is protected !!