28일차

ssongyi·2022년 5월 19일
0

CS스터디

목록 보기
28/51

1부 하드웨어 028. 구글 같은 서비스는 어떻게 개발할까?

현실에서 프로그래밍은 대규모로 이루어지는 경향이 있다. 이때 사용되는 전략은 책을 쓰거나 다른 큰 프로젝트에 착수할 때와 비슷하다. 무엇을 해야 할지 파악하고, 넓은 명세부터 시작해서 점차 작은 부분으로 적절히 나누고, 각 부분을 작업하면서 전체적으로 일관되어 있는지 확인해야 한다.

프로그래밍에서 작업 하나의 크기는 보통 한 사람이 프로그래밍 언어로 정확한 처리 단계를 작성할 수 있는 정도다. 다른 프로그래머들이 작성한 부분들이 함께 잘 작동하는지 확인하는 일은 어려운데, 이걸 바로잡지 못하면 에러가 발생할 소지가 크다.

컴파일러나 웹 브라우저는 코드가 수십만에서 수백만 행에 이를 것이다. 대규모 시스템을 수백만 행, 심지어 수천만 행의 코드로 되어 있고, 수백에서 수천 명의 사람이 동시에 작업할 수 있으며, 시스템의 수명도 수십년에 이른다.
회사 측에서는 프로그램의 규모를 밝히는 데 대체로 조심스럽지만, 믿을 만한 정보를 가끔 밝힌다.

이 정도 규모의 소프트웨어를 개발하려면 프로그래머, 테스트 담당자, 문서 작성자로 이루어진 팀이 여럿 필요하다.
프로젝트의 진행을 위해서는 일정과 마감 시한을 정하고, 여러 계층에 걸쳐 관리가 이루어져야 하며, 끊임없는 회의를 거쳐야 한다.

라이브러리, 인터페이스, 개발 키트

어떤 중요한 프로그램도 완전히 처음부터 새로 만들어지지는 않는다. 다른 사람들이 만들어 놓은 여러 가지 구성 요소를 바로 구해서 사용할 수 있다.

가장 단순한 수준에서 프로그래밍 언어는 함수 메커니즘을 제공한다. 함수 메커니즘은 어떤 프로그래머가 유용한 작업을 수행하는 코드를 작성하면 다른 프로그래머가 그 내부 작동 방식을 모르더라도 프로그램에 사용할 수 있는 형태로 코드를 패키지화할 수 있게 해준다.

연관된 함수들의 모음을 보통 '라이브러리'라고 한다.
예를 들어, C언어에는 디스크나 다른 위치에서 데이터를 읽고 쓰는 함수로 구성된 표준 라이브러리가 있고, scanf와 printf도 이에 속한다.

함수 라이브러리가 제공하는 서비스는 '애플리케이션 프로그래밍 인터페이스', 즉 API로 프로그래머에게 제공된다.

API는 포함하는 함수와 더불어 함수의 용도가 무엇인지, 함수를 어떻게 사용해야 하는지, 어떤 입력 데이터를 요구하는지, 어떤 값을 만들어 내는지 나열한다.
또한 API는 시스템 내부에서 주고받는 데이터의 구조를 의미하는 자료 구조와 기타 세부 사항도 기술할 수 있다.

API는 구문과 관련된 기본 명세 뿐만 아니라 시스템을 효과적으로 사용하도록 돕는 지원 문서도 포함한다. 요즘 대규모 시스템은 프로그래머들이 복잡한 소프트웨어 라이브러리를 잘 다룰 수 있도록 '소프트웨어 개발키트', 즉 SDK를 포함한다.

버그

버그라는 용어는 그레이스 호퍼가 만들었다고 흔히 알려져 있다. 1947년에 호퍼의 동료들은 작업 중이던 기계식 컴퓨터인 하버드 마크에서 말 그대로 벌레(죽은 나방)을 발견했고, 호퍼의 동료들이 컴퓨터를 '디버깅(debugging)'하고 있다고 말했다고 한다.

버그는 너무나 다양한 방식으로 발생한다.

또한 버그는 시스템을 공격에 취약하게 만들기도 하는데, 버그 때문에 종종 공격자가 메모리에 악성코드를 심어 놓기 쉬어지기도 한다. 악용될 수 있는 버그를 취급하는 시장은 활발하다.
선량한 해커는 문제를 해결하고, 악의적인 해커는 문제를 악용한다. 중간에는 미국 국가안보국(NSA) 같은 정부 기관이 공격 방법을 나중에 이용하거나 해결할 용도로 비축해 두는 애매한 회색 영역이 존재한다.

업데이트가 잦다는 것은 그만큼 취약점이 널리 퍼져 있다는 것은 뜻한다. 웹 브라우저처럼 많은 해커의 이목이 집중되어 있는 중요한 프로그램이 그렇다. 소프트웨어가 패치될 때 보안 취약점이 수정되므로 일반 사용자들은 소프트웨어를 최신 상태로 유지하는 것이 중요하다.

소프트웨어 개발에 복잡함을 더하는 또 다른 요인은 급변하는 환경이다. 환경은 항상 변하고 프로그램은 거기에 발 빠르게 대응해야 한다. 새로운 하드웨어가 개발되면 새로운 소프트웨어가 필요한데, 이 때문에 시스템을 변경해야 할 수도 있다. 또한 새로운 법이나 기타 요구사항이 등장하면 프로그램의 사양이 바뀐다.

끊임없는 변화에 뒤처지지 않고 따라가는 것은 소프트웨어 유지보수에서 매우 중요하며, 반드시 수행해야 하는 일이다. 그렇지 않으면 프로그램은 '비트 부식'을 겪게 되어, 머지않아 재컴파일할 수 없게 되거나 몇몇 라이브러리가 너무 많이 바뀌어 더 이상 작동하지 않거나, 업데이트할 수 없는 상태가 되어 버린다.

0개의 댓글