Lombok(롬복) vs Record개요스프링으로 개발하다 보면 DTO, VO, 응답 객체처럼 단순히 데이터를 담는 클래스를 자주 만들게 된다. 이때 생성자, getter, setter, toString(), equals(), hashCode() 같은 반복적인 코드를 줄이기 위해 Lombok을 많이 사용한다. 나 역시 처음에는 @Data를 거의 습관처럼 붙였고, 서비스 클래스에서는 @RequiredArgsConstructor를 자주 사용했다. 그러다 Java 16부터 도입된 record를 알게 되었고, 단순 데이터 전달 객체를 만들 때 더 적합한 선택지가 될 수 있겠다고 느꼈다.본문보일러플레이트 코드란?보일러플레이트(boilerplate) 코드는 최소한의 변경만으로 여러 곳에서 반복적으로 재사용되는 정형..
서론헤르메스 에이전트와 텔레그램을 연결하기 위해 텔레그램 봇 토큰과 사용자 ID를 얻는 방법에 대해 정리합니다.텔레그램 Bot Token 얻기텔레그램 다운로드 및 실행: 웹 또는 데스크톱 버전을 다운로드하여 실행합니다.BotFather 찾기: 텔레그램 검색창에 Botfather를 입력하고, 인증 마크가 있는 @BotFather를 선택하여 대화를 시작합니다.새 봇 생성: /newbot 명령어를 입력합니다.이름 및 사용자 이름 설정: 봇의 name (표시될 이름)과 username (고유 ID, bot으로 끝나야 함)을 입력합니다.토큰 확인: 설정 완료 후, 빨간색으로 표시된 숫자:긴문자 형태의 문자열이 봇 토큰입니다. 이 토큰은 헤르메스 에이전트 설정 시 사용됩니다.텔레그램 사용자 ID 얻기헤르메스 에이전..
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..