조각조각 - Software Architecture, Design Pattern, MVC, Flux, Redux [1]

eocode·2023년 1월 17일
0

CS 조각조각

목록 보기
1/3
post-thumbnail

지금까지 웹 어플리케이션 아키텍쳐의 정확한 정의를 모른 상태로 프로젝트를 진행해왔습니다. 민망하지만 그냥 아 이런식으로? 이런 흐름으로? 프로젝트가 진행되는구나 생각하면서 프로젝트 코드를 작성해왔습니다...

돌이켜 생각해보면 프론트단과 백엔드단을 모두 다루는 첫번째 개인 프로젝트는 리덕스, 리덕스 사가를 이용하였었고 이후 팀 프로젝트는 단순 MVC 패턴을 사용하기도 리액트 쿼리를 사용하기도 하였습니다.

앞으로 좀더 계획적이고 체계적인 프로젝트 구상 및 적용을 위해 두루뭉실하게 알고있던 개념을 확실하게 공부하고 관련 개념을 간단하게 정리해 보도록 하겠습니다.

개념이 헷갈리는 용어들

  • 소프트웨어 아키텍쳐
  • 디자인 패턴
  • MVC 패턴
  • Flux 패턴
  • Redux
  • 리액트 쿼리

소프트웨어 아키텍쳐 vs 디자인 패턴??

지금까지 소프트웨어 프로젝트를 구성하는 큰 틀 정도로 이해해 왔고 디자인 패턴도 비슷한 개념이 아닌가 생각해왔습니다. 그럼 먼저 소프트웨어 아키텍쳐가 무엇인지 간략하게 알아보겠습니다.

소프트웨어 아키텍쳐

정의

구성요소들간의 관계, 환경, 설계와 발전을 관리하는 원칙으로 이루어진 시스템의 근본적인 구조로 유연성, 확장성, 실행 가능성, 재사용성 및 보안과 같은 소프트웨어 특성을 기술 및 비즈니스 기대치를 충족하는 구조화된 솔루션이다.

소프트웨어 개발의 어려움

소프트웨어 개발자들이 겪는 두가지의 어려움이 존재합니다.
1. 프로젝트에 대한 지식을 공유하는 것
2. 추가 기능 구현 (한번 결정한 내용 되돌리기)
소프트웨어 아키텍쳐로 위 두가지 어려움을 극복하는데 도움을 줍니다.

필요성 1, 지식 공유을 도와주는 소프트웨어 아키텍쳐

개인 프로젝트가 아닌 이상 프로젝트에 대한 지식 공유해야할 상황은 반드시 발생합니다. 이때 프로젝트를 구성하는 큰 틀이 정형화된 소프트웨어 아키텍처가 아닌 개인의 방식이라면 프로젝트를 다른 개발자에게 일일히 모든 코드가 어떤식으로 동작하는지 설명하며 코드 정보를 공유해야 합니다.
하지만 프로젝트에서 정형화된 소프트웨어 아키텍쳐를 사용한다면 소프트웨어 아키텍처에 대한 지식을 가진 개발자는 프로젝트를 이해하는데 상당한 도움을 받을 수 있습니다.

필요성 2, 이미 잘 만들어진 구조로서 유연성, 재사용성, 확장성에 용이

프로젝트가 소프트웨어 아키텍처를 고려하지 않고 그때 그때 맞춰서 진행되었다면 코드가 충분히 플랫폼화 되어있지 않는 스파게티 코드가 되어있을겁니다. (프로젝트의 큰 틀을 계획하지 않고 주먹구구식으로 이루어지는 팀 프로젝트 같은 경우 이랬던 경험이 ...) 이 경우 코드가 충분히 플랫폼화 되어있지 않아 결정을 되돌리기 어려워지고 특정 기능을 추가하는데 어려움을 겪을 수 있습니다.
따라서 프로젝트를 처음 계회할때 소프트웨어 아키텍쳐를 고려하여 프로젝트를 계획해야 합니다. 정형화, 플랫폼화, 재사용성 등을 고려하여 이미 유용하게 개발되어있는 소프트웨어 아키텍쳐를 사용한다면 코드 수정이 용이해지고 특정 기능을 추가할때도 도움이 될 것 입니다.

즉, 소프트웨어 아키텍쳐를 이용해서 프로젝트를 구상하면 좀 더 경제적으로 소프트웨어를 제작할 수 있게 됩니다.

디자인 패턴

정의

소프트웨어 디자인에서 공통적으로 발생하는 문제에 대해 재사용 가능한 해결책으로 일종의 템플릿을 의미한다. 즉 프로그래머가 어플리케이션이나 시스템을 디자인할 때 공통된 문제들을 해결하는데에 쓰이는 형식화 된 가장 좋은 패턴이다.

그래서 차이점은??

소프트웨어 아키텍쳐와 디자인 패턴의 정의를 모두 살펴보면 둘다 특정 문제를 해결하려는 프로젝트의 해결법으로 제시되는 형식화된 틀이라 설명이 가능합니다.
여기까지만 살펴보면 여전히 둘의 차이점이 무엇인지 잘 모르겠습니다.

비슷한 이 두 개념의 차이점은 타겟하는 대상의 규모라 할 수 있습니다. 소프트웨어 아키텍쳐의 경우 큰 뼈대로 전체적인 소프트웨어의 문제를 해결하는 형식화된 큰 틀이며 디자인 패턴의 경우 소프트 웨어 내 좀 더 구체적인 문제를 해결하는 형식화된 틀을 뜻 합니다. 즉 디자인 패턴의 경우 코드 수준에서의 설계를 담당합니다.

즉, 비슷한 개념이지만 프로젝트를 전체적으로 아우르는 틀을 볼것인지 프로젝트 내 특정 문제를 해결하는 틀을 볼것인지로 나뉩니다.

여기까지 소프트웨어 아키텍쳐와 디자인 패턴에 대해 정리해보았습니다. MVC, Flux, Redux는 다음 게시글에서 이어서 정리해보겠습니다 :)

참고자료

profile
프론트엔드 개발자

0개의 댓글