SDD를 활용한 할루시네이션 완화 전략 -7
·
AI/Spec Driven Development
이론적 배경(Cognitive Model)인간의 장기 기억 메커니즘을 모방하기 위해, 뇌가 정보를 어떻게 처리하고 저장하는지 그 동작 방식을 탐구해 보았다.(전문적인 심리학 지식보다는 개인적인 관점에서의 해석입니다.)혼자 찾아보긴 했지만, 지식이 얕아서 틀릴 수 있다는 점을 먼저 말씀드리겠습니다.장기 기억 인출우리의 뇌가 정보를 가져오는 방식은 '활성화 확산(Spreading Activation)' 이론으로 설명할 수 있다. 장기 기억 속 지식은 거미줄 같은 네트워크 형태로 연결되어 있다.특정 노드가 자극을 받으면 연결된 선을 타고 연관된 주변 노드로 퍼져나간다. 이걸 활성화 확산이라고 한다. 해마는 이렇게 활성화 된 기억 조각들을 모아 하나의 기억을 복원한다. 나는 기억을 불러오는 과정이 마치 RAG..
SDD를 활용한 할루시네이션 완화 전략 -6
·
AI/Spec Driven Development
Spec Driven Development의 딜레마 속에서 Spec에 대해 고민했다. 기존의 SDD에서 개발 명세, 즉 '스펙(Spec)’은사실 인간 개발자들 간의 합의를 위한 것이었다. 하지만 AI와 작업을 하는 경우에 Event Schema, Dto, 기술 스택, API, 팀 컨벤션 등의 개발자 간 합의를 위한 Spec으로 충분할까? 라는 생각이 문득 들었다.나는 '나쁜 사수'였다.기존에는 AI 에게 하나의 문서를 태그해서 주고,“@project/~/README.md 이걸 참고해서 ooo 기능을 만들어줘.”같은 식으로 지시했었다. 그리곤 제대로 구현하지 못하면“아니 ooo이라고 몇번을 말하냐 @project/~/README.md 에는 그렇게 안 적혀있잖아.”라는 식으로 혼내기만 했다. 사실 이건 아무..
SDD를 활용한 할루시네이션 완화 전략 -5
·
AI/Spec Driven Development
제약 사항Ⅱ - 복잡한 추리 소설제약사항Ⅰ - 천재와 종이(Context-Window)에 이어서 이야기 해보자. 알겠다. 근데 코드는 여기 컴퓨터에 적혀져있고, README나 TASKS등의 문서들에 내용이 다 적혀 있는데 이건 AI에게 종이와 펜을 쥐여준 것과 다름없는 게 아니냐? 라고 생각할 수 있다. 이번에는 굉장히 복잡하고 등장인물도 많은 2,000페이지 분량의 긴 추리 소설 미션이 있다고 가정해 보자. 우리의 목표는 이 소설의 모든 트릭을 논리적으로 설명하는 레포트를 제출하는 것이다. 단, 여기에는 가혹한 규칙이 있다. 여러 명이 팀을 이루어서 진행한다.한 번에 한 사람만 소설책이 있는 방에 들어가서 작업할 수 있다.한 사람이 머물 수 있는 시간은 10분으로 정해져 있다.머물 수 있는 시간이 지나..
SDD를 활용한 할루시네이션 완화 전략 -4
·
AI/Spec Driven Development
SDD(Spec Driven Development)Spec Driven Development는 코드를 작성하기 전시스템 간의 규칙과 데이터 구조(DTO, Event Schema 등)를먼저 정의한 뒤 개발을 진행하는 방식이다. 명세를 먼저 정의함으로써 코드 일관성을 확보하고,구현은 명세 범위 내에서 유연하게 가져갈 수 있다.겉핥기식 SDD의 도입처음에는 SDD에 대해서 찾아보거나 깊게 생각하지 않았다. “책임을 구분하고 명세를 맞추고 그에 맞게 구현하는 것” 정도로 생각했다. 캡스톤 프로젝트를 진행할 때, EDA 방식으로 서버를 구현했었다. 이 때 나는 SDD 도입을 주장했었는데,각 서비스의 책임을 구분하고 주고 받을 Event Topic 형식만 정한 뒤, 그에 맞춰 내부 구현은 자유롭게 짜는 방식으로 진..
SDD를 활용한 할루시네이션 완화 전략 -3
·
AI/Spec Driven Development
MSA: 할루시네이션의 전파를 막는 '방화벽'MSA는 Micro Service Architecture 의 약자로, 작고 독립적으로 배포 가능한 각각의 기능을 수행하는마이크로서비스 모듈 단위로 쪼갠 뒤, 통신으로 데이터를 주고받으며, 마치 하나의 서비스처럼 동작하게 하는 아키텍처를 말한다.흔히 다음과 같은 장점들을 가진다고 한다.유연한 확장성전체 애플리케이션을 확장하지 않고, 하위 서비스를 독립적으로 확장할 수 있다. 소규모의 분리된 코드서비스 간 코드나 데이터 스토리지를 공유하지 않아 종속성이 최소화되며, 새로운 기능 추가가 용이하다. CI/CD개별 서비스 단위로 배포가 가능하여 새로운 기능의 추가나 롤백이 빠르다. Resilience & Fault isolation장애 허용 범위를 최소화한다. 한 서비..
SDD를 활용한 할루시네이션 완화 전략 -2
·
AI/Spec Driven Development
제약사항Ⅰ - 천재와 종이(Context-Window)작업기억이란, 정보를 일시적으로 유지하고 동시에 처리하는 인지 능력을 말하며, 복잡한 과제를 수행하기 위해 정보를 조작하는 정신적 작업 공간이다.뇌 속의 칠판 정도라고 생각할 수 있다.수학 문제를 암산하는 경우를 생각해보자.천재들은 어려운 문제도 척척 풀어낼 수 있다.평범한 사람들이 그렇게 할 수 있을까? 그렇지 않다.나는 Context-Window가 제한된 LLM의 상황을 평범한 사람들에 대입해 보았다.평범한 사람들에겐 세 자릿수 곱셈을 암산으로 하는 건 버겁다.문제가 복잡해지면 복잡해질수록 실수를 할 가능성이 높아진다.AI로 따지면 암산을 하고 있는 셈이고, Context-Window를 넘어서는 요구를 하는 건종이와 펜을 뺏은 뒤 암산으로만 복잡한..
SDD를 활용한 할루시네이션 완화 전략 -1
·
AI/Spec Driven Development
서론막 졸업을 앞둔, 컴퓨터 공학과 학부생인 나로서는현재의 IT 취업 한파와 매서운 AI의 매서운 발전이 두렵다. 시대의 흐름에 뒤쳐지지 않기 위해 생성형 AI를 나름 적극적으로 활용해봤는데나에게 문제는 돈이었다. 소비만 하는 학생 신분으로 Max(1-200$/m) 같은 요금제는 굉장히 부담스럽다. 대학생 캡스톤 프로젝트 수준에서는 Pro(20$/m)요금제로 충분하다곤 해도개인적으로 느꼈을 때 토큰 제공량은 항상 모자랐다. 또한, claude-sonnet4.5가 잘 나온 모델이라고는 들었지만이상하게 내가 사용하면 금세 할루시네이션을 보이곤 했다. 이 때까지는 아예 LLM에 대해 관심이 없었다.솔직히 Context-Window와 토큰의 차이가 뭔지도 몰랐다.Claude Code 사용하는게 좋다더라MCP 서..
[우테코] 우아한 테크코스 8기 프리코스 2주차 회고록
·
우테코
2주차는 특히 시간의 압박을 많이 느꼈던 한 주였다.졸업작품 제출 마감일이 당장 다음 주로 다가왔는데, 2주차를 잘 해보고 싶다는 욕심까지 더해지고 후술할 멀티스레드 이슈까지 이래저래 치인 한 주였다...! 이번 주차 미션을 평소 관심 있던 시스템 아키텍처와 동시성 프로그래밍을 적용해보고자 비동기 EDA(Event-Driven Architecture)로 구현하는 도전을 했었다.😵‍💫[MockedStatic과 멀티스레드]도메인 구현을 완료하고 이벤트 체인을 연결까지 마쳤을 때, 제법 시간을 많이 투자한 상태였다.로컬에서 직접 실행했을 때 멀쩡하게 잘 동작했고, 단위 테스트들도 매 커밋마다 돌려봤을 때 통과했기에아 이제 리팩토링 하고 코드 네이밍만 다듬으면 되겠거니 생각했다.`ApplicationTest..
클린 아키텍쳐와 EDA에서의 DTO/이벤트 의존성 고민 정리
·
Architecture/기타
최근 졸업 작품에 CQRS 패턴+ EDA를 적용해보고 있는데,Schedule 도메인의 Query Side를 코딩하던 중 문득 의문이 생겼다.마이크로서비스 내부를 클린 아키텍쳐(Clean Architecture)로 만들고자 했을 때,이벤트 DTO를 어떻게 다뤄야 하는지 고민을 하게 됐고, 그 과정을 정리해봤다.1. DTO를 서비스 레이어까지 넘겨도 될까?처음엔 이렇게 생각했다.Controller/EventListener는 단순히 외부와 통신만 담당한다.따라서 거기서 받은 이벤트/DTO를 그대로 Service에 넘겨도 된다.이벤트 필드가 늘어나면 어차피 비즈니스 로직(Service)을 고쳐야 하는데, 굳이 중간에 옮겨 담을 필요가 있을까?예를 들어, 이런 이벤트가 있다고 하자public record Sche..
[알고리즘] 빠른정렬(Quick Sort) 이란?
·
Algorithm
빠른 정렬(Quick Sort) 이란? Quick Sort빠른 정렬 단순하고 이해하기 쉬운 기본 정렬 알고리즘(버블정렬, 삽입정렬, 선택정렬)보다상대적으로 복잡하지만 성능이 좋은 정렬 알고리즘이다. 물론 최악의 경우 시간 복잡도는 O(n²) 이지만평균 시간 복잡도는 O(n log n)의 성능을 가지고대부분의 경우 평균적인 성능을 유지하기 때문에 이름과 마찬가지로 빠르다고 할 수 있다. 분할정복법을 사용하며주어진 데이터 중 하나의 값을 기준 값(Pivot)으로 사용하여 분할한다.과정여기서는 정렬할 데이터 중 마지막 값을 pivot으로 사용하는 경우로 설명한다. 전체적인 흐름quickSort(A[], start, end) //A[start ... end] 을 정렬한다.{ if(start  입력 받은 star..