
이 프로젝트는 공공 API를 활용해 날씨와 미세먼지 정보를 제공하는 웹 애플리케이션입니다. 주요 기능은 다음과 같습니다:
Spring Boot를 백엔드로 사용하고, Thymeleaf를 프론트엔드 템플릿 엔진으로 활용했습니다. 공공 API에서 데이터를 가져와 사용자에게 시각적으로 보여주는 것이 목표였습니다.
개발 중 실시간 미세먼지 데이터를 테이블로 표시하는 과정에서 Thymeleaf 템플릿 파싱 오류(TemplateProcessingException)가 발생했습니다.
th:classappend 속성에서 중첩된 삼항 연산자를 사용했는데, 조건이 올바르게 묶이지 않아 Thymeleaf가 표현식을 파싱하지 못했습니다. 오류가 발생한 코드는 다음과 같습니다:
<td class="grade-cell"
th:classappend="${dust.pm10Grade == '좋음'} ? 'grade-good' :
${dust.pm10Grade == '보통'} ? 'grade-moderate' :
${dust.pm10Grade == '나쁨'} ? 'grade-bad' :
${dust.pm10Grade == '매우나쁨'} ? 'grade-very-bad' : ''"
th:text="${dust.pm10Grade}"></td>
삼항 연산자를 괄호로 묶어 문법을 명확히 했습니다.
수정된 코드는 다음과 같습니다.
이 수정으로 Thymeleaf 파싱 오류가 해결되었고, 미세먼지 등급에 따라 적절한 색상 클래스가 적용되었습니다.
실시간 미세먼지 데이터를 표시하는 테이블에서 데이터가 없을 경우 "N/A"로 표시되었습니다. 하지만 "N/A"는 기술적인 용어로, 처음 사용하는 사용자에게 어색할 수 있다고 판단했습니다.
weather.html에서 실시간 미세먼지 섹션을 다음과 같이 수정했습니다.
<!-- 미세먼지(PM10) 값 표시 -->
<td>
<span th:if="${dust.pm10Value != 'N/A'}" th:text="${dust.pm10Value} + ' μg/m³'"></span>
<span th:if="${dust.pm10Value == 'N/A'}" class="no-data" th:text="'측정값 없음'"></span>
</td>
<!-- 미세먼지 등급 표시 -->
<td class="grade-cell"
th:classappend="${dust.pm10Grade == '좋음' ? 'grade-good' : (dust.pm10Grade == '보통' ? 'grade-moderate' : (dust.pm10Grade == '나쁨' ? 'grade-bad' : (dust.pm10Grade == '매우나쁨' ? 'grade-very-bad' : 'no-data')))}"
th:text="${dust.pm10Grade != 'N/A' ? dust.pm10Grade : '등급 정보 없음'}"></td>
추가로, CSS 파일에 no-data 클래스를 정의해 데이터가 없을 때 회색 이탤릭체로 표시되도록 했습니다.
.no-data {
color: #888;
font-style: italic;
}
Thymeleaf 문법의 중요성: Thymeleaf에서 복잡한 조건문을 사용할 때는 문법을 정확히 지켜야 하며, 괄호를 활용해 가독성을 높이는 것이 중요합니다.
사용자 경험 고려: 기술적인 용어("N/A")를 일반 사용자에게 맞는 표현으로 변경하고, 시각적 피드백을 추가해 사용자 경험을 개선하는 것이 중요합니다.
이번 프로젝트를 통해 Spring Boot와 Thymeleaf를 활용한 웹 개발의 전반적인 흐름을 익혔고, 작은 오류를 해결하며 문제 해결 능력을 키울 수 있었습니다.
또한, 사용자 경험을 고려한 UI 개선의 중요성을 다시 한 번 깨달았습니다.
앞으로도 더 나은 사용자 경험을 제공하는 웹 애플리케이션을 만들기 위해 노력하겠습니다!