<소프트웨어 이해하기>
1. 컴퍼일러와 인터프리터
다양한 애플리케이션
애플리케이션
• 사용자(End user)가 직접 사용하는 프로그램
• 범위가 넓다 (핸드폰, 컴퓨터 뿐만 아니라 여러 기계들에도 탑재)
애플리케이션을 만드는 프로그램
애플리케이션들은 어떤 과정을 통해 만들어지는 걸까?
• 프로그래밍 언어로 코딩을 해서 만듦 → 컴파일러와 인터프리터가 이 프로그래밍 코드를 실행할 수 있는 애플리케이션으로 바꿔줌
프로그래밍 언어의 번역기, 컴파일러
사람이 작성하기 쉬운 고수준 프로그래밍 언어 → High-level
High-level 언어를 컴퓨터가 실행할 수 있는 기계어(machine code)로 번역해야 함
💡컴파일러
• 한 언어의 코드를 다른 언어의 코드로 바꿔 주는 것
• 프로그래밍 언어의 번역기
컴파일러 단점
• 머신코드를 사람이 이해할 수 없다는 점, 따라서 머신코드 중에서 원하는 일부만 수정 불가능
• 빠르게 개발할 수 없음
실시간 코드 실행기, 인터프리터
인터프리터
• 컴파일러 프로그램 전체를 한 번에 번역한 후 완성된 컴퓨터 언어로 만들어 준다
• 인터프리터는 코드 실행기 (한줄씩 바로 실행됨)
인터프리터는 실행할 수 있는 프로그램으로 만들어서 주는 게 아니라 프로그래밍 코드 자체를 사용자 컴퓨터에게 보내준다
단점
실행속도가 떨어짐
코드가 유출 될 위험성
고수준 → 저수준으로 갈 수록 코드길이가 훨씬 길어진다
따라서 고수준 언어를 전달하는 인터프리터 방식의 프로그램 용량이 더 작다
컴파일러 vs 인터프리터
컴파일러 인터프리터
개발 편의성 | 코드를 수정하고 실행하려면 컴파일을 다시 해야 한다. 👎 | 코드를 수정하고 즉시 실행할 수 있다. 👍 |
실행 속도 | 빠르다. 👍 | 느리다. 👎 |
보안 | 프로그램의 코드가 유출되지 않는다. 👍 | 프로그램의 코드가 유출될 수 있다. 👎 |
파일 용량 | 프로그램의 실행 파일 전체를 전송해야 하므로, 용량이 크다. 👎 | 프로그램의 코드만 전송하면 실행이 되므로, 용량이 작다. 👍 |
프로그래밍 언어 | C, C++처럼 비교적 저수준에 가까운 언어 | Python, Ruby처럼 비교적 고수준에 가까운 언어 |
2. 운영체제 개요
운영체제의 역할
💡운영체제의 역할 1: 입력과 출력 관리
• 입력과 출력은 운영체제로 연결되어있음
• 입출력장치와 애플리케이션을 운영체제가 연결해준다
→ 애플리케이션이 안정적으로 하드웨어를 사용할 수 있게 된다
💡운영체제의 역할 2: 저장과 불러오기
휘발성 : 컴퓨터가 켜져 있는 동안만 저장되는 정보
비휘발성: 컴퓨터가 꺼져도 저장되는 정보
→ 이 두 가지를 운영체제가 결정해서 저장장치에 분배
읽고 쓰는 속도
빠른 저장장치는 가격이 비쌈 따라서 용량이 적음
운영체제가 결정한다
readonly memory (rom)
→ 수정불가
저장 장치의 종류
- 휘발성 vs 비휘발성
- 빠르고 작은 vs 용량 느리고 많은 용량
- 데이터 수정 가능 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 와 기기의 내장된 여러 기능을 더 쉽게 활용할 수 있음
• 인터넷 연결이 없어도 설치 가능
• 설치, 배포 과정 필수
웹 애플리케이션
• 설치, 배포 과정이 없음
• 접근성이 더 좋음
• 적은 투자와 노력으로 서비스 런칭 가능
웹을 활용하는 여러가지 방법
싱글 페이지 애플리케이션
• 페이지 이동이 없음
하이브리드 웹 애플리케이션
• 애플리케이션에서 바꾸고 싶은 부분을 웹페이지로 뚫어두고 내용을 바꾼다
프로그레시브 웹 애플리케이션
• 웹 애플리케이션과 네이티브 웹 애플리케이션의 장점을 합쳐 만든 것
'🏃♀️ 대외활동 > Codeit Boost-Node.js' 카테고리의 다른 글
4주차 스터디 모던 자바스크립트 (1) [코드잇 부스트 백엔드 스터디 ] (0) | 2024.05.25 |
---|---|
3주차 컴퓨터 구조 이해하기 [코드잇 부스트 백엔드 스터디 ] (0) | 2024.05.20 |
2주차 프로그래밍과 데이터 in JavaScript [코드잇 부스트 백엔드 스터디] (1) | 2024.05.12 |
2주차 프로그래밍 핵심 개념 in JavaScript [코드잇 부스터 백엔드 스터디] (2) | 2024.05.12 |
1주차 프로그래밍 언어 이해하기 [코드잇 부스트 백엔드 스터디] (0) | 2024.05.08 |