메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

변화의 흐름 속, 더 멀리 보고 더 넓게 보는 개발자로 성장하려면...

한빛미디어

|

2023-11-29

|

by 마이클 나이가드

6,764

“과연 내 프로그램은 문제 없이 잘 작동할까?” 


많은 개발자가 하드웨어는 오류가 없고, 네트워크에는 규약을 지키는 건전한 시민만 살고 있고, 방화벽이 모든 불법 침입자를 막아주는 안전한 세상에서 우리 프로그램이 살아갈 것이라고 상상합니다. 버그만 없다면 평온한 삶이 영원히 유지될 것이라고 믿는 겁니다.

 

저는 ‘개발자는 운영해본 개발자와 안 해본 개발자로 나뉜다’는 말을 오래전부터 하고 다녔습니다. 운영에서 상상도 못한 문제를 만나고, 이를 통해서 우리 프로그램이 비로소 현실을 견디는 수준으로 완성되고, 그 과정에서 다양한 지식을 습득하고 기술을 연마할 수 있다는 뜻으로 한 말입니다. 그런 경험을 하기 전에는 이상적인 상황에서나 겨우 작동하는 아마추어의 조악한 결과물을 만들 수 있을 뿐입니다.

 

개발자들은 운영에 관심이 없고 낙관적으로 생각하는 편입니다. 그 이유는 이 업계가 오랫동안 개발과 운영을 별도 업무로 여기고 다른 사람들이 책임졌기 때문입니다. 과거에는 QA만 통과하면 사실상 개발자의 역할이 끝났습니다. 그래서 프로젝트의 마지막 단계는 납품delivery (또는 인도, 전달 등)이었습니다.

 

그 사이 세상은 클라우드와 서비스형 소프트웨어software as a service (SaaS)가 친숙한 것이 되었고 개발과 운영의 경계는 희미해졌습니다. 이제 운영 경험은 개발자에게 더 필수적인 것이 되었습니다. 지금의 운영 문제는 전통적인 운영 부서가 해결할 수 있는 수준을 넘어섰습니다. 개발자가 운영의 문제를 이해하고 이에 준비된 소프트웨어를 만들 수 있어야 합니다. 하지만 대부분의 개발자가 여전히 그 세상에 잘 적응한 것 같지는 않습니다.

 

에츠허르 데이크스트라Edsger Dijkstra는 ‘프로그래머에게 프로그램 자체는 목적이 아니며 프로그램을 통해서 원하는 효과를 얻는 것이 목적’이라고 밝히면서, 프로그램이 컴퓨터에 의해서 실행되어야 한다는 사실때문에 한편으론 프로그램을 만드는 것이 수학 이론을 만드는 것보다 어렵다고 말했습니다. 당시의 컴퓨터에 비하면 인터넷으로 모든 것이 연결된 현대는 프로그램이 살아남기에 훨씬 불확실하고 가혹한 환경이 되었습니다. 그렇기에 우리가 작성한 프로그램이 정상적으로 작동해서 원하는 효과를 내기를 기대하는 것이 매우 어려워졌죠. 우리는 단순히 결함없이 잘 작동하는 프로그램을 만들 뿐만 아니라 많은 악조건을 극복하고 기대하는 효과를 얻게 해주는 철인 같은 프로그램을 만들 수 있어야 합니다.

 

많은 설계, 아키텍처, 공학 기술들이 우리가 좋은 소프트웨어를 만들게 도와줍니다. 이런 지식과 기술은 매우 유용하고 중요합니다. 하지만 대부분은 소프트웨어가 돌아가는 운영 환경이 평온하고 정상적이라고 가정하는 듯합니다.

 

현실에서는 소행성 충돌에 비견되는 트래픽 충격, 규격에 맞지 않는 네트워크 프로토콜, 행동을 예상할 수 없는 가상 인프라, 참지 못하고 새로고침을 계속 누르는 고객, 예상치 못한 서비스의 급격한 성장, 수시로 무자비하게 사이트 전체를 긁어가는 웹 크롤러, 그리고 크래커 등이 끊임없이 우리를 괴롭힙니다. 더구나 고객의 요구는 끊임없이 변하고 시장에서의 경쟁은 치열해집니다.

 

이 책은 개발자에게 현실에서 잘 작동하는 프로그램을 만드는 방법을 알려줍니다. 저자인 마이클 나이가드는 우리가 정성스럽게 만든 프로그램이 얼마나 난폭하고 위태로운 환경에서 운영되는지 깨닫게 하려고 여러 현실적인 예를 들어 설명합니다. 그리고 이 문제를 극복하는 방법, 더 나아가 이런 환경에서도 번성할 수 있는 전략이 무엇인지 알려줍니다.

 

책에서 가장 중요한 개념 하나만 고르라면 운영 고려 설계design for production라고 할 수 있습니다. 이 개념은 단순히 기능이 정상적으로 작동하도록 만들 뿐만 아니라 운영 상황에서 만날 다양한 문제를 고려해서 소프트웨어 설계에 반영하는 것을 뜻하며, 2부의 제목이면서 이 책 전체를 관통하는 주제입니다.

 

‘운영을 고려한다는 것’은 운영의 여러 장애에 잘 견디고 다양한 상황에 적절하게 대처하는 것은 물론이고, 사용자를 만족시키고 사업을 견인하면서 꾸준히 변화하고 진화하는 것을 뜻합니다. 우리가 만드는 소프트웨어는 필요한 기능을 정상적으로 수행하고, 유지 보수성이 높은 코드 품질을 확보해야 합니다. 동시에 현실에서 잘 견디며 생존하고 계속 성장할 수 있어야 합니다.

 

1판이 2007년에 출간되었을 때 이 책은 많은 개발자에게 영감과 충격을 주었습니다. 그리고 꾸준히 2판을 기대하는 목소리를 들을 수 있었습니다. 1판 이후에 많은 시스템이 클라우드 환경으로 옮겨 갔고, 서비스 규모는 커졌으며, 디지털 서비스에 기반한 도전이 많아졌고, 그만큼 경쟁도 심해졌습니다. 세상은 더 빨리 돌아가고 운영 환경은 더 혹독해졌습니다. 그래서 이 모든 변화를 반영한 2판을 기다리는 사람이 많아진 것입니다.

 

개발 전문서 다수가 구체적인 구현 방법을 설명하는 편입니다. 반면 이 책은 우리가 해결할 문제가 무엇이고 어떻게 그 문제를 해결할 수 있는지 설명합니다. 그렇기에 구체적인 구현 방법을 기대한 독자에게는 이 책이 아쉽게 느껴질 수 있습니다. 간간이 특정 기술을 언급하지만 예시일 뿐 그 기술에 국한된 설명도 아니고 그 기술을 소개하려는 의도도 없습니다. 만약 이 책에서 구현 방법까지 설명했다면 수십 권 분량으로 늘어났을 것이고 다양한 언어와 플랫폼을 모두 포괄하기란 더 어려웠을 겁니다. 다행히 우리는 이 책에서 설명하는 해결 방법을 구현하도록 도와주는 오픈 소스나 서비스를 쉽게 찾을 수 있습니다. 지금 사용하는 프레임워크나 라이브러리에 관련된 기능이 있었는데 이해하지 못해서 잘 활용하지 못하고 있었을 지도 모릅니다.

 

그만큼 이 책이 이미 성숙하고 잘 정립된 지식을 담고 있다는 뜻도 됩니다. 흔히 소프트웨어 개발은 발전이 빠르다거나 변화가 심하다고 말합니다. 이는 단순히 새로운 프레임워크, 라이브러리 또는 언어에 관한 이야기가 아닙니다. 개발자라는 직군의 역할과 개발이라는 행위 자체에 대해서도 이 말은 사실입니다. 변화의 흐름 속에서 이 책이 더 멀리 보고 더 넓게 보는 개발자로 성장시켜줄 것 이라고 확신합니다.

 


 

이 글은 도서 『Release의 모든 것』 를 번역하신 박성철 역자님의 <옮긴이의 말> 일부를 발췌한 글입니다. 35년 경력 전문가의 경험에서 우러나오는 자신 있는 출시를 위한 소프트웨어 설계 방법과 운영 노하우는 Release의 모든 것』 에서 확인하실 수 있습니다.

 

앞표지_Release의 모든 것.jpg

 

Release의 모든 것

 

 

댓글 입력
자료실

최근 본 책0