반응형

전체 글 54

레거시 코드와 놀기: 정적 메소드 드러내기 (Expose Static Method)

소프트웨어 개발에서 복잡한 클래스의 초기화는 테스트 작성과 유지보수성을 어렵게 만드는 주요 요인 중 하나입니다. "정적 메소드 드러내기(Expose Static Method)" 기법은 이러한 문제를 해결하기 위한 효과적인 리팩토링 방법으로, 특정 메소드를 정적(static) 메소드로 변환하여 클래스 초기화 없이 직접 호출할 수 있도록 만듭니다. 이 글에서는 해당 기법의 개념, 예제 코드, 그리고 테스트 코드 작성 방법을 설명합니다. 1. 정적 메소드 드러내기란?정적 메소드 드러내기는 다음과 같은 상황에서 유용합니다:클래스 초기화 문제: 테스트 또는 사용 중 클래스 생성이 어렵거나 불필요하게 복잡한 경우.독립적 로직: 메소드가 클래스의 멤버 변수에 의존하지 않고 독립적으로 동작하는 경우.유틸리티화: 메소드..

이미 알고 있는 것이 발목을 잡는다: 아인슈텔룽 효과란?

개발자로 일하면서 익숙한 도구와 지식을 사용해 문제를 해결하려 했던 경험이 많았습니다. 하지만 항상 최적의 결과를 얻은 것은 아니었고, 때로는 더 좋은 해결책이 있음에도 기존의 방식에 집착하는 저 자신을 발견하곤 했습니다. 왜 이런 일이 반복되는지 궁금해졌고, "아인슈텔룽 효과"라는 심리학적 개념을 알게 되었습니다. 아인슈텔룽 효과란?아인슈텔룽(Einstellung)은 독일어로 "태도" 또는 "사고방식"을 의미합니다. 뇌는 효율적으로 작동하기 위해 과거의 경험과 지식을 자동으로 참조하려는 경향이 있습니다. 하지만 이 과정에서 현재 문제를 독립적으로 평가하지 않고, 이전의 방식만을 적용하게 됩니다. 이는 초보자든 전문가든 누구에게나 나타날 수 있는 현상입니다.물병 실험 아인슈텔룽 효과(Einstellung..

LLM 컴파일러: 병렬 함수 호출의 새로운 패러다임

최근 대형 언어 모델(Large Language Models, LLMs)의 놀라운 발전은 단순한 콘텐츠 생성 능력을 넘어 복잡한 문제 해결로까지 확장되었습니다. 그러나 다수의 함수 호출을 효과적으로 수행하는 방법은 여전히 과제로 남아 있습니다. 이 문제를 해결하기 위해 UC 버클리 연구팀은 LLMCompiler라는 프레임워크를 개발했습니다. LLMCompiler란?LLMCompiler는 병렬 함수 호출을 통해 다수의 작업을 효율적으로 수행하도록 설계된 시스템입니다. 기존 방식인 ReAct가 순차적으로 함수 호출을 처리하던 것과 달리, LLMCompiler는 다음 세 가지 주요 구성 요소를 통해 병렬 처리를 구현합니다.Function Calling Planner 실행 계획을 작성해 의존성을 파악하고 작업을..

AI/LLM 2025.01.22

TDD로 MVP 개발하기

회사에서 MVP 패턴을 적용하려고 하면 많은 개발자들이 어려움을 겪는 경우를 자주 봤습니다. 특히, UI와 비즈니스 로직을 분리하는 것이 처음엔 복잡하고 부담스럽게 느껴지곤 했죠. 저도 처음엔 막막했지만, 페어 프로그래밍을 통해 Presenter를 먼저 테스트하면서 개발하는 TDD 방식을 도입해 큰 변화를 경험했습니다. Presenter를 먼저 설계하고 검증하는 과정이 반복되면서 UI 개발은 단순한 작업으로 바뀌었고, 전체적인 유지보수도 훨씬 수월해졌습니다.이 경험을 통해 TDD가 MVP 개발에서 얼마나 효율적인 방법인지 깨닫게 되었고, 오늘은 여러분께 그 구체적인 접근 방법과 장단점을 소개하려 합니다.TDD와 MVP의 결합MVP 패턴의 핵심: PresenterMVP(Model-View-Presenter..

카테고리 없음 2025.01.21

LLM 기반 IoT 기기 제어와 SmartThings의 변화 가능성

AI와 IoT의 만남: LLM 기반의 복잡한 작업 수행 사례에서 살펴본 논문은 LLM을 기반으로 IoT 기기를 제어할 수 있는 방법을 제시합니다. 제안된 방식은 삼성 SmartThings와 같은 기능을 획기적으로 변화할 수 있는 잠재력을 가지고 있는 것 같아 어떤 변화를 가지고 올지 짧게 생각해 보았습니다.SmartThings에서 LLM 적용 가능성1. 스마트폰에서 프롬프트 UI를 활용한 IoT 기기 제어 및 앱의 필요성 감소현재의 SmartThings 앱은 특정 기기를 제어하거나 시나리오를 설정하기 위해 다수의 클릭과 화면 전환이 필요합니다. 하지만 LLM 기반 시스템에서는 사용자가 자연어로 프롬프트를 입력하는 것만으로 다양한 기기를 제어할 수 있습니다. 이를 통해 별도의 앱을 탐색하거나 설정을 기억할..

AI 2025.01.21

느리지만 그나마 쉬운 테스트 개발하기

임베디드 시스템을 개발하는 환경에서 테스트는 종종 골칫거리로 여겨집니다. 특히 레거시 코드가 많이 쌓여 있는 경우에는 더욱 그렇습니다. 하지만 이런 상황에서도 기능 수준에서 동작을 확인할 수 있는 방법이 있습니다. 이번 글에서는 임베디드 시스템의 C++ 코드를 직접 다루지 않고도 외부에서 Python을 사용해 기능 테스트를 수행하는 방식을 소개하겠습니다. 또한 이 과정에서 Cucumber를 활용해 쉽고 읽기 좋은 테스트 코드를 작성하는 방법도 다룹니다.왜 Python을 사용하는가?Python은 단순함과 강력한 라이브러리 생태계 덕분에 테스트 자동화에 매우 적합한 언어입니다. C++로 작성된 임베디드 시스템의 테스트 코드를 직접 작성하려면 복잡한 빌드 환경과 코드 수정이 필요할 수 있지만, Python을 ..

레거시 코드와 놀기: 전역 참조 캡슐화 (Encapsulate Global Reference)

소프트웨어 개발에서 전역 변수는 편리하지만, 유지보수성과 테스트 가능성을 크게 저하시킬 수 있습니다. 전역 참조 캡슐화(Encapsulate Global Reference)는 이러한 문제를 해결하기 위해 전역 변수를 추상화 계층 뒤로 숨기고, 코드의 결합도를 줄이며, 테스트 가능성을 높이는 의존성 제거 기법입니다. 이 글에서는 해당 기법의 개념, 적용 방법 및 테스트 코드 작성 예제를 살펴봅니다. 1. 전역 참조 캡슐화란?전역 참조 캡슐화는 전역 변수나 전역 함수와 같은 전역 상태를 직접 참조하지 않도록 하여 코드의 결합도를 줄이는 기법입니다. 이를 위해 전역 참조를 캡슐화한 클래스나 인터페이스를 생성하고, 해당 인터페이스를 통해 전역 상태를 간접적으로 관리합니다.이 기법은 다음과 같은 이점을 제공합니다..

레거시 코드와 놀기: 메소드 객체 추출 (Breaking Out Method Object)

소프트웨어 개발에서 의존성을 제거하거나 줄이는 작업은 유지보수성과 테스트 가능성을 크게 향상시킵니다. 특히, "메소드 객체 추출(Break Out Method Object)" 기법은 기존의 복잡한 메서드를 분리하여 단일 책임 원칙(Single Responsibility Principle)을 따르는 독립된 클래스로 재구성하는 유용한 방법입니다. 이 글에서는 메소드 객체 추출의 개념, 이점, 적용 방법 및 이를 활용한 테스트 코드 작성법을 살펴봅니다. 메소드 객체 추출(Break Out Method Object)란?기존의 클래스가 지나치게 복잡한 메서드를 포함하고 있을 때, 해당 메서드를 별도의 클래스로 추출하여 책임을 분리하고 코드를 단순화하는 기법입니다. 이를 통해 다음과 같은 효과를 얻을 수 있습니다:..

AI와 IoT의 만남: LLM 기반의 복잡한 작업 수행 사례

AI(인공지능)와 IoT(Internet of Things: 사물인터넷)는 현대 기술 환경에서 필수적인 두 축입니다. 하지만 이들의 통합은 여러 도전 과제를 동반합니다. "Orchestrating AI and IoT with LLM for Complex Task Execution" 논문은 이러한 도전 과제를 해결하기 위해 대규모 언어 모델(LLM)을 활용하는 방안을 제안하며, 이를 통해 복잡한 작업을 자동화하고 IoT 기기 간의 협력을 효과적으로 조율하는 방법을 제시합니다. 스마트 홈 관리 사례: IoT 디바이스 간의 협력논문에서는 스마트 홈 관리 시스템을 주요 사례로 제시합니다. 예를 들어, 아래와 같은 상황을 가정합니다: 문제 상황:사용자가 자연어로 다음과 같은 명령을 입력합니다: "저녁 7시에 스..

AI/LLM 2025.01.18

레거시 코드와 놀기: 매개변수 적응 기법 (Adapt Parameter)

레거시 코드는 소프트웨어 개발자에게 큰 도전 과제가 될 수 있습니다. 시스템이 커지고 복잡해질수록 코드의 의존성은 점점 더 강해지고, 이는 유지보수와 테스트를 어렵게 만듭니다. 하지만 의존성을 제거하고 코드를 개선하는 작업은 매우 중요한 과정입니다. 이 글에서는 의존성이 무엇인지, 왜 의존성을 제거해야 하는지, 그리고 의존성을 제거하는 여러 기법 중 매개변수 적응(Adapt Parameter) 기법에 대해 다뤄보겠습니다. 의존성이란 무엇인가?의존성(dependency)이란, 코드가 다른 클래스, 모듈, 라이브러리 등 외부 요소에 얼마나 의존하고 있는지를 나타냅니다. 의존성이 높으면 높을수록 코드가 다른 시스템에 강하게 결합되어 독립적으로 테스트하기 어렵고, 시스템을 변경할 때마다 리스크가 증가합니다. 예..

반응형