구조적 설계의 숨겨진 가치: 단순한 도형이 만든 소프트웨어의 역사
책을 좋아하시는 분이라면 공감하실 거예요. 오래된 책을 펼치다 보면, 정말 예상치 못한 보석 같은 내용들이 튀어나올 때가 있잖아요. 얼마 전에 아마존에서 구조 설계 관련 책을 몇 권 샀는데, 그중 하나, 초록색 표지가 눈에 확 띄더라고요. 그냥 책장에 꽂아놔도 존재감이 엄청나요. 근데 단순히 겉모습만 멋있는 게 아니고요, 그 표지를 자세히 보면 원과 화살표가 막 그려져 있는데요, 이게 시스템 안에서 구성 요소들이 어떻게 서로 연결되어 있는지를 보여주는 시각적 힌트더라고요.
원은 '엔터티'고, 하얀색 책에서는 그게 사각형으로 바뀌는데, 그 사이를 이어주는 화살표는 데이터가 흘러가는 경로나 제어 흐름을 나타낸대요. 저도 이걸 보면서 "와 이게 단순한 표지가 아니라 다 의미가 있었네?" 싶더라고요.
초록색 책은 1979년에 에드워드 요든과 래리 콘스탄틴이 썼고요, 하얀색 책은 1988년에 메일러 페이지 존스가 썼대요. 이 시기에는 구조적 프로그래밍이 슬슬 인기를 잃고, 객체 지향 프로그래밍이 막 떠오르기 시작하던 때였어요. 물론 객체 지향 개념 자체는 60년대부터 있었지만, 90년대에 들어서면서 완전 대세가 됐죠.
이번 글에서는 그 변화의 시기를 같이 되짚어보면서, 구조 설계에서 나온 중요한 개념들이 오늘날 시스템 설계에도 얼마나 유용한지를 나눠보려 해요. 정말 놀라울 정도로 여전히 잘 통하더라고요.
질서 없는 시대, 구조의 필요성
- 과거에는 시스템 설계를 미리 계획하지 않고 즉흥적으로 만들었던 시절이 있었음
- 초록색 책은 그런 무계획성의 문제를 지적하며 구조 설계의 필요성을 강조함
- 구조 설계는 이러한 무질서를 체계화하기 위한 해법으로 등장함
솔직히 지금은 상상하기 어렵지만, 예전에는 시스템을 만들 때 구조를 미리 짜지 않고 그냥 그때그때 생각나는 대로 붙여 나갔다고 해요. 초록색 책을 열면 바로 첫 페이지에 이렇게 써 있어요:
"대부분의 컴퓨터 시스템은 사전에 구조가 설계된 것이 아니라, 그냥 그렇게 만들어졌을 뿐이다."
진짜로요. 개발자들이 큰 그림 없이 그냥 필요할 때마다 기능을 추가하고 코드를 짜다 보니 시스템이 점점 더 복잡해졌죠. 그러다 보니 당연히 혼란이 생기고, 이걸 정리하고 체계화할 필요성이 커진 거예요. 그렇게 해서 등장한 게 바로 구조 설계입니다.
지금도 여전히 중요한 이유
- 오늘날에도 복잡하고 구조가 뒤엉킨 시스템들이 여전히 존재함
- 구조 설계 능력은 좋은 개발자가 되기 위한 핵심 역량임
- 당시의 문제들이 다른 형태로 현재에도 반복되고 있어 구조 설계의 중요성은 여전함
사실 저도 개발하면서 느낀 게, 요즘 시스템들도 꽤 뒤죽박죽일 때 많거든요. 특히 스타트업에서 급하게 MVP 만들다 보면 코드가 어지럽게 얽혀버리기 쉬워요. 어떤 기능은 왜 있는지, 이 함수는 어디서 쓰이는지 찾기 힘든 경우도 많고요.
이럴 때 구조 설계에 대한 개념을 알고 있으면 진짜 도움이 됩니다. 전체 그림을 그리고, 각 기능이 어떻게 연결되는지를 생각하다 보면 개발도 훨씬 수월하고, 유지보수도 덜 골치 아프거든요. 그러니까 이 개념, 지금도 완전 유효해요.
구조 설계란 무엇인가요?
- 구조 설계는 시스템 구성 요소와 이들 간의 관계를 체계적으로 정의하는 작업임
- 단순한 코드 작성이 아닌, 구성 요소 간의 연결과 상호작용을 고민하는 일임
- 설계와 프로그래밍은 다르며, 각각의 역할이 뚜렷하게 존재함
구조 설계라는 걸 처음 들었을 땐 그냥 "뭔가 구조를 만드는 건가?" 했는데, 알고 보니 꽤 깊은 개념이더라고요. 단순히 코드를 잘 짜는 게 아니라, 시스템이 어떤 식으로 구성되어야 하는지를 미리 고민하는 거예요.
메일러 페이지 존스가 이런 말을 했어요:
"구조 설계는 구조 프로그래밍이 아니다."
프로그래밍은 코드 짜는 거고, 구조 설계는 그 코드들이 어떻게 짜여야 할지를 정하는 일이죠. 벽돌을 쌓는 것도 중요하지만, 설계도가 없다면 집이 엉망이 되겠죠? 그 개념이에요.
단순하지만 강력한 설계 접근법
페이지 존스가 제시한 구조 설계 방법에는 핵심이 되는 단계가 몇 가지 있는데, 특히 이 세 가지는 꼭 기억해둘 만해요.
1단계: 문제부터 정확히 이해하라
"문제 정의를 통해 해법을 도출하는 것이 구조 설계의 출발점이다."
예전에 팀 프로젝트 할 때, 누가 먼저 코드를 막 짜기 시작했는데 결국 되돌리고 다시 하게 된 적이 있어요. 왜냐면 문제를 제대로 이해하지 않고 시작했거든요. 그래서 구조 설계에서는 먼저 문제를 확실히 파악한 다음에 설계를 시작하는 게 핵심이에요.
2단계: 블랙박스를 활용하라
"복잡한 시스템은 블랙박스로 나누고, 이를 체계적으로 구성함으로써 설계의 효율성을 높인다."
블랙박스, 이건 진짜 유용한 개념이에요. 내부가 어떻게 돌아가는지 몰라도, 이게 뭘 받고 뭘 내보내는지만 알면 쓰는 데 아무 문제 없는 거죠. 함수나 클래스, 모듈 같은 것도 다 이런 식으로 만들면 협업할 때 진짜 편해요.
특히 팀 프로젝트에서는 다른 사람이 만든 걸 믿고 쓸 수 있어야 하잖아요. 그게 블랙박스의 핵심이에요.
3단계: 시각화 도구를 활용하라
"시스템을 더 잘 이해하기 위해, 그래픽 기반 도구를 활용하라."
사실 저는 그림으로 보는 걸 좋아해서 그런지, 플로우차트 같은 거 그리는 거 꽤 자주 해요. 복잡한 로직을 눈으로 보면 훨씬 잘 이해되거든요. 이런 시각적 도구를 활용하는 게 구조 설계에서 강조하는 포인트 중 하나예요.
구조는 곧 배려이자 고민의 흔적
- 구조 설계는 단지 기술적인 체계가 아닌, 사용자와 개발자를 위한 배려에서 비롯됨
- 도구가 부족하던 시절에도 명확한 시스템을 만들기 위한 노력이 있었음
- 복잡한 문제를 질서 있게 정리하려는 고민의 결과가 바로 구조 설계임
개발자 입장에서 보면, 구조 설계는 일종의 배려 같아요. 나중에 이 코드를 보는 사람, 혹은 내가 몇 달 뒤에 다시 봐야 할 나 자신을 위한 배려죠. 아무도 이해 못하는 복잡한 코드보단, 구조가 잘 잡힌 시스템이 훨씬 나아요.
그리고 옛날에는 지금처럼 좋은 도구들이 없었잖아요? 그런 시절에도 사람들이 더 나은 시스템을 만들기 위해 고민하고 시도했던 게 진짜 대단하다고 느껴져요.
과거를 통해 미래를 보다
- 기술은 계속 진화하지만 좋은 설계 철학은 시대를 초월함
- 구조 설계의 핵심 개념은 지금도 소프트웨어 개발에 적용 가능함
- 단순한 도형이지만 그 속에는 깊은 의미와 원칙이 담겨 있음
기술은 하루가 다르게 변하죠. 근데 그런 와중에도 변하지 않는 게 있어요. 바로 '잘 짜인 설계'에 대한 철학이죠. 아무리 새로운 언어나 프레임워크가 나와도, 구조를 잘 짜야 유지보수도 쉽고 다른 사람과 협업도 잘 돼요.
이런 점에서 보면, 초록색 원이나 하얀색 사각형 같은 단순한 도형들이 단순한 게 아니었던 거죠. 그 안에는 수십 년 전부터 이어져 온 깊은 통찰이 담겨 있었던 거예요.
마무리하며
꼭 기억해두세요:
- 문제를 먼저 정의한 후 해결책을 설계할 것
- 시스템을 블랙박스로 나누어 효율적으로 구성할 것
- 시각적 도구를 활용하여 전체 구조를 이해할 것
이런 설계 원칙들, 한 번 익혀두면 앞으로 어떤 시스템을 만들든 큰 도움이 될 거예요. 그리고 변하지 않는 가치를 지닌다는 점에서 더더욱 기억해둘 만한 개념들이에요.
'SW > Coding' 카테고리의 다른 글
응집도가 뭐길래? 개발자가 꼭 알아야 할 소프트웨어 설계 원칙 7단계 (0) | 2025.05.17 |
---|---|
초보 개발자도 이해하는 결합도 개념과 줄이는 방법 완벽 가이드 (0) | 2025.05.16 |
소프트웨어 디자인의 역사와 발전 과정 – 1970년대부터 현대까지 (0) | 2025.03.20 |
비전공자가 코딩을 배우는 현실적인 방법과 극복기 (0) | 2025.03.19 |
개발자가 자주 하는 실수! 나쁜 코드의 징후와 해결 방법 (0) | 2025.03.18 |