728x90
반응형
SMALL

지적 재산권 매커니즘 (미국 법률)

지적 재산권 발명이나 저작(책, 음악, 그림, 사진 등) 같은 개인의 창작 활동으로 생긴 무형 자산

 

영업 비밀

소유자만 비밀을 보유하고 법적 구속력 있는 계약 (기밀 유지 협약서 등) 에 의해서만 공개됨

예. 파워포인트나 포토샵 등의 시스템의 구현 코드

상표

회사 상품이나 서비스를 구별해주는 단어, 문구, 이름, 로고, 특정 색상

예. 맥의 음각 로고, 마이크로소프트의 4색 로고

저작권

다른 사람이 복제 못하도록 창작물을 보호하며, 제한된 기간에 작품을 활용하고 수익 얻을 권리를 창작자에게 줌

DRM(Digital Rights Management, 디지털 저작권 관리) 저작권 있는 자료를 암호화나 DRM으로 보호하려는 시도는 실패

  • DRM 
    • CDM(Content Decryption Module)에 기반하여 디지털콘텐츠의 사용을 제어하는 데 사용되는 기술
    • OS나 애플리케이션의 업데이트에 유연하지 못하며 다른 환경과 호환이 떨어짐
    • 직접 편집까지 하는 클라우드에서는 제약이 많아 DRM을 지원하지 않음

Analog Hole(아날로그 홀) 콘텐츠가 재생되는 동안 재기록이 가능하다.

 

클린 룸 개발 (clean room development) 기법

프로그래머들이 복제하려는 속성을 포함한 코드에 접근할 방법이나 코드 정보가 전혀 없음

클린룸개발 기법 더 알아보기

특허

발명에 대한 법적 보호

  • 사례. 아마존의 원클릭 특허
  • 부작용: 특허 괴물 (특허 관리 전문 사업자)의 증가 - 소송 제기를 위하 특허 권리를 취득하는 사람

라이선스

제품 사용 권한을 승인하는 법적 합의

  • 예. 최종 사용자 라이선스 동의 (EULA)
    • 소프트웨어 때문에 손해를 입어도 피해 소송을 제기할 수 없음
    • 리버스 엔지니어링이나 역어셈블 시도 불가
    • 특정 국가에 출하하거나 핵무기 개발에 사용 불가

API

서비스 사용자와 서비스 제공자 간의 계약

참고자료

728x90
반응형
LIST
728x90
반응형
SMALL

현실에서 프로그래밍은 대규모로 이루어짐

이때 사용되는 전략

  1. 무엇을 해야 할지 파악
  2. 넓은 명세부터 시작해서 작은 부분으로 해야 할 일을 나누기
  3. 각 부분을 작업하며 전체적으로 일관되어 있는지 확인

프로그래밍에서 작업 하나의 크기 == 보통 한 사람이 프로그래밍 언어로 정확한 처리 단계를 작성할 수 있는 정도

다른 프로그래머들의 작업과 함께 잘 작동하는지 확인하는 일은 어려움

ex. 1999년 NASA의 화성 기후 궤도선이 고장난 사건(미터법 단위 vs 야드파운드법 단위)

아무튼 필자의 첫 번째 ‘진짜’ 프로그램도 약 1000줄 정도

작가가 교수로 있는 학생들이 학교를 다니며 작성하는 프로젝트(8 ~ 10주)도 약 2000 ~ 3000줄

컴파일러나 웹 브라우저는 코드가 수십만에서 수백만 행

대규모 시스템은 수백만, 수천만 행로 같이 일하는 사람도 수백에서 수천 명 정도, 시스템의 수명도 수십년

구글은 2015년 행사에서 프로그램의 규모를 밝히기로 전체 코드 규모가 약 20억 행 (필자의 추측으로 지금은 두 배 이상 됐을 가능성이 있다고 함)

이 정도 규모의 소프트웨어를 개발하려면 프로그래머, 테스트 담당자, 문서 작성자로 이루어진 팀이 여럿이 필요하고 회의가 끊임없이 있고 대충 매우 바빴을거라 한다.

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

프로그래밍도 집 짓는 것과 마찬가지로 다른 사람들이 만들어 놓은 여러 가지 구성 요소를 바로 구해서 사용할 수 있음

프로그래밍 언어는 가장 단순한 수준의 함수 메커니즘을 제공

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

연관된 함수들의 모음을 보통 라이브러리라고 함

함수 라이브러리가 제공하는 서비스는 API로 프로그래머에게 제공

API는 포함하는 함수, 함수의 용도가 무엇인지, 어떻게 사용해야 하는지, 어떤 입력 데이터를 요구하는지, 어떤 값을 만들어 내는지 나열

또 API는 시스템 내부에서 주고받는 데이터의 구조를 의미하는 자료 구조와 기타 세부 사항도 기술할 수 있음

결론적으로 API는 함수 + 함수의 정보 + 지원 문서

요즘 대규모 시스템은 프로그래머들이 복잡한 소프트웨어 라이브러리를 잘 다룰 수 있도록 소프트웨어 개발 키트(SDK)도 포함

ex. 애플 ⇒ 아이폰, 아이패드 코드를 위한 Xcode, 구글 ⇒ 안드로이드용 SDK 안드로이드 스튜디오, 마이크로소프트 ⇒ 윈도우 코드를 위한 폭넓은 개발환경

버그

컴퓨터의 시키지 않은 엉뚱한 일, 오답 ⇒ 프로그램의 결함

  • 발생할 수 있는 경우를 깜박하고 처리하지 못함
  • 어떤 조건을 평가하기 위한 논리 테스트나 산술 테스트를 잘못 작성
  • 잘못된 공식을 사용
  • 프로그램이나 프로그램의 특정 부분에 할당된 영역 밖에 있는 메모리에 접근
  • 특정 종류의 데이터에 잘못된 연산
  • 사용자 입력이 적합한지 검사하지 못함

⇒ 다양한 문제들을 모두 버그라고 할 수 있음

이런 문제를 위해 테스트는 프로그래밍에서 큰 부분을 차지

소프트웨어를 개발하는 기업에는 구현 코드의 양 < 테스트 코드의 양, 프로그래머 < 테스터

요새는 테스터가 테스트 코드를 작성하진 않고 공고만 봐도 테스트 코드를 습관화하고 이해하고 있는 개발자를 많이 뽑는 것 같음

버그는 시스템을 공격에 취약하게 만들기도 하고 종종 공격자가 메모리 악성코드를 심어 놓기도 쉬워지기도 함

업데이트가 잦다는 것은 취약점이 널리 퍼져있다는 것 ⇒ 웹 브라우저처럼 해커의 타겟이 자주 되는 중요한 프로그램이 그러함

소프트웨어가 패치될 때마다 취약점이 수정되기 때문에 사용자들은 소프트웨어를 최신 상태로 유지하는 것이 중요

소프트웨어 개발이 복잡해지는 것은 버그 뿐만 아니라 급변하는 환경에도 있다.

새로운 법이나 기타 요구사항이 등장하면 프로그램의 사양이 바뀜

ex. 터보택스는 서로 다른 관할권에서 세법이 바뀔 때마다 대응해야 함

뿐만 아니라 컴퓨터 기종, 각종 툴, 프로그래밍 언어, 물리적 장치, 데이터 형식 등이 구식이 되면 교체되어야 함

끊임없는 변화에 뒤처지지 않고 따라가는 것이 소프트웨어 유지보수에 매우 중요, 반드시 수행해야 하는 일

그렇지 않으면 프로그램은 ‘비트 부식’을 겪게 되어

재컴파일을 할 수 없게 되거나 몇몇 라이브러리가 너무 많이 바뀌어 작동하지 않거나, 업데이트 할 수 없는 상태가 됨

728x90
반응형
LIST
728x90
반응형
SMALL
  1. 계획이 필요하다: 글을 쓸 때, 보통 계획을 세우고 시작한다. 주제를 정하고, 어떤 내용을 담을지, 어떤 순서로 진행할지 등을 결정한다. 마찬가지로 프로그래밍도 비슷하다. 문제를 정의하고, 어떤 기능이 필요한지, 어떤 로직으로 그 기능을 구현할지 등을 생각해낸다.
  2. 절차적 사고가 필요하다: 글을 쓸 때, 단순히 무작정 글을 쓰는 것이 아니라 명확한 흐름과 순서가 필요하다. 먼저 주제를 소개하고, 본론으로 이어가는 등의 과정이 필요하다. 이는 프로그래밍의 절차적 사고와 매우 비슷하다. 어떤 함수나 명령이 먼저 실행되고, 그 다음에 어떤 것이 실행되어야 하는지 등을 정확히 이해하고 구현해야 한다.
  3. 반복과 수정: 작문도 프로그래밍도 완성된 후에는 수정과 보완이 필요하다. 글을 쓴 후에는 교정을 하고, 문맥이 자연스러운지, 오타는 없는지 등을 확인한다. 프로그래밍에서도 비슷하게 코드를 작성한 후에는 검토하고, 오류는 없는지, 로직이 올바른지 등을 확인한다. 이 과정을 통해 최종적으로 완성된 결과물을 얻는다.
  4. 창의성: 작문과 프로그래밍 모두 창의성이 중요하다. 작문에서는 독특한 표현이나 창의적인 플롯을 통해 독자의 마음을 사로잡을 수 있다. 프로그래밍에서는 독특한 알고리즘을 사용하거나, 사용자 경험을 향상시키는 창의적인 방법을 통해 좋은 프로그램을 만들 수 있다.

포트란(Fortran), 코볼(COBOL), 베이직(BASIC)은 컴퓨터 프로그래밍 언어이다. 각각의 언어는 다양한 시기와 목적에 맞춰 개발되었다.

포트란(Fortran)

과학 및 공학 분야에서 널리 사용되는 프로그래밍 언어 "Formula Translation"의 줄임말로, 초기에는 수치 계산과 과학적인 계산을 위해 개발되었다. 현재까지도 과학 및 엔지니어링 분야에서 널리 사용되고 있다. 포트란은 고성능과 수치 계산에 특화되어 있다.

수학적인 식과 알고리즘을 효과적으로 표현할 수 있는 기능을 제공한다. 과학적인 연구, 기상학, 우주 과학, 물리학, 엔지니어링 등 다양한 분야에서 포트란을 사용하여 복잡한 계산과 모델링을 수행할 수 있다.

포트란은 강력한 수치 연산 기능을 제공하며, 배열(array)과 행렬(matrix)을 다루는 기능도 내장되어 있다. 이를 통해 대량의 데이터를 처리하고 계산할 수 있습니다. 또한, 포트란은 고성능 컴퓨터 시스템과의 연동이 용이하며, 병렬 처리 및 벡터 연산을 지원하는 기능도 갖추고 있다.

포트란 언어의 문법은 비교적 단순하고 명확하며, 코드의 가독성을 높이는 데 중점을 두었다. 또한, 다양한 라이브러리와 툴킷이 존재하여 포트란을 활용한 프로젝트 개발이 용이하다.

최신의 포트란 언어인 포트란 90, 95, 2003, 2008, 2018 등은 이전 버전과 비교하여 다양한 기능과 향상된 문법을 포함하고 있다. 이는 프로그래밍의 편의성과 성능을 향상시키는 데 도움을 준다.

요약하면, 포트란은 과학과 엔지니어링 분야에서 사용되는 고성능의 수치 계산과 과학적인 모델링을 위한 프로그래밍 언어이다. 강력한 수치 연산 기능과 컴퓨터 시스템과의 연동성을 제공하며, 코드의 가독성과 효율성을 추구한다.


코볼(COBOL)

"COmmon Business-Oriented Language"의 약자로, 주로 비즈니스 및 금융 분야에서 사용되는 프로그래밍 언어 1959년에 개발되었으며 초기에는 대형 컴퓨터 시스템을 위해 설계되었다.

코볼은 업무 처리와 데이터 처리를 위한 목적으로 사용된다. 주요한 특징 중 하나는 읽기 쉽고 이해하기 쉬운 문법을 갖추고 있다는 것이다. 이는 프로그래밍을 처음 접하는 사람들이 쉽게 학습하고 응용할 수 있도록 도와주는 장점이다. 또한, 영어에 가까운 문법을 사용하여 비전문가들도 코드를 이해하고 유지보수할 수 있다.

코볼은 대규모 기업 시스템에서 여전히 널리 사용되고 있다. 많은 기업은 수십 년 동안 코볼로 개발된 레거시 시스템을 운영하고 있으며, 이러한 시스템을 계속 유지보수하고 확장하기 위해 코볼 개발자의 수요가 여전히 존재한다.

또한, 코볼은 데이터 처리에 강점을 가지고 있다. 대용량 데이터베이스와의 통합이 용이하며, 배치 처리와 파일 처리에 특화되어 있다. 이는 금융 거래, 인사 관리, 재고 관리 등과 같은 업무 처리를 효율적으로 수행할 수 있게 도와준다.

코볼은 절차적인 프로그래밍 스타일을 따르며, 구조적 프로그래밍 원칙을 적용할 수 있다. 이는 코드의 가독성과 유지보수성을 높이는 데 도움이 된다. 또한, 모듈화와 재사용성을 강조하여 큰 규모의 프로젝트를 효과적으로 관리할 수 있도록 지원한다.

최근에는 코볼을 현대적인 환경에 맞게 업데이트하고 개선하는 노력도 이루어지고 있다. 예를 들어, 객체 지향 프로그래밍과의 통합, 웹 서비스와의 통신 등을 위한 확장된 기능이 도입되었다.

요약하면, 코볼은 비즈니스 및 금융 분야에서 주로 사용되는 프로그래밍 언어로, 업무 처리와 데이터 처리를 위해 설계되었다. 읽기 쉬운 문법과 대용량 데이터 처리의 강점을 가지고 있으며, 대규모 기업 시스템에서 여전히 활발하게 사용되고 있다.


베이직(BASIC)

"Beginner's All-purpose Symbolic Instruction Code"의 약자로, 초기에는 교육용으로 개발된 프로그래밍 언어 1964년에 다트머스 대학교에서 개발되었으며, 컴퓨터 프로그래밍을 처음 배우는 사람들을 위해 설계되었다.

베이직은 프로그래밍 언어를 배우는 초보자들이 쉽게 이해하고 사용할 수 있도록 설계되었다. 문법이 간단하고 직관적이며, 코드 작성에 필요한 명령어와 구문이 상대적으로 적은 편이다. 이를 통해 초보자들이 쉽게 프로그래밍을 시작하고 학습할 수 있다.

또한, 베이직은 대화식 프로그래밍(interactive programming)에 적합하게 설계되었다. 사용자가 프로그램을 작성하고 실행하면서 결과를 즉시 확인할 수 있다. 이는 프로그래밍 과정을 보다 직관적이고 상호작용적으로 만들어준다.

베이직은 다양한 플랫폼에서 사용되었으며, 초기에는 개인용 컴퓨터(PC)에서 많이 사용되었다. 특히 1980년대와 1990년대에는 MS-DOS와 함께 제공되는 QBasic, Visual Basic과 같은 베이직 변형이 유명해졌다. 이러한 변형들은 Windows 환경에서 GUI(Graphical User Interface) 프로그래밍을 지원하며, 비주얼 베이직(Visual Basic)은 마이크로소프트에서 개발되어 Windows 응용 프로그램 개발에 널리 사용되었다.

현재에도 베이직은 교육용이나 간단한 프로그래밍 작업에 활용되는 경우가 있다. 또한, 초보자를 위한 프로그래밍 교육 언어로 여전히 사용되며, 프로그래밍 개념과 기초를 익히는 데 유용한 도구로 활용될 수 있다.

요약하면, 베이직은 초보자를 위해 설계된 간단하고 직관적인 프로그래밍 언어이다. 초기에는 교육용으로 개발되었으며, 초보자들이 프로그래밍을 쉽게 배우고 응용할 수 있도록 도와준다. PC 환경에서 많이 사용되었으며, 현재에도 교육 및 간단한 프로그래밍 작업에 활용될 수 있다.


1970년대에 ‘시스템 프로그래밍’ 용도로, 즉 어셈블러, 컴파일러, 텍스트 편집기 같은 프로그래머 도구와 심지어 운영체제까지 작성할 목적으로 사용할 언어들이 만들어졌다. 그 중 단연코 가장 성공적이었던 것은 C언어이다.

오늘날 컴퓨터에서 사용되는 주요 프로그램 대부분은 C나 C++ 작성됐다. 대부분의 맥 소프트웨어는 C, C++, 오브젝티브-C(C의 변종)로 작성된다.

728x90
반응형
LIST

+ Recent posts