티스토리 뷰

Architecture

아키텍처(Architecture)란?

Clover(린생) 2020. 3. 23. 16:21

안녕하세요 린생입니다.

개발을 이제 막 시작한 입문 개발자인 제가 갑자기 Architecture(아키텍처)라는 것이 궁금해졌습니다.

다들 "Architecture(아키텍처)가 뭐야?" 라고 하면 잘 설명을 할 수 있나요????

누군가가 저에게 물어보면 저는 저런 표정이 되곤 합니다.

아키텍처가 무엇인지 감은 오면서 딱 "이것이 Architecture(아키텍처)입니다." 라고 설명이 잘 안되었습니다.

그래서 Architecture(아키텍처)란 무엇인지 대해서 한 번 글을 적어 볼까 합니다. :)


아키텍처란?

위키 백과에서 찾아보면 이렇게 정의를 하고 있습니다.(https://ko.wikipedia.org/wiki/시스템_아키텍처)

  • 시스템 구성 및 동작 원리를 나타내고 있다.
  • 구성 요소 간의 관계 및 시스템 외부 환경과의 관계가 묘사된다.

위의 글을 보았을 때 정확한 표현이라고 생각이 들었습니다.

"하나의 서비스가 어떻게 구성이 되며 어떻게 동작이 된다" 라고 표현이 될 거 같습니다.

즉 아키텍처란 서비스의 동작 원리를 나타내는 것입니다.


아키텍처 설계?

구글에 아키텍처 설계라고 검색을 해보면 많은 글이 나옵니다.

글 하나하나 보면 다들 좋은 내용이긴 하지만 개발 입문 자이며 모바일 개발자인 제가 이해하기는 매우 어려웠습니다.

제가 이해가 되지 않았던 이유는 다음과 같습니다.

  1. 각 글마다 설계를 하는 방식과 용어가 다름
  2. 모바일 아키텍처 설계를 하고 싶은데 서비스의 대한 아키텍처 설계 방식을 설명
  3. 내가 무엇부터 만들어야 하는지 모르겠음

위의 이유는 다음과 같은 이유로 발생한 것 같습니다.

  1. 서비스 전체적인 아키텍처 설계를 일반적으로 이야기함
  2. 내가 찾는 것은 iOS의 아키텍처 설계를 알고 싶음

대부분의 글은 1번의 내용을 다루고 있고 우리가 찾고자 하는 것은 2번의 내용을 찾고 있어서 제가 이해하기가 어려웠다고 볼 수 있습니다.

그래서 우리는 각자 iOS에 맞는 아키텍처를 어떻게 해야 할까요?

Apple에서는 아키텍처로 MVC 패턴을 권장하고 있습니다.


MVC패턴이란

MVC패턴을 하는 이유를 한 가지로 설명을 하자면 역할의 분리라고 말할 수 있습니다.

역할의 분리라는 것은 각 객체 별로 하는 역할을 나눈 것을 의미한다고 볼 수 있습니다.

MVC 패턴은 이러한 역할을 3가지로 나누어서 설계를 하는 것을 말합니다.

 

  • M(Model): 앱에서 무엇을 할지를 정의
  • V(View): 앱에서 화면을 보여주기 위해서 정의
  • C(Controller): 앱에서 화면을 어떻게 보여주기 위해서 정의

위 역할로 나누는 것뿐만 아니라 각자 역할 별로 통신 흐름 또한 알 수 있습니다.

위의 MVC 패턴은 다른 곳에서 말하는 MVC 패턴과는 다른 형태를 나타내고 있습니다. 일반적으로 말하는 MVC 패턴의 설계는 아래의 그림처럼 되어 있습니다.

 

역할의 차이점은 없지만 통신의 흐름에서는 차이점을 나타냅니다.

이것은 iOS에서 Controller와 View가 서로 독립적으로 존재할 수 없어 발생하는 차이점입니다.

 

 

위의 그림에서 Controller는 UIViewController를 이며 View는 UIView입니다.

UIViewController는 내부적으로 UIView를 무조건 가지고 있어 Controller와 View 분리가 되지 않습니다.

그래서 처음에 보았던 형태의 통신 흐름을 가지게 되었고 그와 맞추어 설계를 하여야 합니다.

결론

아키텍처라는 것은 일반적으로는 서비스의 설계를 의미하지만 개발자들 사이에서는 각 플랫폼에 맞는 설계를 말합니다. 따라서 서비스에 맞는 설계 속에서 각 플랫폼에 맞는 설계(아키텍처)를 구현해야 하며 iOS에서는 기본 적으로 Apple에서 권장하는 MVC 패턴을 일반적으로 따르게 설계가 되어있습니다.

그래서 우리는 아키텍처를 공부하기 위해서는 MVC 패턴을 기본적으로 알고 있어야 합니다.

 

참고: https://developer.apple.com/library/archive/documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html

댓글