[Java] ISO 8601 형식의 시간 출력하기 (현재 시간과 과거 시간 구하기)
·
개발 (Development)/Java
Java를 사용하여 현재 시간과 과거 시간을 ISO 8601 형식(예: 2025-07-13T15:00:00Z)으로 출력하는 방법에 대해 정리해보았습니다. 특히, UTC 기준으로 현재 시간과 3시간 전 시간을 구하는 예제를 중심으로 설명드리겠습니다.1. 문제 상황로그나 데이터 처리, 외부 API와의 연동 시 국제 표준 시간 형식인 ISO 8601을 사용하는 경우가 많습니다.예를 들어, 2025-07-13T15:00:00Z와 같은 형식은 UTC(협정 세계시)를 기준으로 한 ISO 포맷입니다.이 글에서는 현재 시간과 현재로부터 3시간 전 시간을 자바 코드로 계산하고, 이를 ISO 8601 형식으로 출력하는 방법을 알아봅니다.2. 해결 방법사용 도구java.time.Instantjava.time.temporal..
[Java] MyBatis foreach에서 빈 배열이 들어올 경우 예외를 방지하는 방법
·
개발 (Development)/Java
Java에서 MyBatis를 사용할 때, foreach 구문에 빈 배열이나 리스트가 들어오는 상황은 종종 발생합니다. 이때 적절한 처리를 하지 않으면 SQL 문법 오류나 의도치 않은 전체 조회와 같은 문제가 생길 수 있습니다.저는 최근 IN 절을 동적으로 구성하기 위해 태그를 사용하던 중, 전달받은 리스트가 빈 배열일 경우 SQL 오류가 발생하는 문제를 겪었습니다. 이 문제를 해결하기 위해 어떤 방식들이 있는지 조사하고, 실제로 적용해 보면서 가장 적합한 해결 방법을 찾게 되었습니다.문제 상황: 빈 배열이 들어오면 SQL 오류 발생예를 들어 아래와 같이 idList라는 리스트를 기반으로 사용자 정보를 조회하는 SQL을 구성한다고 가정합니다. SELECT * FROM users WHERE id IN ..
[Java/SpringBoot] 서버 간 API 호출 오류: Connection reset 에러 분석 및 해결 방법
·
개발 (Development)/Java
1. 에러 개요다음과 같은 에러 메시지가 로그에 출력되었습니다.org.springframework.web.client.ResourceAccessException: I/O error on POST request for [내부 서버 주소]: Connection reset이는 시스템 A에서 내부 시스템 B의 인증 API를 호출하려 했지만, 상대방 서버 측에서 연결을 강제로 종료시켜 발생한 네트워크 오류입니다.2. 에러의 의미Connection reset은 클라이언트가 요청을 보냈지만, 상대 서버가 응답을 주지 않고 연결을 끊어버린 상황을 의미합니다.보통 이는 응답 처리 중 문제가 발생했거나, 서버가 아예 요청을 수신하지 못한 경우에도 발생할 수 있습니다.3. 발생 가능한 원인다음과 같은 원인들이 있을 수 있습..
[Java] LinkedHashMap에서 특정 값을 가진 항목 제거하는 방법
·
개발 (Development)/Java
Java에서 LinkedHashMap을 사용할 때, 특정 값을 가진 항목을 제거하고자 하는 경우가 있습니다. 하지만 for-each 문을 사용해 직접 제거할 경우 ConcurrentModificationException이 발생할 수 있기 때문에, 안전한 방법으로 처리하는 것이 중요합니다. 이 글에서는 특정 값(ex. 0, null, 혹은 사용자 정의 값)을 가진 항목을 안전하게 제거하는 방법을 소개합니다.특정 값을 가진 항목 제거: Iterator 사용LinkedHashMap은 순서를 유지하는 특성이 있어 반복자(Iterator)를 사용하는 것이 가장 안전합니다.예제 코드import java.util.Iterator;import java.util.LinkedHashMap;import java.util.M..
[Java] printStackTrace() 경고 해결 및 로깅 적용하기
·
개발 (Development)/Java
Java 코드를 작성하던 중, printStackTrace()에 노란색 경고 줄이 생기는 것을 발견했습니다. 단순히 예외 정보를 콘솔에 출력하는 방식은 실제 서비스 코드에 적절하지 않다는 것을 의미하는 경고였습니다. 이에 따라 로깅 프레임워크를 적용하여 문제를 개선한 과정을 정리해 보았습니다.문제 상황다음은 기존 코드입니다:HashMap thresholds = new HashMap();try { thresholds = getThresholds();} catch (Exception e) { e.printStackTrace(); // 여기서 경고 발생}이 코드는 getThresholds() 메서드에서 예외가 발생할 경우 콘솔에 에러 스택을 그대로 출력합니다. 이는 개발 단계에서는 유용할 수 있지..