1. 전통 인공지능의 깊이 우선 탐색 (Depth-First Search) 개념
한 갈래의 끝까지 파고드는 수직 우선 순회와 백트래킹(Backtracking)의 미학
깊이 우선 탐색(DFS)은 트리 (Tree)와 그래프 (Graph)를 탐색하는 가장 직관적인 알고리즘입니다. 루트 노드에서 출발하여(그래프에서는 임의의 시작 정점을 선택하여) 백트래킹하기 전까지 각 분기(Branch)에서 가능한 한 가장 깊은 곳까지(Deeper and deeper) 탐색합니다.
[보존 원본 도표] 깊이 우선 탐색의 수직적 가지 확장 순서 (자식 노드를 끝까지 탐색 후 부모로 되추적)
DFS는 탐색 트리의 최초의 자식 노드(Child Node)를 확장하여 목표 상태(Goal State)가 발견될 때까지 수직으로 깊게 확장하는 무정보 탐색 (Uninformed or Blind Search)입니다. 만일 더 이상 자식 노드가 없는 잎(Leaf) 노드나 유효하지 않은 상태에 도달하면 부모 노드로 되돌아가(Backtrack) 다음 형제 노드를 탐색합니다.
트리가 유한하고 사이클이 없으면 완전하지만, 무한 경로가 있는 그래프에서는 무한 루프에 빠져 불완전합니다.
비최적 (Non-optimal) : 얕은 곳에 최단 해가 있더라도, 깊은 곳에 있는 매우 길고 비효율적인 해를 먼저 만나면 그것을 반환합니다.
O(bm) : 최대 깊이 m까지 최악의 경우 모든 노드를 조사해야 하므로 지수적 시간이 소요됩니다.
O(b × m) : 선형 메모리! 현재 탐색 경로의 조상 노드들만 스택에 저장하므로 BFS에 비해 메모리 효율이 압도적입니다.
2. LIFO 스택 자료구조와 백트래킹(Backtracking) 메커니즘
호출 스택(Call Stack), 사이클 방지, 그리고 반복적 깊이심화(IDDFS)의 탄생
DFS에서 새로이 확장된 모든 자식 노드들은 후입선출(LIFO, Last-In First-Out) 큐(스택, Stack)에 추가되거나, 시스템 프로그래밍의 재귀 함수 호출 스택(Recursion Call Stack)을 통해 관리됩니다.
메모리 절약과 무한 루프의 위험
- • 낮은 공간 복잡도: 너비우선 탐색(BFS)과 달리 형제 노드들을 모두 메모리에 보관할 필요가 없어 메모리 부담이 극도로 낮습니다.
- • 휴리스틱과의 결합 용이성: 가장 유망해 보이는 가지를 먼저 파고드는 휴리스틱 방법에 매우 쉽게 적응합니다.
- • 무한 루프(Non-Termination) 문제: 메모리에 완전히 담을 수 없는 큰 그래프나 순환이 있는 경우, A-B-F-E-A와 같은 사이클에 갇혀 영원히 멈추지 않을 수 있습니다.
[보존 원본] 그래프 탐색 순서 예시
방문했던 노드를 기억하지 않으면 A → B → F → E 사이클에 갇혀 C나 G에 절대 도달하지 못합니다.
💡 무한 루프를 극복하는 해법: 반복적 깊이증가 탐색 (IDDFS)
메모리가 부족하여 이미 방문한 모든 노드를 기록할 수 없을 때, 깊이 한계(Depth Limit)를 0부터 1, 2, 3...으로 점진적으로 늘려가며 DFS를 반복 수행하는 IDDFS를 적용합니다:
IDDFS는 사이클 함정을 무력화하며, BFS의 완전성/최적성과 DFS의 O(b × d) 메모리 절약을 완벽하게 동시에 달성합니다. (Wikipedia : Depth-first Search)
DFS(StartNode, GoalTest) {
Create an empty LIFO Stack
Create an empty Set Visited
Push(Stack, StartNode)
while (Stack is not empty) {
currentNode = Pop(Stack)
if (GoalTest(currentNode) == TRUE) {
return SolutionPath(currentNode) // 첫 번째 발견된 해 반환
}
if (currentNode not in Visited) {
Add(Visited, currentNode)
for each Child in Expand(currentNode) {
if (Child not in Visited) {
Child.parent = currentNode
Push(Stack, Child) // 스택의 맨 위에 추가 (가장 먼저 탐색)
}
}
}
}
return FAILURE
}
3. 전통 AI 및 컴퓨터 과학에서의 대표적 활용 사례
제약 충족 퍼즐, 컴파일러 구문 분석, 위상 정렬과 미로 백트래킹
N-Queen 문제나 수도쿠 퍼즐은 해가 깊은 곳에 존재하며 메모리 소비를 최소화해야 합니다. DFS는 말을 하나씩 배치하다가 제약 조건(행/열/대각선 충돌)을 위반하는 순간 즉시 상위 상태로 백트래킹하여 다른 숫자를 대입하는 방식으로 해를 효율적으로 구합니다.
프로그래밍 언어 컴파일러는 소스코드를 추상 구문 트리(AST)로 변환한 후, DFS를 사용하여 수식의 가장 깊은 안쪽 괄호 및 리프 피연산자부터 연산자 우선순위에 따라 수직으로 순회(Post-order traversal)하며 코드 생성 및 타입 검사를 수행합니다.
작업 간의 선후 의존성 관계가 있는 유향 비순환 그래프(DAG)에서 모든 작업 순서를 정렬하는 위상 정렬과, 그래프 내에서 서로 자유롭게 왕래할 수 있는 서브 네트워크를 찾는 타잔(Tarjan) 및 코사라주(Kosaraju) 알고리즘의 뼈대가 바로 DFS입니다.
오른손 법칙이나 피에르 트레모의 미로 탐색 기법은 전형적인 DFS 백트래킹입니다. 또한 인공지능 논리 언어인 프롤로그(Prolog)의 추론 엔진은 규칙(Rule) 베이스를 탐색할 때 심층적인 백트래킹 DFS를 기본 메커니즘으로 채택하고 있습니다.
전통 DFS 스택(LIFO) 동작 메커니즘 & 백트래킹 라이프사이클
Push(하향 전진) → 막다른 골목(Dead-End) → Pop(되추적) → 대안 분기 개척
수직 하향 전진 (Push)
스택의 맨 위에 첫 번째 자식 노드를 계속 Push하며 리프 노드에 도달할 때까지 수직 깊이 방향으로 직진합니다.
막다른 골목 조우 (Dead-End)
더 이상 자식 노드가 없거나 유효하지 않은 제약 조건을 만나면 해당 노드를 실패(Pruned)로 마킹합니다.
백트래킹 되추적 (Pop)
실패한 노드를 스택에서 Pop하고, 직전 부모 노드로 거슬러 올라가 아직 방문하지 않은 다른 형제 분기가 있는지 검사합니다.
대안 경로 재진입 (Explore)
부모 노드의 다음 자식(E)을 스택에 Push하여 새로운 하향 탐색을 재개합니다. 목표 노드를 만나면 즉시 종료합니다.
4. 최신 LLM에서 깊이 우선 탐색(DFS)의 진화와 결정적 의미
자기회귀(Autoregressive) 생성의 본질, 자연어 백트래킹(Self-Correction), 그리고 OpenAI o1/DeepSeek-R1의 심층 추론
거대언어모델(LLM)이 이전 토큰들을 기반으로 다음 토큰을 하나씩 이어붙이며 최종 문장이나 코드 블록 끝(EOS)까지 생성하는 과정은 본질적으로 수직적인 깊이 우선(Depth-First Rollout)입니다. 그러나 전통적 LLM은 스택 기반의 '되돌아가기(Backtracking)' 능력이 없어 첫 전제가 틀리면 끝까지 거짓 논리를 밀어붙였습니다. 최신 추론형 LLM(o1, o3, R1)은 DFS의 백트래킹 원리를 사고 사슬(CoT) 내부에 체화하여 인공지능의 깊은 사고력을 완성했습니다.
1. 사고 사슬(Long CoT) 내 자연어 백트래킹 (Self-Correction)
OpenAI o1 및 DeepSeek-R1의 사고 과정을 살펴보면: "잠깐, 이 가정은 모순을 초래하므로 다시 이전 단계로 돌아가서 대안을 살펴보자(Wait, let me rethink...)"라는 독백이 빈번하게 등장합니다.
2. Tree of Thoughts (ToT)의 DFS + 백트래킹 모드
야오(Yao et al., 2023)의 ToT 프레임워크에서 DFS 모드는 가장 유망한 사고 노드를 끝까지 파고듭니다. 중간 평가(PRM)에서 가능성이 없다고 판정되면 상위 사고 상태로 명시적으로 백트래킹합니다.
3. 얕은 산만함을 극복하는 심층 논리 집중 (Deep Cognitive Focus)
수학 올림피아드나 난해한 커널 코드 디버깅은 여러 대안을 얕게 훑어서는 풀리지 않습니다. 하나의 유망한 가설을 끝까지 밀고 나아가 논리적 귀결을 확인하는 심층성(Depth)이 반드시 요구됩니다.
4. KV 캐시 및 컨텍스트 윈도우 자원 최적화
자연어 사고 공간의 분기 계수는 수십 개에 달해 BFS로 전개하면 수만 개의 토큰이 순식간에 RAM을 고갈시킵니다. DFS는 오직 하나의 현재 추론 경로만을 KV 캐시에 담아 선형 메모리로 100단계 이상의 심층 추론을 수행할 수 있습니다.
📌 왜 최신 AI에서 '깊이 우선 탐색(DFS)'이 추론의 본질인가?
인간의 깊은 생각도 "한 가지 가설을 끝까지 파고들어 검증한 뒤, 막히면 이전 생각으로 돌아와 다른 길을 모색하는" 전형적인 DFS 백트래킹 과정입니다. OpenAI o1이나 DeepSeek-R1이 보여준 비약적인 추론 성능의 비밀은 복잡한 마법이 아니라, 언어 모델에게 '끝까지 파고들 수 있는 자유'와 '틀렸을 때 되돌아갈 수 있는 백트래킹 능력'을 부여한 DFS 탐색의 본질적 승리입니다.
전통 그래프 DFS vs 최신 LLM 심층 추론(Long CoT) DFS 비교
이산 정점 LIFO 스택에서 자연어 자기 수정(Self-Correction) 백트래킹으로의 진화
전통 깊이 우선 탐색 (19세기 ~ 현재)
정적 그래프 정점, N-Queen 체스판 행/열 상태
명시적 LIFO 스택 또는 언어 런타임 재귀 호출 스택
막다른 골목 도달(No Children) or 제약 조건 위반
무한 사이클 함정 및 비최적 긴 경로 조기 반환
최신 LLM 자기 수정 심층 추론 DFS (2024 ~ 현재)
자연어 사고 사슬(CoT) 하위 논리 가설 및 수식 전개
자기회귀 KV 캐시 컨텍스트 윈도우 + 프롬프트 메모리
내부 모순 감지 ("Wait, this assumption fails...") or PRM 감점
선형 메모리로 100단계 이상의 초심층 논리 증명 완주
5. 추천 강의 영상 및 원문 학술 자료
하버드 CS50, MIT 인공지능 명강의, 한국정보처리학회 논문 및 고전 자료
Search: Depth-First Search & Stack Frontier
Search: Depth-First, Breadth-First, Backtracking
보존된 원문 학술 자료 및 고전 문헌
깊이우선 또는 되추적 탐색 (Depth-First or Backtracking Search)
저자: Nils J. Nilsson (1998, Artificial Intelligence: A New Synthesis)
되추적 탐색의 상태공간 모델, 종속 관계에 의한 되추적(Stallman & Sussman 1977), 되도약(Backjumping) 연구 수록.
깊이우선 탐색 (Depth-first search)
저자: Dan W. Patterson (Introduction to Artificial Intelligence and Expert Systems)
무정보 탐색 전략으로서의 스택 알고리즘 흐름과 선형 공간 복잡도 분석.
변형된 점증 깊이우선 탐색방법을 사용한 로봇 계획시스템 (PDF)
저자: 임재걸 (한국정보처리학회, 1995)
DFID 기법을 자율 이동 로봇의 경로 계획 시스템에 적용하여 메모리 오버헤드를 획기적으로 개선한 연구.
분산 깊이우선 탐색 프로토콜의 복잡도 개선을 위한 연구 (PDF)
저자: 최종원 (한국정보처리학회, 1996)
네트워크 분산 환경에서 DFS 프로토콜의 메시지 전송 및 시간 복잡도를 최적화하는 기법 제안.