당신의 코드는 레거시인가? 오늘도 레거시가 될 코드를 작성했나? 레거시가 코드의 진정한 운명인가? 레거시가 아닌 소프트웨어 자산이 되는 코드와 설계!
개발자는 책으로 공부한다. 인기 있는 책들은 이상적인 모델을 설명한다. 그들은 실제 대규모 시스템을 운영하고 있지 않다. 진짜 대규모 시스템을 30여 년 가까이 운영하는 저자의 설계론!
당신의 코드는 레거시인가?
당신이 오늘 작성하는 코드는 레거시이고, 내일 작성하는 코드는 모던 코드인가? 차세대 프로젝트가 나오면 사라져야 하는 레거시 코드인가? 소모적인 코드 갈아엎기 대신 소프트웨어 자산으로 축적하고 성장하는 방법은 없을까?
개발자는 책으로 공부한다. 책에서 설명하는 이론적인 방법을 신봉하고야 만다. 그러나 소프트웨어는 복잡하다. 복잡한 현실 세계를 소프트웨어로 담아내다 보면 이상적인 이론은 무너지고 만다. 이론을 넘어 물리적인 세계에 실제로 적용할 수 있는 아키텍처를 배워보자.
대규모 소프트웨어의 복잡성에 대응하기 위한 절차와 아키텍처
대규모 소프트웨어 프로젝트를 위한 아키텍처 원칙 신뢰성과 유지보수성을 갖춘 코드를 작성하는 일은 어렵다. 대규모 소프트웨어 개발이라면 더 많은 도전 과제가 주어진다. 대규모 시스템을 만들려면 대부분의 인기 있는 교재에서 다루는 이론적 개념을 넘어 논리적 디자인에 대한 실용적인 이해가 필요하다. 기업 규모에서 성공적이려면 개발자 또는 고급 개발자에게조차 생소할 수 있는 소프트웨어 엔지니어링의 물리적 디자인도 다뤄야 한다.
기업의 생존을 책임지는 대규모, 미션 크리티컬한 엔터프라이즈 시스템을 30년 이상 현장에서 구축하면서 쌓은 실무 경험을 기반으로 저자, 존 레이코스는 소프트웨어 자본을 만들고 성장시키는 방법을 보여준다. 이 책은 어떤 규모의 프로젝트라도 적용 가능한 기초를 구축하고, 성공적인 현실 세계 대규모 개발에 필요한 절차, 방법, 기술 및 도구를 보여준다.
23년만의 개정을 통해 최신 정보를 반영했다. 견고한 엔지니어링을 강조하면서 구체적인 예제와 기본 디자인 개념을 설명한다. 어떤 경험 수준의 개발자라도 다음과 같은 방법을 이해함으로써 디자인 및 개발 접근 방식을 혁신적으로 변화시킬 수 있는 인사이트를 얻을 수 있을 것이다.
• 인프라 및 응용 프로그램 개발 간의 차이를 활용하여 생산성 향상 • 피드백 및 계층적 재사용을 통한 기하급수적인 생산성 향상 달성 • 컴포넌트를 논리 및 물리적 디자인의 기본 단위로 받아들이기 • 컴파일 및 링크의 기본적인 특성이 컴포넌트 디자인에 어떻게 영향을 미치는지 분석 • 적절한 크기의 물리적 집합에 논리적 콘텐츠를 효과적으로 분할하기 • 충분한, 완전한, 최소한의 및 기본 소프트웨어 간의 중요한 차이를 내재화 • 캡슐화, 안정성 및 성능을 동시에 최적화하는 솔루션 제공 • 주기적인 물리적 종속성을 피하기 위해 아홉 가지 수립된 수준화 기법 활용 • 전통적인 계층 구조의 "무거움"을 피하기 위해 적절한 측면 설계 사용 • 컴파일 타임 결합을 제거하기 위한 적절한 아키텍처 격리 기법 사용 • 컴포넌트 기반 방법을 사용하여 대규모 시스템을 디자인하는 다차원 프로세스를 숙달하기
이 책에서 다루는 원칙과 아키텍처는 언어에 특화되지 않고 대규모 소프트웨어 시스템을 개발하면서 발생할 수 있는 공통적인 문제에 대한 해결책을 제시한다. C++에 중점을 둔 책이지만, 자바, 파이썬 등 다른 언어의 개발자들도 대규모 소프트웨어 프로젝트에서의 아키텍처 설계와 절차에 대한 이해를 향상시키는 데 도움을 받을 수 있을 것이다.
1996년에 출판한 『Large-Scale C++ Software Design』(Addison-Wesley, 1996)의 저자이며 현재는 뉴욕 시의 블룸버그 LP에서 선임 아키텍트로 근무하고 있으며 C++ 소프트웨어 개발 분야에서 세계적으로 잘 알려진 멘토로 활동하고 있다. 2001년에는 블룸버그의 BDE 그룹을 설립하고 자신의 컴포넌트 기반 방법론, 프로세스 및 아키텍처를 사용하여 최상급의 재사용 가능한 C++ 소프트웨어를 개발하고 있다. 존 레이코스는 ACCU, C++Now, CppCon, Meeting C++ 같은 저명한 전문 콘퍼런스에 항상 연사로 참여하고 있다. 또한, 2006년부터 C++ 표준 위원회의 투표 회원으로 참여하여 C++11 값 시멘틱, C++17 PMR 메모리 할당자, C++20 모듈 등 여러 세대에 걸쳐 C++를 발전시키는 데 기여했다. 1996년에 출간한 그의 책은 업계에 많은 영향을 줬으며 지금까지도 C++에서 대규모 시스템을 디자인하는 데 있어 첫 번째이자, 현재까지도 유일하고도 명확한 참고 자료였다.