프롤로그: 컴퓨터공학은 코딩이 아니다
우리는 흔히 컴퓨터공학을 '프로그래밍을 배우는 일'이라고 생각한다. 파이썬 문법을 익히고, 자바스크립트로 웹페이지를 만들고, 프레임워크 사용법을 따라 해보면 어느 정도는 맞는 말처럼 보인다. 하지만 개발을 조금만 더 해보면 곧 이상한 장면을 만나게 된다. 문법은 아는데 프로그램이 자꾸 느리다. 코드는 돌아가는데 메모리가 새는 것 같다. 서버는 분명 멀쩡해 보이는데 어떤 날은 갑자기 장애가 난다. 로그인 기능은 만들었는데 왜 보안은 늘 불안할까. AI API를 붙여서 데모는 만들었는데, 실제 서비스로 운영하려니 어디서부터 손대야 할지 막막하다.
이 순간부터 우리는 깨닫기 시작한다. 문제는 문법이 아니었다. 진짜 문제는 코드 뒤에서 움직이는 원리를 모른다는 데 있었다.

컴퓨터공학은 코드를 쓰는 기술이 아니라 구조를 이해하는 학문이다
컴퓨터공학의 출발점은 언어 문법이 아니다. 더 본질적인 질문은 이것이다. 현실의 문제를 어떻게 컴퓨터가 처리할 수 있는 형태로 바꿀 것인가?
사람은 애매함을 견딘다. 문맥을 추론하고, 부족한 정보를 상식으로 메운다. 하지만 컴퓨터는 그렇지 않다. 컴퓨터는 입력과 출력이 분명해야 하고, 절차가 분해되어 있어야 하며, 데이터가 일정한 형식으로 정리되어 있어야 한다. 다시 말해 컴퓨터공학은 세상의 문제를 계산 가능한 구조로 번역하는 일이다.
쇼핑몰 추천 시스템을 만든다고 해보자. 겉으로 보기에는 '고객이 좋아할 만한 상품을 보여주기'라는 간단한 요구처럼 보인다. 하지만 컴퓨터에게 이 문제는 전혀 다르게 보인다. 사용자의 행동은 어떤 데이터로 저장할 것인가, 상품 간의 유사성은 무엇으로 계산할 것인가, 응답 속도는 몇 밀리초 안에 맞출 것인가, 동시에 수많은 사용자가 접속해도 시스템은 버틸 수 있는가, 개인정보는 어떻게 보호할 것인가 같은 질문으로 잘게 쪼개진다. 이때부터 문제는 더 이상 '추천 문구를 어떻게 띄울까'가 아니라, 계산, 저장, 실행, 통신, 보호의 문제가 된다.
그래서 컴퓨터공학은 코딩보다 넓다. 코드는 그 구조를 표현하는 수단일 뿐이다. 설계가 빈약하면 문법이 아무리 정확해도 시스템은 쉽게 흔들린다. 반대로 구조를 이해하면 처음 보는 언어와 도구도 훨씬 빠르게 익힐 수 있다. 언어는 바뀌어도 계산의 원리, 메모리의 특성, 운영체제의 역할, 네트워크의 제약, 데이터베이스의 설계 원칙은 쉽게 사라지지 않기 때문이다.
왜 개발은 늘 기초 개념으로 되돌아오는가
실무에서 만나는 어려움은 생각보다 자주 기초 CS 개념으로 이어진다. 단순히 기능을 구현하는 단계에서는 잘 보이지 않지만, 프로그램이 실제로 사용되기 시작하는 순간 문제의 정체가 드러난다.
버그는 종종 추상적인 실수가 아니라 상태와 실행 순서를 제대로 이해하지 못해서 생긴다. 성능 문제는 알고리즘, 자료구조, 메모리 접근, 캐시, 데이터베이스 인덱스 같은 기초 개념을 모르면 감으로만 대응하게 된다. 장애는 한 컴퓨터 안의 문제가 아니라 운영체제, 네트워크, 타임아웃, 큐, 재시도, 분산 환경의 불확실성이 얽히면서 발생한다. 보안은 마지막에 체크리스트를 붙인다고 해결되지 않는다. 인증, 권한, 입력 검증, 암호화, 신뢰 경계 같은 개념이 설계 단계부터 들어가야 한다. 확장성 역시 서버를 더 사는 문제라기보다 병목이 어디서 생기고 어떤 자원을 어떻게 나눠 써야 하는지 이해하는 문제다.
그래서 좋은 개발자는 단순히 코드를 많이 쓴 사람이 아니라, 문제가 어느 층위에서 발생하는지 구분할 수 있는 사람이다. 느린 이유가 알고리즘 때문인지, 데이터베이스 쿼리 때문인지, 네트워크 지연 때문인지, 운영체제 스케줄링 때문인지, 혹은 시스템 전체 구조 때문인지 감이 잡혀야 한다. 이 감은 타고나는 직감이 아니라, 컴퓨터공학의 지도를 머릿속에 그려두었을 때 생긴다.
이 책은 세부 기술의 목록이 아니라 전체 지도를 그린다
많은 입문서는 한 분야를 깊게 파고든다. 파이썬 문법을 가르치거나, 웹 개발만 설명하거나, 데이터베이스만 따로 다룬다. 물론 그런 책도 필요하다. 하지만 처음 공부하는 사람에게는 종종 더 큰 어려움이 남는다. 지금 배우는 것이 전체에서 어디쯤에 있는지 보이지 않는다는 점이다.
예를 들어 웹 백엔드를 공부한다고 해보자. API를 만드는 법은 배웠다. 그런데 요청은 네트워크를 통해 들어오고, 서버 프로세스가 이를 처리하며, 운영체제가 CPU와 메모리를 배분하고, 데이터베이스는 디스크와 인덱스를 사용해 데이터를 읽고 쓰며, 보안은 인증과 권한을 따지고, 트래픽이 커지면 여러 서버로 분산해야 한다. 여기에 AI 기능까지 붙이면 벡터 검색, 모델 추론, 캐시, 파이프라인, 비용 관리 문제가 한꺼번에 등장한다. 하나의 기능 뒤에는 늘 여러 층위의 기술이 연결되어 있다.
이 책은 그 연결을 보여주기 위해 쓰였다. 이 책의 목표는 특정 프레임워크의 사용법을 빠르게 익히게 하는 것이 아니다. 대신 컴퓨터공학 전체를 하나의 이어진 구조로 보게 만드는 것이다. 숲을 먼저 본 뒤에 나무를 보면, 나중에 어떤 전공서를 읽더라도 길을 잃지 않는다.
우리가 함께 걸어갈 탐험 경로
이 책은 컴퓨터공학을 다음 순서로 따라간다.
계산에서 출발해 코드로 내려오고, 코드가 하드웨어 위에서 어떻게 실행되는지 본다. 그다음 운영체제가 여러 프로그램을 어떻게 다루는지 살펴보고, 컴퓨터들이 네트워크로 어떻게 연결되는지 따라간다. 이어서 데이터베이스가 정보를 어떻게 저장하고 찾는지 이해하고, 여러 서버를 묶는 분산 시스템으로 시야를 넓힌다. 그 위에서 보안이 왜 모든 층을 관통하는 주제인지 확인한 뒤, 마지막으로 AI가 이 전체 구조 속 어디에 놓이는지 살펴본다.
이 순서는 단순한 목차가 아니다. 컴퓨터 시스템이 실제로 쌓여 올라가는 방식에 가깝다. 계산의 원리가 코드가 되고, 코드는 기계 위에서 실행되며, 실행되는 프로그램은 운영체제의 관리 아래 놓이고, 서로 다른 컴퓨터는 네트워크로 연결되며, 서비스는 데이터를 저장하고 교환하고 확장하고 보호해야 한다. AI 역시 이 바깥에 따로 떠 있는 마법 상자가 아니라, 결국 계산과 데이터와 시스템 위에 세워진 응용이다.
이 흐름을 한 번 머릿속에 넣어두면, 각각의 분야가 따로 떨어진 지식이 아니라 하나의 지도 안에서 자리를 잡기 시작한다. 운영체제를 배우다가 왜 데이터베이스가 떠오르는지, 네트워크를 공부하다가 왜 보안이 중요해지는지, AI 서비스를 만들다가 왜 벡터 검색과 캐시와 큐를 함께 봐야 하는지 자연스럽게 연결된다.
이 책은 누구를 위한 책인가
이 책은 완전한 문법 입문서도 아니고, 한 분야를 깊게 파고드는 전공서도 아니다. 가장 잘 맞는 독자는 이미 개발을 조금 경험했지만, 전체 그림이 없어서 답답함을 느끼는 사람이다.
파이썬이나 자바스크립트를 조금 써봤는데, 그다음에 무엇을 배워야 할지 모르겠는 사람에게 이 책은 방향 감각을 줄 것이다. 웹 서비스나 AI 서비스를 만들고 싶은데 운영체제, 네트워크, 데이터베이스가 왜 필요한지 헷갈리는 사람에게는 연결의 이유를 보여줄 것이다. 비전공자이지만 기술 조직과 일해야 하는 기획자나 창업자에게는 제품 뒤에서 실제로 어떤 원리가 작동하는지 이해할 수 있는 언어를 줄 것이다. 그리고 전공서를 읽기 전에 큰 지도를 먼저 잡고 싶은 독자에게는 좋은 출발점이 되어줄 것이다.
이 책을 읽고 나면 적어도 다음 네 가지는 손에 남아야 한다.
컴퓨터공학의 주요 분야가 각각 무엇을 다루는지, 그리고 서로 어떻게 연결되는지 큰 그림으로 설명할 수 있다.
개발 과정에서 마주치는 버그, 성능, 장애, 보안, 확장성 문제가 왜 기초 개념과 연결되는지 이해할 수 있다.
웹, 백엔드, 데이터베이스, 클라우드, AI 같은 기술을 따로 암기하는 대신 하나의 시스템으로 바라볼 수 있다.
앞으로 무엇을 먼저 공부하고, 어떤 분야를 더 깊게 파야 할지 스스로 판단할 기준을 갖게 된다.
AI 시대일수록 오히려 CS의 큰 그림이 중요하다
요즘은 코드를 직접 한 줄 한 줄 쓰지 않아도 되는 시대가 오고 있다. AI가 함수 초안을 작성해주고, 오류 메시지를 설명해주고, 테스트 코드도 만들어준다. 얼핏 보면 이제는 컴퓨터공학을 깊이 몰라도 되는 것처럼 느껴질 수 있다. 하지만 실제로는 그 반대다.
코드를 빠르게 만드는 도구가 강해질수록, 무엇을 만들어야 하는지 정의하는 능력과 그 결과가 제대로 동작하는지 검증하는 능력이 더 중요해진다. AI가 코드를 써줄 수는 있어도, 시스템의 병목을 어디서 찾아야 하는지, 보안 구멍이 어디에 생길 수 있는지, 데이터 모델이 왜 잘못되었는지, 분산 환경에서 어떤 장애가 발생할 수 있는지까지 자동으로 책임져주지는 않는다. 오히려 구현이 쉬워질수록 잘못된 구조를 빠르게 대량 생산할 위험도 커진다.
AI 시대의 경쟁력은 문법 암기보다 훨씬 높은 곳에서 결정된다. 문제를 구조화하는 힘, 추상화하는 힘, 트레이드오프를 읽는 힘, 시스템 전체를 보는 힘이 중요해진다. 그리고 바로 그것이 컴퓨터공학이 오랫동안 다뤄온 핵심 주제다.
이제, 지도를 펼치자
이 책은 당신을 곧바로 깊은 숲 속으로 밀어 넣지 않으려 한다. 먼저 어디에 산이 있고, 어디로 강이 흐르며, 어떤 길이 서로 이어지는지부터 함께 확인하려 한다. 그래야 이후에 알고리즘을 만나도, 운영체제를 만나도, 네트워크와 데이터베이스와 AI를 만나도 각각이 따로 놀지 않는다. 모든 개념이 하나의 큰 구조 안에서 제자리를 찾게 된다.
코드는 시작일 뿐이다. 진짜 컴퓨터공학은 코드 뒤에서 움직이는 계산의 원리, 시스템의 구조, 데이터의 흐름, 네트워크의 연결, 그리고 그 위에 쌓이는 지능을 이해하는 데 있다.
이제 첫 장으로 들어가 보자. 컴퓨터공학을 배운다는 것은, 결국 무엇을 배운다는 뜻일까?
이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.
