본문 바로가기

CS

개발자처럼 사고하기: 시작하기 전에 '이것'만 알아두세요

전공 서적보다 의외로 쓸모 있을지도?

 


"코드를 잘 치는 법"이 아니라, 코드 전에 알아야 할 사고방식에 대한 이야기입니다.


Part 1. 개발, 시작하기 전에 알아야 할 것

인간의 가장 강력한 지적 능력은?

퀴즈를 하나 내보겠습니다. 인간의 가장 강력한 지적 능력은 뭘까요?

창의력? 상상력? 언어?

아닙니다. 이런 능력들을 원천적으로 파고 들어가면 하나로 귀결됩니다.

 

답은 추상화(Abstraction)입니다.

 

추상화란, 복잡한 현실에서 핵심만 뽑아내 단순한 구조로 만드는 능력입니다. 우리는 매일 추상화를 합니다. 사과 하나하나를 볼 때 Braeburn, Fuji, Gala 같은 개별 품종을 일일이 구분하지 않죠. 그냥 "사과"라는 개념으로 묶습니다. 여러 동물들을 보고 "포유류"라는 분류를 만드는 것도 마찬가지입니다.

추상화의 언어 = 수학

그리고 이 추상화를 표현하는 가장 궁극적인 언어가 바로 수학입니다. 수학은 의미를 제거하고, 본질만 남기고, 구조만 남기는 언어예요.

극단적으로 말하면, 세상을 함수로 정의할 수 있다면 세상을 지배할 수 있다는 이야기도 있습니다.

F = ma

 

뉴턴은 사과가 떨어지는 걸 보고, 행성이 도는 걸 보고, 파도가 해안을 치는 걸 보고, 로켓이 날아가는 걸 보고 — 수많은 물리 현상을 관찰한 뒤에 이걸 세 글자로 압축했습니다.

F = ma.

이게 추상화입니다. 복잡한 세상을 구조로 환원하는 것. 우리가 해야 하는 수학은 해결해야 하는 문제를 함수로 추상화하는 것입니다.

프로그래밍에 적용된 수학

이걸 실제 서비스에 대입해볼게요. 배달앱을 켰는데 뭘 시킬지 모르겠는 경험, 다들 있으시죠? 메뉴를 이리저리 보다가 결국 앱을 닫아버린 적 있을 겁니다.

이게 현실의 문제입니다.

해결 방법은? 우리 동네에서 많이 시킨 메뉴를 보여주는 겁니다. 다른 사람들이 많이 시킨 걸 보면 선택이 쉬워지니까요. 쿠팡이츠의 "우리 동네 인기 메뉴" 기능이 바로 이겁니다.

이걸 알고리즘으로 만들면:

  1. 사용자의 위치를 확인한다
  2. 반경 내 가게들의 최근 주문 내역을 수집한다
  3. 주문이 많은 메뉴 순으로 정렬해서 보여준다

그리고 이 알고리즘을 코드로 옮기면:

def popular_menu(user_location, days=7):
    # 1. 사용자 위치 기반 근처 가게 찾기
    stores = find_nearby_stores(user_location)

    # 2. 최근 주문 내역 수집
    orders = get_recent_orders(stores, days)

    # 3. 메뉴별 주문 수 집계 → 많은 순 정렬
    menu_count = count_by_menu(orders)
    return sorted(menu_count, key=lambda m: m.count, reverse=True)

알고리즘의 각 단계가 그대로 코드가 됩니다. 하지만 이걸 알려주는 학교 수업이나, 프로그래밍 언어 서적을 못봤습니다.

저는 여러 번 포기했습니다

제가 처음 공부한 개발 언어는 Perl Language였습니다. 특이하죠?

프로그래밍 코드는 익히는데... 이걸로 뭘 만들 수 있는데...ㅠ

그래서 포기했습니다.

그리고 이건 저만의 이야기가 아닙니다. 실제로 컴퓨터과학과를 졸업한 학생들이 수백만 원을 주고 부트캠프에 등록합니다. 코드 치는 방법은 배웠는데, 프로그램을 만드는 법을 안 배웠으니까요.

우리에게 필요한 건 "식을 만드는 법"

정리하면 이렇습니다.

우리가 배운 것 앞으로 배워야 할 것

이미 만들어진 식을 푸는 법 현실의 문제로 식을 만드는 법

 

이 관점을 가지고 시작하면, 개발 공부가 달라집니다.

 

이산수학을 들을 때, 개발 서적을 볼 때 — 계산이 아니라 "이걸로 뭘 구조화할 수 있지?"에 집중하세요. 그게 식을 만드는 눈입니다.


Part 2. 그래서, 개발이란 뭔데?

개발의 정의

개발이란, 현실의 문제를 디지털 세상으로 가져와 똑똑하게 해결하는 것입니다.

여러분 주위에 있는 문제를 살펴볼까요?

  • 회원 관리 → Database
  • 검색 엔진 속도 → 자료구조
  • 유튜브/쿠팡 추천 → 알고리즘

개발의 출발점은 늘 현실의 문제였습니다.

과거에는 풀스택이 당연했다

2000년대 초중반, PHP 전성기 시절에는 개발자 = 풀스택이던 시절이 있었습니다. LAMP 스택(Linux + Apache + MySQL + PHP) 하나로 프론트엔드, 백엔드, 데이터베이스를 한 사람이 다 했습니다.

그런데 현실 문제를 해결하기 위해 Tool을 만들다보니, 개발자 한 사람이 다루기엔 너무 범위가 넓어졌습니다. React, Python, Docker, AWS, TensorFlow, Kubernetes, Spring, Flutter... 이걸 한 사람이 다 할 수 있을까요?

불가능합니다. 그래서 자연스럽게 전문 영역이 나뉘었습니다.

개발의 6대 영역

1. 프론트엔드 (Frontend)

사용자가 직접 보고 조작하는 화면(UI)을 설계하고 구현하는 영역입니다.

주요 기술 스택: React, Vue.js, Angular, Flutter, React Native, Swift, HTML/CSS, Tailwind

실제로 하는 일: 화면 레이아웃과 인터랙션 설계, API 연동, 반응형 디자인, UX 최적화

현실의 문제 예시: "쇼핑몰 앱에서 상품 목록이 느리게 뜨고, 필터가 직관적이지 않아 이탈률이 높다"

2. 백엔드 (Backend)

서버, 데이터베이스, API를 설계하고 비즈니스 로직을 처리하는 영역입니다.

주요 기술 스택: Java/Spring, Python/Django, Node.js, MySQL, PostgreSQL, MongoDB, AWS, GCP

실제로 하는 일: API 설계 및 서버 로직 구현, 데이터베이스 설계, 대규모 트래픽 처리, 인증/보안

현실의 문제 예시: "주문이 동시에 1만 건 들어올 때 서버가 다운되지 않고 정확하게 처리해야 한다"

3. 데이터 / AI

데이터를 수집·가공·분석하고, 머신러닝/딥러닝으로 예측 모델을 만드는 영역입니다.

주요 기술 스택: Python, SQL, Spark, TensorFlow, PyTorch, Pandas, OpenAI API, LangChain

실제로 하는 일: 데이터 파이프라인 구축, 예측 모델 학습, A/B 테스트, 추천 시스템, 자연어 처리

현실의 문제 예시: "이 고객이 다음에 뭘 살지 예측해서, 앱을 열자마자 맞춤 상품을 보여주고 싶다"

참고로 요즘 AI 영역에서는 ML(머신러닝), DL(딥러닝), AI(파운데이션 모델 활용)로 세분화되고 있습니다. 근데 아직 채용시장에서는 이게 혼용되고 있어서, ML 포지션으로 들어갔는데 AI 업무를 하는 경우도 있다카더라... 하는 소식이 있습니다.

4. DevOps

소프트웨어의 빌드·배포·운영을 자동화하고, 시스템 안정성을 보장하는 영역입니다.

주요 기술 스택: Docker, Kubernetes, Jenkins, GitHub Actions, Grafana, Prometheus, Terraform

실제로 하는 일: 배포 파이프라인 자동화, 서버 스케일링, 모니터링, 인프라를 코드로 관리(IaC)

현실의 문제 예시: "새 기능을 배포할 때마다 수동으로 서버를 만지면 실수가 나고 시간이 걸린다"

5. 임베디드 / IoT

하드웨어 위에서 동작하는 소프트웨어를 개발하고, 센서·기기를 네트워크로 연결하는 영역입니다.

주요 기술 스택: C, C++, Rust, Arduino, Raspberry Pi, MQTT, BLE, FreeRTOS

실제로 하는 일: 센서 데이터 수집 및 제어, 펌웨어 개발, 저전력/실시간 시스템, 클라우드 연동

현실의 문제 예시: "공장 온도가 임계치를 넘으면 자동으로 설비를 멈추고 관리자에게 알림을 보내야 한다"

6. 게임 개발 (Game Dev)

인터랙티브 경험을 설계하고, 그래픽·물리·네트워크를 결합해 게임을 만드는 영역입니다.

주요 기술 스택: Unity(C#), Unreal Engine(C++), OpenGL, Vulkan, Photon

실제로 하는 일: 게임 로직 및 AI 설계, 물리 엔진, 멀티플레이어 서버, 최적화

현실의 문제 예시: "100명이 동시에 접속하는 배틀로얄 게임에서 랙 없이 실시간으로 위치를 동기화해야 한다"

영역은 달라도 본질은 같다

프론트엔드, 백엔드, 데이터/AI, DevOps, 임베디드, 게임 — 영역은 달라도 구조는 같습니다.

현실의 문제 → 디지털로 해결.

어떤 영역을 선택하든, 문제를 보는 눈이 있으면 시작할 수 있습니다.


Part 3. 개발 방법론의 기초

개발은 이 흐름으로 진행됩니다

문제를 보는 눈이 생겼다고 칩시다. 그러면 실제로 어떻게 만드는 걸까요? 개발은 보통 다섯 단계로 진행됩니다.

  1. 문제 정의 — 현실의 불편함을 구조적 문제로 변환
  2. 설계 — 문제를 풀기 위한 구조와 관계 설계
  3. 구현 — 설계를 코드로 옮기기
  4. 테스트 — 설계대로 작동하는지 확인
  5. 개선 — 피드백 반영, 다시 반복

파트1에서 말한 "식을 만드는 과정"이 바로 이 흐름입니다.

프로젝트 Leaf(리프)

제가 직접 했던 사이드 프로젝트를 예시로 보여드리겠습니다. "리프(Leaf)"라는 대화형 재무관리 서비스입니다. 쉽게 말하면, "오늘 점심 만 원 썼어"라고 말하면 자동으로 지출을 기록하고 예산을 관리해주는 챗봇형 가계부입니다.

이걸 5단계에 대입하면:

단계 리프 적용

문제 정의 기존 가계부는 기록만 해주지, "이거 사도 돼?"에 답해주지 않는다
설계 사용자·예산·지출 구조 정의 + IA 설계
구현 React + FastAPI + NLP 코드 작성
테스트 "청바지 9만원인데 사도 돼?" 시나리오 검증
개선 1차 MVP → 피드백 → 2차 MVP

코드는 5단계 중 하나일 뿐

보이시죠? 코드를 치는 건 이 5단계 중 셋째 단계일 뿐입니다. 나머지 네 단계는 전부 사고의 영역입니다.

코드부터 치지 마세요. 문제부터 정의하세요.


마무리. 코드가 아니라, 문제를 보세요

마지막으로 한 가지만 더 말씀드리겠습니다. 요즘 AI 많이 쓰시죠? 저도 Claude를 써보면서 이런 생각이 들었습니다.

"아, 개발 언어를 꼭 배우지 않아도 되겠다."

근데 그게 컴퓨터과학 공부를 안 해도 된다는 뜻은 아닙니다. 컴퓨터과학은 문제 해결 방법론입니다. 문제를 정의하고, 해결 방법을 찾는 공부. 아무리 좋은 AI 도구가 있더라도, 이게 안 되면 아무것도 해결할 수 없습니다.

오늘 당장 잘하지 않아도 됩니다. 대신 코드가 아니라 문제를 보려고 노력하세요. 이산수학을 들을 때, 개발 서적을 볼 때, 그리고 앞으로 여러분이 어떤 프로젝트를 하든 —

계산이 아니라 구조를 보세요.

 

감사합니다.