5분 GMP

GxP에 'Data Integrity'를 해결하기 위한 첫걸음 '5분 GMP' 입니다. by TCP

GxP에 'Data Integrity'를 해결하기 위한 첫걸음 '5분 GMP' 입니다. by TCP

5분 Tech.

프로그래밍 언어 및 기계어

DI Solution 2024. 1. 7. 14:12

기계어

 

프로그래밍 언어 ?

현대 사회에서 IT 기술은 필수적인 부분이 되었고, 특히 제약 산업과 같은 고도로 전문화된 분야에서도 IT 기술의 발전과 융합은 더욱 중요한 시대적 요구가 되고 있습니다. 이러한 과정에서 '프로그래밍 언어'는 컴퓨터와 인간 사이의 소통을 가능하게 하는 핵심 도구로 자리 잡았습니다.

 

'프로그래밍 언어'는 마치 인간이 사용하는 언어인 한글, 영어, 불어와 같이, 컴퓨터와 대화하는 데 사용되는 언어입니다. 우리가 다양한 국가와 문화에서 서로 다른 언어를 사용하듯, 컴퓨터 프로그래밍 역시 다양한 언어를 통해 컴퓨터에게 지시를 내리고, 정보를 처리하고, 문제를 해결합니다. 이러한 프로그래밍 언어들은 각각 고유의 문법과 구조, 특징을 가지고 있으며, 이를 이해하고 활용하는 능력은 현대 사회에서 중요한 역량 중 하나가 되었습니다.

 

제약 산업을 예로 들면, 데이터의 정확성과 무결성은 매우 중요합니다. 이러한 산업에서 데이터를 처리하고 분석하는데 프로그래밍 언어가 필수적으로 사용됩니다. 예를 들어, 데이터 분석, 시뮬레이션, 자동화된 실험 프로세스 등은 프로그래밍 언어 없이는 상상하기 어렵습니다. 이는 단순히 데이터를 처리하는 것을 넘어, 그 데이터를 통해 의미 있는 결론을 도출하고, 신약 개발과 같은 중요한 결정을 내리는 데에도 기여합니다.

 

또한, 프로그래밍 언어는 제약 산업뿐만 아니라 다른 많은 산업 분야에서도 그 가치를 발휘하고 있습니다. 예를 들어, 금융 분야에서는 복잡한 알고리즘과 데이터 분석을 통해 투자 결정을 내리기도 하고, 제조 산업에서는 생산 과정을 자동화하고 최적화하기 위해 사용됩니다. 이처럼 프로그래밍 언어는 우리가 살아가는 세계의 거의 모든 면에서 중요한 역할을 하고 있습니다.

 

하지만 프로그래밍 언어를 배우고 이해하는 것은 단순히 기술적인 면만이 아니라, 새로운 사고방식을 배우는 것과도 같습니다. 프로그래밍 언어를 통해 문제를 해결하는 방법, 논리적으로 사고하는 방법, 복잡한 시스템을 이해하고 분석하는 방법 등을 배울 수 있습니다. 이는 단순히 컴퓨터와 소통하는 방법을 넘어, 우리가 세상을 바라보고 이해하는 방식에도 영험을 미칩니다.

 

따라서, 프로그래밍 언어를 배우는 것은 미래 사회에서 요구되는 중요한 기술이자, 새로운 시대의 문해력이라고 할 수 있습니다. 이제 프로그래밍 언어는 선택이 아닌 필수가 되었으며, 이를 통해 더 넓은 세계와 소통하고, 새로운 기회를 발견할 수 있습니다. 이것이 바로 프로그래밍 언어가 현대 사회에서 중요한 위치를 차지하는 이유입니다.

 

프로그래밍 언어의 발전

 

프로그래밍 언어의 발전 역사는 컴퓨터 과학의 발전과 매우 밀접하게 연관되어 있습니다. 이 역사는 초기의 기계적 언어에서부터 현대의 고급 프로그래밍 언어에 이르기까지 다양한 단계를 거쳤습니다.

 

초기 단계: 1940년대 - 1950년대

1. 기계어와 어셈블리어 (1940년대)

• 컴퓨터의 초기에는 기계어가 사용되었습니다. 기계어는 컴퓨터 하드웨어가 직접 이해할 수 있는 이진 코드로 구성되어 있었습니다.

• 어셈블리어는 기계어를 조금 더 인간이 이해하기 쉬운 형태로 표현한 것으로, 기계어의 직접적인 대응물입니다.

2. 포트란 (FORTRAN, 1950년대 후반)

• 과학적 및 엔지니어링 계산을 위해 개발된 최초의 고급 프로그래밍 언어입니다.

• 포트란은 프로그램을 보다 쉽게 작성할 수 있게 하여, 컴퓨터 프로그래밍의 대중화에 기여했습니다.

 

발전 단계: 1960년대 - 1970년대

1. 코볼 (COBOL)과 알골 (ALGOL)

• 코볼은 주로 비즈니스 데이터 처리를 위해, 알골은 과학적 계산을 위해 개발되었습니다.

• 이들 언어는 프로그래밍 언어의 구조와 문법에 대한 중요한 개념을 도입했습니다.

2. C 언어 (1970년대)

• 벨 연구소의 데니스 리치에 의해 개발된 C 언어는 강력하고 유연한 프로그래밍 언어로 널리 사용되었습니다.

• C 언어는 운영 체제, 시스템 소프트웨어 및 다양한 응용 프로그램 개발에 이용되었습니다.

 

현대 단계: 1980년대 - 현재

1. 객체지향 프로그래밍의 부상 (1980년대)

• 스몰토크와 C++ 언어가 객체지향 프로그래밍 패러다임을 대중화했습니다.

• 이 패러다임은 데이터와 기능을 객체로 캡슐화하여 프로그램의 모듈성과 재사용성을 높였습니다.

2. 자바와 파이썬 (1990년대)

• 자바는 플랫폼 독립적인 프로그래밍 언어로 널리 채택되었으며, 인터넷의 성장과 함께 확산되었습니다.

• 파이썬은 그 간결함과 코드 가독성으로 인기를 끌었으며, 교육 및 과학계에서 널리 사용되었습니다.

3. 새로운 언어들의 등장

• 2000년대 이후, 루비, 스위프트, 고(Go), 러스트(Rust)와 같은 새로운 언어들이 등장했습니다. (1)

• 이 언어들은 특정 문제 영역에 최적화되어 있거나, 성능과 안전성에 중점을 두고 개발되었습니다.


 

기계어 (Machine Language)란?

기계어는 컴퓨터가 직접 이해하고 실행할 수 있는 가장 기초적인 프로그래밍 언어입니다. 이 언어는 컴퓨터의 중앙 처리 장치(CPU)가 직접 인식하고 처리할 수 있는 이진 코드, 즉 0과 1로 구성된 명령어 집합으로 이루어져 있습니다.

 

기계어의 특징

1. 직접적인 실행

: 기계어는 컴퓨터 하드웨어가 직접 이해하고 실행할 수 있는 유일한 언어입니다.

 

2. 하드웨어 종속성

: 특정 프로세서 아키텍처에 따라 기계어의 명령어 집합이 결정됩니다. 따라서, 다른 종류의 CPU에서는 동일한 기계어 코드가 작동하지 않을 수 있습니다.

 

3. 낮은 가독성

: 사람이 이해하고 사용하기에는 매우 복잡하고 어렵습니다.

 

4. 효율적인 실행

: 번역 과정이 없기 때문에, 다른 언어에 비해 실행 속도가 빠릅니다.

 

기계어 프로그래밍 예시 (이진 코드)

기계어의 이진 코드 예시를 들기 위해서는 특정 CPU 아키텍처의 명령어 세트를 기준으로 해야 합니다. 각 CPU 아키텍처는 고유한 명령어 세트를 가지고 있으며, 이에 따라 이진 코드가 달라집니다. 아래 예시는 가상의 단순화된 CPU 아키텍처를 기반으로 한 기계어 코드입니다:

 

• 덧셈 연산 예시 (가상의 이진 코드)

  - 데이터 로드:        01010100 00000001    (레지스터1에 데이터 로드)

  - 데이터 더하기:    00110001 00000010    (레지스터2의 데이터를 레지스터1에 더함)

  - 결과 저장:           01010100 00000011    (결과를 레지스터3에 저장)

 

이 예시에서 첫 번째 이진 코드는 레지스터1에 데이터를 로드하는 명령, 두 번째 코드는 레지스터2의 데이터를 레지스터1에 더하는 명령, 세 번째 코드는 결과를 레지스터3에 저장하는 명령을 나타냅니다. 실제 기계어 코드는 해당 CPU 아키텍처의 설계와 명령어 세트에 따라 다르게 표현됩니다.

 

초기 컴퓨터에서의 프로그래밍 방식

 

기계어만 있었던 초기 컴퓨터 시대에는 하드웨어에 기계어 프로그램을 입력하는 방법이 오늘날의 방식과 매우 달랐습니다. 초기 컴퓨터는 프로그래밍이 매우 수작업 중심이었으며, 여러 가지 원시적인 방법을 사용했습니다.

 

1. 펀치 카드

: 초기 컴퓨터 프로그래밍에서 널리 사용된 방법 중 하나는 펀치 카드였습니다. 프로그래머들은 기계어 명령어를 펀치 카드에 구멍을 뚫어 표현했고, 이 카드를 컴퓨터에 입력하여 프로그램을 로드했습니다.

 

2. 스위치와 버튼

: 일부 초기 컴퓨터는 프론트 패널에 있는 일련의 스위치와 버튼을 사용하여 직접 기계어 코드를 입력했습니다. 프로그래머는 각 비트를 수동으로 설정하여 명령어를 컴퓨터에 입력했습니다.

 

3. 플러그보드

: 초기 프로그래밍에서는 플러그보드를 사용해 전기적 연결을 만들어 프로그램을 구성하기도 했습니다. 이 방법은 특히 초기의 컴퓨터와 계산기에서 보편적이었습니다.

 

4. 자기 테이프

: 자기 테이프는 나중에 데이터와 프로그램을 저장하는 데 사용되었습니다. 이것은 물리적인 매체에 데이터를 기록하고, 컴퓨터가 이를 읽어 프로그램을 실행할 수 있게 했습니다.

 

초기 컴퓨터 프로그래밍의 단점

 

• 시간 소모적: 이러한 방법들은 매우 시간 소모적이었고, 오류가 발생하기 쉬웠습니다.

• 유지보수 어려움: 프로그램 수정이 어렵고, 다른 시스템으로의 이식성이 거의 없었습니다.

• 물리적 한계: 데이터와 명령어의 양이 물리적인 매체의 한계에 의해 제한되었습니다.

 

오늘날의 프로그래밍과 비교할 때, 초기 컴퓨터 프로그래밍은 매우 기초적이고 원시적이었습니다. 하지만 이러한 초기의 노력은 현대 컴퓨팅의 기초를 마련하는 데 큰 역할을 했습니다.

 


(1) 새로운 프로그래밍 언어 (2000년대 전/후)

 

루비(Ruby):

개발자: 마츠모토 유키히로(Yukihiro Matsumoto)가 1995년에 개발 특징: 객체 지향적이며, 간결하고 이해하기 쉬운 문법을 지님. 웹 애플리케이션을 위한 프레임워크인 '루비 온 레일즈(Ruby on Rails)'로 인기를 끔.

사용 분야: 주로 웹 애플리케이션, 시스템 유틸리티, 서버 관리 스크립트 등에 사용.

스위프트(Swift):

개발자: 애플(Apple)이 2014년에 개발

특징: 안전성, 성능 및 소프트웨어 디자인 패턴에 중점을 둠. Objective-C의 대체 언어로 개발되어 iOS, macOS, watchOS, tvOS 등 애플의 플랫폼에 최적화.

사용 분야: 주로 iOS 및 macOS 애플리케이션 개발에 사용.

고(Go, 또는 Golang):

개발자: 구글(Google)의 로버트 그리즈머(Robert Griesemer), 롭 파이크(Rob Pike), 켄 톰슨(Ken Thompson)이 2009년에 개발 특징: 간결함, 높은 성능 및 병렬 처리에 강점. 크로스 플랫폼 지원 및 강력한 표준 라이브러리를 보유.

사용 분야: 클라우드 및 네트워크 서비스, 데이터 센터, 대규모 분산 시스템 등에 사용.

러스트(Rust):

개발자: 그레이돈 호어(Graydon Hoare)가 2010년에 개발, 모질라(Mozilla)에서 후원 특징: 메모리 안전성과 병렬 처리 기능을 중점적으로 다룸. C++과 유사한 성능을 제공하면서 메모리 오류를 방지.

사용 분야: 시스템 프로그래밍, 웹 어셈블리, 임베디드 시스템 등에 사용.

이 언어들은 각각 고유의 특징과 사용 분야를 가지고 있어, 프로젝트의 요구사항과 목표에 따라 적절한 언어 선택이 중요합니다.