운영체제라고 하면 흔히 Window, Linux, Mac, Unix를 떠올릴 것이다. 맞는 말이다.
그렇다면 그런 운영체제들이 어떤 방식으로 동작하고, 어떻게 운영체제 위에서 우리의 서비스가 돌아가는 걸까? 쉽사리 대답하지 못할것이다. 또는 굳이 알고싶지 않을수도 있다.
“내가 백엔드 개발을 하는데, 운영체제를 굳이 깊게 알아야 할까?”
“어차피 서버도 클라우드에서 띄우고, 코드는 프레임워크가 다 처리해주는데 OS까지 알아야 할 필요가 있을까?”
아마 한 번쯤 이런 의문을 가져본 적이 있을 것이다.
나 역시 처음엔 “프로그래밍만 잘 하면 되지, OS는 굳이…”라는 생각을 했었다.
하지만 서비스가 커지고, 그리고 조금 더 효율적이고 안정적인 백엔드 서비스를 만들고 싶을수록
운영체제에 대한 이해가 단순한 ‘지식’이 아니라 ‘필수 역량’임을 깨닫게 된다.
개발자들이 구현하는 서비스들은 모두 운영체제위에서 실행된다.
서버가 동작하고, 프로세스와 스레드가 돌아가고, 메모리와 네트워크, 파일 시스템까지
결국엔 모든 동작이 OS의 관리 아래에서 이루어진다.
서버가 갑자기 느려질 때, 어디서 병목이 생기는지 파악하려면?
메모리 누수, CPU 폭주, 파일 핸들 고갈 같은 문제를 디버깅하려면?
여러 요청을 동시에 처리하는 동시성 프로그래밍에서 안전하게 데이터 일관성을 보장하려면?
이러한 고민이 드는 순간, 우리는 결국 운영체제의 원리와 한계에 맞닥뜨리게 된다.
그래서 백엔드 개발자라면 운영체제에 대한 깊이 있는 이해가 단순한 옵션이 아니라,
더 나은 서비스를 만들기 위한 필수 역량임을 점점 더 실감하게 된다.
이 시리즈에서는 바로 그 이유와 실제 현장에서 필요한 운영체제의 원리를 공부하며 하나씩 풀어가려 한다.
한마디로 컴퓨터 자원을 효율적으로 관리하는 소프트웨어이다.
운영체제는 컴퓨터를 관리하기 위해 기본적인 규칙이나 절차를 규정하여 컴퓨터 내의 모든 하드웨어와 응용 프로그램을 관리한다. 또한 사용자가 직접 자원에 접근하는것을 막음으로서, 컴퓨터의 자원을 보호한다. 대신 사용자가 자원을 이용할 수 있는 다양한 인터페이스를 지원한다.
커널에 사용자의 명령을 전달하고 실행 결과를 사용자에게 알려주는 역할
그래픽을 사용한 인터페이스를 GUI(Graphical User Interface)라 부름
쉽게 말해 커널은 운영체제의 핵심적인 기능의 집합체이고, 인터페이스는 그 커널과 사용자들을 이어주는 중간 다리와 같다고 생각하면 될 것 같다.
과거와 오늘날 사용되는 혹은 사용 됐던 커널들에 대해 간단히 소개하겠다.
마이크로 구조(micro architecture) 커널은 프로세스 관리, 메모리 관리, 프로세
스 간 통신 관리 등 가장 기본적인 기능만 제공하고 나머지 기능(드라이버,파일 시스템,네트워크 등)은 별도의 프로세스(서버)로 분리해서 운영한다.
커널의 각 모듈은 세분화되어 존재하고 모듈 간의 정보 교환은 프로세스 간 통
신을 이용하여 이루어짐
iOS, macOS, watchOS 등 애플 생태계에서 사용되는 운영체제의 기반 구조
마이크로커널 | 계층형 커널 | |
---|---|---|
구조 | 최소 핵심 기능만 커널에, 나머진 분리 | 여러 계층으로 커널 구조화 |
확장/유지보수 | 뛰어남 | 비교적 쉬움 |
성능 | 다소 느릴 수 있음 | 계층이 많으면 느려질 수 있음 |
안정성 | 매우 높음 | 계층별 분리로 높음 |
예시 | QNX, MINIX 등 | 초기 UNIX, THE OS 등 |
즉 둘 다 안전성과 유지보수성을 높이려는 시도지만, 구조적 철학이 다르다고 생각하면 될 것 같다.
운영체제의 더 깊은 개념, 주요 동작 원리, 백엔드 개발자 실무와 연결되는 다양한 내용을
앞으로 이어질 시리즈 글들에서 자세히 정리할 예정입니다.
각 항목별 심화 내용이 궁금하다면 아래 목차나 '운영체제' 시리즈의 다음 글들을 참고해주세요.