22.06.04 CS 스터디

Seong Hyeon Kim·2022년 6월 4일
0

CS스터디

목록 보기
2/9

028 구글같은 서비스는 어떻게 개발할까?

  • 프로그래밍은 대규모로 이루어지는 경향이 있는데 이때는 와이어 프레임을 하듯이 무엇을 해야할지 파악하고, 넓은 명세부터 시작해서 점차 작은 부분으로 적절히 나누고 각 부분을 전체적으로 작업하면서 전체적으로 일관되어 있는지 확인하면서 진행합니다.
  • 일반적인 컴파일러나 웹 브라우저만 해도 코드가 수십만~ 수백만행에 이르고 이러한 코드들을 수백에서 수천명의 사람들이 동시에 작업을 하기도 합니다.

  • 2015년 구글이 밝힌 자료에 따르면 구글의 전체 코드는 약 20억 행이었다고 합니다 (지금은 그 이상)


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

모든것이 셀프인 세상
https://blog.naver.com/PostView.naver?blogId=pajlyoon&logNo=220803289127&categoryNo=467&parentCategoryNo=0

  • 요리를 할때 필요한 고추장이나 간장같은 양념의 재료부터, 고기나 채소 같은 실질적인 재료들까지 이 모든걸 전부다 요리하는 사람이 준비하지는 않습니다.
    대부분 마트에서 재료를 사서 요리를 할 준비를 합니다.
  • 프로그래밍도 마찬가지로 처음부터 끝까지 모든것을 스스로 하는게 아닌 다른 사람들이 많들어 놓은 것들을 잘 이용해서 만들어내는데요,

  • 폰트나 버튼모양 같은 가벼운 것들부터 네트워크 연결, 데이터베이스에 접근 혹은 그 데이터 베이스까지도 모두 있기때문에 프로그래밍을 하는 사람은 그것들을 참고하면서 자신만의 방법으로 작업을 진행합니다.


함수
: 어떤 프로그래머가 유용한 작업을 수행하는 코드를 작성하면 다른 프로그래머가 그 내부 작동 방식을 모르더라도 프로램에 사용할 수 잇는 형태로 코드를 패키지화 할수 있게 해준 것

생활 예시

  • 세탁기는 빨래를 하려고 세탁기를 사용할 때 세탁기는 세탁 - 행굼 - 탈수 등의 순서로 진행을 합니다.

  • 어차피 세탁기는 항상 같은 작업을 수행할 것이기 때문에 이러한 형태의 작업순서를 미리 저장해놓으면 매번 새롭게 작성할 필요가 없습니다.

  • 프로그래밍에서의 함수 역시 이러한 함수 형태로 만들어서 사용할 하는게 더 효율적이기 때문에 많이 사용을 하게 됩니다.


Library

라이브러리는 함수들의 집합입니다. 프로그램을 만들때 기존에 만들어진 함수들을 재활용함으로 프로그램의 제작 시간과 노력을 줄일 수 있습니다.

framework와 비교했을때 각각의 함수들은 독립적으로 작동하기 때문에 필요한 함수만 호출하여 쓸 수 있습니다.

API

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

  • API는 함수, 프로토콜, 도구들의 집합 형태로 제공됩니다. API 역시 인터페이스이기 때문에 사용자(개발자)는 함수, 프로토콜, 도구들의 집합, 구현에 대해서는 신경 쓰지 않아도 됩니다. 개발자가 편리하게 사용할 수 있도록 내부 구현은 감춰져 있습니다. 단지 API가 제공하는 기능을 이용해서 개발자가 원하는 새로운 기능(프로그램)을 만들면 되는 것이죠.

소프트웨어 개발 키트

  • 소프트웨어 개발 키트(영어: Software Development Kit, SDK)는 일반적으로 소프트웨어 기술자가 사용하여 특정한 소프트웨어 꾸러미, 소프트웨어 프레임워크, 하드웨어 플랫폼, 컴퓨터 시스템, 게임기, 운영 체제 등을 위한 응용 프로그램 등을 만들 수 있게 해주는 개발 도구의 집합이다

버그

  • 프로그램이 일정 규모 이상으로 커지면 한번에 제대로 작동하지 않고 오류가 생기거나 계산 실수에 의한 결함등이 생기게 되는데 이러한 것들을 버그 라고 부릅니다.

  • 버그의 어원 : 그레이스 호퍼라는 사람이 동료들과 작업중이던 기계식 컴퓨터인 하버드 마크2 에서 오류가 발생하였고 그 내부에서 말그대로 죽은 벌레(나방)을 발견하여서 여기서 유래가 되었다는 게 프로그래밍 측의 어원입니다.


버그를 일으키는 원인들

  • 발생할 수 있는 경우를 깜빡하고 처리를 안했다.
  • 어떤 조건을 평가하기 위한 논리 테스트나 산술 테스트를 잘못 작성했다.
  • 잘못된 공식을 사용했다.
  • 프로그램이나 프로그램의 특정 부분에 할당된 영역 밖에 있는 메모리에 접근했다.
  • 특정 종류의 데이터에 잘못된 연산을 적용했다.
  • 사용자 입력이 적합한지 검사하지 못했다.
  • 실수로 대문자를 소문자로 적었다.
  • 이러한 버그를 잡기 위해서 실제로 기업에서는 구현하는 코드들보다 테스트 코드가 더 많고, 프로그래머보다 테스터가 더 많기도 합니다.
  • 버그들은 시스템을 공격에 취약하게 만들기도 하는데 이를 이용해서 악의적으로 시스템을 마비시키기 위해서 공격자가 메모리에 악성코드등을 심어놓기도 하는데 이들을 해커라고 부릅니다.

소프트웨어는 이러한 문제가 발생되지 않도록 끊임없이 결점들을 보완하기 위해서 업데이트가 진행되는데 소프트웨어가 새롭게 패치될때 마다 보안취약점이 수정되므로 사용자는 소프트웨어를 늘 최산상태로 유지하는게 좋습니다.

하지만 꼭 버그 때문에만 소프트웨어 업데이트를 하는것은 아닙니다. 개발환경은 늘 변하고 프로그램 역시 거기에 맞춰서 발빠르게 진행되어야 하기 때문에 소프트웨어는 항상 변화되고 발전되는 것에 긴장을 늦추면 안됩니다.
profile
삽질도 100번 하면 요령이 생긴다. 부족한 건 경험으로 채우는 백엔드 개발자

0개의 댓글