컴퓨팅 시스템은 문제를 어떻게 풀까?
핵심만 추리고, 컴퓨터에게 맡기는 두 단계입니다.
일상에서 해결해야 할 상황이나 물음을 문제라고 합니다. 간단한 문제라면 머릿속으로 풀 수 있지만, 조건이 복잡하거나 데이터가 많으면 컴퓨팅 시스템의 힘을 빌리는 것이 훨씬 효율적입니다.
그런데 컴퓨터는 사람처럼 상황을 파악하지 못합니다. 사람이 먼저 문제를 정리해서 핵심만 남겨야 하고, 그다음에 컴퓨터가 따라갈 수 있는 절차로 바꿔야 합니다. 이 두 과정을 각각 추상화와 자동화라고 부릅니다.
추상화(abstraction)
문제에서 불필요한 세부 사항을 걷어내고 해결에 꼭 필요한 핵심만 추리는 것입니다.
지도를 떠올려 보세요. 실제 거리에는 가로수, 간판, 보도블록 무늬까지 있지만 지도에는 길과 건물의 위치만 남깁니다. 길을 찾는 데 필요 없는 것을 걷어낸 것이 추상화입니다.
자동화(automation)
추상화로 찾아낸 해결 절차를 프로그램으로 만들어 컴퓨터가 대신 실행하게 하는 것입니다.
길 찾기 앱은 지도 데이터를 바탕으로 출발지에서 도착지까지의 경로를 스스로 계산합니다. 사람이 일일이 도로를 비교해 볼 필요가 없어진 것이 자동화입니다.
순서를 기억해 두세요. 추상화가 먼저이고, 자동화가 나중입니다. 핵심을 추리지 않은 채 프로그램부터 만들면 쓸데없는 부분까지 처리하느라 프로그램이 복잡해지고, 정작 중요한 것을 놓치기 쉽습니다.
문제 해결의 네 단계
컴퓨팅 시스템을 활용한 문제 해결은 크게 네 단계로 이루어집니다.
문제 이해와 분석
문제의 상태를 정리하고, 작은 문제로 분해하여 핵심 요소를 찾아 모델링합니다.
알고리즘 설계
문제를 풀기 위한 절차를 순서대로 정리합니다.
프로그램 작성 · 실행
알고리즘을 프로그래밍 언어로 옮겨 컴퓨터가 실행합니다.
평가
결과가 올바른지, 과정에 문제는 없었는지 확인합니다.
이 네 단계는 한 방향으로만 흐르지 않습니다
평가해 보니 결과가 기대와 다르면 앞 단계로 돌아가 수정하고 보완합니다. 프로그램을 실행해 봐야 알고리즘의 빈틈이 보이기도 하고, 알고리즘을 짜다가 문제를 다시 분석해야 할 때도 있습니다. 되돌아가는 것은 실패가 아니라 과정의 일부입니다.
지금부터는 이 네 단계 가운데 첫 번째인 문제를 이해하고 분석하는 방법을 자세히 다룹니다. 문제의 상태를 정리하고, 문제를 쪼개고, 핵심 요소를 눈에 보이게 정리하는 것까지가 이 시간의 범위입니다.
버스 도착 안내 앱에서 추상화에 해당하는 부분과 자동화에 해당하는 부분을 각각 한 문장으로 말해 보세요.
문제의 상태를 정리하자
지금 어디에 있고, 어디로 가야 하는지부터 확인합니다.
문제를 풀기 전에 지금 상황이 어떤지, 원래는 어땠는지, 어떤 모습이 되어야 하는지를 먼저 정리하면 무엇을 해야 하는지가 훨씬 선명해집니다. 이것을 문제의 상태를 정리한다고 합니다.
초기 상태
문제가 생기기 전의 최초 상태입니다.
현재 상태
문제가 생겼거나, 목표를 향해 가고 있는 지금 상태입니다.
목표 상태
문제가 해결된 상태입니다. 현재 상태가 이 모습이 되어야 합니다.
초기 상태와 현재 상태를 비교하면 무엇이 달라졌는지가 드러나고, 현재 상태와 목표 상태를 비교하면 풀어야 할 문제, 곧 무엇을 해야 하는지가 드러납니다.
같은 「초기 상태」라는 이름을 다른 뜻으로 쓰기도 합니다. 길 찾기나 퍼즐 같은 탐색 문제에서는 풀기 시작하는 상태, 곧 여기서 말하는 현재 상태를 초기 상태라고 부릅니다. 그 뜻으로 읽을 때는 문제가 생기기 전의 모습이 아니라 출발점을 떠올리면 됩니다.
예시 — 학교 축제 음식 부스 준비
우리 반이 학교 축제에서 음식 부스를 운영하기로 했다고 해 봅시다. 세 상태를 정리하면 이렇습니다.
| 상태 | 내용 |
|---|---|
| 초기 상태 | 축제 참가가 결정되기 전. 부스 운영이라는 과제가 아직 없는 상태. |
| 현재 상태 | 부스를 운영하기로 했지만, 메뉴 · 재료 · 예산 · 역할이 아직 정해지지 않은 상태. |
| 목표 상태 | 메뉴 · 재료 · 예산 · 역할이 갖추어져서 당일 음식을 만들어 판매할 수 있는 상태. |
현재 상태와 목표 상태의 차이에서 「풀어야 할 문제」가 나옵니다. 축제 부스 예시에서는 메뉴를 정하고, 재료를 마련하고, 예산을 짜고, 역할을 나누는 것이 풀어야 할 문제입니다.
여러분이 최근에 겪은 문제(시험 준비, 발표 자료 만들기 등) 하나를 골라 초기 상태 · 현재 상태 · 목표 상태를 각각 한 문장으로 적어 보세요.
큰 문제를 작은 문제로 쪼개자
한꺼번에 풀기 어려운 문제도 쪼개면 다루기 쉬워집니다.
「축제 부스를 준비하라」는 문제를 통째로 놓으면 막막합니다. 하지만 작은 문제 여러 개로 나누면 각각은 한 사람이나 한 모둠이 맡아 풀 수 있는 크기가 됩니다. 이렇게 큰 문제를 해결할 수 있는 작은 수준으로 나누는 것을 문제 분해(decomposition)라고 합니다.
메뉴 선정
무엇을 만들어 팔지 정한다.
재료 구매
필요한 재료를 목록으로 만들어 산다.
예산 관리
쓸 수 있는 돈 안에서 지출을 맞춘다.
역할 배분
누가 무엇을 맡을지 나눈다.
이렇게 쪼갠 작은 문제들은 따로따로 풀 수도 있고, 서로 영향을 주기도 합니다. 예를 들어 메뉴가 정해져야 재료 목록을 만들 수 있고, 재료 가격이 나와야 예산을 맞출 수 있습니다. 문제 사이의 관계까지 파악해 두면 어떤 순서로 풀어야 할지도 보입니다.
핵심 요소를 찾아라
문제를 쪼갠 뒤에는 각 작은 문제에서 해결에 꼭 필요한 요소만 골라냅니다. 이것을 핵심 요소라고 합니다. 필요한 것과 그렇지 않은 것을 구분해서 필요한 것만 남기는 이 일을 추상화라고 합니다.
| 작은 문제 | 핵심 요소 |
|---|---|
| 메뉴 선정 | 조리 난이도, 재료 구하기 쉬운 정도, 학생 선호도 |
| 재료 구매 | 재료 종류, 1인분 분량, 예상 판매 수량 |
| 예산 관리 | 총 예산, 재료비, 판매 가격, 수익 목표 |
| 역할 배분 | 조리 · 판매 · 안내 · 정리 등 역할 종류, 인원수 |
핵심 요소는 현재 상태에서 목표 상태로 나아가기 위해 반드시 정해야 하는 것입니다. 부스 색깔이나 현수막 글씨체 같은 것도 정해야 하지만, 「음식을 만들어 판매할 수 있는 상태」에 꼭 필요한 것은 아닙니다. 불필요한 것을 걷어내야 정말 중요한 것에 집중할 수 있습니다.
「재료 구매」 문제의 핵심 요소에 「마트까지 가는 교통편」은 들어가야 할까요? 핵심 요소의 기준을 떠올리며 이유를 말해 보세요.
핵심 요소를 눈에 보이게 정리하자
머릿속에만 있으면 빠뜨리기 쉽습니다. 꺼내서 정리하는 것이 모델링입니다.
핵심 요소를 찾았으면 그것을 말, 글, 표, 그림, 그래프 등으로 정리하여 구조화(흐름과 관계가 드러나도록 배열)하는 작업이 필요합니다. 이 과정을 모델링(modeling)이라고 합니다.
모델링은 문제 해결에 필요한 핵심 요소를 구조화하여 문제 해결에 적합한 형태로 만드는 과정이라고 할 수 있습니다. 같은 핵심 요소라도 어떤 방법으로 정리하느냐에 따라 보이는 것이 달라집니다.
말과 글로 구조화
절차를 순서대로 서술합니다. 쉽고 간단하게 할 수 있습니다.
「먼저 메뉴를 정한다. 메뉴가 정해지면 재료 목록을 만든다. 재료 가격을 조사하고 예산에 맞는지 확인한다.」
표로 구조화
요소를 항목별로 나란히 비교할 수 있습니다. 조건을 검토할 때 특히 좋습니다.
| 항목 | 핵심 요소 |
|---|---|
| 재료 | 종류, 양 |
| 조리 | 온도, 시간 |
| 과정 | 순서, 도구 |
그림이나 그래프로 구조화
요소 사이의 관계와 흐름을 한눈에 파악할 수 있습니다. 복잡한 것을 정리할 때 특히 좋습니다.
어떤 방법이 「정답」은 아닙니다
세 방법은 각각 잘 드러내는 것이 다릅니다. 순서를 전달하려면 글이 편하고, 조건을 비교하려면 표가 편하고, 관계를 한눈에 보려면 그림이 편합니다. 목적에 맞는 방법을 고르는 것이 중요하고, 필요하면 여러 방법을 함께 쓸 수도 있습니다.
축제 부스 예시를 모델링해 보면
네 작은 문제로 분해한 축제 부스 문제의 핵심 요소를 표로 모델링한 예입니다. 표로 정리하면 어떤 문제에 어떤 요소가 딸려 있는지가 한눈에 들어옵니다.
| 작은 문제 | 핵심 요소 | 확인할 것 |
|---|---|---|
| 메뉴 선정 | 조리 난이도, 재료 구하기 쉬운 정도, 학생 선호도 | 조리실 사용 가능 여부 |
| 재료 구매 | 재료 종류, 1인분 분량, 예상 판매 수량 | 구매처, 배달 가능 여부 |
| 예산 관리 | 총 예산, 재료비, 판매 가격 | 학교 지원금 확인 |
| 역할 배분 | 역할 종류, 인원수 | 교대 시간 계획 |
이처럼 모델링을 해 놓으면 빠진 것이 없는지 확인하기 쉽고, 다른 사람에게 문제의 구조를 설명하기도 편해집니다. 이것이 문제를 이해하고 분석하는 첫 번째 단계의 마무리입니다.
축제 부스 문제에서 「역할 배분」의 핵심 요소를 글이 아닌 그림으로 모델링한다면 어떤 형태가 좋을까요? 머릿속으로 그려 보고 이유를 말해 보세요.
핵심 정리
추상화와 자동화
abstraction & automation
- 추상화 — 불필요한 것을 걷어내고 핵심만 추리는 것
- 자동화 — 해결 절차를 프로그램으로 만들어 실행하는 것
- 추상화가 먼저, 자동화가 나중
문제의 세 가지 상태
어디에서 어디로
- 초기(문제 발생 전) · 현재(지금) · 목표(해결된 모습)
- 현재와 목표의 차이에서 풀어야 할 문제가 나온다
- 상태를 정리하면 무엇을 해야 하는지가 드러난다
문제 분해
decomposition
- 큰 문제를 해결할 수 있는 작은 단위로 나누는 것
- 각 작은 문제에서 핵심 요소를 추린다
- 문제 사이의 관계와 순서도 파악한다
모델링
modeling
- 핵심 요소를 구조화하여 정리하는 과정
- 말과 글 · 표 · 그림 등 목적에 맞는 방법을 고른다
- 여러 방법을 함께 쓸 수도 있다
확인 퀴즈
배운 내용을 확인해 봅시다.
다음 중 추상화에 해당하는 것은?
문제의 세 가지 상태에 대한 설명으로 옳은 것은?
모델링에 대한 설명으로 옳지 않은 것은?