정보를 구조화하여 저장하고 필요할 때 효율적으로 검색하고 조작 가능한 시스템
구조화된 형태로 데이터를 저장해 데이터의 일관성과 무결성 유지
여러 사용자나 응용 프로그램이 동시에 DB에 접근해 데이터를 공유하고 사용
시스템 고장이나 데이터 손상 시 데이터의 백업과 복구를 지원해 데이터의 손실 최소화
테이블 간의 관계를 사용해 데이터를 저장, 관리, 조작
테이블(Table): 데이터가 행과 열의 형태로 저장되는 표
열(Column): 특정 유형의 데이터를 나타내는 속성
행(Row): 개별 데이터 레코드
기본키(Primary Key): 각 행을 고유하게 식별하기 위해 사용되는 열의 집합. 중복을 방지하고 테이블 간의 관계를 설정하는 데 사용
외래키(Foreign Key): 다른 테이블의 기본키를 참조하는 열. 테이블 간의 관계를 설정하고 연결
DB에서 정보를 요청하거나 검색하기 위해 사용되는 명령어나 질문
조회(Select)
추가(Insert)
수정(Update)
삭제(Delete)
SW 애플리케이션끼리 서로 상호작용하기 위한 인터페이스를 제공하는 도구나 규약
웹 API: 웹 서비스를 통해 애플리케이션 간의 통신을 가능하게 하는 API
HTTP를 사용하며 JSON 또는 XML 형식의 데이터를 주고받는다
라이브러리 API: SW 라이브러리나 프레임워크의 기능을 사용할 수 있도록 하는 API
주로 특정 프로그래밍 언어나 플랫폼에 종속적이며, 애플리케이션을 개발할 때 유용
ex) NumPy, TensorFlow 는 파이썬에서 수치 연산과 머신 러닝 모델을 개발할 때 사용되는 라이브러리
SW 개발 및 배포 모델을 나타내는 용어
오픈소스 SW 는 소스 코드가 공개되어 있으며 누구나 해당 SW 검토, 수정, 개선, 자유롭게 배포 가능
일반적으로 무료로 제공되며, 라이선스 조건에 따라 자유롭게 재배포 가능
개발자가 특정 환경에서 애플리케이션을 만들고 실행하기 위해 필요한 모든 도구, 라이브러리, 샘플 코드 및 문서 제공
라이브러리, 도구(Tools), 문서(Documentation), 샘플 코드(Sample Code) 같은 요소
SW 개발을 위한 통합된 환경을 제공하는 애플리케이션
코드 편집기: 소스 코드 작성, 편집
코드 하이라이팅, 자동 완성, 문법 검사 기능 제공 → 효율적인 코드 작성
컴파일러 또는 인터프리터: 소스 코드를 기계어로 변환하거나 실행
디버거: 프로그램의 오류 찾고 수정
프로그램의 실행 일지 중지 후 변수의 값이나 프로그램의 상태 검사 기능 제공
빌드 자동화 도구: 소스 코드 컴파일하고 실행 파일 생성
빌드 프로세스 자동화 → 반복적인 작업 최소화
프로젝트 관리 도구: 프로젝트의 파일 및 디렉토리 구조 관리, 소스 코드의 버전 관리 지원
ex: Visual Studio, IntelliJ, IDEA, Eclipse, PyCharm, Android Studio
HW와 응용 프로그램 간의 상호 작용을 관리하고 제어
자원 관리: 컴퓨터의 자원 효율적 관리, 여러 프로세스 간의 자원 공유 및 충돌 관리하고 필요한 자원 할당
CPU, 메모리, 디스크 공간, 네트워크
프로세스 관리: 프로세스의 생성, 실행, 일시 중지 및 종료 관리
다중 작업 환경에서 여러 프로그램이 동시에 실행될 수 있도록
파일 시스템 관리: 파일 및 디렉토리의 생성, 읽기, 쓰기, 삭제 등 관리
데이터를 구조화하여 저장하고 사용자 및 응용 프로그램이 데이터에 접근할 수 있도록
입출력 관리: 키보드, 마우스, 모니터, 프린터, 네트워크 카드 등과 같은 장치 제어하고 데이터 전송
사용자 인터페이스 제공: 사용자가 컴퓨터와 상호 작용할 수 있는 환경 제공
ex. GUI, CLI
1960년대 말과 1970년대 초에 AT&T 벨 연구소에서 개발되었으며 이후 많은 변형과 OS 들이 등장
멀티유저(Multi-user): 여러 사용자가 동시에 시스템에 접근하여 작업을 수행할 수 있는 환경 제공
각 사용자는 자신의 계정을 통해 시스템에 로그인하여 개별적인 작업 수행
멀티태스킹(Multi-tasking): 여러 프로세스가 동시에 실행되고 서로 간섭하지 않는 환경 제공하여 멀티태스킹 지원
여러 응용 프로그램이 동시에 실행되어 작업 수행
포터블(Portable): 이식성이 높은 운영 체제로서, 다양한 하드웨어 아키텍처와 플랫폼에서 동작
다양한 컴퓨터 시스템에서 동일한 SW 환경을 제공하여 개발 및 관리를 단순화
커맨드 라인 인터페이스(Command Line Interface, CLI): 텍스트 기반의 사용자 인터페이스를 제공하여 사용자가 커맨드를 입력하고 실행
효율적인 시스템 관리와 프로그래밍 활동 가능
강력한 네트워킹 지원: 네트워킹을 위한 다양한 도구와 프로토콜을 제공하여 네트워크 환경에서의 효율적인 통신 지원
오픈소스: 누구나 소스 코드 열람, 수정 가능
커뮤니티에 의해 지속적으로 개선 및 보완되며, 사용자들에게 무료로 제공
다중 사용자 및 다중 작업 지원: 여러 사용자가 동시에 시스템에 접근하여 작업을 수행할 수 있는 환경을 지원
여러 프로세스가 동시에 실행되고 서로 간섭하지 않는 환경을 제공하여 다중 작업을 지원
이식성: 리눅스는 다양한 하드웨어 아키텍처와 플랫폼에서 동작할 수 있도록 설계되어 있습니다. 따라서 서버, 데스크톱, 임베디드 시스템 등 다양한 환경에서 사용됩니다.
강력한 네트워킹 기능: 네트워킹을 위한 다양한 도구와 프로토콜을 제공하여 네트워크 환경에서의 효율적인 통신 지원 → 서버 운영 및 네트워크 관리에 매우 유용
커맨드 라인 인터페이스 및 그래픽 사용자 인터페이스: 텍스트 기반의 CLI와 GUI를 모두 지원
사용자는 이 중에서 선택하여 리눅스 시스템 사용 가능