SW아키텍처는 어렵게만 느껴집니다.

gurugio의 이미지

그동안은 단지 동작하는 프로그램을 만들었다면
요즘은 프레임웍이라고 해야하나 레이어라고 해야하나
어떤 라이브러리의 아키텍처를 그리고 있습니다.

드라이버 개발자라고 자기 소개를 하면서 실상은 패키지로 넘겨받은
드라이버 테스트하고 하드웨어 점건하는 일이 주업무였다보니
프레임웍이라는 말이 정확히 어떤 의미인지도 모르고
소프트웨어 분야의 용어들이 생소합니다.
코드와 데이터를 분리해야한다고 들었는데
코드와 데이터가 분리되어있니 리습으로 개발하는 것도 아니고 이게 뭥미? 했다가
한참을 설명듣고서야 조금 이해했습니다.

여러 제품에 공통으로 들어가야하는 라이브러리라서
설계에 신경을 많이 써야하는데
땜질하다가 막 입사한 놈이 제대로 그림도 못 그려서 큰일입니다.
함수를 이쪽에서 만들었다가 저쪽으로 넘기고 저쪽에서는 데이터만 제공하고
여기서는 데이터를 가공만하고...

SW아키텍쳐가 정말 어렵게 느껴집니다.
추천할만한 책이나 문서가 있으면 소개 부탁드립니다.
어떻게 공부하고 연습해야할지 좀 막막합니다.

mongin의 이미지

S/W 설계에 관련하여 알고자 하신다면 디자인패턴이나 구현패턴을 찾아 보세요.
디자인패턴으로 찾아서 요즘 잘나가는 책중 와닿는 도서로 보시는걸 추천 합니다.
그외에 구글에서 리팩토링, TDD, 디자인 패턴, UML등으로 검색해 보시면 자료가 많이 나옵니다.
설계에 관련 해서는 책으로 배우자면 끝도 없을정도죠.
그냥 '이런 방법도 있구나...'정도로 알고 나머지는 다양한 방법으로 개발하며 훈련 하는 방법이 최고라고 생각 합니다.

박영만의 이미지

디자인패턴이나 구현패턴 관련해서 OOP 관련된 서적 밖에 없는 거 같아서요.

혹시 C 언어로 그러한 패턴들을 정리한 책도 있을까요?

winner의 이미지

OOP와 Imperative Programming의 두가지 paradigm을 넘나드는 능력을 갖추는 것이 좋겠네요.

mongin의 이미지

C언어로 된거는 못봤고요, 설계란게 책을 여러권 보고 일이년 투자하면서 배워도 별로 남는게 없습니다.
그래서 그냥 보기 편한책 골라서 그냥 '이런 방법이 있구나..'라고만 보시는게 어떨까 했습니다.
이게 일반적인 기술처럼 습득 하기도 힘들고(계속 매달려서 파는것...) 그렇게 습득 하려고 해도 별로 느는게 없습니다.
왜냐하면 개발 성격과 환경이 달라지기 때문이지요.
동일한 조건에서 동일한 환경이라면 같은 설계를 계속 적용해도 될텐데 현실에서는 그런 경우가 거의 없지요.
같은 기능의 드라이버라고 해도 금년과 내년은 또다시 여러 조건들이 달라 질겁니다.

설계에서는 경험치가 중요한데 이 경험치를 단기간에 늘리는 방법은 같은 라이브러리를 여러 방식으로 개발하는 방법이 있겠죠.

모든 개발자가 설계에 정통 할 필요는 없다고 봅니다.
조그마한 프로젝트에서는 훌륭하다고 생각되는 설계가 오히려 발목을 잡는 경우가 종종 있습니다.(단순히 간단한 라이브러리 개발해서 몇몇 군데에 배포를 하면 되는일인데 설계를 중요시한다고 해서 배포방법이니 버전 관리니, 코드의 재사용성, 결합력이 어쩌니 하면서 전체 프로젝트가 한두달 지체 된다면 효율이 많이 떨어지는것이겠죠.)
프로젝트가 산으로 가는것을 막기위해 설계를 중요시 한다면 모를까 그냥 스스로가 어떤 복잡함을 피해보고 효율적인 방법을 찾고자 한다면 간단한것 몇가지만 적용해 보는 방식으로 하는게 효율적일겁니다.
제 생각에는 리팩토링을 먼저 해보세요.
이것만 해도 생각보다 많이 달라질겁니다.

음....
쓰고나서 보니 꼭 설계를 배우는것에 대해 반대하는것 같이 되어 버렸는데 절대 그런것은 아닙니다.
오히려 추천 하고 싶은데 이게 단기간에 해결 되는것도 아니며 여러 경험없이 좋은 설계가 안나오니 조급히 생각 할 필요는 없다고 생각합니다.
만일 자신이 프로젝트를 이끌어야 하고 시장성이나 경제성도 고려하면서 직접 결정을 내려야 하는 위치에 계시다면 필히 설계에 관련해 공부해 두실것을 권장 합니다.
그게 아니라면 조금 조금씩 적용 시켜가면서 습득 하는게 여러모로 효율적일거라 생각 해봅니다.

추신: OOP는 설계와도 밀접하니까 C언어라고 해서 이걸 떼어놓고는 설계를 잘 하기 힘듭니다. OOP라는게 언어에서 지원하면 쉽고 편하긴 하지만 C언어가 객체지향 언어가 아니라고 해서 OOP적인 개발이 불가능한건 아닙니다. C언어도 OOP적인 프로그램방식으로 개발 가능 합니다. 심지어 어셈블리어도 되는데 십수년전에 OOP적으로 프로그래밍 하는것을 안철수씨가 마소에 기고하신적도 있습니다. 90년대 초 정도로 기억 되네요...

comafast의 이미지

볼륨 1-4 까지 나온걸 봤습니다. (1권은 번역서도 있음)
1권이 나온지 10년이 넘습니다만. 아키텍쳐를 공부할때 이보다 나은책이 별로 없습죠 :-)

NN의 이미지

설계관련 책은 참고만 하시는게 좋을듯..

아직 경험이 부족한 상태에서 책만보면 왜 설계가 이렇게 되어야 하는지..
패턴이란게 왜 이렇게 만들어진건지 몸으로 와닿지가 않습니다.
잘못하면 정형화된 수학 문제풀이 달달 외우고 수학을 마스터했다고
생각하는 어이없는 일이 발생합니다.

잘 만들어진 오픈소스를 놓고 심도 있게 code-reading을 해보세요.
책은 설계에 대한 어떤 문제의식을 가진 상태에서 보는것이 더 효과적입니다.

현실적으로 남이 이미 만들어놓은 소스코드를 다독하는게 젤 좋은 방법이라고 생각합니다.
보시다보면 훌륭한SW라 해도 대가의 충고에서 벗어난 것도 많이 보실 수 있을텐데,
현실에선 그런것도 통용된다는걸 아는게 중요한거 같습니다.

회사에서 이런저런 일을 하다가 방법론타령 하는 사람들한테 너무 많이 치여서
이젠 이 사람들한테 기본적인 회의감이 드는군요.

lazycoder의 이미지

아키텍쳐를 기능중심적으로만 본다면 유스케이스와 시퀀스다이어그램 정도만 그려내시면 될 듯 합니다.
아키텍쳐를 만들때에는 내가 도시를 건설한다는 생각으로 건물보다는 도시 전체를 보는 눈과 도시를 구성하는 다양한 구성요소들에 대한 폭넓은 지식이 필요한데 사실 고급 개발자에게도 굉장히 어려운 일입니다.
우선은 컴퍼넌트의 기능정의와 관계만 표현하셔도 도움이 되리라 보네요.
이런 설계에도 패턴이 있는데 위에 comafast님이 소개하신 POSA가 유명합니다.
그런데 이런 류의 책들은 독학하는게 쉽지가 않을겁니다. 책보다는 우선 관련 커뮤니티를 찾아보도록 하세요.
같은 관심사를 가진 분들과 스터디를 하면서 토론을 많이하고 멘토링을 구해야 할겁니다.
개발 공부할때와는 전혀 다른 접근방법이 필요한게죠. 개발 공부는 정말 쉬운겁니다..

ps. 자료를 구하기 좋은 곳은 cafe.naver.com/ksec (제가 교육받은 곳.. -0-), 그리고 데브피아에도 자료가 좀 있는데 아키텍쳐 마을이 따로 있습니다.

NN의 이미지

개인적으로 암것도 없는 상태에서 POSA를 바로 공부하는건 비추입니다.

파이프&필터.. 억셉터, 리액터니 하는 개념들은 관련 경험이 없으면
그냥 그런게 있는가보다..정도에서 이게 대체 뭔 얘긴가..에 이르기까지
그저 피상적으로 공부하게 됩니다. 특별히 지식을 체화하는 능력이
남다르지않은 이상은 먼저 이런저런 경험을 쌓고 POSA는 그것을 볼 때가
될때까지 공부를 미뤄두시기 바랍니다.

특별히 이걸 강조하는 이유는 제가 몇몇 사원들 일하는거 보면서
코딩도 제대로 못하는 놈이 POSA책을 보고 와서 이래야한다 저래야한다하고
훈수두는 경우가 왕왕 있었는데 이게 완전 안습이었기 때문입니다.

그 훈수가 옳다면야 제가 받아들이지 못할 이유가 없겠지만서도
POSA를 보긴 했는데, 적용맥락을 완전히 놓치고는..책에 이렇게 나왔으니
이렇게 해야 한다고 박박 우기는 경우를 한두번 겪어본게 아니라서...

참새가 황새걸음을 바로 걸으려고 하면 가랭이 찢어집니다.
본인에게 맞는걸 차근차근 접하면서 소화하시는게 좋을거 같습니다.

제 개인적 소신은.. 책을 볼 때 내용의 절반이상을 소화하지 못한다면
아직 그 책을 볼 때가 아니라는겁니다. 그럴땐 그 책을 던져버리고
다른 경험을 쌓던가 자신에게 맞는 다른 책을 봐야합니다.

gurugio의 이미지


많은 도움 감사드립니다.
이제 막 소프트웨어를 시작한 사람이 너무 조급했던게 아닌가 생각되기도 합니다.
계속 공부해야지요. 감사합니다.

----
섬기며 사랑하면 더 행복해집니다.
몸에 좋은 칼슘이 듬뿍담긴 OS 프로젝트 - 칼슘OS http://caoskernel.org