Skip to main content
Summary

사람의 말과 컴퓨터의 명령은 다르다

사람은 말을 대충 들어도 뜻을 짐작합니다. 친구가 "점심 아무거나 괜찮은 곳으로 예약해 줘"라고 말하면, 우리는 가격, 거리, 취향, 시간대를 적당히 고려합니다. 말하지 않은 배경까지 추측합니다.

컴퓨터는 다릅니다. 컴퓨터는 "아무거나", "적당히", "괜찮은" 같은 표현을 스스로 이해하지 못합니다. 컴퓨터는 정해진 규칙에 맞는 명령만 처리합니다. 그래서 개발에서는 사람의 요구를 컴퓨터가 실행할 수 있는 형태로 바꾸는 과정이 중요합니다.

예를 들어 "가까운 식당을 추천해 줘"라는 요구는 컴퓨터 입장에서 아직 충분히 명확한 명령이 아닙니다. 컴퓨터가 처리하려면 다음처럼 더 구체적인 기준이 필요합니다.

  • 사용자의 현재 위치를 확인한다.

  • 반경 1km 안의 식당 목록을 찾는다.

  • 영업 중인 식당만 남긴다.

  • 평점이 높은 순서로 정렬한다.

  • 사용자가 싫어하는 음식 종류는 제외한다.

  • 상위 5개를 화면에 보여 준다.

사람에게는 한 문장인 일이 컴퓨터에게는 여러 개의 작은 절차가 됩니다. 컴퓨터가 명령을 이해한다는 말은 사람의 의도를 알아듣는다는 뜻이 아닙니다. 미리 정해진 방식대로 신호를 읽고, 계산하고, 결과를 내보낸다는 뜻에 가깝습니다.

컴퓨터는 어떻게 명령을 이해하는가AI 생성 이미지

컴퓨터는 정보를 숫자와 신호로 다룬다

컴퓨터 안에서는 문자, 사진, 음악, 영상, 버튼 클릭까지 모두 숫자처럼 처리됩니다. 더 정확히 말하면 아주 작은 신호의 조합으로 다룹니다.

가장 기본이 되는 단위는 비트입니다. 비트는 전등 스위치처럼 생각하면 쉽습니다. 켜짐과 꺼짐, 두 가지 상태만 가질 수 있습니다. 컴퓨터에서는 이를 보통 1과 0으로 표현합니다. 실제 장치마다 구현 방식은 조금씩 다를 수 있지만, 기본적으로는 두 가지 상태를 구분해 정보를 표현한다고 이해하면 됩니다.

이 0과 1이 많이 모이면 더 복잡한 정보를 표현할 수 있습니다. 글자 하나, 숫자 하나, 색깔 하나, 사진의 한 점, 음악의 짧은 소리도 결국 여러 개의 0과 1로 바뀌어 저장되고 처리됩니다.

예를 들어 우리가 화면에서 "A"라는 글자를 본다고 해도 컴퓨터가 실제로 "A라는 글자의 의미"를 이해하는 것은 아닙니다. 컴퓨터는 "이 숫자 조합은 A라는 글자로 약속되어 있다"는 규칙에 따라 화면에 모양을 표시합니다. 사진도 마찬가지입니다. 컴퓨터는 사진 속 강아지가 귀엽다고 느끼지 않습니다. 다만 수많은 점의 색상 값을 숫자로 저장하고, 그 숫자에 따라 화면에 다시 표시할 뿐입니다.

여기서 중요한 점은 컴퓨터가 세상을 사람처럼 경험하지 않는다는 것입니다. 컴퓨터에게 정보는 의미라기보다 규칙에 따라 처리할 수 있는 값입니다. 개발자는 사람의 세계에 있는 말, 행동, 선택, 판단을 컴퓨터가 다룰 수 있는 값과 규칙으로 바꿉니다.

큰 요구는 작은 단계로 쪼개야 한다

컴퓨터는 큰 의도를 그대로 전달받으면 처리하기 어렵습니다. 대신 작고 분명한 명령을 빠르게 수행합니다. 그래서 개발자는 문제를 작은 단계로 나누어 생각합니다.

"회원 가입 기능을 만들어 주세요"라는 요청을 생각해 봅시다. 사람에게는 익숙한 기능이지만, 컴퓨터가 처리하려면 여러 단계가 필요합니다.

  • 사용자가 이메일을 입력했는지 확인한다.

  • 이메일 형식이 맞는지 확인한다.

  • 비밀번호가 너무 짧지 않은지 확인한다.

  • 이미 가입된 이메일인지 확인한다.

  • 조건을 통과하면 회원 정보를 저장한다.

  • 가입 완료 메시지를 보여 준다.

  • 문제가 있으면 어떤 문제가 있는지 알려 준다.

이 과정 중 하나라도 빠지면 사용자는 불편을 겪습니다. 이메일을 잘못 입력했는데도 가입이 되거나, 이미 가입된 계정인데 중복으로 만들어질 수 있습니다. 또는 오류가 났는데 화면에는 아무 설명도 나오지 않을 수 있습니다.

개발에서 "논리적으로 생각한다"는 말은 거창한 수학 문제를 푼다는 뜻만은 아닙니다. 사용자의 행동을 하나씩 살펴보고, 컴퓨터가 어떤 순서로 무엇을 확인해야 하는지 정리한다는 뜻입니다.

이때 중요한 것은 컴퓨터가 알아서 빈칸을 채워 주지 않는다는 점입니다. "잘 처리해 줘"라는 말만으로는 부족합니다. 무엇을 잘 처리해야 하는지, 어떤 경우를 성공으로 볼지, 어떤 경우를 실패로 볼지 정해야 합니다.

거의 모든 프로그램은 입력, 처리, 출력으로 움직인다

프로그램의 기본 흐름은 생각보다 단순합니다. 대부분의 프로그램은 입력, 처리, 출력의 구조로 움직입니다.

입력은 컴퓨터가 받아들이는 정보입니다. 사용자가 누른 버튼, 키보드로 입력한 글자, 업로드한 사진, 위치 정보, 결제 금액, 다른 서비스에서 받아온 데이터가 모두 입력이 될 수 있습니다.

처리는 입력을 바탕으로 규칙을 적용하는 단계입니다. 계산하기, 비교하기, 검색하기, 정렬하기, 조건에 따라 나누기 같은 일이 여기에 들어갑니다. 필요하다면 중간 결과를 저장하거나 다른 정보와 합쳐서 판단하기도 합니다.

출력은 처리 결과를 사용자나 다른 시스템이 볼 수 있는 형태로 내보내는 단계입니다. 화면에 문장을 띄우거나, 결제 완료 메시지를 보내거나, 파일을 다운로드하게 하거나, 처리 결과를 저장소에 남기는 일이 출력에 해당합니다.

계산기 앱을 예로 들면 구조가 분명합니다.

  • 입력: 사용자가 3, +, 5를 누른다.

  • 처리: 3과 5를 더한다.

  • 출력: 화면에 8을 보여 준다.

배달 앱도 같은 구조로 볼 수 있습니다.

  • 입력: 사용자가 주소와 메뉴를 선택한다.

  • 처리: 배달 가능 지역인지 확인하고, 총금액과 예상 시간을 계산한다.

  • 출력: 주문 가능 여부와 결제 금액을 보여 준다.

은행 앱도 마찬가지입니다.

  • 입력: 사용자가 이체할 계좌와 금액을 입력한다.

  • 처리: 비밀번호, 잔액, 한도, 계좌 상태를 확인한다.

  • 출력: 이체 성공 또는 실패 결과를 보여 준다.

서비스가 복잡해 보여도 기본은 크게 다르지 않습니다. 입력을 받고, 규칙에 따라 처리하고, 결과를 내보냅니다. 개발자는 이 흐름이 끊기지 않도록 설계합니다.

컴퓨터는 똑똑하다기보다 빠르고 정확하다

컴퓨터가 대단해 보이는 이유는 많은 일을 매우 빠르게 반복하기 때문입니다. 같은 계산을 수백만 번 해도 지치지 않습니다. 같은 규칙을 적용할 때 기분이 바뀌지도 않습니다. 어제는 되고 오늘은 귀찮아서 안 하는 일도 없습니다.

하지만 이것이 곧 컴퓨터가 사람처럼 똑똑하다는 뜻은 아닙니다. 컴퓨터는 정해진 명령을 정확하게 따릅니다. 명령이 잘못되어 있으면 잘못된 결과도 아주 빠르고 성실하게 만들어 냅니다.

예를 들어 쇼핑몰에서 "10만 원 이상 구매하면 무료 배송"이라는 규칙을 만들었다고 해 봅시다. 그런데 개발자가 실수로 "10만 원 초과 구매"일 때만 무료 배송되도록 만들면, 정확히 10만 원을 구매한 사용자는 무료 배송을 받지 못합니다. 컴퓨터는 "상식적으로 10만 원이면 포함해야 하지 않을까?" 하고 판단하지 않습니다. 입력된 규칙 그대로 처리합니다.

이런 특징 때문에 개발에서는 작은 차이가 큰 결과를 만듭니다. 이상과 초과, 이전과 이후, 포함과 제외 같은 표현은 사람끼리도 헷갈리기 쉽습니다. 컴퓨터에게는 더 명확해야 합니다.

그래서 좋은 개발은 코드를 많이 쓰는 것보다 규칙을 정확히 정하는 데서 시작합니다. 무엇을 입력받을지, 어떤 조건을 확인할지, 어떤 결과를 보여 줄지 분명해야 합니다.

명령은 순서에도 영향을 받는다

컴퓨터는 명령의 순서를 중요하게 따릅니다. 사람은 상황을 보고 순서를 조정할 수 있지만, 컴퓨터는 주어진 순서대로 실행합니다.

라면을 끓이는 일을 생각해 봅시다. "냄비에 물을 넣고, 물을 끓이고, 면을 넣고, 수프를 넣고, 익을 때까지 기다린다"는 순서가 자연스럽습니다. 그런데 순서가 바뀌어 "면을 넣고, 불을 켜고, 물을 넣는다"가 되면 원하는 결과가 나오기 어렵습니다.

프로그램도 비슷합니다. 로그인을 확인한 뒤에 개인정보를 보여 주어야 합니다. 결제가 완료된 뒤에 주문을 확정해야 합니다. 파일이 정상적으로 업로드된 뒤에 저장 완료 메시지를 보여 주어야 합니다.

순서가 맞지 않으면 기능이 있어도 문제가 생깁니다. 사용자는 "버튼을 눌렀는데 왜 이상하게 작동하지?"라고 느끼지만, 내부에서는 명령의 순서나 조건이 잘못되어 있을 수 있습니다.

개발자가 순서도를 그리거나 화면 흐름을 정리하는 이유도 여기에 있습니다. 컴퓨터가 어떤 상황에서 어떤 명령을 먼저 실행해야 하는지 미리 정리해야 안정적인 서비스가 됩니다.

컴퓨터가 이해한다는 말의 진짜 의미

우리는 흔히 "컴퓨터가 이해한다"고 말합니다. 하지만 엄밀히 말하면 컴퓨터는 사람처럼 의미를 이해하지 않습니다. 컴퓨터는 약속된 형식의 데이터를 받아, 정해진 규칙에 따라 처리하고, 결과를 내놓습니다.

물론 요즘의 인공지능 서비스는 사람의 말을 꽤 자연스럽게 알아듣는 것처럼 보입니다. 그러나 이 경우에도 컴퓨터가 사람처럼 감정과 의도를 경험하는 것은 아닙니다. 방대한 데이터를 바탕으로 입력된 문장에 어울리는 결과를 계산하는 방식에 가깝습니다. 겉으로는 대화처럼 보여도 내부에서는 여전히 숫자와 규칙, 계산이 움직입니다.

이 점을 이해하면 프로그래밍 언어가 왜 필요한지도 자연스럽게 보입니다. 사람의 말은 풍부하지만 모호합니다. 컴퓨터의 세계는 빠르지만 엄격합니다. 프로그래밍 언어는 이 둘 사이를 이어 주는 약속된 표현 방식입니다.

다음 장에서 다룰 프로그래밍 언어는 컴퓨터와 대화하기 위한 외국어라기보다, 사람이 원하는 일을 컴퓨터가 실행할 수 있도록 정리해 주는 도구에 가깝습니다. 개발자는 그 도구를 사용해 사람의 요구를 작은 단계로 나누고, 입력과 처리와 출력을 연결합니다.

오해하기 쉬운 점

첫째, 컴퓨터는 사람보다 늘 똑똑한 존재가 아닙니다. 컴퓨터는 특정한 일을 빠르고 정확하게 처리하는 데 강합니다. 그러나 무엇이 중요한지, 어떤 결과가 사용자에게 좋은지는 사람이 정해야 합니다.

둘째, 컴퓨터는 대충 말해도 알아서 해 주지 않습니다. 요구가 모호하면 결과도 흔들립니다. "편하게 만들어 주세요"보다 "회원 가입은 이메일과 비밀번호로 하고, 비밀번호는 8자 이상이어야 하며, 이미 가입된 이메일이면 안내 문구를 보여 주세요"가 컴퓨터에 더 가까운 설명입니다.

셋째, 프로그램은 화면에 보이는 것만으로 이루어지지 않습니다. 버튼 하나를 누르는 순간에도 입력 확인, 조건 판단, 데이터 저장, 결과 표시 같은 여러 과정이 숨어 있습니다.

넷째, 오류는 컴퓨터가 말을 안 들어서 생기는 것이 아닙니다. 대부분은 명령이 빠졌거나, 조건이 모호했거나, 예상하지 못한 입력이 들어왔기 때문에 생깁니다. 컴퓨터는 틀린 명령도 충실하게 실행합니다.

컴퓨터의 사고방식을 이해하면 개발이 조금 덜 신비롭게 보입니다. 개발은 컴퓨터에게 마법을 부리는 일이 아닙니다. 사람이 원하는 일을 숫자와 신호, 규칙과 순서, 입력과 처리와 출력으로 차근차근 바꾸는 일입니다.

책 목록

일반인이 쉽게 이해하는 개발 지식

전체 목차 보기

이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.

틸노트는 사용자가 AI를 활용해 노트를 쉽게 작성하거나 편집할 수 있는 서비스입니다.

AI 스퀘어 단톡방에 함께해요

AI 활용과 틸노트 사용 팁을 나누는 오픈채팅방입니다. 입장 비밀번호는 tilnote입니다.

참여하기