생성형 AI 가 코드를 짜는 단계를 사실상 무료로 만들었다. Spring Boot 의 @Service 보일러플레이트 100줄, JPA 엔티티 매핑, REST 컨트롤러 — 클로드/GPT 가 분 단위 로 뱉어준다. 그러면 왜 우리는 여전히 GoF 패턴 책을 읽고, 왜 여전히 시간복잡도 ${O(n\log n)}$ 와 ${O(n^2)}$ 의 차이를 따지나?

답은 두 가지 차원이 서로 다른 운명 에 처해있다는 데 있다. 패턴 은 그 의미가 변형 되고 있고, 알고리즘 복잡도그대로 — 이유가 다르다.

본 글은 고찰 이다. 측정 데이터 보다 경험과 관찰 에 기반한 의견이 많다.


TL;DR

차원 AI 시대에 남는 가치 어디서 가장
디자인 패턴 구현 가치 감소, 소통 가치 유지 “이건 Strategy / Observer / Outbox 다” 한 단어로 대화 압축 DDD 도메인 설계 / 시스템 아키텍처 회의
시간복잡도 완전히 그대로 CPU 사이클은 AI 가 만들지 않음. ${O(n)}$ vs ${O(n^2)}$ 차이는 물리 HFT / 게임엔진 / DB / 컴파일러 / 임베디드
공간복잡도 완전히 그대로 메모리는 유한. 캐시 미스 / GC 압력은 AI 가 못 줄임 모바일 / 임베디드 / 대용량 스트리밍
언어 Python/JS 생산성 시너지. C/C++/Rust 우위 강화 저수준 언어일수록 알고리즘이 차이 시스템 프로그래밍 / 고빈도 처리

1. 패턴과 알고리즘은 있었나

패턴과 알고리즘은 완전히 다른 이유 로 등장했다. 이 둘을 같이 묶어서 “코딩 잘하려면 알아야 할 것” 으로 가르치는 게 오랜 혼란의 원인 이다.

디자인 패턴 = 소통의 언어

GoF (Gang of Four) 의 Design Patterns 책의 가치는 컴파일러 같은 효율 이 아니라 공통 어휘 였다.

“여기 Visitor 쓰자” 한 줄이 10분의 설명 을 대체.

패턴은 반복적으로 나타나는 구조이름을 붙여서 팀 사이의 의사소통을 압축하는 장치였다.

알고리즘 = 물리적 효율

알고리즘은 기계 의 효율을 위한 도구. 같은 문제를 같은 CPU 에서 ${O(n^2)}$ vs ${O(n\log n)}$ 로 풀면 데이터가 10배 늘면 100배 vs 33배 차이. 물리적·수학적 한계다.

이 둘은 추구하는 절약 대상 이 다르다:

  • 패턴 → 인간의 인지·소통 시간 절약
  • 알고리즘 → 기계의 CPU·메모리 절약

생성형 AI 의 등장이 어느 한쪽을 더 강하게 흔든다 는 게 본 글의 핵심.


2. AI 가 흔드는 쪽 — 코드 작성 비용

생성형 AI 의 직접적 효과는 “코드 작성하는 시간이 0 에 수렴” 이다. 그러면:

패턴의 구현 가치는 떨어진다

“Builder 패턴 손으로 짜면 30분, AI 한테 시키면 30초” “Adapter 손으로 짜면 50줄, AI 가 자동완성”

GoF 23개 패턴 손으로 외워서 짤 줄 안다 는 능력의 실용 가치 는 떨어졌다. 어차피 AI 가 그 정도는 다 해준다.

패턴의 소통 가치는 그대로 (혹은 더 중요해진다)

시스템 설계 회의에서:

  • “여기 Outbox 로 가요”
  • “이 부분은 Saga 패턴, compensating action 정의해야 함”
  • “이 클래스는 Strategy 인터페이스 두고 런타임에 갈아끼우자”

이런 한 단어 압축AI 가 대체 못 한다 — 인간 사이의 대화 효율이라서. 오히려 AI 한테 지시할 때 도 “Outbox 로 구현해줘” 가 “메시지를 DB 에 임시 저장하고 별도 워커가 발행하는 패턴으로…” 보다 훨씬 정확하다.

패턴 책 통째 외우기 < 패턴 이름과 의도 파악. 그리고 언제 그 패턴이 부적합한지 의 감각.


3. AI 가 흔들지 못하는 쪽 — 알고리즘 복잡도

여기가 본 글의 핵심.

CPU 사이클은 AI 가 만들지 않는다

AI 가 quickSort()30초 에 짜준다고 코드 실행 시간 이 줄어들지 않는다. 같은 입력으로 같은 CPU 에서 돌리면 ${O(n\log n)}$ 인 알고리즘은 여전히 ${O(n\log n)}$, ${O(n^2)}$ 는 여전히 ${O(n^2)}$.

심지어 AI 는 나쁜 알고리즘을 그럴듯하게 짜내는 경향이 있다:

  • “리스트에서 중복 제거” → 이중 for 루프 (${O(n^2)}$) 가 흔한 출력
  • “DB 조회” → N+1 쿼리 자연스럽게 등장
  • “정렬된 배열에서 검색” → 이진 탐색 안 쓰고 linear scan

동작은 하는데 데이터가 10배 되면 100배 느려지는 코드. 코드 리뷰 단계에서 인간이 잡지 않으면 프로덕션에서 터진다.

공간복잡도도 그대로

메모리는 유한. AI 가 “데이터를 다 메모리에 로드해서 처리” 하는 간단한 솔루션을 자주 제시한다. 1만개 row 면 OK, 1억 row 면 OOM.

스트리밍·청킹·온라인 알고리즘을 언제 적용해야 하는지 의 감각은 여전히 사람의 영역.


4. 분야별 — 알고리즘이 여전히 결정적인 영역

4.1 HFT (고빈도 거래) / 매매 시스템

마이크로초 단위 — ${O(1)}$ 자료구조 가 절대. Hash map 의 충돌 비용도 미리 측정. 라텍시 분포의 99 퍼센타일 이 사업 가치.

settlement / KIS auto-trading 같은 내 본업과 가까운 영역에선:

  • 주문 매칭 ${O(\log n)}$ vs ${O(n)}$ 의 차이가 체결 지연 으로 직결
  • B+tree, skip list, lock-free queue 같은 고전 알고리즘 + 동시성 primitive현역

4.2 게임 엔진

16.67ms 프레임 예산. 그 안에 다 끝나야 60fps. ${O(n^2)}$ collision check 는 천 개 객체 부터 무너짐 — spatial partitioning (Quadtree, BVH, Octree) 로 ${O(n\log n)}$ 보장.

4.3 DBMS / 쿼리 옵티마이저

PostgreSQL, MySQL 의 쿼리 플래너 = 알고리즘의 결정체. Hash join vs nested loop vs merge join 선택, 인덱스 cardinality 추정, cost-based optimization. AI 가 SQL 짜줘도 EXPLAIN ANALYZE 는 사람이 읽어야 한다.

4.4 컴파일러 / 트랜스파일러

레지스터 할당 (graph coloring), dead code elimination, SSA form 변환, peephole optimization — 모두 고전 알고리즘 문제. LLVM 의 IR 최적화 패스 = 수십 개 알고리즘의 조합.

4.5 임베디드 / IoT

RAM 64KB 짜리 마이크로컨트롤러에선 공간복잡도생존 문제. AI 가 짠 코드를 그대로 올리면 OOM. 비트 단위 최적화 가 일상.

4.6 대용량 스트리밍 / 분산 시스템

Kafka, Flink, Spark — Bloom filter, HyperLogLog, Count-Min sketch 같은 확률적 자료구조 가 핵심. 정확한 ${O(n)}$ 대신 근사 ${O(\log\log n)}$ 으로 100만배 절약.

4.7 내 영역 — 일반 백엔드 (Spring Boot, Django, Rails)

여기서도 알고리즘 무관 아님. N+1 쿼리, 인덱스 안 타는 쿼리, in-memory 정렬 — 백엔드 성능의 90% 가 데이터베이스 라운드트립과 메모리 사용 인데, AI 가 짠 일단 동작하는 코드는 그 90% 를 자주 망친다.

다만 얼마나 망쳐도 괜찮은지임계점이 다르다. 1000 RPM 짜리 사내 도구는 ${O(n^2)}$ 도 살아남지만, 100k RPM 짜리 결제 시스템은 ${O(n\log n)}$ 도 의심해봐야 한다.


5. 언어별 — 알고리즘 차이 가 가장 크게 나는 곳

5.1 C / C++ / Rust — 알고리즘이 거의 전부

GC 도 없고 인터프리터 오버헤드도 없는 맨살 환경. ${O(n\log n)}$ vs ${O(n^2)}$ 가 그대로 CPU 시간으로 변환. cache line aware 자료구조 (cache-oblivious B-tree 같은) 가 30% 차이.

Rust 의 zero-cost abstraction 은 결국 알고리즘 + 메모리 레이아웃 의 게임. 클로드가 Rust 코드 짜준다고 해도 왜 이 자료구조 인지의 판단은 사람.

5.2 Go — 동시성 알고리즘이 차이

Goroutine 은 쉽지만 channel pattern 선택 (buffered vs unbuffered, fan-in/fan-out, select) 은 알고리즘 수준 의 사고가 필요. Mutex vs atomic vs sync.Map 의 실제 차이 도.

5.3 Java / Kotlin — JIT 와 GC 영향

JIT 이 ${O(n^2)}$ 를 ${O(n\log n)}$ 으로 바꿔주지 않는다. 다만 상수 시간 최적화 는 잘 함 — 그래서 알고리즘 선택 의 임계점이 C/C++ 보다 살짝 완만. 단 GC pause 가 들어오면 모든 게 무의미.

settlement / lemuel-xr 같은 Spring Boot 서버에선:

  • 일반 비즈니스 로직: AI 코드 그냥 써도 됨 (${O(n)}$ 차이는 ms 수준)
  • 배치·집계: 반드시 알고리즘·인덱스 검토 (분 vs 시간 차이)
  • 트래픽 핫패스: ${O(1)}$ 자료구조 / 캐싱이 생존 조건

5.4 Python / JavaScript — 생산성 시너지 최대, 알고리즘 임계점은 낮음

인터프리터 오버헤드가 원래도 크기 때문에 ${O(n^2)}$ → ${O(n\log n)}$ 의 절대시간 차이가 상대적으로 덜 강조. 다만 데이터 사이언스 / ML 학습 파이프라인 에선 vectorized (NumPy, Pandas, PyTorch) 가 알고리즘 수준의 차이 — 루프 vs vectorize 가 100배.

AI 와 Python 의 시너지 가 가장 큰 영역 — 짧은 스크립트, 데이터 변환, 프로토타이핑. 여기선 알고리즘 < 생산성.


6. 디자인 패턴은 다른 이야기 — 구조의 언어

알고리즘과 달리 패턴은 복잡도가 아니라 구조의 언어. AI 시대에도 다음은 그대로 살아있다:

패턴군 왜 살아남나
GoF 행위 패턴 (Strategy, Observer, Command) 런타임 갈아끼우기·확장점 — 변경 가능성을 미리 설계
GoF 구조 패턴 (Adapter, Facade, Decorator) 외부 의존성 격리 — 테스트 용이성, 의존성 방향 제어
분산 시스템 패턴 (Saga, Outbox, CQRS) 물리 분산의 제약 자체가 사라지지 않음
DDD 전술 패턴 (Aggregate, Domain Event, Repository) 비즈니스 도메인의 본질적 구조 — AI 가 비즈니스 본질을 모름
헥사고날 / Port & Adapter 의존성 방향 강제, 테스트 시 외부 격리 — AI 가 자동 강제 못 함

AI 가 이런 구조자동으로 강제하지 않는다. 오히려 AI 는 지금 화면에 있는 코드 에 맞춰 비슷한 스타일 로 더해서, 경계를 부드럽게 무너뜨리는 경향. 결과: 6개월 뒤 코드베이스가 전부 한 덩어리 가 되어있다.

패턴의 가치는 “강제력” — 사람이 “여기 경계가 있어야 한다” 고 선언 하고, AI 한테 “이 경계 지켜서 코드 추가” 라고 지시하는 통제 장치.


7. 결론 — 남는 것남지 않는 것

남지 않는 것 (AI 가 흡수)

  • 패턴 구현 코드 작성 — 어차피 AI 가 분 단위
  • 자료구조 기본 구현HashMap, LinkedList 같은 거 직접 짤 일 없음
  • 일반 비즈니스 로직 보일러플레이트 — 0 비용

남는 것 (그리고 더 중요해지는 것)

  1. 시간·공간 복잡도의 직감 — AI 코드를 보고 “이거 ${O(n^2)}$ 인데?” 잡아내는 능력
  2. 분야별 임계점 감각 — 언제 알고리즘이 결정적이고 언제 무시해도 되는지
  3. 패턴의 이름과 의도 — 회의에서 한 단어로 압축하는 어휘
  4. 구조의 강제력 — 헥사고날, DDD 경계를 AI 에게 지시 할 수 있는 사람
  5. 벤치마크·프로파일링·EXPLAIN ANALYZE측정으로 검증하는 습관

분야·언어 한 줄 결론

만약 당신이 일하는 곳이 알고리즘 우선순위 추천 깊이
HFT / 매매 / 결제 핫패스 ★★★★★ 자료구조·알고리즘 최우선
게임엔진 / 그래픽 / 실시간 시뮬레이션 ★★★★★ spatial / temporal 알고리즘
DBMS / 컴파일러 / OS 커널 ★★★★★ 고전 알고리즘 전반
일반 백엔드 (트래픽 中) ★★★ 인덱스·N+1·캐싱
사내 도구 / 어드민 / CRUD 비즈니스 로직 우선
데이터 파이프라인 / ML ★★★★ 스트리밍·확률 자료구조·vectorization
프론트 / UI / UX ★★ 렌더링 ${O(n)}$, virtual DOM diff
임베디드 / IoT ★★★★★ 공간복잡도 생존 조건
언어 알고리즘 → 실제 차이 AI 시너지
C / C++ / Rust 직접 그대로 반영 코드 작성은 빨라짐, 판단 은 그대로 사람
Java / Kotlin / Go JIT/GC 가 상수 최적화, 알고리즘 차이는 유지 보일러플레이트는 AI, 핫패스 는 사람
Python / JavaScript / TypeScript 인터프리터 오버헤드 크지만 vectorized 영역에선 큰 차이 가장 큰 시너지 — 프로토타이핑·데이터 작업
SQL 쿼리 옵티마이저가 절반 함, 인덱스가 절반 AI 짜준 SQL 도 EXPLAIN ANALYZE 사람 책임

마무리: 내가 매일 마주하는 질문

settlement 시스템에서 매매 호가창 매칭 코드를 짤 때, 클로드가 깔끔한 ArrayList 기반 솔루션 을 줬다. 동작은 한다. 1000개 주문까지는 OK. 하지만 호가창은 최대 10만 개 호가가 누적되는 자료구조, 그리고 매 호가마다 매칭 시도 가 들어온다. ${O(n)}$ 매칭 → 10만 × 10만 = 100억 연산 → 매매 정지.

답은 Red-Black tree 기반 호가 인덱스 + price-time priority queue. AI 는 그 솔루션도 짜준다 — “호가 매칭은 Red-Black tree 로” 라고 내가 지시할 줄 알 때. 그 지시할 줄 아는 능력이 남는 것 이고, 그게 어디서 결정적인지 의 감각이 분야별 깊이 다.

생성형 AI 가 코드 작성 의 비용을 0 으로 만들면 만들수록, 판단·설계·검증 의 가치가 상대적으로 커진다. 패턴과 알고리즘은 그 판단의 어휘이자 기준. 손으로 다 짤 수 있어야 하는 게 아니라 읽고 판단할 수 있어야 하는 시대의 도구.

다음 글에선 AI 시대에 알고리즘 공부의 우선순위 재편 — “이걸 손코딩 수준까지 갈 필요는 없지만 이 아이디어는 반드시” 의 리스트를 정리할 예정.