기본 콘텐츠로 건너뛰기

JSTL fmt:formatNumber로 백분율 처리하기 (SUM, COUNT 형변환)

JSTL fmt:formatNumber로 백분율 처리하기 (SUM, COUNT 형변환) AI 생성 이미지: JSTL fmt:formatNumber로 백분율 처리하기 (SUM, COUNT 형변환) eGovFramework 환경에서 PostgreSQL 집계 결과를 웹에 정확한 백분율로 보여주려면 몇 가지 실무 규칙을 따라야 합니다. 이 글은 데이터베이스 레벨의 형변환과 JSP에서의 포맷팅을 중심으로, "JSTL fmt:formatNumber로 백분율 처리하기 (SUM, COUNT 형변환)"에 대한 구체적인 방법을 정리합니다. 1. ❓ 문제 인식: SUM/COUNT 결과와 JSTL 연산의 충돌 PostgreSQL의 SUM() 이나 COUNT() 는 보통 정수형(BIGINT)이나 NUMERIC 타입으로 돌아옵니다. MyBatis(eGovMap 등)를 통해 JSP로 전달된 값으로 EL에서 나눗셈을 하면 의도치 않은 정수 연산이나 형 변환 오류가 발생할 수 있습니다. 현상: 정수끼리 연산하면 소수점 이하가 잘리거나, EL이 예상과 다른 타입으로 처리되어 백분율 계산이 틀리게 나옵니다. 예를 들어 ${total / denominator} 가 정수 나눗셈으로 처리되면 정확한 소수값을 얻을 수 없습니다. 따라서 백분율을 정확히 표시하려면 DB 또는 매핑 단계에서 실수 타입으로 보장하는 것이 안전합니다. 이 글은 "JSTL fmt:formatNumber로 백분율처리하기 (SUM, COUNT 형변환)"의 실무적 해법을 제시합니다. 2. 🛠️ 해결책: SQL 레벨에서 FLOAT/NUMERIC으로 형변환 가장 확실한 방법은 XML Mapper의 SQL에서 집계 결과를 명시적으로 실수 타입으로 변환하는 것입니다. ...

bitmex chat

bitmex chat AI 생성 이미지: bitmex chat 거래소 채팅은 실시간으로 쌓이는 비정형 데이터로서 시장 심리를 파악하는 데 귀중한 자원입니다. 이 글은 BitMEX의 채팅 API를 이용해 대량 메시지를 수집하는 Java 유틸리티의 핵심 메소드 chatRun() 을 재구성하여, 실제 운영에서 안정적으로 데이터를 확보하는 방법을 설명합니다. 특히 bitmex chat 로그를 일괄적으로 저장해 후속 텍스트 분석에 활용하는 흐름에 초점을 맞춥니다. 1. ⚙️ 핵심 설정 및 API URL JSON을 객체로 매핑하기 위해 Gson을 사용합니다. 수집 범위와 작동 방식을 결정하는 주요 파라미터는 다음과 같습니다. 이 값들을 조정해 원하는 시점부터 연속적인 bitmex chat 데이터를 확보할 수 있습니다. START : 메시지 조회 시작 ID(Primary Key). 메시지 ID는 시간 순서를 따릅니다. (예: 47554551) MAX : 수집 종료 기준 ID. STEP : 한 번에 가져올 메시지 수(예: count=500). API URL: https://www.bitmex.com/api/v1/chat?count=500&start=...&reverse=false&channelID=4 reverse=false : 오래된 메시지부터 순차 조회. channelID=4 : 특정 채널(예: 거래소 공용 채널)만 대상. 2. 💻 데이터 수집 로직 분석 ( chatRun() 메소드) 2.1. API 호출 및 응답 처리 HTTP 연결은 HttpURLConnection 을 사용합니다. 응답...

BitMEX WebSocket 인증(authKeyExpires) 구현 예제 (Java + XChange 코드 포함)

Java XChange로 BitMEX WebSocket 인증 서명 만들기 (SignatureUtil + wss 예제) 암호화폐 마진 거래소인 BitMEX 는 REST API뿐 아니라 WebSocket(wss) 인터페이스를 통해 실시간 시세, 주문 정보 등을 제공합니다. 이때, 개인 계정 정보나 주문 정보를 사용하려면 WebSocket 인증(authKeyExpires) 을 통과해야 합니다. 이 글에서는 Java + XChange 라이브러리 를 사용하여 authKeyExpires 에 필요한 signature 를 생성하는 방법과 직접 구현한 SignatureUtil 클래스를 정리합니다. BitMEX WebSocket 인증(authKeyExpires) 개념 XChange의 BitmexDigest 와 ExpirationTimeFactory 활용 SignatureUtil 구현 코드 ws.sendText 로 실제 WebSocket 인증 요청 보내기 1. BitMEX WebSocket 인증(authKeyExpires)란? BitMEX WebSocket에서 개인 데이터(포지션, 주문 등)에 접근하려면 authKeyExpires 메시지를 한 번 보내서 인증을 받아야 합니다. 요청 포맷은 다음과 같은 JSON 형태입니다. { "op": "authKeyExpires", "args": [ "API_KEY", EXPIRES, "SIGNATURE" ] } API_KEY : BitMEX에서 발급받은 API 키 EXPIRES : 만료 시간(Unix timestamp 등, BitMEX 규격에 맞게 설정) SIGNATURE : VERB + ENDPOINT ...

Bitmex 1m bucketed

Bitmex 1m bucketed AI 생성 이미지: Bitmex 1m bucketed 대용량 시계열 데이터를 안정적으로 수집하려면 신뢰성 있는 반복 호출과 일관된 저장 방식이 필요합니다. 이 문서에서는 Java의 HttpURLConnection과 GSON을 사용해 Bitmex 1m bucketed 캔들 데이터를 주기적으로 가져와 로컬에 보관하는 실무적인 방법을 설명합니다. 1. 📦 필요한 라이브러리 (pom.xml) HTTP 호출과 JSON 파싱, 파일 출력을 위해 최소한의 의존성을 선언합니다. 아래 라이브러리로 안정적인 데이터 파이프라인을 구성할 수 있습니다. <dependencies> <!-- (1) Apache POI: 엑셀 파일 처리용 (현재 코드에서 직접 사용되진 않으나, 목적에 부합) --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.17</version> </dependency> <!-- (2) Google GSON: JSON 문자열을 Java 객체로 변환 (필수) --> <dependency> <gr...

Logback & Log4j2 충돌: SLF4J 바인딩 오류 해결 가이드

Logback & Log4j2 충돌: SLF4J 바인딩 오류 해결 가이드 AI 생성 이미지: Logback & Log4j2 충돌: SLF4J 바인딩 오류 해결 가이드 Java 애플리케이션에서 로깅을 안전하게 구성하려면 SLF4J 추상화와 실제 구현체 사이의 관계를 정확히 이해해야 합니다. Logback과 Log4j2를 동시에 클래스패스에 올리면 예기치 않은 바인딩 충돌이 발생할 수 있습니다. 이 가이드는 제공된 예제 코드를 바탕으로 원인을 진단하고, 실무에서 바로 적용 가능한 해결 방법을 단계별로 안내합니다. Logback & Log4j2 충돌: SLF4J 바인딩 오류 해결 가이드의 핵심은 '하나의 로깅 구현체 선택'입니다. 1. 💥 문제 진단: 이중 바인딩 충돌 먼저 제공된 pom.xml 의존성을 확인하면 문제의 실마리가 명확해집니다. 제공된 Maven 의존성 (pom.xml) <!-- Log4j2 바인딩: SLF4J를 Log4j2로 연결 --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>2.10.0</version> </dependency> <!-- Logback (자체적으로 SLF4J 구현체를 포함) --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3...

Java Gson으로 JSON을 VO 객체로 변환하기 (역직렬화)

Java Gson으로 JSON을 VO 객체로 변환하기 (역직렬화) AI 생성 이미지: Java Gson으로 JSON을 VO 객체로 변환하기 (역직렬화) Java 프로젝트에서 JSON을 객체로 바꾸는 일은 반복적으로 등장합니다. Java Gson으로 JSON을 VO 객체로 변환하기 (역직렬화)는 특히 API 응답, 로그 파싱, 데이터 교환 등에서 자주 필요하며, Google의 Gson 라이브러리는 그 과정에 실무적인 해법을 제공합니다. 1. 🔑 Gson Maven 의존성 설정 프로젝트의 pom.xml 에 Gson 의존성을 추가하면 간단히 시작할 수 있습니다. Java Gson으로 JSON을 VO 객체로 변환하기 (역직렬화) 작업을 하려면 안정된 최신 버전을 사용하는 것을 권장합니다. pom.xml 의존성 <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version> <!-- 최신 안정화 버전으로 업데이트 --> </dependency> 2. 📝 데이터 매핑을 위한 VO (Value Object) 클래스 JSON 구조와 1:1로 대응하는 Java 클래스를 설계해야 합니다. 필드 이름이 JSON 키와 일치해야 기본 매핑이 자연스럽게 동작하고, 필요한 경우 어노테이션으로 세밀하게 제어할 수 있습니다. `BaseVO.java` 클래스 import java.util.ArrayList; public class BaseVO { // JSON 키와 이름...

jQuery 숫자 입력 필터 구현 가이드

jQuery 숫자 입력 필터 구현 가이드 AI 생성 이미지: jQuery 숫자 입력 필터 구현 가이드 jQuery로 실시간 숫자 입력 검증 구현하기 웹 폼에서 입력값을 제한하면 서버에 도달하는 데이터 품질이 좋아지고, 사용자는 즉각적인 피드백을 받아 혼란을 줄일 수 있습니다. 이 글은 jQuery inputFilter 플러그인 을 활용해 다양한 형식의 입력을 실시간으로 검사하는 방법을 단계별로 설명합니다. 실무 중심의 예제와 팁을 통해 jQuery 숫자 입력 필터 구현 가이드로 바로 적용할 수 있게 구성했습니다. 1. jQuery inputFilter 기본 구현 아래 예제는 정수, 소수, 음수, 통화, 영문, 16진수 같은 흔한 입력 유형을 제어하는 inputFilter 사용 사례입니다. 각 정규표현식은 허용되는 문자 패턴만 통과시키고, 즉시 입력을 차단합니다. /** * 숫자, 소수, 음수, 통화, 영문, 16진수 입력 제한 */ $("#intTextBox").inputFilter(function(value) { return /^-?\d*$/.test(value); // 정수 }); $("#uintTextBox").inputFilter(function(value) { return /^\d*$/.test(value); // 양수 정수 }); $("#intLimitTextBox").inputFilter(function(value) { return /^\d*$/.test(value) && (value === "" || parseInt(value) 2. jQuery inputFilter 플러그인 정의 inputFilter는 입력 이벤트를 관찰해 허용되는 값만 남기고, 그렇지 않으면 이전 상태로 되돌립니다. 이 방식은 브라우저 기본 동작을 크게 변경하지 않으면서도 사용자 입력을 안전하게 제한합니다. $.fn.input...