Super Kawaii Cute Cat Kaoani
본문 바로가기
🏃‍♀️ 대외활동/Codeit Boost-Node.js

3주차 소프트웨어 이해하기 [코드잇 부스트 백엔드 스터디]

by wonee1 2024. 5. 20.
728x90

<소프트웨어 이해하기> 

 

1. 컴퍼일러와 인터프리터

 

다양한 애플리케이션 

 

애플리케이션

• 사용자(End user)가 직접 사용하는 프로그램

• 범위가 넓다 (핸드폰, 컴퓨터 뿐만 아니라 여러 기계들에도 탑재)

 

 

 

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

 

 

애플리케이션들은 어떤 과정을 통해 만들어지는 걸까?

• 프로그래밍 언어로 코딩을 해서 만듦 → 컴파일러와 인터프리터가 이 프로그래밍 코드를 실행할 수 있는 애플리케이션으로 바꿔줌

 

 

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

 

사람이 작성하기 쉬운 고수준 프로그래밍 언어 → High-level

High-level 언어를 컴퓨터가 실행할 수 있는 기계어(machine code)로 번역해야 함

 

💡컴파일러

• 한 언어의 코드를 다른 언어의 코드로 바꿔 주는 것

• 프로그래밍 언어의 번역기

 

컴파일러 단점

• 머신코드를 사람이 이해할 수 없다는 점, 따라서 머신코드 중에서 원하는 일부만 수정 불가능

• 빠르게 개발할 수 없음

 

 

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

 

인터프리터

• 컴파일러 프로그램 전체를 한 번에 번역한 후 완성된 컴퓨터 언어로 만들어 준다

• 인터프리터는 코드 실행기 (한줄씩 바로 실행됨)

인터프리터는 실행할 수 있는 프로그램으로 만들어서 주는 게 아니라 프로그래밍 코드 자체를 사용자 컴퓨터에게 보내준다

 

단점

실행속도가 떨어짐

코드가 유출 될 위험성

 

고수준 → 저수준으로 갈 수록 코드길이가 훨씬 길어진다

따라서 고수준 언어를 전달하는 인터프리터 방식의 프로그램 용량이 더 작다

 

컴파일러 vs 인터프리터

 

 

컴파일러 인터프리터

개발 편의성 코드를 수정하고 실행하려면 컴파일을 다시 해야 한다. 👎 코드를 수정하고 즉시 실행할 수 있다. 👍
실행 속도 빠르다. 👍 느리다. 👎
보안 프로그램의 코드가 유출되지 않는다. 👍 프로그램의 코드가 유출될 수 있다. 👎
파일 용량 프로그램의 실행 파일 전체를 전송해야 하므로, 용량이 크다. 👎 프로그램의 코드만 전송하면 실행이 되므로, 용량이 작다. 👍
프로그래밍 언어 C, C++처럼 비교적 저수준에 가까운 언어 Python, Ruby처럼 비교적 고수준에 가까운 언어

 


 

2. 운영체제 개요

 

운영체제의 역할

 

 

💡운영체제의 역할 1: 입력과 출력 관리

 

• 입력과 출력은 운영체제로 연결되어있음

• 입출력장치와 애플리케이션을 운영체제가 연결해준다

→ 애플리케이션이 안정적으로 하드웨어를 사용할 수 있게 된다

 

 

💡운영체제의 역할 2: 저장과 불러오기

 

휘발성 : 컴퓨터가 켜져 있는 동안만 저장되는 정보

비휘발성: 컴퓨터가 꺼져도 저장되는 정보

→ 이 두 가지를 운영체제가 결정해서 저장장치에 분배

읽고 쓰는 속도

빠른 저장장치는 가격이 비쌈 따라서 용량이 적음

운영체제가 결정한다

readonly memory (rom)

→ 수정불가

 

 

저장 장치의 종류

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

 

 

💡운영체제의 역할 3: 여러 프로그램 동시에 빠르게 실행하기

 

여러 프로그램들이 저장 장치에 한꺼번에 요청하면?

→ 혼란이 생길 수 있음

따라서 운영체제는 애플리케이션 사이에서 조율을 해주는 역할을 담당함

 

 

 

운영체제의 종류

 

 

 

운영체제의 종류

window, android

→ 사용자 설정 같은 걸 더 쉽게 바꿀 수 있음 ****

외부 프로그램들도 내 컴퓨터의 설정을 바꿀 수 있다는 것

→ 바이러스에 좀 더 취약함

• macOs ios

→ 보안이 철저한 대신 환경설정의 선택지가 제한되어있음

 

 

☑️데스크톱/랩톱

→ Window, macos, linux

☑️ 모바일

→ android, ios

☑️ 서버

→ 안정성 속도 효율이 가장 중요한 컴퓨터

→ ubuntu, unix, linux,centos

☑️ 임베디드

→ 일반 컴퓨터가 아닌 다른 기계에 들어가는 것

→ 실시간 운영체제 사용

 

 

실시간 운용체제(RTOS)

무조건 빠르게 동작하기 보다 정해진 시간 안에 확실히 끝내는 것

 

 

운영체제의 발전 역사

 

UNIX

• 1970년 데니스 리치, 켄 톰슨에 의해서 처음 개발됨

• 대부분 C 언어로 작성되어있고 다른 컴퓨터에 수정해서 적용이 쉬움→ 운영체제로써 인기를 끌게 됨

• UNIX 이후 여러 운영체제들이 등장해 이를 표준화하기 위해 POSIX라는 표준이 등장

POSIX

• UNIX 라면 갖춰야 할 규격과 기능 → 만족시 UNIX의 공식 버전으로 인증

GNU

• UNIX의 코드를 한 줄도 사용하지 않고 만든 UNIX와 유사한 OS

LINUX

• GNU + Linux Kernel → GNU/LINUX

 

 

 


 

 

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

 

플랫폼의 파편화

 

플랫폼

• 프로그램이 실행되는 하드웨어, 소프트웨어 환경

 

플랫폼 의존성

• 각 플랫폼에 맞게 프로그램을 만들어야함 → 종류가 안 맞으면 실행이 안됨!

• 프로그램을 만들 때 플랫폼 개수 만큼 만들어야 함

 

표준의 필요성

☑️플랫폼 파편화의 해결책 → 표준

표준이란 상호간의 약속

 

 

크로스 플랫폼

 

크로스 플랫폼이란?

플랫폼 파편화의 문제를 해결하기 위해 나온 개념으로, 하나의 프로그램만으로 여러 플랫폼에서 실행 할 수 있는 것을 의미

• 다양한 플랫폼 위에 소프트웨어로 만든 또 하나의 컴퓨터를 실행시켜서 다양한 플랫폼을 마치 하나의 컴퓨터처럼 만드는 것

 

☑️크로스 플랫폼 1: 가상머신

• 여러 OS, CPU 등에서 동일하게 실행할 수 있는 환경

가상의 컴퓨터에서 돌아가는 프로그램 하나만 만들면 된다

 

💡JAVA이를 실행함 → JVM 자바의 가상머신

이식성이 좋고 범용성이 높다

 

 

☑️ 크로스 플랫폼 2: 웹

• 웹 규격에 맞춰 제작한다

웹은 더 간편하게 크로스 플랫폼을 만들 수 있음 → 반응형 웹 디자인

 

웹의 단점

• 브라우저 호환성 문제

 

 

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

 

웹을 활용해서 애플리케이션을 실행하는 것→ 웹 애플리케이션

기기의 OS 에서 바로 실행할 수 있는 애플리케이션→ 네이티브 애플리케이션

 

네이티브 애플리케이션

• OS 와 기기의 내장된 여러 기능을 더 쉽게 활용할 수 있음

• 인터넷 연결이 없어도 설치 가능

• 설치, 배포 과정 필수

 

웹 애플리케이션

• 설치, 배포 과정이 없음

• 접근성이 더 좋음

• 적은 투자와 노력으로 서비스 런칭 가능

 

 

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

 

 

싱글 페이지 애플리케이션

• 페이지 이동이 없음

 

하이브리드 웹 애플리케이션

• 애플리케이션에서 바꾸고 싶은 부분을 웹페이지로 뚫어두고 내용을 바꾼다

 

프로그레시브 웹 애플리케이션

• 웹 애플리케이션과 네이티브 웹 애플리케이션의 장점을 합쳐 만든 것

 

728x90