Lombok(롬복) vs Record개요스프링으로 개발하다 보면 DTO, VO, 응답 객체처럼 단순히 데이터를 담는 클래스를 자주 만들게 된다. 이때 생성자, getter, setter, toString(), equals(), hashCode() 같은 반복적인 코드를 줄이기 위해 Lombok을 많이 사용한다. 나 역시 처음에는 @Data를 거의 습관처럼 붙였고, 서비스 클래스에서는 @RequiredArgsConstructor를 자주 사용했다. 그러다 Java 16부터 도입된 record를 알게 되었고, 단순 데이터 전달 객체를 만들 때 더 적합한 선택지가 될 수 있겠다고 느꼈다.본문보일러플레이트 코드란?보일러플레이트(boilerplate) 코드는 최소한의 변경만으로 여러 곳에서 반복적으로 재사용되는 정형..
요약: 이 글에서는 OpenClaw가 Obsidian 경로에 티스토리 형식의 Markdown 파일을 생성하고 git으로 관리할 수 있는지 간단히 테스트합니다.1. 서론이 문서는 OpenClaw가 /obsidian/Personal/Tistory 경로에 직접 파일을 작성할 수 있는지 확인하기 위해 만든 테스트 글입니다.2. 본문 내용2.1 확인한 내용Obsidian 볼트 경로에 접근 가능했습니다.Markdown 파일 생성이 정상 동작했습니다.Git 저장소 인식 및 push 테스트도 가능해졌습니다.[!info] 참고사항이 문서는 실제 발행용 글이 아니라 템플릿 적용 여부를 확인하기 위한 테스트 문서입니다.3. 요약 및 결론OpenClaw는 이제 Obsidian 내 티스토리용 글 초안을 작성하고, 이후 git ..
서론헤르메스 에이전트와 텔레그램을 연결하기 위해 텔레그램 봇 토큰과 사용자 ID를 얻는 방법에 대해 정리합니다.텔레그램 Bot Token 얻기텔레그램 다운로드 및 실행: 웹 또는 데스크톱 버전을 다운로드하여 실행합니다.BotFather 찾기: 텔레그램 검색창에 Botfather를 입력하고, 인증 마크가 있는 @BotFather를 선택하여 대화를 시작합니다.새 봇 생성: /newbot 명령어를 입력합니다.이름 및 사용자 이름 설정: 봇의 name (표시될 이름)과 username (고유 ID, bot으로 끝나야 함)을 입력합니다.토큰 확인: 설정 완료 후, 빨간색으로 표시된 숫자:긴문자 형태의 문자열이 봇 토큰입니다. 이 토큰은 헤르메스 에이전트 설정 시 사용됩니다.텔레그램 사용자 ID 얻기헤르메스 에이전..
요약: 이 글에서는 하네스 엔지니어링을 단순한 유행어가 아니라, AI 에이전트를 안전하고 반복 가능하게 쓰기 위한 운영 설계라는 관점에서 정리해본다.1. 서론요즘 AI 관련 글을 보다 보면 프롬프트 엔지니어링, 컨텍스트 엔지니어링, 그리고 하네스 엔지니어링이라는 말이 거의 한 세트처럼 따라다닌다. 나도 최근에 관련 글들을 몇 개 읽다가, 처음에는 "내가 이해한 게 맞나? 결국 AI 활용 가이드라인을 내가 만드는 건가?"라는 생각이 먼저 들었다.2. 본문 내용2.1 내가 이해한 하네스 엔지니어링하네스(Harness)는 원래 말에 다는 마구를 뜻한다. 강한 힘을 억누르는 게 아니라, 안전하고 원하는 방향으로 이끌기 위한 장치라는 뜻에 더 가깝다.이걸 AI에 대입하면, 하네스 엔지니어링은 모델 자체를 바꾸는 ..
요약: 이 글에서는 OpenClaw 대시보드 접속 시 발생한 pairing required 오류를 임시 우회 방식과 정상 승인 방식으로 비교하고, Docker 환경에서 실제로 해결한 방법을 정리합니다.1. 서론OpenClaw를 Docker 환경에서 사용하던 중 대시보드 접속 시 pairing required 오류가 반복적으로 발생했습니다.처음에는 설정을 직접 바꿔서 접속 자체는 가능하게 만들었지만, 그 방식은 보안상 문제가 있다고 판단했습니다. 이후 다른 사용자가 공유한 방법을 참고해 정상적인 기기 승인 절차로 해결했고, 이 글에서는 그 과정을 정리합니다.2. 본문 내용2.1 처음 시도한 임시 우회 방식처음에는 아래처럼 설정 파일을 직접 바꿨습니다.sed -i 's/"allowInsecureAuth": ..
1. Spring WebFlux란?Spring WebFlux는 Spring Framework 5.0부터 도입된 완전한 비차단(Non-Blocking) 방식의 리액티브 웹 프레임워크입니다. 적은 수의 스레드로 대량의 동시 접속 요청을 효율적으로 처리하기 위해 설계되었으며, Netty, Undertow, Servlet 3.1+ 컨테이너 등 다양한 서버 환경에서 실행됩니다.기존 Spring MVC가 '요청 당 스레드(Thread-per-Request)' 모델을 사용했다면, WebFlux는 **이벤트 루프(Event Loop)**와 비동기 I/O를 통해 리소스를 극한으로 효율화합니다.핵심 특징Non-Blocking I/O: I/O 작업(DB 조회, API 호출 등) 시 스레드가 대기하지 않고 다른 작업을 처리합..
소프트웨어 공학, 특히 웹 개발을 공부하다 보면 가장 먼저 마주치게 되는 디자인 패턴이 바로 MVC(Model-View-Controller) 입니다. 단순히 코드를 나누는 것을 넘어, 유지보수와 협업을 위해 필수적인 이 패턴에 대해 정리해 봅니다.1. MVC 패턴이란?MVC (Model - View - Controller) 는 애플리케이션의 구성 요소를 세 가지 역할로 구분하여 개발하는 소프트웨어 디자인 패턴입니다.이 패턴의 핵심 목적은 "관심사의 분리(Separation of Concerns)" 입니다. 사용자가 보는 화면(View)과 데이터 처리 로직(Model)을 서로 분리함으로써, 한쪽을 수정하더라도 다른 쪽에 영향을 최소화하여 유지보수를 쉽게 만듭니다.2. 핵심 구성 요소 (The 3 Compo..
ObjectMapper는 Java 객체와 JSON 데이터를 변환하는 데 널리 사용되는 도구입니다. 하지만 매번 새로운 ObjectMapper 인스턴스를 생성하는 것은 여러 가지 문제를 야기할 수 있습니다. 이 글에서는 ObjectMapper를 매번 호출하지 말아야 하는 이유와 더 나은 사용 방법에 대해 알아보겠습니다.ObjectMapper 반복 생성의 문제점성능 저하: ObjectMapper는 내부적으로 많은 초기화 작업을 수행하기 때문에, 일반 객체에 비해 생성 비용이 높습니다.일관성 부족: 매번 새로운 인스턴스를 생성하면 날짜 형식, 직렬화 규칙 등이 매번 초기화되어 일관성이 깨질 수 있습니다.유지보수 어려움: 설정이 분산되어 있으면 코드 유지보수가 어려워집니다.캐시 효율성 저하: ObjectMapp..
Ubuntu 22.04 Crontab 스크립트 정상 작동 안되는 문제기존에 사용하던 CentOS 7에 미들웨어가 정상작동 하지 않아서 OS를 Ubuntu로 변경 하기로 결정 했다.Crontab 사용 했지만 스크립트가 정상 작동 하지 않는 문제가 발생 한다.Cron유닉스 계열 운영체제의 시간 기반 잡 스케줄러이다. 쉽게 설명 하면 특정 시간에 특정 작업을 실행 할 수 있게 만든 프로그램이다.crontab 사용 방법 # ┌───────────── min (0 - 59) # │ ┌────────────── hour (0 - 23) # │ │ ┌─────────────── day of month (1 - 31) # │ │ │ ┌──────────────── month (1 - 12) # │ │ │ │ ┌────..
title : '[알아보기] SSR vs CSR'date : 2024-08-19draft : falsecategories:etctags:CSComputer Sciencedescription:SSR(Server Side Rendering)서버 사이드 렌더링서버 쪽에서 렌더링을 하여 화면을 보여주는 방식서버에 매번 데이터 요청하고 서버에서 처리하는 방식SSR 장점첫페이지 로딩속도가 빠르다.검색엔진 최적화가 가능하다.SSR 단점초기 로딩 이후 페이지 이동 시 속도가 CSR에 비해 느리다.서버 과부하CSR (Client Side Rendering)클라이언트 사이드 렌더링서버에서 받은 데이터를 클라이언트인 브라우저가 화면에 그림클라이언트인 브라우저가 렌더링을 도맡아 처리하는 방식CSR 장점초기 로딩 이후 빠른 웹..
Database Keykey데이터베이스 내에서 각 레코드를 고유하게 식별할 수 있는 필드각 레코드마다 고유한 값을 가짐NULL 값을 가질 수 없음데이터베이스 내에서 중복되는 값이 없음데이터베이스 관리 및 검색에 사용key 종류후보키(Candidate Key)유일성과 최소성을 만족하는 키모든 릴레이션은 반드시 하나 이상의 후보키를 가져야 함기본키(Primary Key)테이블에서 각 행을 유일하게 식별할 수 있는 키후보 키에서 선택된 키Null 값을 가질 수 없음동일한 값이 중복되어 저장될 수 없음대체키(Alternate Key)기본 키 대신 사용할 수 있는 다른 유일한 식별자후보 키 중에 기본 키로 선택되지 않은 키보조키왜래키(Foreign Key)다른 테이블의 기본 키로 사용되는 키테이블(Relation..