사소한 개발팁
-
변수 선언에 _(언더바)를 붙이는 경우와 상세 예시사소한 개발팁 2025. 4. 3. 17:37
Flutter에서 언더바로 시작하는 변수란?Flutter는 Dart 언어를 기반으로 하는 프레임워크로, Dart의 변수 선언 규칙을 그대로 따릅니다. Dart 언어에서 변수의 이름 앞에 언더바(_)를 붙이는 것은 해당 변수가 '프라이빗(private)'임을 나타냅니다. 즉, 이 변수를 선언한 파일 내에서만 접근할 수 있으며, 다른 파일에서는 접근할 수 없습니다. 이렇게 하는 주된 이유는 객체 지향 프로그래밍의 캡슐화(encapsulation) 원칙을 준수하기 위함입니다. 프라이빗 변수를 사용함으로써 클래스의 내부 구현을 숨기고, 클래스 외부에서 해당 변수에 직접 접근하지 못하게 막는 것입니다. 언더바 사용의 장점프라이빗 변수를 사용함으로써 얻는 가장 큰 장점은 데이터 무결성(integrity)입니다. 데..
-
Vector DB와 Vector 연산을 활용할 수 있는 API 소개사소한 개발팁 2025. 4. 2. 09:33
데이터가 폭발적으로 증가하는 시대에, 단순한 키워드 검색이 아니라 의미적으로 유사한 데이터를 빠르게 검색하는 것이 점점 중요해지고 있습니다. 이런 요구를 충족하는 것이 바로 Vector DB(벡터 데이터베이스)입니다.이번 글에서는 Vector DB의 개념과 활용 사례, 그리고 Vector 연산에 활용할 수 있는 API들을 살펴보겠습니다.⸻Vector DB란?Vector DB(벡터 데이터베이스)는 데이터를 벡터(다차원 배열) 형태로 저장하고, 유사도 검색을 수행하는 데이터베이스입니다. 기존 관계형 DB(SQL)와는 다르게, 이미지, 텍스트, 오디오, 사용자 행동 데이터 등의 복잡한 데이터를 벡터화하여 저장하고 검색하는 데 최적화되어 있습니다.Vector DB의 주요 특징✅ 유사도 검색(Nearest Nei..
-
PostgreSQL과 pgvector를 활용한 FAQ 검색 시스템 구축하기사소한 개발팁 2025. 4. 1. 10:45
PostgreSQL과 pgvector를 활용한 FAQ 검색 시스템 구축하기최근 AI와 자연어 처리 기술이 발전하면서 벡터 데이터베이스(Vector DB)를 활용한 검색 시스템이 주목받고 있습니다. 특히, 매뉴얼이나 FAQ 데이터를 효율적으로 검색할 수 있는 시스템을 만들 때 벡터 검색이 강력한 도구가 될 수 있습니다.이번 글에서는 PostgreSQL과 pgvector를 이용한 FAQ 검색 시스템 구축 과정을 살펴보겠습니다.1. 벡터 데이터베이스(Vector DB)란?기존의 키워드 기반 검색 시스템은 정확한 단어가 포함된 문서만 찾아줍니다. 하지만 벡터 검색(Vector Search) 을 활용하면 의미적으로 유사한 문장도 함께 검색할 수 있습니다.벡터 검색에서는 텍스트 데이터를 벡터(숫자로 표현된 다차원 ..
-
Supabase RLS 마스터하기: 데이터 보안의 핵심사소한 개발팁 2025. 3. 27. 10:54
RLS가 왜 중요한가?Supabase의 Row Level Security(RLS)는 단순한 보안 기능이 아니라 데이터베이스 수준의 강력한 접근 제어 메커니즘입니다. 전통적인 애플리케이션 레벨 인증과 달리, 데이터베이스 자체에서 행 단위로 접근을 제어할 수 있게 해줍니다.RLS의 기본 원리 이해하기1. RLS의 작동 방식각 테이블에 대해 세밀한 접근 권한을 설정할 수 있음사용자의 인증 정보와 함께 조건을 기반으로 데이터 접근을 제어모든 쿼리(SELECT, INSERT, UPDATE, DELETE)에 즉시 적용2. 기본 정책 유형-- 모든 접근 거부 (가장 안전한 기본 상태)CREATE POLICY "No access" ON your_table FOR ALL USING (false);-- 인증된 사용자만 접..
-
발전하는 생성형 AI, 프롬프트 엔지니어링이 더 이상 필요 없다고? 천만에 말씀사소한 개발팁 2025. 3. 27. 10:17
최근 몇 년간 생성형 AI(GAI, Generative AI)의 발전은 놀라운 수준이다. ChatGPT, Claude, Gemini 등의 모델은 점점 더 자연스러운 언어 생성이 가능해졌고, 사용자의 간단한 요청만으로도 수준 높은 결과를 제공하고 있다. 이러한 발전을 보며 "이제 프롬프트 엔지니어링은 필요 없지 않을까?"라는 주장이 나오기도 한다. 하지만 이는 잘못된 생각이다. 오히려 생성형 AI가 발전할수록 프롬프트 엔지니어링의 중요성은 더욱 커지고 있다. 그 이유를 살펴보자.1. AI의 한계를 극복하는 프롬프트 엔지니어링생성형 AI는 뛰어난 언어 모델이지만 여전히 한계가 존재한다. 모델이 제공하는 결과물은 주어진 입력을 기반으로 생성되므로, 사용자가 어떤 방식으로 요청하느냐에 따라 품질이 천차만별이다...
-
GitHub Copilot Instruction MD 설정 가이드사소한 개발팁 2025. 3. 25. 11:08
GitHub Copilot은 개발자들에게 코드 작성과 관련된 다양한 제안을 제공하는 AI 도구로, 프로젝트의 특성이나 팀의 작업 방식에 맞게 조정할 수 있습니다. 이러한 사용자 지정을 위해 리포지토리 수준에서의 사용자 지정 지침을 활용할 수 있습니다. 이 블로그 글에서는 GitHub Copilot의 리포지토리 사용자 지정 지침에 대해 알아보고, 이를 설정하는 방법과 활용 방안을 소개하겠습니다.리포지토리 사용자 지정 지침이란?GitHub Copilot은 충분한 컨텍스트를 제공받으면 팀의 작업 방식, 사용하는 도구, 프로젝트의 세부 사항에 맞게 채팅 응답을 조정할 수 있습니다. 채팅 질문에 이러한 컨텍스트 정보를 반복적으로 추가하는 대신, 리포지토리에 지침 파일을 만들어 Copilot이 자동으로 이 정보를 ..
-
AI 시대, 소프트웨어 전문가의 진화: 코더에서 엔지니어로사소한 개발팁 2025. 3. 25. 11:03
개념의 명확한 구분: 코더, 개발자, 엔지니어, 프로덕트 엔지니어코더 (Coder)코더는 가장 기본적인 수준의 소프트웨어 전문가입니다. 주로 주어진 요구사항이나 명세에 따라 코드를 작성하는 데 집중합니다. 단순 반복 작업과 기계적인 프로그래밍에 주로 종사하며, 깊이 있는 문제 해결 능력보다는 주어진 작업을 정확히 수행하는 데 중점을 둡니다.개발자 (Developer)개발자는 코더보다 한 단계 발전된 수준입니다. 소프트웨어의 설계, 구현, 테스트까지 전체 개발 과정에 참여합니다. 특정 프로그래밍 언어와 기술에 대한 전문성을 가지고 있으며, 비즈니스 요구사항을 소프트웨어로 구현할 수 있는 능력을 갖추고 있습니다.엔지니어 (Engineer)엔지니어는 더욱 포괄적이고 전략적인 접근을 합니다. 단순히 코드를 작성..
-
upsert에서 onConflict가 꼭 필요할까?사소한 개발팁 2025. 3. 24. 22:37
upsert에서 onConflict가 꼭 필요할까?데이터베이스 작업을 할 때 자주 마주치는 패턴 중 하나가 "upsert"입니다. 이는 "update" 또는 "insert"의 합성어로, 레코드가 이미 존재하면 업데이트하고, 존재하지 않으면 삽입하는 작업을 말합니다. 이러한 작업에서 onConflict 구문의 필요성에 대해 살펴보겠습니다.upsert와 onConflict의 관계많은 현대 데이터베이스 시스템(PostgreSQL, SQLite 등)에서 upsert 작업은 INSERT ... ON CONFLICT 구문을 통해 이루어집니다. 이 구문에서 onConflict는 중복 키가 발생했을 때 어떤 동작을 수행할지 지정합니다.INSERT INTO users (id, name, email) VALUES (1, ..