반응형

분류 전체보기 49

레거시 코드와 놀기: Getter 메소드 추출과 재정의 (Extract and Override Getter)

코드의 테스트 가능성과 유지보수성을 높이기 위해 의존성 관리가 핵심 과제가 됩니다. 오늘은 "Extract and Override Getter" 기법을 살펴보며, 클래스 내부의 복잡한 의존성을 어떻게 효과적으로 분리하고 테스트 가능한 구조로 바꿀 수 있는지에 대해 이야기하겠습니다.문제 정의: 내부 의존성의 문제점클래스 내부에서 객체를 직접 생성하거나 관리하면, 그 클래스는 해당 의존성에 강하게 결합됩니다. 이로 인해 다양한 문제가 발생합니다. 첫 번째로, 테스트 작성이 복잡해집니다. 외부에서 의존성을 대체하거나 모의(Mock) 객체를 주입하기 어려운 구조 때문에 코드 테스트가 제한적이 됩니다. 두 번째로, 요구사항 변화에 따른 코드 변경이 어렵습니다. 의존성이 코드에 하드코딩되어 있으면 수정 범위가 넓어..

레거시 코드와 놀기 백서: Working Effectively with Legacy Code

Working Effectively with Legacy Code는 레거시 코드와 마주했을 때 작업을 안전하고 점진적으로 진행할 수 있는 구체적인 전략과 마음가짐을 제시하는 책입니다. 레거시 코드 속에서 오랜 시간 고통받아 왔던 제게, 이 책은 큰 깨달음을 주었습니다. 테스트는 이제 선택이 아니라 필수라는 마음가짐을 갖게 되었습니다. 비록 주변에서는 여전히 테스트에 대한 관심이 크지 않아, 개발자 수준의 테스트가 필수적인 활동으로 여겨지지 않더라도, 저는 꾸준히 테스트를 놓지 않고 이어나갈 결심을 하게 되었습니다. 퇴사하기 전까지, 적어도 제가 있는 동안만이라도 계속 노력할 생각입니다. 어떤 책에서는 더 나은 환경의 회사로 이직하는 것도 방법이라고 조언하지만, 오랜 시간을 버텨온 이곳을 떠나는 게 참 어..

레거시 코드와 놀기: 호출 추출과 재정의 (Extract and Override Call)

소프트웨어 개발자는 종종 기존 코드(레거시 코드)를 다룰 때 어려움을 겪습니다. 이러한 코드는 종종 유지보수하기 어렵고, 테스트 가능성이 낮으며, 새로운 요구 사항에 맞게 변경하기도 까다롭습니다. "호출 추출과 재정의(Extract and Override Call)"는 이러한 문제를 해결하기 위한 의존성 제거 기법입니다. 이 글에서는 호출 추출과 재정의의 개념, 적용 방법, 코드 예제, 그리고 테스트 작성법을 살펴보겠습니다.호출 추출과 재정의란 무엇인가요?호출 추출과 재정의는 클래스 내에서 특정 호출을 별도의 보호(protected) 메서드로 분리하고, 이 메서드를 서브클래스에서 재정의할 수 있게 만드는 기법입니다. 이 리팩토링 방법은 테스트 가능성을 크게 높이고, 외부 의존성을 관리하며, 코드의 유연성..

RAG (Retrieval-Augmented Generation)

RAG는 대규모 언어 모델(LLM)을 보완하기 위해 설계된 기술입니다. 이는 외부 데이터베이스의 검색 기능과 언어 생성 모델을 통합하여 신뢰성 있는 정보를 기반으로 높은 품질의 답변을 생성합니다.기존 언어 모델은 학습 데이터에 의존해 고정된 정보를 생성하는 데 반해, RAG는 실시간으로 외부 데이터를 검색하여 최신 정보와 풍부한 맥락을 반영합니다. 예를 들어, 특정 제품의 기술 문서를 요약하거나 최근 뉴스에 대해 설명하는 데 RAG는 기존 접근법을 능가하는 결과를 제공합니다.작동 원리: RAG의 두 축검색기(Retriever): 사용자의 질문을 기반으로 벡터 데이터베이스에서 관련 문서를 검색합니다. 검색기는 입력 질문을 벡터로 변환하고, 유사성을 비교하여 적합한 데이터를 탐색합니다. 이 과정에서 빠른 검..

AI/LLM 2025.01.23

프로그래밍 문제 해결에서 Mental Set Effect 극복하기

프로그래밍 문제를 해결할 때, 우리 모두는 한 번쯤 "왜 이렇게 생각했을까?"라며 스스로에게 질문해본 경험이 있을 겁니다. Mental Set Effect(심리적 고정 효과)는 바로 이런 순간에 숨어있는 장애물입니다. 과거에 성공했던 방법에 지나치게 의존하거나 익숙한 접근법만 고수하면, 창의적이고 혁신적인 해결책을 찾는 데 걸림돌이 될 수 있습니다. 이번 글에서는 논문 "Overcoming the Mental Set Effect in Programming Problem Solving"을 바탕으로, 이 현상이 무엇인지, 왜 중요한지, 그리고 이를 극복할 방법은 무엇인지 쉽게 풀어보겠습니다.Mental Set Effect란 무엇인가?Mental Set Effect는 심리학에서 유래된 개념으로, 과거 성공적인..

레거시 코드와 놀기: 정적 메소드 드러내기 (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
반응형