분류 전체보기 1464

[AI Prompt] 토큰과 컨텍스트 윈도우

개요2026.06.10-[AI Prompt] AI와 모델에서 AI, 그리고 모델에 대한 아주 기본적인 개념을 다뤘다. 이번 글에서는 AI 서비스를 사용할 때 필연적으로, 그리고 아주 자연스럽게 접하게 되는 개념인 토큰에 대해서 정리한다. 토큰 (Token)AI의 기본적인 읽기 단위. 문장을 단어로 나누듯이 AI는 텍스트를 토큰으로 나눈다. 단, 항상 단어로 나누지는 않는다. 즉, 토큰은 단어일 수도 있고 단어의 일부 또는 단일 문자일 수 있다.예를 들어, hello는 일반적으로 하나의 토큰이지만, uncomfortable와 같은 단어는 un, comfort, able과 같이 여러 토큰으로 나뉠 수 있다. 토큰 수가 중요한 이유토큰 수는 매우 중요하다.- 비용 : AI 서비스는 토큰당 요금을 부과하며, ..

기타 2026.06.11

[AI Prompt] AI와 모델

개요최근 AI를 업무에 활용하는 일이 많아졌다. AI 기반 개발이 늘어나는 추세를 따라가기 위한 목적도 있다. 그런데 개념을 제대로 공부하지 않고 사용하다 보니 잘 활용하는 방법을 모르겠다는 생각이 들었다. 그래서 기본 개념부터 정리해보기로 했다. 이번 글에서는 AI와 모델에 관한 핵심 개념만 간략히 짚어둔다. AIAI일반적으로 많이 사용하는 텍스트 생성형 AI란, 언어를 이해하고 응답을 생성하는 소프트웨어다. 사용자가 메시지를 입력하면, AI는 수십억 개의 문장에서 학습한 패턴을 바탕으로 다음에 어떤 단어가 올지 예측한다. 즉, 학습 내용을 바탕으로 통계적으로 자연스러운 텍스트를 생성하는 것이다. 따라서 어떻게 질문하느냐가 매우 중요하며, 이것이 프롬프트 엔지니어링의 핵심이기도 하다. 환각 (ha..

기타 2026.06.10

[Airflow] 스케쥴 설정 종류

개요지금까지는 Airflow를 개발하거나 운영하면서 주로 cron 방식의 스케줄 설정을 사용하고 있었는데, 최근에 timedelta 객체로 스케줄을 지정하는 방식도 존재함을 확인했다. 그래서 이번 글에서는 Airflow에서 스케쥴을 지정하는 방법에 대해 정리한다.Airflow 2.8 버전을 기준으로 작성한다. Cron기존에도 잘 활용하고 있던 방식으로, cron 표현식이나 cron preset(@daily)이 포함된다. 몰랐지만 datetime.timedelta 객체도 해당된다고 한다.from airflow.models.dag import DAGimport datetimedag = DAG("regular_interval_cron_example", schedule="0 0 * * *", ...)dag =..

Apache Airflow 2026.05.04

[Grafana] Docker Compose 구성 간 마이그레이션

개요bind mount 방식으로 운영 중이던 Grafana를 팀원이 새로 구성한 provisioning 기반 Docker Compose 환경으로 전환하고자 한다. 기존 구성은 호스트의 ./data/ 디렉토리를 직접 마운트하는 방식이었고, 신규 구성은 named volume(grafana-storage)을 사용한다. 기존 운영# AS-ISservices: grafana: image: grafana/grafana-enterprise container_name: grafana restart: unless-stopped ports: - '3000:3000' volumes: - '$PWD/data:/var/lib/grafana' 신규# TO-BEservices: g..

Grafana 2026.04.30

[Grafana] 프로비저닝이란

개요데이터 파이프라인 모니터링을 위한 Grafana 대시보드를 구축한 적이 있다. 로컬에서 대시보드를 만들고 대시보드 Expoert/Import 기능을 활용해 운영 환경으로 마이그레이션 했는데, 데이터 소스 설정을 다시 잡는 등 과정이 매끄럽다는 인상은 받지 못했다. 또, 이후 UI를 통한 대시보드 수정 시 버전 관리를 어떻게 해야 하는지에 대한 의문점이 생겼다.Grafana를 처음 사용할 때는 대부분 UI로 데이터 소스를 등록하고, 대시보드를 만들고, 알림 규칙을 추가한다. 간단한 환경에서는 문제가 없다. 하지만 환경이 둘 이상이 되거나 팀이 함께 사용하는 순간 한계가 드러난다.환경 재현이 어렵다. 로컬에서 만든 대시보드를 운영 환경에 그대로 옮기려면 수동으로 Export/Import를 반복해야 한다...

Grafana 2026.04.29

[Java] static

개요2026.04.22-[Java] 접근 제어자에 이어서 오늘도 변수나 함수 앞에 위치할 수 있는 키워드 중 하나인 static에 대해서 알아보고자 한다. static'고정된'이라는 의미를 가지며, Java에서는 static 키워드를 사용해 static 변수와 static 메서드를 만들 수 있다. 정적 변수, 정적 메서드라고도 하는데 둘을 묶어 정적 멤버, 클래스 멤버라고 말하기도 한다. 정적 멤버는 객체가 아닌 클래스에 고정된 멤버로, 클래스 로더가 클래스를 메모리 영역에 적재할 때 클래스 별로 관리한다. 클래스 로딩이 끝나면 바로 사용할 수 있다. 정적 멤버 생성static 키워드로 생성된 정적 멤버는 Heap이 아닌 Static 영역에 할당된다. static 영역은 모든 객체가 공유하고 있어 ..

Java 2026.04.28

[Java] 접근 제어자

개요최근 Java 코드를 계속 유지보수하고 있는데, 정말 기본적인 public, private 외에는 접근 제어자 개념이 제대로 잡혀 있지 않아 프로그래밍할 때 애로사항이 있다. 이번 기회에 개념을 좀 잘 잡아보려고 한다. 접근 제어자접근 제어자란 클래스, 클래스 멤버(필드, 메서드, 생성자)에 대한 접근 법위를 제어하는 역할을 한다. 필드, 인터페이스를 다른 패키지에서 사용하지 못 하도록 하거나, 객체 생성, 메서드 호출을 제한함으로써 개발자가 의도하지 않은 동작을 방지하기 위해 사용한다. 접근 제어자 종류접근 제어자 자체는 private, protected, public이 존재하며, 만약 세 가지 모두 적용되어 있지 않으면 default가 적용된다.보통 private, protected, pub..

Java 2026.04.22

[Java] 가드 절 (Guard Clause)

개요업무에서 서비스 중인 Java 앱의 코드를 분석하다 보면 메서드 상단에 return 문이 위치하는 경우가 있다.public void process(Data data) { // 가드 절 if (data == null || !data.isValid()) return; // 핵심 로직 System.out.println("Processing...");}주로 짧은 문장이고 괄호 없이 작성되어있는데, 이것은 가드 절(Guard Clause)이라고 한다. 개인적으로는 중첩을 줄이기 위해 사용하게 되던 방식인데, 개념적으로 정리한 적은 없어서 기록해 둔다. 가드 절가드 절은 메서드 진입 시 전제 조건을 검사하고, 조건을 만족하지 않으면 즉시 반환하는 패턴이다. "가드(Guard)"라..

Java 2026.04.20

[Java] 라벨문(Labeled Statement)

개요Java를 break와 continue만으로 루프를 제어하던 중, 중첩 루프에서 원하는 위치로 한 번에 빠져나오지 못해 불필요한 플래그 변수를 쓴 적이 있었다. 이후 라벨문 개념을 다시 떠올리게 되었는데, 이중·삼중 반복문을 마주치는 상황은 생각보다 자주 오는 만큼 기억을 되살릴 겸 내용을 정리한다. 라벨문라벨문(Labeled Statement)은 특정 구문(주로 반복문)에 이름표(label)를 붙여, break 또는 continue가 어느 반복문을 대상으로 동작할지 명시적으로 지정하는 Java의 제어 흐름 문법이다. 일반 break/continue는 자신이 속한 가장 안쪽 반복문에만 영향을 주지만, 라벨문을 사용하면 중첩된 바깥쪽 반복문까지 직접 제어할 수 있다. Java 1.0부터 존재하는 문법..

Java 2026.04.16

[Java] 패턴 매칭

개요최근 Java 코드를 유지보수하고 개발하다 보니 패턴 매칭이라는 개념을 접하게 되었다. 처음에는 정규 표현식과 관련된 내용인가 했는데, 확인해 보니 전혀 다른 개념이라 정리 차원에서 짚고 간다. 패턴 매칭패턴 매칭은 Java 14에서 프리뷰 기능으로 처음 도입되어 Java 16에서 정식 기능으로 확정된 기능이다. 객체가 특정 타입인지 검사하면서 동시에 변수에 바인딩할 수 있게 해 주며, 기존의 타입 체크 + 캐스팅 패턴을 단순화할 수 있다. 기존에는 instanceof로 타입을 확인하더라도, 값을 활용하려면 명시적으로 형변환을 따로 수행해야 했다.Object obj = "Hello Java";if (obj instanceof String) { String s = (String) obj; //..

Java 2026.04.15