전체 글 49

거짓 성공: AI와 테스트가 모두 맞다고 할 때 무엇을 의심해야 하는가

테스트가 실패하면 개발자는 멈춘다. 테스트가 통과하면 다음 단계로 간다. 자동화된 개발에서는 이 차이가 더 커진다. 실패는 AI에게 다시 맡기면 되지만, 성공은 질문을 끝내기 때문이다. 컴파일이 깨지고 예외가 발생한 코드는 적어도 문제의 존재를 알려 준다. 더 위험한 것은 기능이 동작하고 리뷰와 테스트까지 통과했지만, 우리가 확인하지 않은 조건에서 조용히 잘못되는 코드다. 에디터에서는 정상인데 패키징 빌드에서 깨질 수 있다. 특정 GPU에서만 경쟁 상태가 나타날 수 있다. 평균 프레임은 개선됐지만 긴 프레임이 늘어 실제 체감은 나빠질 수 있다. 작은 테스트 맵에서 성공한 설계가 실제 콘텐츠 규모에서는 무너질 수도 있다. 이런 결과는 단순한 테스트 실패가 아니다. 구현과 검증이 함께 성공했지만 현실에서는 ..

이것저것 공부 2026.07.14

코드가 싸진 뒤에 비싸지는 것들: AI 시대 개발자의 가치는 어디로 이동하는가

소프트웨어 개발에서 코드는 오랫동안 가장 비싼 산출물이었다. 아이디어가 있어도 구현할 사람이 필요했고, 작은 기능 하나에도 일정과 인력이 들었다. 개발자의 가치를 얼마나 많은 코드를 얼마나 정확하게 생산하는지로 설명할 수 있었던 이유다. AI는 코드를 없애지 않는다. 오히려 너무 많이 만든다. 아이디어를 실행 가능한 코드로 바꾸는 비용은 빠르게 낮아지고 있다. 한 사람이 더 넓은 범위를 다루고, 개발자가 아닌 사람도 프로토타입을 만든다. 익숙한 구현, 첫 번째 초안, 문서와 테스트의 기본 형태는 이미 희소한 산출물이 아니다. 그렇다면 코드가 희소하지 않게 될 때 개발자의 가치도 함께 사라질까? 일부는 사라질 수 있다. 구현 자체가 어려워서 지불하던 비용은 줄어든다. 그러나 희소성은 없어지기보다 이동한다...

이것저것 공부 2026.07.14

인지 부채: AI로 과제를 빨리 끝낼수록 학습 비용은 왜 나중에 커지는가

나는 2024년 2월에 대학을 졸업했다. 학교를 떠난 지 이제 2년 남짓 지났다.2년은 세대 차이를 말하기에는 짧은 시간이다. 적어도 졸업할 때는 그렇게 생각했다.그런데 그사이 AI가 크게 바뀌었다.얼마 전 후배들의 과제와 프로젝트를 보면서 꽤 놀랐다. 결과물이 너무 좋았다. 내가 학교에 다닐 때라면 학부 과제에서 쉽게 기대하기 어려웠던 수준의 코드와 화면이 자연스럽게 나와 있었다. 더 복잡한 문제를 다루고, 더 짧은 시간에, 더 완성도 높은 결과를 만들고 있었다.처음에는 좋은 변화라고 생각했다. 내가 학생일 때 이런 도구가 있었다면 더 많은 것을 만들어 봤을 것이다. 문법과 반복 작업에 쓰던 시간을 줄이고, 더 큰 문제를 일찍 경험할 수도 있었을 것이다. 그런데 교수님과 면담하면서 반대편의 이야기를 들..

이것저것 공부 2026.07.14

하네스 역전: AI가 강해질수록 전문가의 사용법은 왜 다시 챗봇처럼 보이는가

💡이 글의 한 문장 요약AI가 강해질수록 전문성은 더 복잡한 하네스를 만드는 능력이 아니라, 모델이 이미 할 수 있는 구조를 제거하고 인간과 조직이 책임져야 할 목표·판단·경계만 남기는 능력으로 이동한다.‘하네스 역전(Harness Inversion)’은 이 글에서 제안하는 관찰과 가설의 이름이다. 학계나 업계에서 합의된 공식 용어는 아니다.이상한 장면최근 AI를 잘 쓴다고 평가받는 사람들의 작업 환경은 점점 복잡해졌다. 여러 에이전트를 설계하고, 커맨드와 스킬을 만들고, 훅을 걸고, 계획·구현·검토 역할을 분리한다. 반면 다른 사용자는 최신 모델과 챗봇처럼 대화한다.그런데 실제 결과만 놓고 보면 전자가 반드시 더 낫다고 말하기 어려운 순간이 늘고 있다. 좋은 모델에 문제와 맥락을 설명하고 결과를 함께..

이것저것 공부 2026.07.13

가상 상속과 다이아몬드 문제

가상 상속은 C++의 다중 상속에서 발생할 수 있는 "다이아몬드 문제"를 해결하기 위한 특별한 상속 방식이다. 다이아몬드 문제class Base { public: int data; };class Mid1 : public Base {};class Mid2 : public Base {};class Bottom : public Mid1, public Mid2 {};우선, 위와 같은 상속 구조를 "다이아몬드 구조"라고 부른다. 이 구조에서 Bottom 클래스는 Mid1을 통해서 Base를 한 번, Mid2를 통해서 Base를 또 한 번, 총 두 번 상속받게 된다. 이로 인해 Bottom 객체의 메모리 안에는 두 개의 Base 클래스 하위 객체가 생기는 문제가 발생한다.data에 접근하려고 하면 컴파일러는 이 ..

객체 메모리 레이아웃과 메모리 정렬

객체 메모리 레이아웃이란, 클래스의 인스턴스, 즉 객체 하나가 메모리에 생성될 때 그 내부가 어떤 구조와 순서로 배치되는지에 대한 것을 의미한다. 컴파일러는 클래스 정의를 보고 객체가 메모리에서 어떤 모습을 가질지 결정한다. 이 설명에서는 64비트 환경을 기준으로 설명한다. 컴파일러에 따라 결과가 조금씩 다를 수 있다는 것을 명심하고 글을 읽자. 객체의 메모리 레이아웃에는 다음 두 가지 요소가 포함된다.1. 멤버 변수2. 가상 함수 포인터(가상 함수가 있을 경우) 우선 예제 클래스는 다음과 같다.class Animal {public: virtual ~Animal() { std::cout * int64_t를 사용한 이유는, int나 long과 같은 기본 자료형들은 C++ 표준에서 정확한 크기를 보장하지..

가상함수와 가상함수 테이블은 무엇인가? (2) - 파생 질문

이전 게시글에서 이어지는.. 후속 질문 예상 Q1. 가상 함수를 사용하면 오버헤드가 발생하나?발생한다. 메모리 오버헤드가상 함수를 가진 클래스의 모든 객체는 내부에 vptr을 가져야 하므로, 포인터 크기만큼(64비트 시스템 기준 8바이트)의 메모리를 추가로 사용한다.또한, 클래스마다 vtable이 메모리의 데이터 영역에 생성되므로 이 또한 메모리를 차지한다. 성능 오버헤드일반 함수 호출은 컴파일 시간에 주소가 결정되어 바로 점프한다.그러나 가상 함수 호출은 런타임에 vptr을 통해 vtable에 접근하고, 다시 함수 주소를 가져와 호출하는 간접적인 호출 방식을 취한다.이 과정에서 몇 단계의 포인터 역참조가 추가되어 일반 함수 호출보다 약간의 성능 저하가 발생한다.또한 점프를 생략하고 호출 부분을 함수 ..

가상함수와 가상함수 테이블은 무엇인가? (1)

가상 함수는 상속 관계에 있는 클래스에서, 파생 클래스가 기본 클래스(부모 클래스)의 함수를 재정의(override)할 수 있도록 하여 "런타임 다형성"을 구현하는 것이다. 목적성가장 중요한 목적은 런타임 다형성을 구현하는 것.기반 클래스 포인터나 참조가 실제로 어떤 파생 클래스를 가리키고 있는지 컴파일 시점에는 알 수 없어도, 이를 런타임 시점에 해당 객체의 실제 타입에 맞는 함수로 정확하게 호출될 수 있게 하는 기능이다. 간단한 예시Animal*라는 포인터가 Dog 객체를 가리킬 수도 있고, Cat 객체를 가리킬 수도 있다.이때 animal->Growl()을 호출하면, 컴파일러는 이게 Dog의 것인지, Cat의 것인지 알 수 없다. 하지만 가상 함수 덕분에 런타임에는 animal이 실제로 가리키는 객..

"이거 다시 작업해주세요" 소리를 없애는, 2D 아트 작업자를 위한 실전 유니티 최적화 가이드

좋은 아티스트는 최적화까지 고려한다.내 아트 작업물은 정말 기깔난데, 왜 게임에만 넣으면 사이즈 줄여오라고, 이렇게 넣으면 안된다고 할까요? 이 질문에 답할 수 있다면, 당신은 이 글을 그냥 지나쳐도 된다. 게임 개발에 있어서, 아트 작업자의 역할은 단순히 아름다운 작업물을 만드는 것에서 끝나지 않는다.내가 만든 리소스가 게임 엔진 위에서 어떻게 그려지고, 성능에 어떤 영향을 미치는지 이해하는 것은 이제 필수 역량이다. 본 글에서는 "이거 다시 작업해주세요"라는 말을 듣지 않기 위해, 혹은 "최적화 때문에 디자인을 이렇게 바꿀 수 있을까요?"라는 슬픈 요청을 받지 않기 위한 내용이 포함되어 있다.개발자와의 불필요한 커뮤니케이션 비용을 줄이고, 당신의 작업물 본연의 가치를 온전히 프로젝트에 기여하게 만드는..

게임과 관련된 프로그래머가 사용하면 좋을 AI들..

들어가며AI 도구들이 개발자의 일상을 완전히 바꾸고 있다. 하지만 수많은 AI 도구들 중에서 어떤 것을 언제 사용해야 할지 막막한 경우가 많다. 이 글에서는 실제 개발 업무에서 1년 이상 다양한 AI 도구를 사용하며 터득한 노하우를 공유한다.코딩 관련 AI 도구ChatGPT (유료)o3 모델 - 복잡한 문제 해결의 왕o3 모델은 현재 프로그래밍 영역에서 가장 뛰어난 성능을 보인다. SWE-bench에서 69.1%라는 압도적인 점수를 기록했으며, 실제로 사용해보면 그 차이를 체감할 수 있다.언제 사용하는가:매우 복잡하고 어려운 문제를 해결할 때하나의 대화에서 여러 변경사항을 이어가며 작업할 때이전 컨텍스트를 정확히 기억해야 하는 긴 작업사용 팁: 구체적인 상황과 조건을 자세히 제공할수록 더 나은 결과를 얻..

이것저것 공부 2025.06.23