1.1 서서히 모놀리식 지옥에 빠져들다
2005년 후반 설립된 FTGO는 현재 미국 온라인 음식 배달 업계를 선도하는 회사입니다. 회사를 해외로 확장할 계획도 갖고 있는데, 필요한 기능을 구현하는 시간이 자꾸 지연되어 과연 그럴 수 있을지 의문입니다.
FTGO 애플리케이션의 주요 기능은 간단합니다. 소비자1가 FTGO 웹 사이트 또는 모바일 앱에 접속하여 인근 음식점에 주문하면 배달원2이 음식을 픽업해서 소비자에게 배달하는 것입니다. FTGO는 배달원과 음식점에 대금을 지불하며, 음식점은 FTGO 웹 사이트에 접속하여 메뉴를 편집하고 주문을 관리합니다. 대금 지불은 스트라이프(Stripe), 메시지 전송은 트윌리오(Twilio), 이메일 발송은 AWS SES(Simple Email Service) 등 서드파티 웹 서비스를 활용합니다.
여타 성숙한 엔터프라이즈 애플리케이션처럼 FTGO 애플리케이션 역시 하나의 WAR 파일로 구성된 모놀리스(monolith, 일체형)로 개발되었는데, 시간이 흐를수록 점점 커지면서 애플리케이션이 복잡해졌습니다. 개발 팀이 불철주야 노력했지만 진흙잡탕(Big Ball of Mud) 패턴3의 화신처럼 굳어졌죠. 이 패턴을 창안한 푸트(Foote)와 요더(Yoder)의 말마따나 “되는 대로 막 쌓아 올려 제멋대로 연결된, 엉성한 테이프로 덕지덕지 도배된 스파게티 코드 범벅(haphazardly structured, sprawling, sloppy, duct-tape and bailing wire, spaghetti code jungle)”이 된 것입니다. 그 결과 소프트웨어 전달 페이스는 느려지기 시작했고, 점점 한물간 프레임워크를 사용하여 애플리케이션을 개발하게 되면서 상황은 심각해졌습니다. 모놀리식 지옥에 빠져 허우적대는 애플리케이션의 전형적인 증상입니다.
1 역주 : 원서에 ‘consumer’ 한 단어로 표현된 용어를, 역서에서는 FTGO 앱을 설치하여 모바일에서 음식을 주문하는 비즈니스 관점에서의 ‘소비자(consumer)’와 큐에서 데이터를 꺼내 소비하는 기술적인 관점에서의 ‘컨슈머(consumer)’로 각각 다르게 옮깁니다.
2 역주 : 이 글을 쓰는 현재(2019년 12월) 다른 사람에게 음식을 갖다 주는 사람을 ‘배달원’으로 통칭하여 부르므로 본 역서에서도 ‘배달원’으로 옮깁니다. ‘라이더(rider)’라는 말도 많이 쓰지만 이 책의 코드를 읽는 데는 오히려 헷갈릴 수 있습니다.