시스템 프로그래밍은 고급 운영체제의 개념으로 이를 이해하기 위해서 리눅스의 사용에 대한 이해가 필요하다.
시스템 프로그래밍을 쉽게 이해하기 위해서 다음 네 가지의 기본적인 지식들이 요구된다.
- C Lang
- 시스템 프로그래밍 가능
- 이식성을 갖춘 프로그램 생성
- 함수형 프로그래밍
- 자료구조
- 컴퓨터 구조
- 운영체제
리눅스는 UNIX 기반의 운영체제로서 서비스의 서버 환경을 구축하거나 고급 운영체제 기능을 직접 제어하기 위해 사용한다.
리눅스는 리누스 토발즈가 학교에서 사용하던 UNIX 컴퓨터를 집에서 사용하고 싶다는 희망을 가지고 개발 되었다.
리눅스는 다중 사용자와 다중 작업을 지원하고 UNIX에서 지원하는 기능을 기본적으로 지원한다.
GNU(GNU is Not UNIX)
GNU는 리차드 스톨만이 UNIX의 프로그래밍 소스를 공유하지 않는 문화에 반발해
오픈 소스 기반의 프로젝트를 시작한 것이 GNU 프로젝트이다.
이 프로젝트를 지원하기 위해 자유 소프트웨어 재단(FSF)를 설리합고, GNU 공개 라이선스(GPL)을 제공했다.
GNU 결과물
- System Call
- Compiler
- API
- Shell
- Editor(vi/vim)
GNU Hurd의 개발 지연으로 UINIX를 대체할 운영체제 개발에 차질이 발생하였으나
리눅스 커널 소스를 도입함으로써 GNU 프로젝트의 결과물과 리눅스 커널이 통합 개발되었다.
리눅스는 표준 C언어인 ANSI C를 사용하므로 좀 더 명확한 프로그래밍을 가능하게 한다.
웹은 다음 그림과 같이 클라이언트의 요청에 서버가 응답을 보내는 구조로 동작한다.
리눅스 서버는 하드웨어와 웹서버를 리눅스 운영체제를 통해서 하드웨어와 웹서버가 통신하도록 한다.
또한, 리눅스는 GCC(GNU Compiler Collection) 컴파일러를 지원해 ㅡ 컴파일러 속도를 줄일 수 있는 장점을 가지고 있다.
대표적인 클라우드 서비스로는 AWS가 있다.
클라우드 컴퓨팅 또한, 서버 환경을 위해서 존재하며 리눅스 기반의 프로그램을 제공한다.
서비스를 위한 서버는 24시간 동안 항상 동작해야 하므로, 일반적인 PC로 서버를 구축하려면 엄청난 시간과 비용이 발생한다.
그렇기 때문에 클라우드 컴퓨팅 서비스는 서버 개발을 위해서 필수적인 요소가 되었다.