기본 콘텐츠로 건너뛰기

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

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

AI 생성 이미지: 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에서 집계 결과를 명시적으로 실수 타입으로 변환하는 것입니다. 이렇게 하면 MyBatis가 Java 측에서 올바른 타입으로 매핑하고, JSP의 EL 연산이 안정적으로 작동합니다.

MyBatis XML Mapper (PostgreSQL)


<!-- SUM(total) :: FLOAT 또는 CAST(COUNT(total) AS FLOAT) 사용 -->
<select id="selectStatsList" resultType="egovMap">
    SELECT 
        SUM(total) :: FLOAT AS total_sum, 
        COUNT(total) :: FLOAT AS total_count
    FROM 
        your_table
    WHERE 
        ...
</select>
        

위처럼 :: FLOAT 또는 CAST(... AS FLOAT)를 사용하면 집계값이 실수로 전달되어 JSP에서 분모로 나눌 때 소수점 처리가 정상적으로 이루어집니다. 이 단계는 "JSTL fmt:formatNumber로 백분율 처리하기 (SUM, COUNT 형변환)"의 핵심 전제입니다.


3. ✨ JSTL `fmt:formatNumber`로 백분율 출력

DB에서 실수 타입으로 데이터가 넘어오면, JSP에서 JSTL의 포맷 태그를 사용해 깔끔한 백분율을 출력할 수 있습니다. 다음 예시는 실제로 계산값을 0.0% 형태로 렌더링하는 방법을 보여줍니다.

JSP (JSTL Core 및 Formatting 라이브러리 선언 필수)


<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%-- fmt 라이브러리 선언 --%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
...

<!-- 예시: total_sum이 10이고 total_count가 100일 경우 -->
<c:set var="total" value="${resultMap.total_sum}" />
<c:set var="denominator" value="${resultMap.total_count}" />

<!-- 백분율 계산 및 포맷: total을 denominator로 나눈 후, 0.0% 패턴 적용 -->
<fmt:formatNumber type="percent" value="${total / denominator}" pattern="0.0%" />
        

✅ `fmt:formatNumber` 핵심 속성

  • type="percent": 값을 백분율로 해석합니다. JSTL이 내부적으로 100을 곱해 출력하므로 EL에서 별도 곱셈을 하지 않습니다.
  • value="${total / denominator}": DB에서 실수로 넘어온 값을 사용해 비율(0.0 ~ 1.0)로 계산합니다. 이때 SQL 단계에서 실수 변환을 보장해야 안전합니다.
  • pattern="0.0%": 표시 형식을 제어합니다. 0.0%는 소수 첫째 자리까지, 0.00%는 둘째 자리까지 보여줍니다.

정리하면, "JSTL fmt:formatNumber로 백분율 처리하기 (SUM, COUNT 형변환)"는 두 단계로 접근해야 합니다. 먼저 SQL Mapper에서 실수로 변환하고, 그 다음 JSTL의 format 태그로 원하는 포맷을 적용하는 방식입니다.


정확한 백분율 표시는 데이터 해석의 출발점입니다. PostgreSQL에서 집계 결과를 실수로 변환하고, JSP에서 <fmt:formatNumber>를 활용하면 일관되고 신뢰할 수 있는 통계 화면을 만들 수 있습니다. 이 글은 "JSTL fmt:formatNumber로 백분율 처리하기 (SUM, COUNT 형변환)"을 실무에 적용하는 데 필요한 핵심 절차를 정리했습니다.

© 2025 칼퇴하는 개발자. 모든 권리 보유.

🚀 이 주제, 우리 서비스에 어떻게 적용할까요?

JSTL fmt:formatNumber로 백분율 처리하기 (SUM, COUNT 형변환)를 실제 서비스와 조직에 녹여보고 싶다면, 현재 아키텍처와 운영 방식을 한 번 점검해 보는 것부터 시작해 보세요. 팀 위키나 기술 블로그, 사내 스터디 주제로도 아주 좋습니다.

이 글이 도움이 됐다면, 비슷한 엔터프라이즈 사례 글들도 함께 살펴보면서 우리 조직에 맞는 운영 상용구를 정의해 보세요.

AI 생성 이미지: JSTL fmt:formatNumber로 백분율 처리하기 (SUM, COUNT 형변환)
AI 생성 이미지: JSTL fmt:formatNumber로 백분율 처리하기 (SUM, COUNT 형변환)

댓글

이 블로그의 인기 게시물

Java Servlet Request Parameter 완전 정복 — GET/POST 모든 파라미터 확인 & 디버깅 예제 (Request Parameter 전체보기)

Java Servlet Request Parameter 완전 정복 — GET/POST 모든 파라미터 확인 & 디버깅 예제 Java Servlet Request Parameter 완전 정복 웹 애플리케이션에서 클라이언트로부터 전달되는 Request Parameter 를 확인하는 것은 필수입니다. 이 글에서는 Java Servlet 과 JSP 에서 GET/POST 요청 파라미터를 전체 출력하고 디버깅하는 방법을 다양한 예제와 함께 소개합니다. 1. 기본 예제: getParameterNames() 사용 Enumeration<String> params = request.getParameterNames(); System.out.println("----------------------------"); while (params.hasMoreElements()){ String name = params.nextElement(); System.out.println(name + " : " + request.getParameter(name)); } System.out.println("----------------------------"); 위 코드는 요청에 포함된 모든 파라미터 이름과 값을 출력하는 기본 방법입니다. 2. HTML Form과 연동 예제 <form action="CheckParamsServlet" method="post"> 이름: <input type="text" name="username"><br> 이메일: <input type="email" name="email"><b...

PostgreSQL 달력(일별,월별)

SQL 팁: GENERATE_SERIES로 일별, 월별 날짜 목록 만들기 SQL 팁: GENERATE_SERIES 로 일별, 월별 날짜 목록 만들기 데이터베이스에서 통계 리포트를 작성하거나 비어있는 날짜 데이터를 채워야 할 때, 특정 기간의 날짜 목록이 필요할 수 있습니다. PostgreSQL과 같은 데이터베이스에서는 GENERATE_SERIES 함수를 사용하여 이 작업을 매우 간단하게 처리할 수 있습니다. 1. 🗓️ 일별 날짜 목록 생성하기 2020년 1월 1일부터 12월 31일까지의 모든 날짜를 '1 day' 간격으로 생성하는 쿼리입니다. WITH date_series AS ( SELECT DATE(GENERATE_SERIES( TO_DATE('2020-01-01', 'YYYY-MM-DD'), TO_DATE('2020-12-31', 'YYYY-MM-DD'), '1 day' )) AS DATE ) SELECT DATE FROM date_series 이 쿼리는 WITH 절(CTE)을 사용하여 date_series 라는 임시 테이블을 만들고, GENERATE_SERIES 함수로 날짜를 채웁니다. 결과 (일별 출력) 2. 📅 월별 날짜 목록 생성하기 동일한 원리로, 간격을 '1 MONTH' 로 변경하면 월별 목록을 생성할 수 있습니다. TO...

CSS로 레이어 팝업 화면 가운데 정렬하는 방법 (top·left·transform 완전 정리)

레이어 팝업 센터 정렬, 이 코드만 알면 끝 (CSS 예제 포함) 이벤트 배너나 공지사항을 띄울 때 레이어 팝업(center 정렬) 을 깔끔하게 잡는 게 생각보다 어렵습니다. 화면 크기가 변해도 가운데에 고정되고, 모바일에서도 자연스럽게 보이게 하려면 position , top , left , transform 을 정확하게 이해해야 합니다. 이 글에서는 아래 내용을 예제로 정리합니다. 레이어 팝업(center 정렬)의 기본 개념 자주 사용하는 position: absolute / fixed 정렬 방식 질문에서 주신 스타일 top: 3.25%; left: 50%; transform: translateX(-50%) 의 의미 실무에서 바로 쓰는 반응형 레이어 팝업 HTML/CSS 예제 1. 레이어 팝업(center 정렬)이란? 레이어 팝업(레이어 팝업창) 은 새 창을 띄우는 것이 아니라, 현재 페이지 위에 div 레이어를 띄워서 공지사항, 광고, 이벤트 등을 보여주는 방식을 말합니다. 검색엔진(SEO) 입장에서도 같은 페이지 안에 HTML이 존재 하기 때문에 팝업 안의 텍스트도 정상적으로 인덱싱될 수 있습니다. 즉, “레이어 팝업 센터 정렬”, “레이어 팝업 만드는 방법”과 같이 관련 키워드를 적절히 넣어주면 검색 노출에 도움이 됩니다. 2. 질문에서 주신 레이어 팝업 스타일 분석 질문에서 주신 스타일은 다음과 같습니다. <div class="layer-popup" style="width:1210px; z-index:9001; position:absolute; top:3.25%; left:50%; transform:translateX(-50%);"> 레이어 팝업 내용 <...