컴퓨터적 사고법 (Computational Thinking)

모두의연구소 AI엔지니어 과정 2기 온보딩시간에 담당 퍼실님께서, AI 엔지니어과정 전반에 걸쳐 도움이 되기위해 컴퓨팅 사고법 (Computational Thinking) 에 대한 강의를 준비해 주셨어요. 컴퓨터적 사고법은 분해, 패턴인식, 추상화 그리고 알고리즘 이라는 4가지 과정을 통해 개발, 코딩 뿐만아니라 일상 생활에서도 복잡한 문제를 해결하는데 필요한 논리적 사고법입니다. 예제와함께 이 4가지 방법과 컴퓨터적 사고가 어떤걸 의미하는지 알아보겠습니다.

컴퓨터적 사고법 Computational Thinking 의미

Computational Thinking을 한국어로 검색해보면, 전산적 사고, 컴퓨터적 사고, 계산적 사고 등 여러가지가 나옵니다. 무엇이 가장 알맞을까 고민하다가, 각 단어의 의미를 생각해보니 전산적은 너무 계산기 나 전산실이 떠오르고 계산적은 인간관계에서 다소 부정적인의미로도쓰여서 제외하였고, 컴퓨터적, 컴퓨팅 사고법 둘다 말이 된다고 생각하지만, 사전적의미가 가장 일치하는게 “컴퓨터적” 라고 판단했습니다.

사고는 인간이 하는것이기에 컴퓨팅 or 컴퓨터적 사고라 하면 인간이, 인간과 컴퓨터가 모두 이해할수있는 사고방식이라고 생각할수 있을것 같습니다. 인간이 컴퓨터가 문제 해결을할때 해결하는방식과 비슷하게 사고하는것이죠. 이것에대해 예를들어 설명하면 너무길어질것같아 필요하면 나중에 따로 글을 작성하도록 하고 오늘은 컴퓨터적 사고법에대해 집중해서 공부해볼게요.

컴퓨터적 사고법이 무엇인가요?

컴퓨터적 이라고 해서 인간이 완전 컴퓨터처럼 생각할수는 없겠지요. 과거에는 프로그래머나, 소프트웨어 기획자 정도에게 필요한 사고법이라 여겨졌습니다. 소프트웨어를 개발하기위해서는 컴퓨터가 이해할수있는 언어로 컴퓨터와 소통을 해야하기 때문이지요.

2010년경 스마트폰 붐 -> 앱개발 등이 인기를얻으면서 전세계적으로 개발자가 늘어나고 그에맞춰 개발도구등이 더 쉽게 발전되면서 앱개발 난이도는 엄청나게 쉬워지고있습니다. 뿐만아니라 2022년 말 ChatGPT가 출시되고 코딩공부가 훨씬 쉬워졌을뿐만 아니라 최근에는 무수히 많은 LLM기반 AI가 출시되고 바이브 코딩 (AI에게 시켜서 일정수준의 동작가능한 앱을 만드는것)으로 컴퓨터적 사고법이

4가지 요소

  • 분해
  • 패턴인식
  • 추상화
  • 알고리즘 설계

분해

세상이 발전함과 동시에 우리의 삶 우리가 마주하는 문제들도 점점 복잡해 지고있습니다. 일상 생활에서는 우리가 입는 옷이 다양해지면서 선택 폭도 늘어나고 음식이 다양해지면서 음식점도 더 치열해져서 메가커피에서는 닭강정도 판매하는 그런 세상에서 살고 있습니다. 동시에, 우리의 문화도 복잡해지고 일자리에서는 생산성을 더 끌어올리기위해 우리가 하는 일도 점점 복잡해지고있습니다.

그러면 우리가 마주하게될 점점 더 복잡해지는 문제를 하기위해서는 무엇을 해야할까요? 문제를 단순화 하기위한 과정을 분해 (Decomposition)이라고 부릅니다. 복잡한 문제란 해결해야할 일련의 문제들의 집합이라고 할수있는데, 분해과정은 복잡한 문제를 우리가 쉽게 해결할수있는 작은 단위로 쪼개는 과정을 말합니다.

일상 생활에서 예를 들어본다면, 해외여행 실제 계획한다고 하면 해야할일이 많아 머리가 아파오진 않나요? 머리가 아픈이유는 해외여행을 가려면 기본적으로 공항버스, 항공권등 다양한 교통수단을 예약해야할 뿐만아니라 숙박문제 해결을위해 호텔 예약도해야합니다. 거기에 더해, 일정, 예산 스케쥴등 해결해야할 문제가 한두가지가 아닙니다.

이런 경우,

목표는 해외여행 계획이 될것이고 이 복잡한 문제를 분해하면 아래처럼 열거할수 있을겁니다.

  • 항공버스 예약
  • 항공권 예약
  • 호텔 예약
  • 여행중 식사 계획하기
  • 여행 일정 정하기
  • 방문할 장소 정하기
  • 자신이나 같이 여행하는사람들의 일정 확인
  • 직장에 보고하고 휴가 사용하기
  • 응급약 준비
  • 의류 및 짐챙기기
  • 여행보험 가입하기
  • 로밍신청이나 현지SIM카드 준비하기

순간적으로 떠오른것만해도 이렇게 많은데 실제로 준비를하다보면 챙겨야할것들이 더 생기기 마련입니다. 이 많은 문제를 한번에 해결하려니 힘들게 느껴지고 따라서 이렇게 작은문제들로 쪼개는 것입니다.

패턴인식

그럼 이렇게 문제를 작은단위로 나눴으면 다음에 해야할게 바로 패턴인식입니다. 우리가 작게 쪼개놓은 문제들을 위로 올려서 다시 한번 확인하면서 해당 문제를 해결하기위해 실제로 내가 해야할 행동을 상상해보면 공통점을 찾을수 있을겁니다.

  1. 공항버스, 항공권, 호텔예약, 여행보험등은 여행일정이 먼저 결정되야 할수있는걸 알수있고 전화나 인터넷으로 해결이 가능합니다.
  2. 일정은 직장에서 휴가를 승인을 받아야 정할수있겠지만, 일정자체도 내가 하고싶은 여행이 특정날짜에만 가능하다면 이 둘은 동시에 진행되야 하고 상관없다면 직장에서 휴가를 사용하는게 우선이 될것입니다.
  3. 식사계획이나 방문할 장소정하기등은 모든 예약이 완료되어 일정이 100% 확정된다음 수정이 가능하므로 같이 그룹으로 묶었습니다.
  4. 의류 및 짐챙기기, 응급약준비하기는 여행 직전에 하루이틀 남기고 준비하면 되는것이니 이것도 따로 묶었습니다.
  5. SIM카드 구입은 1번 예약들을 마치고 주문하거나 여행당일 공항에서 로밍을 신청해서 해결할수 있으니 기호에 맞게 분류하면 되겠습니다

분류한것을 순서대로 나열하면 아래 표처럼 그룹화 할수있겠습니다.

여행 일정 정하기공항버스 예약방문할 장소 정하기의류 및 짐 챙기기
직장에서 휴가 사용항공권 예약식사 계획응급약 준비
호텔 예약
여행보험 신청

이쯤되면 왜 패턴인식이 필요한지 대부분 이해하시겠지만, 그래도 굳이 컴퓨터적 사고를 다루는 글이기때문에 왜 필요한지도 작성해 보겠습니다.

분해과정을 통해 작게 쪼개진 문제들을 이렇게 패턴인식을통해 순서를 정하면, 먼저 첫번째 문제그룹을 해결하는동안 다른그룹은 크게 신경쓰지 않아도 되어 효율성이 올라갈것입니다. 또한 두번째 문제그룹은 전화나 인터넷으로 앉은자리에서 해결할수있는것이기에 버스 예약했다가 짐 조금싸고 항공권 예약했다가 또 짐싸고 이런식으로 일을 해결하는것보다 더 집중해서 효과적으로 일을 처리할수 있기때문에 패턴인식은 매우 유용하다 생각됩니다.

추상화

추상화란 단어자체가 낯설게 느껴질수있는데요. 사전적 의미는 복잡한 과정에서 핵심적인 특징을 추출하고 세부적인 요소들은 제거하여 중요한것에 좀더 집중할수 있도록 하는것을 말합니다. 이해를 돕기위해 피카소 그림으로 예를 들면, 피카소의 그림은 데생처럼 인물의 음영이나 빛이 반사되는부분 머리카락 한올한올 디테일함을 포함하지는 않지만 누구도 피카소의 그림을 못그린 그림이라고 평가하지 않습니다. 그 이유는 피카소의 그림은 단순하면서도 대상의 특징은 분명하게 드러내고, 오히려 단순한 그림때문에 특징이 더 살기도 합니다. 게다가 색 사용을 잘해서 그림은 단순하지만 아름다워 보이는 경우도있습니다.

그래서 추상화가 문제해결에 어떤 도움을 주느냐? 복잡한 문제를 분해과정을통해 해결하기쉬운 작은 문제들로 쪼갠것을 패턴인식을 통해 문제 해결에 있어서 효율성을 올렸습니다. 추상화는 패턴인식을 마친다음 덜 중요한것들을 제거하여 한번더 효율성을 올리는 방법입니다.

여행 일정 정하기공항버스 예약방문할 장소 정하기의류 및 짐 챙기기
직장에서 휴가 사용항공권 예약식사 계획응급약 준비
호텔 예약
여행보험 신청

다시 여행준비 예시로 돌아와서 저는 추상화를 통해 위에 표처럼 예약 세 가지와 여행보험신청 그리고 응급약 준비를 제외하고 모두 추상화 과정을 통해 지워버렸습니다.

이유를 들자면, 내가 직장인이라면 휴가 사용없이 해외여행가는게 물리적으로 불가능한것을 상식적으로 알고있고, 휴가 사용 없이 항공권을 구입해서 휙 여행가버리는 생각은 본능적으로 할수가 없습니다. 마찬가지로 방문할 장소는 여행지가 정해지는 순간 어느정도 결정이 되어있을것이며, 식사 계획도 여행자의 취향에따라 한식이면 한식, 혹은 현지음식 또는 글로벌 프랜차이즈등 어느정도 정해져 있을것입니다.

의류 및 짐챙기기는 위에 다른 요소들처럼 자연스럽게 챙기게되거나, 외벌로 여행을 시작해서 현지에서 옷을 사입을수도있습니다. 크게 문제라고 생각하지 않아도 될정도입니다.

추상화를 통해 우리는 복잡했던문제를 엄청나게 간소화 시키게 되었습니다. 추상화를 통해 삭제한 문제들은 사실은 우리가 해결해야 할 문제가아니고, 자연스럽게 해결될 문제였던 것이죠.

그리고, 꼭 알아둬야 할게 있습니다. 비슷한 문제(목표)를 갖고있어도 추상화를 통해 제거할 요소는 크게 바뀔수가 있습니다. 우리는 우리가 여행을 가면서 직접 계획을 짜는 1인칭 상황이었기때문에 여행일정이라던가 방문할 장소등 여러가지를 제거할수 있었습니다. 하지만, 여행사입장에서 고객의 여행을 계획해주는것이라면 중요한 문제로 남아있어야 겠죠. 그리고 같은 1인칭인 경우에도, 내가 잘모르는 여행지라면 저 두번째 그룹의 문제들보다, 방문할 장소를 정하는게 더 큰 문제가 될수도있습니다. 실제로 더 많은 시간을 할애하여 인터넷 검색을하고 방문지를 정하는경우도 분명 있으니까요.

추상화뿐만 아니라 분해와 패턴인식 과정에서도 정해진 답이 있는게 아니라 누가(by who) 누구를 위해(for who) 어떤 문제를(for what) 해결하고자 하는것인지 고려하여 실제 문제 해결에 도움이 될수있도록 잘 수행하는것이 중요하다고 할수 있겠습니다.

알고리즘 설계

알고리즘 설계는 실제 문제를 해결한다고 생각하면서, 문제해결 과정을 순서대로 그리고 논리적으로 작성하는것을 의미합니다. 우리는 문제가 아주 단순해져서 5가지 문제밖에 남지않았는데, 이를 Flow Chart로 작성해보면 아래와 같을것입니다.

graph TD
    Start([해외여행 준비 시작]) --> Plan[여행 일정 및 예산 확정]
    Plan --> Flight{항공권 예약}
    Flight -- 완료 --> Hotel{호텔 예약}
    Hotel -- 완료 --> Transport{공항버스 예약}
    Transport -- 완료 --> Insurance{여행자 보험 신청}
    Insurance -- 완료 --> Meds{응급약 준비}

    subgraph "필수 예약 단계"
    Flight
    Hotel
    Transport
    end

    subgraph "안전 및 건강 준비"
    Insurance
    Meds
    end

    Meds --> End([준비 완료 및 출국])

    style Start fill:#f9f,stroke:#333,stroke-width:2px
    style End fill:#bbf,stroke:#333,stroke-width:2px

꽤 단순하죠? 이렇게 보니까 이런 단순한 문제 해결을 위해 왜 Computational Thinking을 해야하는지 의문이 생기기 까지 합니다. 하지만 실제로는 코딩이나, 업무 자동화 처럼 더 복잡한 문제를 해결하기위해 우리는 연습을 하고 있는것입니다. 우리가 패턴인식이나 추상화를통해 간소화한 부분을 되살려서 복잡하게 작성하면 아래와 같을 것입니다.

graph TD
    %% 시작 및 기획
    Start([여행 준비 시작]) --> Plan1[방문할 장소 및 여행 일정 정하기]
    Plan1 --> Plan2[자신 및 동행인 일정 확인]
    
    %% 휴가 승인 분기점 (핵심)
    Plan2 --> Vacation{직장 휴가 신청 및<br/>승인 여부 확인}
    
    %% 승인 거절 시: 일정 재설정 루프로 회귀
    Vacation -- "미승인 (No)" --> Replan[일정 및 방문지 재조정]
    Replan --> Plan1
    
    %% 승인 완료 시: 본격적인 예약 단계 진입
    Vacation -- "승인 완료 (Yes)" --> Reserve[본격 예약 단계]
    
    subgraph "예약 및 결제 (패턴 인식)"
        Reserve --> Flight[항공권 예약]
        Flight --> Hotel[호텔 예약]
        Hotel --> Bus[공항버스 예약]
    end
    
    %% 세부 준비 단계 (분해)
    subgraph "세부 실행 계획"
        Bus --> Eat[여행 중 식사 계획하기]
        Eat --> Admin[여행보험 가입 및<br/>로밍/SIM 준비]
    end
    
    %% 최종 짐싸기
    subgraph "출국 전 점검"
        Admin --> Pack[의류 및 짐 챙기기]
        Pack --> Meds[응급약 준비]
    end
    
    Meds --> End([준비 완료 및 출국])

    %% 스타일링 (시각적 구분)
    style Start fill:#f9f,stroke:#333
    style End fill:#bbf,stroke:#333
    style Vacation fill:#fff4dd,stroke:#d4a017,stroke-width:2px
    style Replan fill:#ffcccc,stroke:#ff0000

이렇게 알고리즘 작성이란 실제 문제해결을 할때 우리가 따라야할 가이드라인이나 인스트럭션을 작성한다고 생각하고 일의 순서대로 그리고 논리적으로 작성하면 되는겁니다. 그럼 이걸 왜 작성하느냐? 먼저 우리가 어딘가를 갈때 네비게이션을 보는거처럼 우리가 전체 문제를 어느정도 해결해 가고있는지 파악하기도좋고, 다음할일도 빠르게 찾을수있습니다. 만약 팀프로젝트를 한다면 더 도움이 많이 될수있는데요. 단체로 프로젝트를 하다보면 팀원들간 문제해결 방향성이 다른경우가 있는데 이를 신속히 바로잡을수있도록 도움을 줍니다. 혹시 다른의견이 있을때 플로우 차트를 보면서 토론을 하면 어떤방향이 더 우리가 처음 상호 동의하여 작성한 플로우차트에 근접한지 쉽게 판단할수 있으니까요


결론

이렇게 컴퓨터적 사고가 어떤것인지 그리고 컴퓨터적 사고를 하기위한 4가지 방법론에 대해서 알아봤는데요. 쉽게 생각하면 분해, 패턴인식, 추상화는 문제 간소화 과정이라고 볼수있고 알고리즘 설계는 논리적인 계획을 수립한다고 정리할수있을것 같습니다. 다시 말하면 컴퓨터적 사고는, 복잡한 문제를 간소화하여 효과적으로 해결하는 사고방식이라고도 말할수 있을것 같습니다.

개인적으로는 AI엔지니어 과정을 공부하는 입장에서 즉 개발자 시점에서 이 컴퓨터적 사고가 얼마나 도움이 될지를 염두하면서 연습했습니다. 개발 즉 코딩을하다보면 무언가 만들다가도 어? 이거 없어도 될것같네? 하고 지우는 경우도 있고, 정신없이 장기간 특정 작은단위의 문제를 해결하다보면, 내가 어디쯤에 있는지 깜빡 잊는경우도 있고 다음에 할일을 다시 떠올리는데 시간을 소용하는 경우를 자주 경험해 봤었습니다. 이점을 고려해보면 개발 시작하기 전 미리 문제에대해 깊게 생각해보고 플로우차트를 만들어두는것이 큰 도움이 될거라는 생각이 많이 들었습니다. 그러면서 전문서적들을 볼때 왜 플로우차트가 많이 등장했는지도 알게 된거같아 좋았습니다.

아래는 4가지 방법론을 표로 정리해보았으니 참고해주세요

요약 및 정리

요소정의기능
분해복잡한 문제를 나누기복잡도 감소
– 스케쥴링이 쉬워짐
패턴인식반복되는 규칙 발견효율적인 해결책 찾기
– 문제 해결이 쉬워지거나 빨라짐
– 자동화 가능해짐
추상화불필요한 잔가지 없애기핵심에 집중
– 해결 효율이 좋아짐
– 해결 비용이 줄어듬
알고리즘 설계논리적 계획 수립해결책 구체화
– 프로젝트 이정표 작성
– 팀프로젝트시 의사소통 효율성 개선

댓글 남기기