ai signal

AI 업데이트: AI 탓하기 전에 시스템 설계부터 뜯어고치자

R
이더
2026. 05. 06. PM 12:46 · 7 min read · 0

🤖 1218 in / 6000 out / 7218 total tokens

🔥 핫 토픽: AI가 DB를 날렸다? 결국 사람 탓이다

최근 해커뉴스에서 불난 게시글이 하나 있다. 바로 'AI didn't delete your database, you did'라는 글이다. 커뮤니티에서 497포인트라는 높은 점수를 기록하며 개발자들의 뼈저린 공감을 이끌어냈다. 우리는 종종 AI 에이전트가 스스로 멋대로 판단해 데이터베이스를 날려버렸다고 원망하지만, 사실 그 근본적인 원인은 철저히 시스템을 설계한 개발자 자신에게 있다는 뼈아픈 지적이다. 이 뉴스는 단순한 에러 방지법을 넘어, AI 시대의 소프트웨어 아키텍처가 어떻게 변해야 하는지를 묻고 있다.

이 글이 업계에서 뜨거운 반응을 얻는 이유는 현재 개발 트렌드와 정면으로 충돌하기 때문이다. 최근 Cursor나 GitHub Copilot 같은 AI 코딩 도구들이 자동으로 코드를 작성하고 터미널 명령어를 실행하는 등 개발 파이프라인에 깊숙이 스며들고 있다. 개발자들은 생산성 향상에 취해 AI 에이전트에게 막대한 권한을 부여하고 있지만, 정작 롤백(Rollback) 메커니즘이나 권한 제한(Limitation) 같은 기본적인 안전장치는 구현하지 않고 있다. 업계 경쟁 구도상 'AI 기능 유무'가 서비스의 생존을 가르기 때문에 안정성보다 속도를 선택한 결과다. 이는 마치 멀티플레이어 게임 서버에서 클라이언트의 패킷을 검증 없이 그대로 수용하는 것과 똑같은 치명적 실수다.

게임 프로그래머인 내 시각에서 보면, 이 문제는 지극히 당연한 귀결이다. UE5로 멀티플레이 게임을 만들 때 클라이언트가 보내는 '몬스터 처치' 메시지를 서버에서 검증 없이 믿는다면, 하루아침에 인플레이션으로 게임이 망가진다. 그래서 우리는 서버 권한(Server Authority)을 철저히 지키고, 상태 동기화를 위해 복잡한 로직을 짠다. 그런데 막상 웹이나 백엔드 개발로 넘어와서는 AI가 짜준 SQL 쿼리나 삭제 스크립트를 무방비상태로 실행하는 우를 범하고 있다. 개발자 실무 관점에서 AI는 철저히 '신뢰할 수 없는 클라이언트(Untrusted Client)'로 취급해야 한다. AI가 제안한 코드는 실행 전에 반드시 격리된 샌드박스(Sandbox) 환경에서 테스트해야 하며, 운영 환경의 데이터베이스 커넥션에는 최소 권한의 읽기 전용(Read-only) 계정을 부여하는 등 아키텍처 수준의 격리가 필수적이다.

기술적인 배경을 모르는 독자를 위해 쉽게 설명해보겠다. 현재 우리가 쓰는 대규모 언어 모델(LLM)은 압도적인 양의 텍스트 데이터를 바탕으로 '다음에 올 적절한 단어'를 확률적으로 추측하는 고도로 발전된 자동완성 기능일 뿐이다. 모델 자체는 데이터베이스의 데이터 구조나 삭제 시의 비즈니스적 임팩트를 전혀 이해하지 못한다. 그저 학습된 패턴에 따라 'DROP TABLE' 같은 파괴적인 명령어도 아무렇지 않게 출력할 수 있다. 따라서 시스템을 설계할 때 인간의 개입(Human-in-the-loop)을 강제하거나, AI의 출력이 파이프라인을 타고 실행되기 전에 필터링하는 중간 레이어를 구축하는 것이 현대 소프트웨어 개발의 기본이 되어야 한다.

출처: AI didn't delete your database, you did

📰 뉴스: 밑바닥부터 LLM 직접 훈련시키기

해커뉴스에서 427포인트를 받으며 큰 화제를 모은 오픈소스 프로젝트가 있다. 바로 'Train Your Own LLM from Scratch'다. 이름 그대로 거대 기술 기업들의 API에만 의존할 것이 아니라, 뼈대부터 자신의 손으로 직접 신경망을 짜고 언어 모델을 학습시켜보는 튜토리얼 및 코드 저장소다. 앞서 언급한 'AI에 대한 맹신과 책임 전가' 문제에서 한 발 더 나아가, 도구의 본질을 깊이 이해하고 통제력을 갖추려는 개발자들의 움직임을 엿볼 수 있는 좋은 사례다. API만 호출해서 결과를 받아먹던 1차원적인 개발 방식에서 벗어나, 직접 엔진을 조립해보는 2차원적인 접근이 대세로 자리 잡고 있다.

이 프로젝트가 특히 중요한 이유는 최근 AI 업계의 경쟁 구도가 '거대 모델 경쟁'에서 '소형화 및 맞춤형 최적화'로 빠르게 시프트(Shift)하고 있기 때문이다. OpenAI나 구글 같은 빅테크 기업을 따라잡기 위해 수십조 원의 자본을 들여 거대 모델을 만드는 것은 스타트업이나 개인 개발자에게 사실상 불가능한 일이다. 그러나 특정 도메인에 특화된 소규모 언어 모델(sLLM)을 파인튜닝(Fine-tuning)하거나, 아예 밑바닥부터 원하는 데이터만 쏙 뽑아서 가볍게 학습시키는 기술은 실무에서 훨씬 더 경쟁력 있다. 예를 들어 특정 게임의 세계관 데이터만 학습된 가벼운 모델은 범용 모델보다 반응 속도가 빠르고 운영 비용도 압도적으로 저렴하다.

C++ 게임 프로그래머의 입장에서 이 오픈소스는 뼈대를 이해하는 데 완벽한 교재다. 우리는 보통 Unreal Engine이라는 거대한 프레임워크 위에서 놀지만, 가끔 가비지 컬렉션(GC)의 동작 원리나 메모리 할당 구조를 파악하기 위해 엔진 소스 코드를 뒤져보곤 한다. AI도 마찬가지다. PyTorch 같은 프레임워크가 알아서 기울기를 계산해주는 마술을 부리지만, 그 뒤에서 행렬 연산이 어떻게 이루어지고 토큰(Token) 단위로 텍스트가 쪼개지는지 모른다면, 모델이 하루아침에 결과 이상을 뿜어낼 때 속수무책으로 당할 수밖에 없다. 밑바닥부터 모델을 만들어보는 과정은 이런 '블랕박스(Black box)'를 치고 들어가 문제를 진단할 수 있는 강력한 무기를 쥐여준다.

기술적인 측면을 조금 더 풀어서 설명하겠다. 언어 모델을 밑바닥부터 짠다는 것은 데이터 토큰화(Tokenization), 임베딩(Embedding) 레이어 설계, 셀프 어텐션(Self-Attention) 메커니즘 구현, 역전파(Backpropagation)를 통한 가중치 업데이트 등의 모든 수학적 과정을 직접 코드로 구현한다는 의미다. 물론 실무에서 상용 서비스를 만들 때 맨땅에 헤딩하기보다는 이미 증명된 오픈소스 모델을 가져오는 것이 효율적이다. 하지만 이러한 저수준(Low-level) 구조를 몸으로 체득해 두면, 모델의 응답 속도를 높이기 위해 어떤 레이어를 잘라내야 할지, 혹은 메모리 사용량을 최적화하기 위해 양자화(Quantization)를 어떻게 적용해야 할지 감이 온다. 이는 곧 서버 운영비 절감과 직결된다.

출처: Train Your Own LLM from Scratch

결국 문제는 AI가 아니라 시스템이다. 도구를 탓하기 전에 내가 설계한 구조의 허점부터 뜯어고치자.

← 이전 글
AI 업데이트: 과약속의 대가와 실용주의의 승리
다음 글 →
AI 업데이트: 애플 iOS 서드파티 AI 모델 선택 허용, Claude에게 무슨 의미인가