본문 바로가기

programming study/Computer Science

[코드잇] 소프트웨어 이해하기 (2021.2.10)

본 내용은 해당 강의 토대로 작성

컴파일러와 인터프리터

01. 다양한 애플리케이션

애플리케이션

  • App, 어플
  • 컴퓨터, 노트북, 스마트폰 등에서 사용하는 프로그램들
  • 소비자(사용자, End user)가 직접 사용하는 프로그램
  • 에어콘, TV, 세탁기, 선풍기, 키오스크 등을 동작 시킬 수 있는 것

02. 애플리케이션을 만드는 프로그램

  • 컴파일러와 인터프리터 : 영어와 숫자가 섞인 코드를 애플리케이션으로 바꿔준다.

03. 프로그래밍 언어의 번역기, 컴파일러

  • 한 언어의 코드를 다른 언어의 코드로 바꿔준다.
  • 프로그래밍 언어의 번역기
  • 고수준 프로그래밍 언어를 머신코드로 번역
  • 프로그램 전체를 한번에 번역 후 완성된 컴퓨터 언어로 만든다.
  • 다른 사람에게 번역된 머신코드를 전달하고 전달받은 컴퓨터는 그것을 실행시킬 수 있다.

단점

  • 머신코드를 사람이 이해할 수 없다.
  • 고급 언어로 수정해서 다시 컴파일 해야한다.
  • 컴파일에 시간이 소요된다.
  • 개발 속도가 느리다.
  • 프로그램 용량이 크다.

04. 실시간 코드 실행기, 인터프리터

  • 한 줄씩 즉흥적으로 실행한다.
  • 코드 실행기
  • 바로 결과를 확인할 수 있다.
  • 개발 속도가 빠르다.
  • 프로그래밍 코드 자체를 보낸 뒤, 사용자의 컴퓨터에서 인터프리터로 번역을 실시간으로 한다.
  • 프로그램 용량이 작다.

단점

  • 실행속도가 느리다.
  • 코드가 유출될 가능성이 있다.

05. 컴파일러 vs. 인터프리터

  컴파일러 인터프리터
개발 편의성 코드 수정 시 다시 컴파일 코드 수정 후 즉시 실행 가능
실행 속도 빠름 느림
보안 프로그램의 코드가 유출되지 않음 프로그램의 코드가 유출될 수 있음
파일 용량 프로그램의 실행 파일 전체를 전송해야하므로 용량이 큼 프로그램의 코드만 전송하면 실행이 되므로, 용량이 작음
프로그래밍 언어 C, C++처럼 비교적 저수준에 가까운 언어 Python, Ruby처럼 비교적 고수준에 가까운 언어

운영체제 개요

01. 운영 체제

  • Operating System(OS)
  • 모든 컴퓨터와 핸드폰에 설치되어 있다.
    • 윈도우 10, macOS, Linux
    • 안드로이드, iOS
  • 애플리케이션이 잘 동작하도록 뒤에서 도와준다.

02. 운영체제의 역할 I (입력과 출력)

  • 컴퓨터는 입력장치출력장치로 이루어져 있다.
  • 운영체제가 입력과 출력을 매끄럽게 연결
  • 다양한 입출력 장치, 방식을 고려해서 애플리케이션과 연결한다.

03. 운영체제의 역할 II (저장과 불러오기)

휘발성과 비휘발성

  • 저장 용량은 제한이므로 운영체제는 정보를 휘발성, 비휘발성으로 나눈다.
  • 휘발성 : 컴퓨터가 꺼지면 없어지는 것, 빠름 -> RAM
  • 비휘발성 : 컴퓨터가 꺼져도 저장되는 것, 느림 -> 하드디스크

수정 가능과 수정 불가

  • 수정 가능 : 영화, 문서, 사진과 같은 정보
  • 수정 불가 : 컴퓨터 기본 세팅, ROM(Read - Only Memory)

저장 장치의 종류

  • 휘발성 vs. 비휘발성
  • 빠르고 작은 용량 vs. 느리고 많은 용량
  • 데이터 수정 가능 vs. 데이터 수정 불가능

ROM, RAM, HDD, SDD CPU(cache, register)

운영체제에 의해 상황과 목적에 맞게 저장, 불러오기를 한다.

04. 운영체제의 역할 III (여러 프로그램 동시에 빠르게 실행하기)

멀티 태스킹

  • 여러 프로그램들이 동시 실행 되는 것
  • 사람이 못 느낄 정도로 잘게 쪼개서 각 장치가 효율적으로 일할 수 있도록 역할 분담

05. 운영체제의 종류

  • windows, Android : 사용자 설정을 쉽게 바꿀 수 있다. 편리하지만 바이러스에 취약
  • macOS, iOS : 보안 철저, 환경설정 선택지 제한

용도에 따른 분류

  • 데스크톱/랩톱 : windows, macOS, Linux
  • 모바일 : Android, iOS
  • 서버 : Ubuntu, Unix 안정성, 속도, 효율 중요
  • 임베디드 : 종류나 환경이 다양해서 운영체제가 매우 많다.
    • 실시간 운영 체제(Real-time operating system, RTOS) : 정해진 시간 이내에 안정적으로 동작
    • VxWorks, Real-Time LINUX

06. 운영체제의 발전 역사

UNIX

  • 많은 운영체제는 UNIX로부터 발전
  • 1970초 켄 톰슨, 데니스 리치가 개발
  • C언어로 작성
  • 다른 컴퓨터에 수정해서 적용이 쉬웠음
  • POSIX : Unix라면 갖춰야 할 규격과 기능
    • POSIX를 만족해야 공식 버전으로 인증된다.
    • macOS

UNIX-like systems

  • FSF(Free Software Foundation)에서 개발
  • 누구나 사용, 누구나 변형 but. 반드시 코드 공개
  • GNU(GNU is Not Unix) : Unix의 코드를 한 줄도 사용하지 않고 만든 Unix와 유사한 OS
  • POSIX를 만족하지만 공식 인증은 아니다.
  • GNU/Linux kernel(Linux)
    • kernel : 운영체제의 핵심 부분
    • 가장 많은 사람이 투입된 공개 프로젝트
    • Android, ubuntu, Chrome OS

네이티브 애플리케이션과 웹 애플리케이션

01. 플랫폼의 파편화

플랫폼(Platform)

  • 프로그램이 실행되는 하드웨어, 소프트웨어 환경
  • 애플리케이션의 플랫폼 : 운영체제
  • 운영체제의 플랫폼 : 하드웨어
  • 각 플랫폼에 맞게 프로그램을 만들어야 한다.
  • 플랫폼 의존성(Platform Dependency) : 프로그램을 만들 때, 실행할 때 플랫폼의 영향을 받는다.
    • 프로그램을 만들 때 플랫폼의 갯수만큼 만들어야 한다.
    • 애플리케이션이 가장 영향을 많이 받는다.
    • 운영체제와 하드웨어 전체를 고려해야되기 때문이다.

플랫폼의 파편화

Android : 다양한 기기

iOS : 아이폰, 아이패드

  • 이 모든 플랫폼에 대해서 각각의 프로그램과 개발환경을 고려해야한다.
  • 앱을 출시하기와 유지보수하기도 어렵다.

02. 표준의 필요성

  • 플랫폼 파편화를 해결하기 위한 대책
  • 상호간의 약속
  • 이어폰 연결 단자, 블루투스, USB, HDMI

03. 크로스 플랫폼 I (가상 머신)

  • 여러 OS, CPU 등에서 동일하게 실행할 수 있는 환경
  • 가상의 플랫폼(컴퓨터)을 만들어, 플랫폼 위에 켜놓는다.
  • 애플리케이션 개발자는 이 가상의 컴퓨터에 실행되는 프로그램을 만들면 된다.
  • JVM(Java Virtual Machine) : 이식성, 범용성이 좋다.
    • 모든 플랫폼에대해 JVM에 동작하는 Java 프로그램만 작성할 수 있다.

04. 크로스 플랫폼 II (웹)

  • 웹 브라우저가 JVM의 역할
  • 별도 앱을 추가 설치하지 않아도 연결할 수 있다.
  • 접근성과 간편함
  • 웹은 더 간편하게 크로스 플랫폼을 만들 수 있다.
  • 국제 표준화 기구(ISO)에 웹 표준 등록
  • 반응형 웹 디자인 : 기기의 사이즈에 반응하여 최적화
  • 웹 주요 프로그래밍 언어 Javascript 각광

웹의 단점

  • 브라우저 호환성 문제
  • 브라우저에따라 코드 다르게 동작
    • 웹 표준 버전의 적용이 느림
    • 일부러 웹 표준과 다르게 만듦

05. 네이티브 애플리케이션과 웹 애플리케이션

  • 웹 애플리케이션 : 웹을 활용해서 애플리케이션처럼 동작하는 것.
    • Hardware -> OS -> Browser -> Web application
  • 네이티브 애플리케이션 : OS에서 실행되는 애플리케이션, 브라우저도 하나의 네이티브 앱.
    • Hardware -> OS -> Native application

웹 애플리케이션의 장점과 단점

  • 장점
    • 설치, 배포의 과정이 없다.
    • 주소만 입력해도 접근 가능
    • 수정사항 실시간 반영
    • 링크로 웹을 공유 가능
    • 적은 투자와 노력으로 서비스 런칭 가능
  • 단점
    • 기기 사용 기능에는 제한

네이티브 애플리케이션의 장점과 단점

  • 장점
    • OS와 기기에 내장된 여러 기능 활용 가능
    • 인터넷 연결이 없어도 실행 가능
  • 단점
    • 설치, 배포의 과정을 반드시 거쳐야 한다.
    • 업데이트

06. 웹을 활용하는 여러 가지 방법

Single-page Application

  • 하나의 페이지에서 내용만 갈아끼워지는 방식
  • 페이스북, 지메일, 구글맵

Hybrid Web Application

  • 일반적인 네이티브 애플리케이션 일부를 웹 사이트로 대체
  • 어플내의 광고 화면
  • 정해진 특정 공간만 바꿀 수 있음

Progressive Web Application(PWA)

  • Web Application의 장점과 Native Application의 장점을 합한 것
  • 인터넷이 연결되지 않은 오프라인에서도 동작
  • 홈 화면에 설치 가능
  • OS 기능 사용 가능
  • 앱의 내용을 실시간으로 업데이트 가능

느낀점

인터프리터와 컴파일러에 대해서 배울 수 있어서 좋았다.

전체적으로 내가 발을 담그려는 개발자 분야에 대해서 맥락을 알 수 있어서 좋았다. 더도 말고 덜도 말고 지금 시점에서 딱 보게 되어 더 좋았던 것 같다. 아예 문외한이면 너무 동떨어진 이야기였을 테니까