소프트웨어 사색

소프트웨어 아키텍트란

[하마] 이승현 (wowlsh93@gmail.com) 2019. 12. 11. 10:58


소프트웨어 아키텍트는 무엇인가?
(개나 소나 다 자기 생각이 있는데 대충 끄젹꺼려 봄...) 
보통 아키텍트 - 디자인 - 개발로 구성되는데 하이퍼레저 패브릭으로 설명 해 보면 
(분야 및 조직규모등에 따라서 달라 질 순 있다)

소프트웨어 아키텍트는 "정체성" 을 확립하고 "균일성" 을 보장하는 롤을 갖는다.

즉 이 소프트웨어는 도대체 뭘 하는 것인가?
각 기업들이 서로 간의 신뢰성을 갖는데 최소의 비용으로 그것을 처리하게 하는게 목적이다.
성능 및 컨트랙트 활용성에 중점을 두고, 보안은 xxx 이상의 수준 이상으로 올리고..유저신원이 discolose 되야하고 플러그인 방식으로 컴포넌트 유연성을 갖추고..등등
이 솔루션이 커져가는데 있어서, 지켜야할 선과 확장되는데 있어서 중구난방하지 않게 사용자들이 혼동하지 않게 균일한 시스템을 보장하며... 그런 역할을 한다.

디자인  은 어떤 개별 컴포넌트가 작동함에 있어서 작동방식과 문제가 될 부분에 대해서 정리해 두는 롤을 갖는다.

즉 카프카 기반 오더러를 예르들면 그것은 어떻게 작동해야 하는가?
블록은 어떻게 만들어지나 (시간, 갯수기반)
채널은 어떻게 만들어 지는가
카프카 특성에 따라서 오더러끼리 통신하지 않고 어떻게 블록을 각자 가지고 있는가
각자 가지고 있는 방식에는 무엇이 있고 어떤 문제가 있는가..어떻게 해결하면 되는가?
하나의 오더러가 다운되면 어떻게 처리 되는가?

개발 은 컴포넌트를 실제 설계/구현한다. 위에 디자인단에서 비지니스로직적 문제해결이라면 여기서는 개발유연성, 성능 및 컴퓨팅 리소스 차원에서의 문제해결에 집중한다.

즉 어떻게 구현하면 가장 좋은가에 대해서 생각하고 설계/개발 해야 한다.
즉 아키텍트-디자인-개발의 모든 레이어에서는 각자 레이어에 맞는 창조적인 생각을 해야 한다.
개발에서는 객체모델 / 객체간의 관계 설정 / 시퀀스 설정 등을 하며, 가장 좋은 자료구조,알고리즘에 대해서도 고민하면서구현에 돌입한다. 어떤 라이브러리, 어떤 버전을 가지고 사용 할 것인가를 결정하고, 위의 디자인단에서 예측해 놓은 Problem과 그것에 따른 solution을 단계별로 구축해 간다.
개발자도 많은 생각을 해야하는 직군이며, 그냥 누가 모든것을 다 결정해 주길 바라며, 단순히 코드로 옮기는 롤이 아니다.



3줄요약

- 아키텍쳐는 크게 상위 아키텍쳐, 하위 아키텍쳐로 구분한다.
- 상위 아키텍쳐는 목적에 촛점을 맞춘다. 즉 프로그램의 목표를 분명히 유지하기 위해 고민을 한다. 
- 하위 아키텍쳐는 구현에 촛점을 맞춘다. 즉 어떻게 구현 할 건지에 대한 고민을 한다.