«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Recent Posts
Today
Total
관리 메뉴

푸른들소프트

개발자에게 진짜 필요한 수학 본문

개발 노트/INSIGHT

개발자에게 진짜 필요한 수학

푸른들소프트 2026. 3. 24. 10:30

 

 

들어가며

 

주니어 개발자들이 자주 하는 걱정 중 하나가 수학입니다.

특히 CS 비전공자라면 "나 미적분도 잘 모르는데 괜찮나?"

하는 불안감을 한 번쯤 가져봤을 것입니다.

결론부터 말씀드리면 웹·앱 개발자 대부분에게

고등수학은 필요하지 않습니다.

하지만 수학적 사고방식은 매일 씁니다.

 

그런데 요즘은 이런 말도 나옵니다.

"ChatGPT한테 물어보면 되는데, 수학을 굳이 알아야 해?"

이 질문도 틀리지 않습니다.

AI가 코드를 대신 짜주는 시대에 수학을 왜 배워야 하는지,

그리고 어떤 수학이 언제 왜 쓰이는지를

코드와 함께 살펴보겠습니다.

 

 

AI 시대에도 수학적 사고가 필요한 이유

 

"GitHub Copilot이 다 짜주는데요?"라는

반응은 충분히 이해합니다.

실제로 AI는 코드를 놀랍도록 잘 작성합니다.

하지만 AI가 코드를 대신 짜준다고 해서

수학적 사고가 필요 없어지는 건 아닙니다.

오히려 반대입니다.

 

AI가 생성한 코드를 검증하는 건 사람의 몫입니다.

AI는 페이지네이션 로직을 짜줄 수 있지만,

Math.ceil 이 빠진 코드를 넘겨줄 때

그게 틀렸다는 걸 알아차리는 건 개발자 자신입니다.

AI가 O(n²) 루프를 생성했을 때

"이건 데이터가 많아지면 터지겠다"고

판단하는 것도 사람입니다.

 

문제를 정의하는 건 AI가 못 합니다.

AI에게 좋은 코드를 받으려면

먼저 문제를 수학적으로 명확하게 정의할 수 있어야 합니다.

"슬라이드가 무한으로 돌아가게 해줘"보다

"현재 인덱스에서 1을 더했을 때

전체 개수를 넘으면 0으로 돌아오는 로직"이라고

설명할 수 있는 사람이 AI를 훨씬 잘 씁니다.

수학적 사고는 AI를 활용하는 능력 자체를 높여줍니다.

 

디버깅은 여전히 논리의 싸움입니다.

AI가 만든 코드에서 버그가 생겼을 때,

원인을 추적하고 수정하는 과정은

결국 논리와 수의 흐름을 따라가는 일입니다.

이 능력은 AI가 대신해줄 수 없습니다.

 

수학 공식을 암기할 필요는 없습니다.

하지만 수학적으로 생각하는 능력은

AI 시대일수록 더 중요한 개발자의 핵심 역량입니다.

 

 

 

 

 

1. 산술·비율 계산 — 매일 쓰는 진짜 기본기

난이도: ★☆☆☆☆

 

사칙연산, 백분율, 비율. "이게 수학이냐"고 하실 수 있지만,

이걸 코드에서 제대로 다루지 못하는 개발자가 생각보다 많습니다.

할인율 계산, 페이지네이션, 진행률 바(progress bar) — 모두 여기서 나옵니다.

// ✅ 진행률 바: 전체 대비 현재 비율
const getProgress = (current, total) => {
  return Math.min((current / total) * 100, 100); // 최대 100%
};

// ✅ 페이지네이션: 전체 페이지 수 계산
const totalPages = Math.ceil(totalItems / itemsPerPage);
// 103개 아이템, 10개씩 → Math.ceil(103/10) = 11페이지

// ✅ 할인 가격 계산
const discountedPrice = (originalPrice, discountRate) =>
  originalPrice * (1 - discountRate / 100);

discountedPrice(50000, 20); // → 40000원
 

흔한 실수 포인트:

페이지 수 계산에서 Math.ceil 을 빠뜨리면 마지막 페이지가 사라집니다.

103개를 10개씩 나눌 때 Math.floor 를 쓰면 10페이지, Math.ceil 을 써야 11페이지가 나옵니다.

AI가 이 코드를 짜줬더라도, 이 차이를 모르면 버그를 그냥 지나칩니다.

 

 

 

 

 

2. 논리학 (Boolean Logic) — 조건문의 뼈대

난이도: ★★☆☆☆

 

AND, OR, NOT, XOR. 집합론적 사고가 코드에서는 조건문, 필터, 권한 체크로 나타납니다.

복잡한 조건을 머릿속에서 정리하는 능력이 곧 버그 없는 코드를 만드는 능력입니다.

// ✅ 권한 체크 — AND/OR/NOT 조합
const canEdit = (user, post) =>
  user.isAdmin || (user.id === post.authorId && !post.isLocked);

// ✅ 배열 필터링 — 집합 연산
const activeAdults = users.filter(
  u => u.age >= 18 && u.isActive && !u.isBanned
);

// ✅ 드모르간 법칙 활용 — 조건 단순화
// 아래 두 줄은 동일한 결과입니다
const a = !(isAdmin || isModerator); // NOT (A OR B)
const b = !isAdmin && !isModerator;  // (NOT A) AND (NOT B)
 

실무 팁:

조건이 3개 이상 중첩될 때 헷갈린다면

진리표(truth table)를 손으로 그려보시기 바랍니다.

5분 투자로 하루치 디버깅을 아낄 수 있습니다.

 

 

 

 

 

3. 나머지 연산 (Modulo) — 순환하는 모든 것

난이도: ★★☆☆☆

 

% 연산자는 주기성이 있는 것들을 다룰 때 핵심입니다.

요일 계산, 색상 순환, 짝수/홀수 판별, 해시 테이블의 인덱스 분배까지 생각보다 훨씬 자주 나타납니다.

// ✅ 짝수/홀수 번갈아 스타일 적용 (테이블 줄무늬)
rows.forEach((row, index) => {
  row.className = index % 2 === 0 ? 'row-even' : 'row-odd';
});

// ✅ 무한 루프 없는 다음/이전 슬라이드
const nextSlide = (current, total) => (current + 1) % total;
const prevSlide = (current, total) => (current - 1 + total) % total;
// current = 4, total = 5 → nextSlide = 0 (처음으로 돌아옴)

// ✅ 요일 계산
const DAY_NAMES = ['일', '월', '화', '수', '목', '금', '토'];
const today = new Date();
const dayName = DAY_NAMES[today.getDay()]; // getDay()는 0~6 반환

// ✅ 해시 테이블 버킷 분배
const getBucket = (key, bucketSize) => key % bucketSize;
 
 

 

 

 

 

4. 좌표 기하학 — UI와 애니메이션의 언어

난이도: ★★★☆☆

 

이 부분부터 "수학이네" 싶어지기 시작합니다.

드래그 앤 드롭, 캔버스 그래픽, 지도 UI, 게임까지.

2D 좌표계를 이해하지 못하면 구현하기 어렵습니다.

고등학교 수준의 거리 공식과 각도 계산이면 충분합니다.

// ✅ 두 점 사이의 거리 (피타고라스 정리)
const distance = (x1, y1, x2, y2) =>
  Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);

// ✅ 드래그: 마우스 이동량 계산
element.addEventListener('mousemove', (e) => {
  const deltaX = e.clientX - startX;
  const deltaY = e.clientY - startY;
  element.style.transform = `translate(${deltaX}px, ${deltaY}px)`;
});

// ✅ 클릭 위치가 원 안에 있는지 판별 (히트 테스트)
const isInsideCircle = (clickX, clickY, cx, cy, radius) =>
  distance(clickX, clickY, cx, cy) <= radius;

// ✅ 각도로 원 위의 좌표 계산 (시계, 방사형 메뉴 등)
const toRad = (deg) => deg * (Math.PI / 180);
const x = cx + radius * Math.cos(toRad(angle));
const y = cy + radius * Math.sin(toRad(angle));
 

알아두면 좋은 것:

Math.cos Math.sin 은 라디안을 받습니다.

각도를 라디안으로 변환하는 공식 deg * (Math.PI / 180) 은 외워두시면 편합니다.

 

 

 

 

 

5. 지수·로그 — 성능과 알고리즘의 배경지식

난이도: ★★★☆☆

 

직접 코드에 쓸 일보다는 "이 코드가 왜 느린가"를 이해할 때 더 자주 쓰입니다.

알고리즘의 시간복잡도(O(n), O(log n), O(n²))를 이해하려면 로그와 지수 개념이 필요합니다.

// ✅ 이진 탐색 — O(log n)
// 1,000,000개 데이터에서 최악 20번만에 찾음 (log₂ 1,000,000 ≈ 20)
const binarySearch = (arr, target) => {
  let lo = 0, hi = arr.length - 1;
  while (lo <= hi) {
    const mid = Math.floor((lo + hi) / 2);
    if (arr[mid] === target) return mid;
    else if (arr[mid] < target) lo = mid + 1;
    else hi = mid - 1;
  }
  return -1;
};

// ❌ 선형 탐색 — O(n)
// 1,000,000개 데이터 → 최악 1,000,000번 비교
const linearSearch = (arr, target) => arr.indexOf(target);

// ✅ 지수 백오프 (네트워크 재시도 패턴)
// 실패할수록 대기 시간을 2배씩 늘림
const getRetryDelay = (attempt) => Math.pow(2, attempt) * 1000;
// attempt 0: 1초, 1: 2초, 2: 4초, 3: 8초...
 

왜 중요한가:

O(n²) 로직이 데이터 100개일 때는 괜찮습니다.

10,000개가 되는 순간 100배가 아니라 10,000배 느려집니다.

이걸 직감적으로 이해하는 것과 모르는 것은 시니어와 주니어의 차이 중 하나입니다.

AI가 생성한 코드라도 이 판단은 개발자가 직접 해야 합니다.

 

 

 

 

 

6. 선형 보간 (Lerp) — 부드러운 애니메이션의 비밀

난이도: ★★★☆☆

 

lerp 는 Linear Interpolation의 약자입니다.

"A에서 B로 t만큼 이동한 지점"을 구하는 공식으로,

애니메이션, 색상 전환, 카메라 이동 등에서 매우 자주 쓰입니다.

// ✅ 선형 보간 공식
const lerp = (a, b, t) => a + (b - a) * t;
// t = 0이면 a, t = 1이면 b, t = 0.5이면 중간값

// ✅ 부드러운 스크롤 (매 프레임 목표의 10%씩 이동)
let currentY = 0;
const targetY = 500;

function animate() {
  currentY = lerp(currentY, targetY, 0.1);
  window.scrollTo(0, currentY);
  if (Math.abs(targetY - currentY) > 0.5) {
    requestAnimationFrame(animate);
  }
}

// ✅ 색상 보간 (RGB 각 채널에 적용)
const lerpColor = (colorA, colorB, t) => ({
  r: Math.round(lerp(colorA.r, colorB.r, t)),
  g: Math.round(lerp(colorA.g, colorB.g, t)),
  b: Math.round(lerp(colorA.b, colorB.b, t)),
});

const red  = { r: 255, g: 0, b: 0   };
const blue = { r: 0,   g: 0, b: 255 };
lerpColor(red, blue, 0.5); // → { r: 128, g: 0, b: 128 } (보라색)
 
 

 

 

 

 

7. 통계 기초 — 데이터를 읽는 눈

난이도: ★★★☆☆

 

평균, 중앙값, 표준편차. 대시보드를 만들거나 사용자 데이터를 다루는 순간 반드시 마주칩니다.

특히 평균과 중앙값의 차이를 모르면 데이터를 잘못 해석하는 버그(?)를 만들게 됩니다.

// ✅ 평균 (Mean)
const mean = (arr) => arr.reduce((sum, v) => sum + v, 0) / arr.length;

// ✅ 중앙값 (Median) — 이상치(outlier)에 강함
const median = (arr) => {
  const sorted = [...arr].sort((a, b) => a - b);
  const mid = Math.floor(sorted.length / 2);
  return sorted.length % 2 !== 0
    ? sorted[mid]
    : (sorted[mid - 1] + sorted[mid]) / 2;
};

// 평균 vs 중앙값의 차이가 중요한 이유:
const salaries = [30000, 32000, 31000, 33000, 500000]; // 임원 포함
console.log(mean(salaries));   // → 125200 (왜곡됨)
console.log(median(salaries)); // → 32000  (현실에 가까움)

// ✅ 표준편차 — 데이터가 얼마나 퍼져 있는가
const stdDev = (arr) => {
  const avg = mean(arr);
  const variance = arr.reduce((sum, v) => sum + (v - avg) ** 2, 0) / arr.length;
  return Math.sqrt(variance);
};
 

 

 

 

 

 

 

마치며

 

실무에서 요구되는 수학 능력을 한 문장으로 정리하면 이렇습니다.

 

"복잡한 현실 문제를 숫자와 식으로 단순하게 표현하는 능력"

 

미적분이나 선형대수가 필요한 순간은

ML 엔지니어, 게임 물리 엔진 개발자,

그래픽스 프로그래머에게 주로 찾아옵니다.

웹·앱 개발자라면 이 글에서 다룬 7가지 영역이

실무의 80%를 커버합니다.

 

AI가 코드를 짜주는 시대가 되었지만,

수학적 사고의 가치는 오히려 올라가고 있습니다.

AI가 생성한 코드의 옳고 그름을 판단하고,

문제를 AI에게 명확하게 전달하고,

성능 이슈를 감지하는 것.

이 모든 과정에 수학적 사고가 깔려 있습니다.

 

수학 공식을 외울 필요는 없습니다.

"이 문제를 어떻게 수식으로 표현할까?"라고

질문하는 습관, 그것으로 충분합니다.



 

 

 

 

 

 

 

 

푸른들소프트

웹, 앱, 기업 프로그램, 쇼핑몰 등 다양한 IT 프로젝트를 폭넓게 수행하는

대구·경북 지역에서 보기 드문 젊고, 실력있는 기술 중심 기업입니다.

 

단순히 ‘개발만 잘하는 회사’가 아니라,

고객의 비즈니스 상황을 이해하고

그에 맞는 맞춤형 기획부터 UI/UX 설계,

개발 기술 선정, 운영까지 전 과정에 깊이 관여하는 토탈 솔루션 파트너입니다.

 

저희는 유연한 사고,

빠르게 진화하는 기술에 대한 흡수력을 바탕으로

최신 트렌드와 실무 요구를 모두 반영할 수 있는 실력 있는 팀입니다.

 

기성 솔루션에 억지로 고객을 맞추는 것이 아니라,

스타트업, 소상공인, 중소·중견기업 등

고객의 상황에 꼭 맞는 시스템을 설계하고,

실질적인 업무 효율과 비용 절감을 만들어내는 데 집중하고 있습니다.

 

단기 성과에 급급한 개발이 아닌,

고객의 변화에 함께 적응하고,

장기적으로 함께 성장할 수 있는 파트너로서

신뢰할 수 있는 기술 동반자가 되어드릴 것을 약속드립니다.

 

지금, 푸른들소프트와 함께 귀사의 다음 변화를 설계해보세요.

작은 고민도 진지하게 듣고, 실력과 기술로 해답을 드리겠습니다.

 





 

 

 

 

 

 

 

 

 

 

 

 

 

Comments