Selecting and Recommendation

 

도메인, 특정 문제(Libraries, open source softwares, IDEs, development environments)에 맞는 프로그래밍 언어를 선택해야한다.

명확하게 문제를 정의하고 그에 맞는 프로그래밍 언어를 선택해야한다.

 

1. Hardware Specific Problem?

일반적으로 C, C++, Assembly 언어를 선택한다. 

아두이노 키트는 C를 요구한다.

리눅스유닉스 커널은 C/ C++을 지원하는 플랫폼을 요구한다.

MacOS 커널은 Objective-C/Swift를 요구한다.

C와 C++에서 하드웨어와 관련된 특징은?

  • 물리적 메모리 제어(Physical memory management): C와 C++에는 포인터가 있다. 하드웨어를 다룰 수 있다는 것은 그 언어가 직접 컴퓨터 메모리 값을 읽고 쓸 수 있다는 것이다. 이를 C와 C++이 가장 잘한다. (다른 언어들은 physical하지 않은 메모리를 다룬다.)
  • 비트 단위 연산(Bit operation)

 

2. Hardware Independent Problem?

웹 서버

  • JavaScript: 처음에는 웹 브라우저의 클라이언트 측만 구현됨. 지금은 웹 서버 및 데이터 베이스의 서버 측을 포함한 많은 유형의 호스트 소프트웨어에 JavaScript 엔진이 내장되어 있다.
  • Node.js
  • 전용 도구: Apache, Nginx, Wordpress

데이터 분석, 데이터 사이언스

유용한 정보를 발굴하고 결론을 제시하며 의사 결정을 지원하는 것을 목표로 데이터를 검사, 정리, 변환 및 모델링하는 과정이다.

주요한 요구사항으로는 자연어 처리, 언어의 이미 처리/ 선형 대수, 확률과 통계가 있는데 이에 가장 적합한 언어가 Python이다.

  • Python: 수학, 물리, 생명 관련 계산하기에 좋음. 문자열 처리(분석)에 강함.
  • R: 수학 계산에 좋음. 수학 공식을 풀기에는 좋으나 자연어 처리하기엔 그닥임.

클라우드 컴퓨팅

어딘가에 있는 CPU, GPU, 네트워크를 필요할 때 필요한 만큼 일정 비용을 지불하고 사용한다.

  • OpenStack(오픈소스, Linux Foundation): NASA에서 만들었고 Python을 사용했다. 데이터센터 전체에서 대규모 컴퓨팅, 스토리지 및 네트워킹 리소스 풀을 제어한다.

 

 

 

결론은 언어를 계속 필요에 따라 바꿀 수 있어야 한다는 것이다.

 

 

본 글은 2학년 1학기 학부 강의 내용을 정리한 글입니다. 혹시라도 틀린 부분이 있다면 댓글로 편하게 알려주시면 감사하겠습니다.

'강의 정리 > 오픈소스sw개발방법및도구' 카테고리의 다른 글

OS - FreeBSD, SteamOS  (0) 2023.08.14
Selecting Right OS  (0) 2023.08.14
Programming Language - Julia  (0) 2023.08.14
Problem Definition  (0) 2023.08.13
Introduction to Opensource and Linux  (0) 2023.08.13
Problem Definition

 

"문제 해결"의 측면이 아니라 소프트웨어를 개발함에 있어서 고려해야하는 "문제"를 다루는 측면이다.

즉, 소프트웨어의 특성을 충분히 고민하는 단계이다.

 

1. Software

System Software

  • 기본 시스템 리소스 및 프로세스를 관리하는 범용 소프트웨어
  • low-level assembly language나 machine code로 작성됨 => 언어의 폭이 좁음
  • 하드웨어와 밀접하게 상호작용함, 특정 하드웨어 요구 사항을 충족해야함
  • OS와 동시에 설치됨, 일반적으로 제조업체에서 설치함
  • 컴퓨터가 켜져있으면 계속 실행됨
  • 백그라운드에서 실행되고 사용자는 보통 접근할 수 없음
  • 독립적으로 실행됨
  • 시스템이 작동하는 데 필요함

Application Software

  • 사용자의 요구를 충족시키기 위해 특정 작업을 수행하는 소프트웨어
  • higher-level language로 작성됨(ex-Python, JavaScript)
  • 보통 하드웨어를 고려하지 않음, 하드웨어와 직접적으로 상호작용을 하지 않음
  • 사용자가 필요할 때 설치함
  • 사용자가 프로그램을 실행하고 끔
  • 포그라운드에서 실행되고 사용자는 특정 작업을 수행하기 위해 직접 접근함
  • 실행하기 위해 시스템 소프트웨어가 필요함

 

2. Purpose

순전히 나만을 위한 목적이거나 다른 사람의 요구에 의한 것이다.

    

3. Legacy

백지 상태에서 새로 짜거나 이미 존재하는 플랫폼을 기반으로 짠다.

  • Reverse Engineering (Reengineering): 연역적 추론을 통해 이전에 만든 소프트웨어가 어떻게 작업을 수행하는 지 이해하려고 하는 것이다. 요구사항을 분석하고 디자인, 코드 등을 분석하여 통찰력을 얻는다.
  • Software Reuse: Design Patterns, Program Libraries, Application Program Lines 등을 재사용한다.
  • Refactoring: 코드의 가독성을 높이기 위해, 복잡성을 줄이기 위해, 확장성과 성능을 향상시키기 위해, 프로그램 실행을 빠르게 촉진하기 위해 refactoring을 한다.

 

4. Project Characteristics

  • 기한: 언제까지 서비스를 출시해야 하는 지
  • 성능: 최소한 어느정도의 성능을 내야하는지(capacity, response time)
  • 리소스: 개발자의 수, 개발자 능력, 돈
  • 성능 지표(핵심 성능 지표 KPI): 성능 측정의 한 유형이다. KPI는 조직 또는 조직이 참여하는 특정 활동(프로젝트, 프로그램, 제품)의 결과를 평가한다. 전략 및 운영의 개선을 돕고, 의사 결정을 위한 분석을 만들고, 가장 중요한 것에 집중할 수 있도록 돕는다.

 

5. Hardware Dependency

하드웨어에 의존적임

일반적으로 하드웨어 구성요소에 의해 성능이 제한된다. 길이 딱 정해진 대신 최대한 낼 수 있는 성능이 제한되는 것이다.

ex) 아두이노(ATmega, C, Sketch IDE), 라즈베리파이(ARM Processor, GPIO, USB), 쿠다(NVIDIA GPU, C, C++, Fortran)

 

하드웨어로부터 독립적임

다양한 방식이 가능하다. 양과 질적 방법에 대한 고민을 해야한다.

어떤 것으로 할 지 고르기 위해 많은 것을 알아야 하고 일이 닥치기 전에 미리 고민해야 한다.

ex) 웹 서버 개발

- C++ & Proxygen: C++ 자체만으로는 웹 서버 개발이 힘들어 외부 라이브러리를 사용해야 한다.

- Python & Django: 언어 자체에 웹 서버의 핵심 기술인 HTTP가 있으며 비교적 쉽다.

- JavaScript & Node.js: 성능이 탁월하다.

- Apache/ Nginx

 

6. Mobile Application Development

Native Platform(IOS/ Android)

성능을 극대화할 수 있다. 두 개 이상의 플랫폼 지원이 힘들다. 해당 플랫폼에 완전 특화된 소프트웨어를 개발할 수 있다.

  • 아키텍처? 플랫폼 마다 앱을 따로 만듦
  • 성능? 최대로 낼 수 있음
  • 개발 시간? 길다
  • 비용? 비싸다
  • 타겟? 특정 플랫폼으로 한정됨
  • 유저 경험? 우수하다
  • 코드 재사용? 거의 없음
  • 하드웨어 접근성? 완전히 하드웨어 지원 가능

 

Cross Platform(HTML/ CSS/ JavaScript)

성능 제한이 있지만 한 번 만들어서 여러 플랫폼에 돌릴 수 있다는 것이 큰 장점이다.

  • 아키텍처? 하나의 앱으로 다양한 플랫폼에 가능
  • 성능? 성능 이슈가 있음
  • 개발 시간? 짧다
  • 비용? 싸다
  • 타겟? 한정되지 않음
  • 유저 경험? 모든 플랫폼에 대한 통합 UX로 떨어짐
  • 코드 재사용? 60% 가량 재사용
  • 하드웨어 접근성? 제한됨

Cross Platform이 점점 더 인기를 얻어가고 있는 추세다. 또한 Cross Platform의 성능이 Native에 비해 밀리지 않는다.

 

본 글은 2학년 1학기 학부 강의 내용을 정리한 글입니다. 혹시라도 틀린 부분이 있다면 댓글로 편하게 알려주시면 감사하겠습니다.

'강의 정리 > 오픈소스sw개발방법및도구' 카테고리의 다른 글

OS - FreeBSD, SteamOS  (0) 2023.08.14
Selecting Right OS  (0) 2023.08.14
Programming Language - Julia  (0) 2023.08.14
Selecting and Recommendation  (0) 2023.08.14
Introduction to Opensource and Linux  (0) 2023.08.13

 

Introduction to Opensource and Linux

목표

 오픈소스, 최신 소프트웨어 절차, 철학 및 도구를 이해하고 스스로 리눅스를 경험하는 것이다.

 

오픈소스 소프트웨어란?

 소스코드를 공개해 누구나 특별한 제한 없이 그 코드를 보고 사용할 수 있는 오픈 소스 라이센스를 만족하는 소프트웨어이다.

소프트웨어의 소스 코드를 자유롭게 읽고 재배포 및 개조를 가능하게 하여 버그 개선이 빠른 장점이 있다.

 

자유(Freedom) 소프트웨어란?

 복사와 사용, 연구, 수정, 배포 등의 제한이 없는 소프트웨어이다. 컴퓨터 사용자들의 자유로운 사용을 강조한다.

자유 소프트웨어는 가격이 아니라 자유의 문제이다. 이 개념을 이해하기 위해서는 'Free'를 '무료 맥주'가 아니라 '언론의 자유'로 생각해야 한다.

보다 정확하게는 자유 소프트웨어는 프로그램 사용자가 네가지 필수 자유를 갖는 것을 의미한다.

1. 어떤 목적으로든 원하는 대로 프로그램을 실행할 수 있는 자유 (Freedom Level 0)

2. 프로그램 작동 방식을 연구하고 원하는 대로 컴퓨팅을 수행하도록 변경할 수 있는 자유 (Freedom Level 1)

3. 다른 사람에게 도움이 되도록 사본을 재배포할 수 있는 자유 (Freedom Level 2)

4. 수정된 버전의 사본을 다른 사람들에게 배포할 수 있는 자유 (Freedom Level 3)

 

Free Software Foundation이란?

 자유 소프트웨어 재단은 1985년 10월에 Richard Stallman이설립한 비영리 단체로 조직의 자유 소프트웨어 운동을 지원한다. GNU General Public License와 같은 copyleft를 지향한다.

창립부터 1990년대 중반까지 FSF의 자금은 대부분 소프트웨어 개발자를 고용하여 GNU Project를 위한 자유 소프트웨어를 작성하는 데 사용되었다. 1990년대 중반부터 FSF의 직원들과 자원자들은 자유 소프트웨어 운동과 자유 소프트웨어 커뮤니티를 위해 주로 법적 및 구조적 문제에 대해 일했다.

FSF는 자체 컴퓨터에서 자유소프트웨어만 사용하는 것을 목표로 한다.

 

GNU OS란?

 운영체제이자 컴퓨터 소프트웨어 모음집이다. 이때의 소프트웨어들은 온전히 자유 소프트웨어로 이루어져 있다. 대부분이 GNU 프로젝트의 GPL 라이센스를 가진다.

Unix 계열이지만 자유 소프트웨어이고 Unix 코드를 포함하지 않았다.

 

Richard Stallman은 누구?

- 직업: Activist(활동가) & Programmer

- Known for Free software movement, GNU, GNU Emacs, GNU Compiler Collection, GNU GPL, Copyleft, Free Software Foundation

 

OpenSource Example

<Hardware>

Arduino

 아두이노 하드웨어 제품은 CC BY-SA 라이센스에 따라 라이센스가 부여되는 반면, 소프트웨어는 GNU LGPL, GPL에 따라 라이센스가 부여되며 누구에게나 아두이노 보드 제조 및 소프트웨어 배포가 허용된다.

<Processor>

 RISC-V & Linux

<Datacenter>

 OCP(Open Compute Project)

Facebook에 의해 시작되었다.

 

Why Linux?

[리눅스가 쓰이는 분야]

1. Smartphones and IOT: 안드로이드는 Linux 운영체제를 가지고 customization한 것이다.

2. Physical Computing: 라즈베리파이는 리눅스 OS를 사용한다. 영국에서 개발되었고 저가이다. 

3. Super Computers: 슈퍼 컴퓨터는 거의 모두 OS로 Linux를 사용한다.

4. Linux over Window Desktop: 윈도우 위에서 가상화 작업을 통해 Linux 운영체제인 우분투가 돌아갈 수 있게 되었다.

5. Robot: ROS라는 운영체제는 Linux 운영체제로 만들어졌다.

6. Automative Grade Vehicle(자동차)

7. Classic Game Platform: Playstation, 콘솔형 게임들에 Linux가 쓰였다.

8. Online Game Platform: SteamOS + Linux => Linux에서 Steam을 사용할 수 있다.

9. Data Science: 대규모 분석을 해야할 때 Linux Server를 사용한다.

 

Linux Foundation이란?

 2000년부터 Linux Foundation은 기술 개발 및 상업적 채택을 가속화하기 위해 오픈소스 프로젝트를 중심으로 지속 가능한 생태계를 구축하는 데 전념하고 있다.

가장 큰 오픈소스 비영리 조직이다.

리눅스 외에도 많은 오픈소스 소프트웨어에 참여하고 있다.

 

본 글은 2학년 1학기 학부 강의 내용을 정리한 글입니다. 혹시라도 틀린 부분이 있다면 댓글로 편하게 알려주시면 감사하겠습니다.

'강의 정리 > 오픈소스sw개발방법및도구' 카테고리의 다른 글

OS - FreeBSD, SteamOS  (0) 2023.08.14
Selecting Right OS  (0) 2023.08.14
Programming Language - Julia  (0) 2023.08.14
Selecting and Recommendation  (0) 2023.08.14
Problem Definition  (0) 2023.08.13

+ Recent posts